50 lines
1 KiB
Go
50 lines
1 KiB
Go
|
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)
|
||
|
}
|
||
|
}
|