| package dbus |
| |
| import ( |
| "bufio" |
| "io/ioutil" |
| "os" |
| "os/exec" |
| "testing" |
| ) |
| |
| func TestTcpNonceConnection(t *testing.T) { |
| addr, process := startDaemon(t, `<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" |
| "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> |
| <busconfig> |
| <type>session</type> |
| <listen>nonce-tcp:</listen> |
| <auth>ANONYMOUS</auth> |
| <allow_anonymous/> |
| <policy context="default"> |
| <allow send_destination="*" eavesdrop="true"/> |
| <allow eavesdrop="true"/> |
| <allow own="*"/> |
| </policy> |
| </busconfig> |
| `) |
| defer process.Kill() |
| |
| c, err := Dial(addr) |
| if err != nil { |
| t.Fatal(err) |
| } |
| if err = c.Auth([]Auth{AuthAnonymous()}); err != nil { |
| t.Fatal(err) |
| } |
| if err = c.Hello(); err != nil { |
| t.Fatal(err) |
| } |
| } |
| |
| // startDaemon starts a dbus-daemon instance with the given config |
| // and returns its address string and underlying process. |
| func startDaemon(t *testing.T, config string) (string, *os.Process) { |
| cfg, err := ioutil.TempFile("", "") |
| if err != nil { |
| t.Fatal(err) |
| } |
| defer os.Remove(cfg.Name()) |
| if _, err = cfg.Write([]byte(config)); err != nil { |
| t.Fatal(err) |
| } |
| |
| cmd := exec.Command("dbus-daemon", "--nofork", "--print-address", "--config-file", cfg.Name()) |
| out, err := cmd.StdoutPipe() |
| if err != nil { |
| t.Fatal(err) |
| } |
| if err = cmd.Start(); err != nil { |
| t.Fatal(err) |
| } |
| r := bufio.NewReader(out) |
| l, _, err := r.ReadLine() |
| if err != nil { |
| cmd.Process.Kill() |
| t.Fatal(err) |
| } |
| return string(l), cmd.Process |
| } |