diff options
| author | Ophestra Umiker <cat@ophivana.moe> | 2024-09-28 00:06:16 +0900 |
|---|---|---|
| committer | Ophestra Umiker <cat@ophivana.moe> | 2024-09-28 00:06:16 +0900 |
| commit | 1038af98f08f5c16828fabde3d6b559013c6c123 (patch) | |
| tree | 30a4ddf80b15bbc433ede50720cecc35403946fe /dbus/dbus_test.go | |
| parent | aa2be18f471892bdb103e58cbe850dafb5b6099c (diff) | |
dbus: add tests
Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'dbus/dbus_test.go')
| -rw-r--r-- | dbus/dbus_test.go | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/dbus/dbus_test.go b/dbus/dbus_test.go new file mode 100644 index 00000000..e2e27956 --- /dev/null +++ b/dbus/dbus_test.go @@ -0,0 +1,132 @@ +package dbus_test + +import ( + "errors" + "strings" + "testing" + + "git.ophivana.moe/cat/fortify/dbus" +) + +const ( + binPath = "/usr/bin/bwrap" +) + +func TestNew(t *testing.T) { + for _, tc := range [][2][2]string{ + { + {"unix:path=/run/user/1971/bus", "/tmp/fortify.1971/1ca5d183ef4c99e74c3e544715f32702/bus"}, + {"unix:path=/run/dbus/system_bus_socket", "/tmp/fortify.1971/1ca5d183ef4c99e74c3e544715f32702/system_bus_socket"}, + }, + { + {"unix:path=/run/user/1971/bus", "/tmp/fortify.1971/881ac3796ff3f3bf0a773824383187a0/bus"}, + {"unix:path=/run/dbus/system_bus_socket", "/tmp/fortify.1971/881ac3796ff3f3bf0a773824383187a0/system_bus_socket"}, + }, + { + {"unix:path=/run/user/1971/bus", "/tmp/fortify.1971/3d1a5084520ef79c0c6a49a675bac701/bus"}, + {"unix:path=/run/dbus/system_bus_socket", "/tmp/fortify.1971/3d1a5084520ef79c0c6a49a675bac701/system_bus_socket"}, + }, + { + {"unix:path=/run/user/1971/bus", "/tmp/fortify.1971/2a1639bab712799788ea0ff7aa280c35/bus"}, + {"unix:path=/run/dbus/system_bus_socket", "/tmp/fortify.1971/2a1639bab712799788ea0ff7aa280c35/system_bus_socket"}, + }, + } { + t.Run("create instance for "+tc[0][0]+" and "+tc[1][0], func(t *testing.T) { + if got := dbus.New(binPath, tc[0], tc[1]); !got.CompareTestNew(binPath, tc[0], tc[1]) { + t.Errorf("New(%q, %q, %q) = %v", + binPath, tc[0], tc[1], + got) + } + }) + } +} + +func TestProxy_Seal(t *testing.T) { + ep := dbus.New(binPath, [2]string{}, [2]string{}) + if err := ep.Seal(nil, nil); !errors.Is(err, dbus.ErrConfig) { + t.Errorf("Seal(nil, nil) error = %v, want %v", + err, dbus.ErrConfig) + } + + for id, tc := range testCasePairs() { + t.Run("create seal for "+id, func(t *testing.T) { + p := dbus.New(binPath, tc[0].bus, tc[1].bus) + if err := p.Seal(tc[0].c, tc[1].c); (err != nil) != tc[0].wantErr { + t.Errorf("Seal(%p, %p) error = %v, wantErr %v", + tc[0].c, tc[1].c, + err, tc[0].wantErr) + return + } + + // rest of the tests happen for sealed instances + if tc[0].wantErr { + return + } + + // build null-terminated string from wanted args + want := new(strings.Builder) + args := append(tc[0].want, tc[1].want...) + for _, arg := range args { + want.WriteString(arg) + want.WriteByte('\x00') + } + + wt := p.AccessTestProxySeal() + got := new(strings.Builder) + if _, err := wt.WriteTo(got); err != nil { + t.Errorf("p.seal.WriteTo(): %v", err) + } + + if want.String() != got.String() { + t.Errorf("Seal(%p, %p) seal = %v, want %v", + tc[0].c, tc[1].c, + got.String(), want.String()) + } + }) + } +} + +func TestProxy_Seal_Panic(t *testing.T) { + defer func() { + if r := recover(); r == nil { + t.Errorf("Seal: did not panic from repeated seal") + } + }() + + p := dbus.New(binPath, [2]string{}, [2]string{}) + _ = p.Seal(dbus.NewConfig("", true, false), nil) + _ = p.Seal(dbus.NewConfig("", true, false), nil) +} + +func TestProxy_String(t *testing.T) { + for id, tc := range testCasePairs() { + // this test does not test errors + if tc[0].wantErr { + continue + } + + t.Run("strings for "+id, func(t *testing.T) { + p := dbus.New(binPath, tc[0].bus, tc[1].bus) + + // test unsealed behaviour + want := "(unsealed dbus proxy)" + if got := p.String(); got != want { + t.Errorf("String() = %v, want %v", + got, want) + } + + if err := p.Seal(tc[0].c, tc[1].c); err != nil { + t.Errorf("Seal(%p, %p) error = %v, wantErr %v", + tc[0].c, tc[1].c, + err, tc[0].wantErr) + } + + // test sealed behaviour + want = strings.Join(append(tc[0].want, tc[1].want...), " ") + if got := p.String(); got != want { + t.Errorf("String() = %v, want %v", + got, want) + } + }) + } +} |
