All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 34s
				
			Test / Sandbox (push) Successful in 2m11s
				
			Test / Hakurei (push) Successful in 3m12s
				
			Test / Hpkg (push) Successful in 4m0s
				
			Test / Hakurei (race detector) (push) Successful in 5m20s
				
			Test / Sandbox (race detector) (push) Successful in 2m11s
				
			Test / Flake checks (push) Successful in 1m31s
				
			This allows holding a xdg-dbus-proxy configuration without importing system/dbus. It also makes more sense in the project structure since the config struct is part of the hst API however the rest of the implementation is not. Signed-off-by: Ophestra <cat@gensokyo.uk>
		
			
				
	
	
		
			215 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			215 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package dbus_test
 | 
						|
 | 
						|
import (
 | 
						|
	"hakurei.app/hst"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	sampleHostPath = "/tmp/bus"
 | 
						|
	sampleHostAddr = "unix:path=" + sampleHostPath
 | 
						|
	sampleBindPath = "/tmp/proxied_bus"
 | 
						|
)
 | 
						|
 | 
						|
var samples = []dbusTestCase{
 | 
						|
	{
 | 
						|
		"org.chromium.Chromium", &hst.BusConfig{
 | 
						|
			See: nil,
 | 
						|
			Talk: []string{"org.freedesktop.Notifications", "org.freedesktop.FileManager1", "org.freedesktop.ScreenSaver",
 | 
						|
				"org.freedesktop.secrets", "org.kde.kwalletd5", "org.kde.kwalletd6", "org.gnome.SessionManager"},
 | 
						|
			Own: []string{"org.chromium.Chromium.*", "org.mpris.MediaPlayer2.org.chromium.Chromium.*",
 | 
						|
				"org.mpris.MediaPlayer2.chromium.*"},
 | 
						|
			Call:      map[string]string{"org.freedesktop.portal.*": "*"},
 | 
						|
			Broadcast: map[string]string{"org.freedesktop.portal.*": "@/org/freedesktop/portal/*"},
 | 
						|
			Log:       false,
 | 
						|
			Filter:    true,
 | 
						|
		}, false, false,
 | 
						|
		[2]string{sampleHostAddr, sampleBindPath},
 | 
						|
		[]string{
 | 
						|
			sampleHostAddr,
 | 
						|
			sampleBindPath,
 | 
						|
			"--filter",
 | 
						|
			"--talk=org.freedesktop.Notifications",
 | 
						|
			"--talk=org.freedesktop.FileManager1",
 | 
						|
			"--talk=org.freedesktop.ScreenSaver",
 | 
						|
			"--talk=org.freedesktop.secrets",
 | 
						|
			"--talk=org.kde.kwalletd5",
 | 
						|
			"--talk=org.kde.kwalletd6",
 | 
						|
			"--talk=org.gnome.SessionManager",
 | 
						|
			"--own=org.chromium.Chromium.*",
 | 
						|
			"--own=org.mpris.MediaPlayer2.org.chromium.Chromium.*",
 | 
						|
			"--own=org.mpris.MediaPlayer2.chromium.*",
 | 
						|
			"--call=org.freedesktop.portal.*=*",
 | 
						|
			"--broadcast=org.freedesktop.portal.*=@/org/freedesktop/portal/*",
 | 
						|
		},
 | 
						|
	},
 | 
						|
	{
 | 
						|
		"org.chromium.Chromium+", &hst.BusConfig{
 | 
						|
			See:       nil,
 | 
						|
			Talk:      []string{"org.bluez", "org.freedesktop.Avahi", "org.freedesktop.UPower"},
 | 
						|
			Own:       nil,
 | 
						|
			Call:      nil,
 | 
						|
			Broadcast: nil,
 | 
						|
			Log:       false,
 | 
						|
			Filter:    true,
 | 
						|
		}, false, false,
 | 
						|
		[2]string{sampleHostAddr, sampleBindPath},
 | 
						|
		[]string{
 | 
						|
			sampleHostAddr,
 | 
						|
			sampleBindPath,
 | 
						|
			"--filter",
 | 
						|
			"--talk=org.bluez",
 | 
						|
			"--talk=org.freedesktop.Avahi",
 | 
						|
			"--talk=org.freedesktop.UPower",
 | 
						|
		},
 | 
						|
	},
 | 
						|
 | 
						|
	{
 | 
						|
		"dev.vencord.Vesktop", &hst.BusConfig{
 | 
						|
			See:       nil,
 | 
						|
			Talk:      []string{"org.freedesktop.Notifications", "org.kde.StatusNotifierWatcher"},
 | 
						|
			Own:       []string{"dev.vencord.Vesktop.*", "org.mpris.MediaPlayer2.dev.vencord.Vesktop.*"},
 | 
						|
			Call:      map[string]string{"org.freedesktop.portal.*": "*"},
 | 
						|
			Broadcast: map[string]string{"org.freedesktop.portal.*": "@/org/freedesktop/portal/*"},
 | 
						|
			Log:       false,
 | 
						|
			Filter:    true,
 | 
						|
		}, false, false,
 | 
						|
		[2]string{sampleHostAddr, sampleBindPath},
 | 
						|
		[]string{
 | 
						|
			sampleHostAddr,
 | 
						|
			sampleBindPath,
 | 
						|
			"--filter",
 | 
						|
			"--talk=org.freedesktop.Notifications",
 | 
						|
			"--talk=org.kde.StatusNotifierWatcher",
 | 
						|
			"--own=dev.vencord.Vesktop.*",
 | 
						|
			"--own=org.mpris.MediaPlayer2.dev.vencord.Vesktop.*",
 | 
						|
			"--call=org.freedesktop.portal.*=*",
 | 
						|
			"--broadcast=org.freedesktop.portal.*=@/org/freedesktop/portal/*"},
 | 
						|
	},
 | 
						|
 | 
						|
	{
 | 
						|
		"uk.gensokyo.CrashTestDummy", &hst.BusConfig{
 | 
						|
			See:       []string{"uk.gensokyo.CrashTestDummy1"},
 | 
						|
			Talk:      []string{"org.freedesktop.Notifications"},
 | 
						|
			Own:       []string{"uk.gensokyo.CrashTestDummy.*", "org.mpris.MediaPlayer2.uk.gensokyo.CrashTestDummy.*"},
 | 
						|
			Call:      map[string]string{"org.freedesktop.portal.*": "*"},
 | 
						|
			Broadcast: map[string]string{"org.freedesktop.portal.*": "@/org/freedesktop/portal/*"},
 | 
						|
			Log:       true,
 | 
						|
			Filter:    true,
 | 
						|
		}, false, false,
 | 
						|
		[2]string{sampleHostAddr, sampleBindPath},
 | 
						|
		[]string{
 | 
						|
			sampleHostAddr,
 | 
						|
			sampleBindPath,
 | 
						|
			"--filter",
 | 
						|
			"--see=uk.gensokyo.CrashTestDummy1",
 | 
						|
			"--talk=org.freedesktop.Notifications",
 | 
						|
			"--own=uk.gensokyo.CrashTestDummy.*",
 | 
						|
			"--own=org.mpris.MediaPlayer2.uk.gensokyo.CrashTestDummy.*",
 | 
						|
			"--call=org.freedesktop.portal.*=*",
 | 
						|
			"--broadcast=org.freedesktop.portal.*=@/org/freedesktop/portal/*",
 | 
						|
			"--log"},
 | 
						|
	},
 | 
						|
	{
 | 
						|
		"uk.gensokyo.CrashTestDummy1", &hst.BusConfig{
 | 
						|
			See:       []string{"uk.gensokyo.CrashTestDummy"},
 | 
						|
			Talk:      []string{"org.freedesktop.Notifications"},
 | 
						|
			Own:       []string{"uk.gensokyo.CrashTestDummy1.*", "org.mpris.MediaPlayer2.uk.gensokyo.CrashTestDummy1.*"},
 | 
						|
			Call:      map[string]string{"org.freedesktop.portal.*": "*"},
 | 
						|
			Broadcast: map[string]string{"org.freedesktop.portal.*": "@/org/freedesktop/portal/*"},
 | 
						|
			Log:       true,
 | 
						|
			Filter:    true,
 | 
						|
		}, false, true,
 | 
						|
		[2]string{sampleHostAddr, sampleBindPath},
 | 
						|
		[]string{
 | 
						|
			sampleHostAddr,
 | 
						|
			sampleBindPath,
 | 
						|
			"--filter",
 | 
						|
			"--see=uk.gensokyo.CrashTestDummy",
 | 
						|
			"--talk=org.freedesktop.Notifications",
 | 
						|
			"--own=uk.gensokyo.CrashTestDummy1.*",
 | 
						|
			"--own=org.mpris.MediaPlayer2.uk.gensokyo.CrashTestDummy1.*",
 | 
						|
			"--call=org.freedesktop.portal.*=*",
 | 
						|
			"--broadcast=org.freedesktop.portal.*=@/org/freedesktop/portal/*",
 | 
						|
			"--log"},
 | 
						|
	},
 | 
						|
}
 | 
						|
 | 
						|
type dbusTestCase struct {
 | 
						|
	id       string
 | 
						|
	c        *hst.BusConfig
 | 
						|
	wantErr  bool
 | 
						|
	wantErrF bool
 | 
						|
	bus      [2]string
 | 
						|
	want     []string
 | 
						|
}
 | 
						|
 | 
						|
var (
 | 
						|
	testCasesExt = func() []dbusTestCase {
 | 
						|
		testCases := make([]dbusTestCase, len(samples)*2)
 | 
						|
		for i := range samples {
 | 
						|
			testCases[i] = samples[i]
 | 
						|
 | 
						|
			fi := &testCases[len(samples)+i]
 | 
						|
			*fi = samples[i]
 | 
						|
 | 
						|
			// create null-injected test cases
 | 
						|
			fi.wantErr = true
 | 
						|
			injectNulls := func(t *[]string) {
 | 
						|
				f := make([]string, len(*t))
 | 
						|
				for i := range f {
 | 
						|
					f[i] = "\x00" + (*t)[i] + "\x00"
 | 
						|
				}
 | 
						|
				*t = f
 | 
						|
			}
 | 
						|
 | 
						|
			fi.c = new(hst.BusConfig)
 | 
						|
			*fi.c = *samples[i].c
 | 
						|
			injectNulls(&fi.c.See)
 | 
						|
			injectNulls(&fi.c.Talk)
 | 
						|
			injectNulls(&fi.c.Own)
 | 
						|
		}
 | 
						|
		return testCases
 | 
						|
	}()
 | 
						|
 | 
						|
	testCasePairs = func() map[string][2]dbusTestCase {
 | 
						|
		// enumerate test case pairs
 | 
						|
		var pc int
 | 
						|
		for _, tc := range samples {
 | 
						|
			if tc.id != "" {
 | 
						|
				pc++
 | 
						|
			}
 | 
						|
		}
 | 
						|
		pairs := make(map[string][2]dbusTestCase, pc)
 | 
						|
		for i, tc := range testCasesExt {
 | 
						|
			if tc.id == "" {
 | 
						|
				continue
 | 
						|
			}
 | 
						|
 | 
						|
			// skip already enumerated system bus test
 | 
						|
			if tc.id[len(tc.id)-1] == '+' {
 | 
						|
				continue
 | 
						|
			}
 | 
						|
 | 
						|
			ftp := [2]dbusTestCase{tc}
 | 
						|
 | 
						|
			// system proxy tests always place directly after its user counterpart with id ending in +
 | 
						|
			if i+1 < len(testCasesExt) && testCasesExt[i+1].id[len(testCasesExt[i+1].id)-1] == '+' {
 | 
						|
				// attach system bus config
 | 
						|
				ftp[1] = testCasesExt[i+1]
 | 
						|
 | 
						|
				// check for misplaced/mismatching tests
 | 
						|
				if ftp[0].wantErr != ftp[1].wantErr || ftp[0].id+"+" != ftp[1].id {
 | 
						|
					panic("mismatching session/system pairing")
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			k := tc.id
 | 
						|
			if tc.wantErr {
 | 
						|
				k = "malformed_" + k
 | 
						|
			}
 | 
						|
			pairs[k] = ftp
 | 
						|
		}
 | 
						|
		return pairs
 | 
						|
	}()
 | 
						|
)
 |