2024-09-28 00:06:16 +09:00
|
|
|
package dbus_test
|
|
|
|
|
|
|
|
import (
|
2024-09-28 19:19:31 +09:00
|
|
|
"errors"
|
|
|
|
"os"
|
2024-09-28 00:06:16 +09:00
|
|
|
"path"
|
|
|
|
"reflect"
|
|
|
|
"slices"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
2024-12-20 00:20:02 +09:00
|
|
|
"git.gensokyo.uk/security/fortify/dbus"
|
2024-09-28 00:06:16 +09:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestConfig_Args(t *testing.T) {
|
|
|
|
for _, tc := range testCases() {
|
|
|
|
if tc.wantErr {
|
|
|
|
// args does not check for nulls
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("build arguments for "+tc.id, func(t *testing.T) {
|
|
|
|
if got := tc.c.Args(tc.bus); !slices.Equal(got, tc.want) {
|
|
|
|
t.Errorf("Args(%q) = %v, want %v",
|
|
|
|
tc.bus,
|
|
|
|
got, tc.want)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewConfigFromFile(t *testing.T) {
|
|
|
|
for _, tc := range testCases() {
|
|
|
|
name := new(strings.Builder)
|
|
|
|
name.WriteString("parse configuration file for application ")
|
|
|
|
name.WriteString(tc.id)
|
|
|
|
if tc.wantErr {
|
|
|
|
name.WriteString(" with unexpected results")
|
|
|
|
}
|
|
|
|
|
|
|
|
samplePath := path.Join("testdata", tc.id+".json")
|
|
|
|
|
|
|
|
t.Run(name.String(), func(t *testing.T) {
|
|
|
|
got, err := dbus.NewConfigFromFile(samplePath)
|
2024-09-28 19:19:31 +09:00
|
|
|
if errors.Is(err, os.ErrNotExist) != tc.wantErrF {
|
|
|
|
t.Errorf("NewConfigFromFile(%q) error = %v, wantErrF %v",
|
2024-09-28 00:06:16 +09:00
|
|
|
samplePath,
|
2024-09-28 19:19:31 +09:00
|
|
|
err, tc.wantErrF)
|
2024-09-28 00:06:16 +09:00
|
|
|
return
|
|
|
|
}
|
2024-09-28 19:19:31 +09:00
|
|
|
|
|
|
|
if tc.wantErrF {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-09-28 00:06:16 +09:00
|
|
|
if !tc.wantErr && !reflect.DeepEqual(got, tc.c) {
|
|
|
|
t.Errorf("NewConfigFromFile(%q) got = %v, want %v",
|
|
|
|
samplePath,
|
|
|
|
got, tc.c)
|
|
|
|
}
|
|
|
|
if tc.wantErr && reflect.DeepEqual(got, tc.c) {
|
|
|
|
t.Errorf("NewConfigFromFile(%q) got = %v, wantErr %v",
|
|
|
|
samplePath,
|
|
|
|
got, tc.wantErr)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewConfig(t *testing.T) {
|
|
|
|
ids := [...]string{"org.chromium.Chromium", "dev.vencord.Vesktop"}
|
|
|
|
|
|
|
|
type newTestCase struct {
|
|
|
|
id string
|
|
|
|
args [2]bool
|
|
|
|
want *dbus.Config
|
|
|
|
}
|
|
|
|
|
|
|
|
// populate tests from IDs in generic tests
|
|
|
|
tcs := make([]newTestCase, 0, (len(ids)+1)*4)
|
|
|
|
// tests for defaults without id
|
|
|
|
tcs = append(tcs,
|
|
|
|
newTestCase{"", [2]bool{false, false}, &dbus.Config{
|
|
|
|
Call: make(map[string]string),
|
|
|
|
Broadcast: make(map[string]string),
|
|
|
|
Filter: true,
|
|
|
|
}},
|
|
|
|
newTestCase{"", [2]bool{false, true}, &dbus.Config{
|
|
|
|
Call: make(map[string]string),
|
|
|
|
Broadcast: make(map[string]string),
|
|
|
|
Filter: true,
|
|
|
|
}},
|
|
|
|
newTestCase{"", [2]bool{true, false}, &dbus.Config{
|
|
|
|
Talk: []string{"org.freedesktop.DBus", "org.freedesktop.Notifications"},
|
|
|
|
Call: map[string]string{"org.freedesktop.portal.*": "*"},
|
|
|
|
Broadcast: map[string]string{"org.freedesktop.portal.*": "@/org/freedesktop/portal/*"},
|
|
|
|
Filter: true,
|
|
|
|
}},
|
|
|
|
newTestCase{"", [2]bool{true, true}, &dbus.Config{
|
|
|
|
Talk: []string{"org.freedesktop.DBus", "org.freedesktop.Notifications"},
|
|
|
|
Call: map[string]string{"org.freedesktop.portal.*": "*"},
|
|
|
|
Broadcast: map[string]string{"org.freedesktop.portal.*": "@/org/freedesktop/portal/*"},
|
|
|
|
Filter: true,
|
|
|
|
}},
|
|
|
|
)
|
|
|
|
for _, id := range ids {
|
|
|
|
tcs = append(tcs,
|
|
|
|
newTestCase{id, [2]bool{false, false}, &dbus.Config{
|
|
|
|
Call: make(map[string]string),
|
|
|
|
Broadcast: make(map[string]string),
|
|
|
|
Filter: true,
|
|
|
|
}},
|
|
|
|
newTestCase{id, [2]bool{false, true}, &dbus.Config{
|
|
|
|
Call: make(map[string]string),
|
|
|
|
Broadcast: make(map[string]string),
|
|
|
|
Filter: true,
|
|
|
|
}},
|
|
|
|
newTestCase{id, [2]bool{true, false}, &dbus.Config{
|
|
|
|
Talk: []string{"org.freedesktop.DBus", "org.freedesktop.Notifications"},
|
|
|
|
Own: []string{id + ".*"},
|
|
|
|
Call: map[string]string{"org.freedesktop.portal.*": "*"},
|
|
|
|
Broadcast: map[string]string{"org.freedesktop.portal.*": "@/org/freedesktop/portal/*"},
|
|
|
|
Filter: true,
|
|
|
|
}},
|
|
|
|
newTestCase{id, [2]bool{true, true}, &dbus.Config{
|
|
|
|
Talk: []string{"org.freedesktop.DBus", "org.freedesktop.Notifications"},
|
|
|
|
Own: []string{id + ".*", "org.mpris.MediaPlayer2." + id + ".*"},
|
|
|
|
Call: map[string]string{"org.freedesktop.portal.*": "*"},
|
|
|
|
Broadcast: map[string]string{"org.freedesktop.portal.*": "@/org/freedesktop/portal/*"},
|
|
|
|
Filter: true,
|
|
|
|
}},
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range tcs {
|
|
|
|
name := new(strings.Builder)
|
|
|
|
name.WriteString("create new configuration struct")
|
|
|
|
|
|
|
|
if tc.args[0] {
|
|
|
|
name.WriteString(" with builtin defaults")
|
|
|
|
if tc.args[1] {
|
|
|
|
name.WriteString(" (mpris)")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if tc.id != "" {
|
|
|
|
name.WriteString(" for application ID ")
|
|
|
|
name.WriteString(tc.id)
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run(name.String(), func(t *testing.T) {
|
|
|
|
if gotC := dbus.NewConfig(tc.id, tc.args[0], tc.args[1]); !reflect.DeepEqual(gotC, tc.want) {
|
|
|
|
t.Errorf("NewConfig(%q, %t, %t) = %v, want %v",
|
|
|
|
tc.id, tc.args[0], tc.args[1],
|
|
|
|
gotC, tc.want)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|