github.com/coreos/mantle@v0.13.0/kola/tests/coretest/dbus.go (about)

     1  package coretest
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/godbus/dbus"
     8  )
     9  
    10  func CheckDbusInterface(iFace string, timeout time.Duration) error {
    11  	errc := make(chan error, 1)
    12  	go func() {
    13  		conn, err := dbus.SystemBus()
    14  		if err != nil {
    15  			errc <- err
    16  			return
    17  		}
    18  
    19  		msgChan := make(chan *dbus.Message, 10)
    20  		go func(msgChan chan *dbus.Message) {
    21  			<-msgChan
    22  			errc <- nil
    23  			return
    24  		}(msgChan)
    25  
    26  		call := conn.BusObject().Call(
    27  			"org.freedesktop.DBus.AddMatch", 0,
    28  			fmt.Sprintf("eavesdrop='true',type=signal,interface=%s", iFace),
    29  		)
    30  		if call.Err != nil {
    31  			errc <- call.Err
    32  		}
    33  		conn.Eavesdrop(msgChan)
    34  	}()
    35  
    36  	select {
    37  	case <-time.After(timeout):
    38  		return fmt.Errorf("timeout after %s.", timeout)
    39  	case err := <-errc:
    40  		return err
    41  	}
    42  }