diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-07-02 20:42:51 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-07-02 20:42:51 +0900 |
| commit | eb22a8bcc1ac03357d4073e5d3ed6d0ab5246a37 (patch) | |
| tree | d27d1f724a18bb47bf48816a444dccac28b5248c /print_test.go | |
| parent | 31aef905fa819310ee7694775a836c294ff742e4 (diff) | |
cmd/hakurei: move to cmd
Having it at the project root never made sense since the "ego" name was deprecated. This change finally addresses it.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'print_test.go')
| -rw-r--r-- | print_test.go | 644 |
1 files changed, 0 insertions, 644 deletions
diff --git a/print_test.go b/print_test.go deleted file mode 100644 index 012a48dc..00000000 --- a/print_test.go +++ /dev/null @@ -1,644 +0,0 @@ -package main - -import ( - "strings" - "testing" - "time" - - "git.gensokyo.uk/security/hakurei/dbus" - "git.gensokyo.uk/security/hakurei/hst" - "git.gensokyo.uk/security/hakurei/internal/app" - "git.gensokyo.uk/security/hakurei/internal/state" -) - -var ( - testID = app.ID{ - 0x8e, 0x2c, 0x76, 0xb0, - 0x66, 0xda, 0xbe, 0x57, - 0x4c, 0xf0, 0x73, 0xbd, - 0xb4, 0x6e, 0xb5, 0xc1, - } - testState = &state.State{ - ID: testID, - PID: 0xDEADBEEF, - Config: hst.Template(), - Time: testAppTime, - } - testTime = time.Unix(3752, 1).UTC() - testAppTime = time.Unix(0, 9).UTC() -) - -func Test_printShowInstance(t *testing.T) { - testCases := []struct { - name string - instance *state.State - config *hst.Config - short, json bool - want string - }{ - {"config", nil, hst.Template(), false, false, `App - Identity: 9 (org.chromium.Chromium) - Enablements: wayland, dbus, pulseaudio - Groups: video, dialout, plugdev - Data: /var/lib/hakurei/u0/org.chromium.Chromium - Hostname: localhost - Flags: userns devel net device tty mapuid autoetc - Etc: /etc - Cover: /var/run/nscd - Path: /run/current-system/sw/bin/chromium - Arguments: chromium --ignore-gpu-blocklist --disable-smooth-scrolling --enable-features=UseOzonePlatform --ozone-platform=wayland - -Filesystem - +/nix/store - +/run/current-system - +/run/opengl-driver - +/var/db/nix-channels - w*/var/lib/hakurei/u0/org.chromium.Chromium:/data/data/org.chromium.Chromium - d+/dev/dri - -Extra ACL - --x+:/var/lib/hakurei/u0 - rwx:/var/lib/hakurei/u0/org.chromium.Chromium - -Session bus - Filter: true - Talk: ["org.freedesktop.Notifications" "org.freedesktop.FileManager1" "org.freedesktop.ScreenSaver" "org.freedesktop.secrets" "org.kde.kwalletd5" "org.kde.kwalletd6" "org.gnome.SessionManager"] - Own: ["org.chromium.Chromium.*" "org.mpris.MediaPlayer2.org.chromium.Chromium.*" "org.mpris.MediaPlayer2.chromium.*"] - Call: map["org.freedesktop.portal.*":"*"] - Broadcast: map["org.freedesktop.portal.*":"@/org/freedesktop/portal/*"] - -System bus - Filter: true - Talk: ["org.bluez" "org.freedesktop.Avahi" "org.freedesktop.UPower"] - -`}, - {"config pd", nil, new(hst.Config), false, false, `Warning: this configuration uses permissive defaults! - -App - Identity: 0 - Enablements: (no enablements) - -`}, - {"config flag none", nil, &hst.Config{Container: new(hst.ContainerConfig)}, false, false, `App - Identity: 0 - Enablements: (no enablements) - Flags: none - Etc: /etc - Path: - -`}, - {"config nil entries", nil, &hst.Config{Container: &hst.ContainerConfig{Filesystem: make([]*hst.FilesystemConfig, 1)}, ExtraPerms: make([]*hst.ExtraPermConfig, 1)}, false, false, `App - Identity: 0 - Enablements: (no enablements) - Flags: none - Etc: /etc - Path: - -Filesystem - -Extra ACL - -`}, - {"config pd dbus see", nil, &hst.Config{SessionBus: &dbus.Config{See: []string{"org.example.test"}}}, false, false, `Warning: this configuration uses permissive defaults! - -App - Identity: 0 - Enablements: (no enablements) - -Session bus - Filter: false - See: ["org.example.test"] - -`}, - - {"instance", testState, hst.Template(), false, false, `State - Instance: 8e2c76b066dabe574cf073bdb46eb5c1 (3735928559) - Uptime: 1h2m32s - -App - Identity: 9 (org.chromium.Chromium) - Enablements: wayland, dbus, pulseaudio - Groups: video, dialout, plugdev - Data: /var/lib/hakurei/u0/org.chromium.Chromium - Hostname: localhost - Flags: userns devel net device tty mapuid autoetc - Etc: /etc - Cover: /var/run/nscd - Path: /run/current-system/sw/bin/chromium - Arguments: chromium --ignore-gpu-blocklist --disable-smooth-scrolling --enable-features=UseOzonePlatform --ozone-platform=wayland - -Filesystem - +/nix/store - +/run/current-system - +/run/opengl-driver - +/var/db/nix-channels - w*/var/lib/hakurei/u0/org.chromium.Chromium:/data/data/org.chromium.Chromium - d+/dev/dri - -Extra ACL - --x+:/var/lib/hakurei/u0 - rwx:/var/lib/hakurei/u0/org.chromium.Chromium - -Session bus - Filter: true - Talk: ["org.freedesktop.Notifications" "org.freedesktop.FileManager1" "org.freedesktop.ScreenSaver" "org.freedesktop.secrets" "org.kde.kwalletd5" "org.kde.kwalletd6" "org.gnome.SessionManager"] - Own: ["org.chromium.Chromium.*" "org.mpris.MediaPlayer2.org.chromium.Chromium.*" "org.mpris.MediaPlayer2.chromium.*"] - Call: map["org.freedesktop.portal.*":"*"] - Broadcast: map["org.freedesktop.portal.*":"@/org/freedesktop/portal/*"] - -System bus - Filter: true - Talk: ["org.bluez" "org.freedesktop.Avahi" "org.freedesktop.UPower"] - -`}, - {"instance pd", testState, new(hst.Config), false, false, `Warning: this configuration uses permissive defaults! - -State - Instance: 8e2c76b066dabe574cf073bdb46eb5c1 (3735928559) - Uptime: 1h2m32s - -App - Identity: 0 - Enablements: (no enablements) - -`}, - - {"json nil", nil, nil, false, true, `null -`}, - {"json instance", testState, nil, false, true, `{ - "instance": [ - 142, - 44, - 118, - 176, - 102, - 218, - 190, - 87, - 76, - 240, - 115, - 189, - 180, - 110, - 181, - 193 - ], - "pid": 3735928559, - "config": { - "id": "org.chromium.Chromium", - "path": "/run/current-system/sw/bin/chromium", - "args": [ - "chromium", - "--ignore-gpu-blocklist", - "--disable-smooth-scrolling", - "--enable-features=UseOzonePlatform", - "--ozone-platform=wayland" - ], - "enablements": 13, - "session_bus": { - "see": null, - "talk": [ - "org.freedesktop.Notifications", - "org.freedesktop.FileManager1", - "org.freedesktop.ScreenSaver", - "org.freedesktop.secrets", - "org.kde.kwalletd5", - "org.kde.kwalletd6", - "org.gnome.SessionManager" - ], - "own": [ - "org.chromium.Chromium.*", - "org.mpris.MediaPlayer2.org.chromium.Chromium.*", - "org.mpris.MediaPlayer2.chromium.*" - ], - "call": { - "org.freedesktop.portal.*": "*" - }, - "broadcast": { - "org.freedesktop.portal.*": "@/org/freedesktop/portal/*" - }, - "filter": true - }, - "system_bus": { - "see": null, - "talk": [ - "org.bluez", - "org.freedesktop.Avahi", - "org.freedesktop.UPower" - ], - "own": null, - "call": null, - "broadcast": null, - "filter": true - }, - "username": "chronos", - "shell": "/run/current-system/sw/bin/zsh", - "data": "/var/lib/hakurei/u0/org.chromium.Chromium", - "dir": "/data/data/org.chromium.Chromium", - "extra_perms": [ - { - "ensure": true, - "path": "/var/lib/hakurei/u0", - "x": true - }, - { - "path": "/var/lib/hakurei/u0/org.chromium.Chromium", - "r": true, - "w": true, - "x": true - } - ], - "identity": 9, - "groups": [ - "video", - "dialout", - "plugdev" - ], - "container": { - "hostname": "localhost", - "seccomp_flags": 1, - "seccomp_presets": 1, - "devel": true, - "userns": true, - "net": true, - "tty": true, - "multiarch": true, - "env": { - "GOOGLE_API_KEY": "AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY", - "GOOGLE_DEFAULT_CLIENT_ID": "77185425430.apps.googleusercontent.com", - "GOOGLE_DEFAULT_CLIENT_SECRET": "OTJgUOQcT7lO7GsGZq2G4IlT" - }, - "map_real_uid": true, - "device": true, - "filesystem": [ - { - "src": "/nix/store" - }, - { - "src": "/run/current-system" - }, - { - "src": "/run/opengl-driver" - }, - { - "src": "/var/db/nix-channels" - }, - { - "dst": "/data/data/org.chromium.Chromium", - "src": "/var/lib/hakurei/u0/org.chromium.Chromium", - "write": true, - "require": true - }, - { - "src": "/dev/dri", - "dev": true - } - ], - "symlink": [ - [ - "/run/user/65534", - "/run/user/150" - ] - ], - "etc": "/etc", - "auto_etc": true, - "cover": [ - "/var/run/nscd" - ] - } - }, - "time": "1970-01-01T00:00:00.000000009Z" -} -`}, - {"json config", nil, hst.Template(), false, true, `{ - "id": "org.chromium.Chromium", - "path": "/run/current-system/sw/bin/chromium", - "args": [ - "chromium", - "--ignore-gpu-blocklist", - "--disable-smooth-scrolling", - "--enable-features=UseOzonePlatform", - "--ozone-platform=wayland" - ], - "enablements": 13, - "session_bus": { - "see": null, - "talk": [ - "org.freedesktop.Notifications", - "org.freedesktop.FileManager1", - "org.freedesktop.ScreenSaver", - "org.freedesktop.secrets", - "org.kde.kwalletd5", - "org.kde.kwalletd6", - "org.gnome.SessionManager" - ], - "own": [ - "org.chromium.Chromium.*", - "org.mpris.MediaPlayer2.org.chromium.Chromium.*", - "org.mpris.MediaPlayer2.chromium.*" - ], - "call": { - "org.freedesktop.portal.*": "*" - }, - "broadcast": { - "org.freedesktop.portal.*": "@/org/freedesktop/portal/*" - }, - "filter": true - }, - "system_bus": { - "see": null, - "talk": [ - "org.bluez", - "org.freedesktop.Avahi", - "org.freedesktop.UPower" - ], - "own": null, - "call": null, - "broadcast": null, - "filter": true - }, - "username": "chronos", - "shell": "/run/current-system/sw/bin/zsh", - "data": "/var/lib/hakurei/u0/org.chromium.Chromium", - "dir": "/data/data/org.chromium.Chromium", - "extra_perms": [ - { - "ensure": true, - "path": "/var/lib/hakurei/u0", - "x": true - }, - { - "path": "/var/lib/hakurei/u0/org.chromium.Chromium", - "r": true, - "w": true, - "x": true - } - ], - "identity": 9, - "groups": [ - "video", - "dialout", - "plugdev" - ], - "container": { - "hostname": "localhost", - "seccomp_flags": 1, - "seccomp_presets": 1, - "devel": true, - "userns": true, - "net": true, - "tty": true, - "multiarch": true, - "env": { - "GOOGLE_API_KEY": "AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY", - "GOOGLE_DEFAULT_CLIENT_ID": "77185425430.apps.googleusercontent.com", - "GOOGLE_DEFAULT_CLIENT_SECRET": "OTJgUOQcT7lO7GsGZq2G4IlT" - }, - "map_real_uid": true, - "device": true, - "filesystem": [ - { - "src": "/nix/store" - }, - { - "src": "/run/current-system" - }, - { - "src": "/run/opengl-driver" - }, - { - "src": "/var/db/nix-channels" - }, - { - "dst": "/data/data/org.chromium.Chromium", - "src": "/var/lib/hakurei/u0/org.chromium.Chromium", - "write": true, - "require": true - }, - { - "src": "/dev/dri", - "dev": true - } - ], - "symlink": [ - [ - "/run/user/65534", - "/run/user/150" - ] - ], - "etc": "/etc", - "auto_etc": true, - "cover": [ - "/var/run/nscd" - ] - } -} -`}, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - output := new(strings.Builder) - printShowInstance(output, testTime, tc.instance, tc.config, tc.short, tc.json) - if got := output.String(); got != tc.want { - t.Errorf("printShowInstance: got\n%s\nwant\n%s", - got, tc.want) - return - } - }) - } -} - -func Test_printPs(t *testing.T) { - testCases := []struct { - name string - entries state.Entries - short, json bool - want string - }{ - {"no entries", make(state.Entries), false, false, " Instance PID Application Uptime\n"}, - {"no entries short", make(state.Entries), true, false, ""}, - {"nil instance", state.Entries{testID: nil}, false, false, " Instance PID Application Uptime\n"}, - {"state corruption", state.Entries{app.ID{}: testState}, false, false, " Instance PID Application Uptime\n"}, - - {"valid pd", state.Entries{testID: &state.State{ID: testID, PID: 1 << 8, Config: new(hst.Config), Time: testAppTime}}, false, false, ` Instance PID Application Uptime - 8e2c76b0 256 0 (app.hakurei.8e2c76b0) 1h2m32s -`}, - - {"valid", state.Entries{testID: testState}, false, false, ` Instance PID Application Uptime - 8e2c76b0 3735928559 9 (org.chromium.Chromium) 1h2m32s -`}, - {"valid short", state.Entries{testID: testState}, true, false, "8e2c76b0\n"}, - {"valid json", state.Entries{testID: testState}, false, true, `{ - "8e2c76b066dabe574cf073bdb46eb5c1": { - "instance": [ - 142, - 44, - 118, - 176, - 102, - 218, - 190, - 87, - 76, - 240, - 115, - 189, - 180, - 110, - 181, - 193 - ], - "pid": 3735928559, - "config": { - "id": "org.chromium.Chromium", - "path": "/run/current-system/sw/bin/chromium", - "args": [ - "chromium", - "--ignore-gpu-blocklist", - "--disable-smooth-scrolling", - "--enable-features=UseOzonePlatform", - "--ozone-platform=wayland" - ], - "enablements": 13, - "session_bus": { - "see": null, - "talk": [ - "org.freedesktop.Notifications", - "org.freedesktop.FileManager1", - "org.freedesktop.ScreenSaver", - "org.freedesktop.secrets", - "org.kde.kwalletd5", - "org.kde.kwalletd6", - "org.gnome.SessionManager" - ], - "own": [ - "org.chromium.Chromium.*", - "org.mpris.MediaPlayer2.org.chromium.Chromium.*", - "org.mpris.MediaPlayer2.chromium.*" - ], - "call": { - "org.freedesktop.portal.*": "*" - }, - "broadcast": { - "org.freedesktop.portal.*": "@/org/freedesktop/portal/*" - }, - "filter": true - }, - "system_bus": { - "see": null, - "talk": [ - "org.bluez", - "org.freedesktop.Avahi", - "org.freedesktop.UPower" - ], - "own": null, - "call": null, - "broadcast": null, - "filter": true - }, - "username": "chronos", - "shell": "/run/current-system/sw/bin/zsh", - "data": "/var/lib/hakurei/u0/org.chromium.Chromium", - "dir": "/data/data/org.chromium.Chromium", - "extra_perms": [ - { - "ensure": true, - "path": "/var/lib/hakurei/u0", - "x": true - }, - { - "path": "/var/lib/hakurei/u0/org.chromium.Chromium", - "r": true, - "w": true, - "x": true - } - ], - "identity": 9, - "groups": [ - "video", - "dialout", - "plugdev" - ], - "container": { - "hostname": "localhost", - "seccomp_flags": 1, - "seccomp_presets": 1, - "devel": true, - "userns": true, - "net": true, - "tty": true, - "multiarch": true, - "env": { - "GOOGLE_API_KEY": "AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY", - "GOOGLE_DEFAULT_CLIENT_ID": "77185425430.apps.googleusercontent.com", - "GOOGLE_DEFAULT_CLIENT_SECRET": "OTJgUOQcT7lO7GsGZq2G4IlT" - }, - "map_real_uid": true, - "device": true, - "filesystem": [ - { - "src": "/nix/store" - }, - { - "src": "/run/current-system" - }, - { - "src": "/run/opengl-driver" - }, - { - "src": "/var/db/nix-channels" - }, - { - "dst": "/data/data/org.chromium.Chromium", - "src": "/var/lib/hakurei/u0/org.chromium.Chromium", - "write": true, - "require": true - }, - { - "src": "/dev/dri", - "dev": true - } - ], - "symlink": [ - [ - "/run/user/65534", - "/run/user/150" - ] - ], - "etc": "/etc", - "auto_etc": true, - "cover": [ - "/var/run/nscd" - ] - } - }, - "time": "1970-01-01T00:00:00.000000009Z" - } -} -`}, - {"valid short json", state.Entries{testID: testState}, true, true, `["8e2c76b066dabe574cf073bdb46eb5c1"] -`}, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - output := new(strings.Builder) - printPs(output, testTime, stubStore(tc.entries), tc.short, tc.json) - if got := output.String(); got != tc.want { - t.Errorf("printPs: got\n%s\nwant\n%s", - got, tc.want) - return - } - }) - } -} - -// stubStore implements [state.Store] and returns test samples via [state.Joiner]. -type stubStore state.Entries - -func (s stubStore) Join() (state.Entries, error) { return state.Entries(s), nil } -func (s stubStore) Do(int, func(c state.Cursor)) (bool, error) { panic("unreachable") } -func (s stubStore) List() ([]int, error) { panic("unreachable") } -func (s stubStore) Close() error { return nil } |
