package dbus import ( "os" "testing" ) const testString = `This is a test! This text should be read from the file that is created by this test.` type unixFDTest struct{} func (t unixFDTest) Test(fd UnixFD) (string, *Error) { var b [4096]byte file := os.NewFile(uintptr(fd), "testfile") defer file.Close() n, err := file.Read(b[:]) if err != nil { return "", &Error{"com.github.guelfey.test.Error", nil} } return string(b[:n]), nil } func TestUnixFDs(t *testing.T) { conn, err := SessionBus() if err != nil { t.Fatal(err) } r, w, err := os.Pipe() if err != nil { t.Fatal(err) } defer w.Close() if _, err := w.Write([]byte(testString)); err != nil { t.Fatal(err) } name := conn.Names()[0] test := unixFDTest{} conn.Export(test, "/com/github/guelfey/test", "com.github.guelfey.test") var s string obj := conn.Object(name, "/com/github/guelfey/test") err = obj.Call("com.github.guelfey.test.Test", 0, UnixFD(r.Fd())).Store(&s) if err != nil { t.Fatal(err) } if s != testString { t.Fatal("got", s, "wanted", testString) } }