diff options
Diffstat (limited to 'test/sandbox/testdata')
| -rw-r--r-- | test/sandbox/testdata/device.go | 134 | ||||
| -rw-r--r-- | test/sandbox/testdata/mapuid.go | 124 | ||||
| -rw-r--r-- | test/sandbox/testdata/pdlike.go | 141 | ||||
| -rw-r--r-- | test/sandbox/testdata/simple.go | 140 | ||||
| -rw-r--r-- | test/sandbox/testdata/sum.go | 22 | ||||
| -rw-r--r-- | test/sandbox/testdata/sum_amd64.go | 9 | ||||
| -rw-r--r-- | test/sandbox/testdata/sum_arm64.go | 9 | ||||
| -rw-r--r-- | test/sandbox/testdata/testdata.go | 125 | ||||
| -rw-r--r-- | test/sandbox/testdata/tty.go | 145 |
9 files changed, 0 insertions, 849 deletions
diff --git a/test/sandbox/testdata/device.go b/test/sandbox/testdata/device.go deleted file mode 100644 index 89feb819..00000000 --- a/test/sandbox/testdata/device.go +++ /dev/null @@ -1,134 +0,0 @@ -//go:build testsuite || tester - -package testdata - -import ( - "os" - "syscall" - - "hakurei.app/fhs" - "hakurei.app/hst" - "hakurei.app/test/internal/mountinfo" - "hakurei.app/test/internal/testsuite" -) - -var _ = TestCase{ - Hakurei: hst.Config{ - ID: "app.hakurei.sample.device", - Enablements: new(hst.EWayland | hst.EPipeWire | hst.EDBus | hst.EX11), - Identity: 4, - - Container: &hst.ContainerConfig{ - Hostname: "hakurei-sample-device", - - Filesystem: []hst.FilesystemConfigJSON{ - fcLinker, - fcLib, - fcTestHelper, - }, - - Username: "u0_a4", - Shell: fhs.AbsUsrBin.Append("bash"), - Home: hst.AbsPrivateTmp, - Path: absTestHelper, - Args: []string{"tester", "device"}, - - Flags: hst.FDevice | hst.FShareTmpdir, - }, - }, - - // 0, PresetStrict - Sum: sumSimple, - - Env: []string{ - "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/65534/bus", - "DISPLAY=unix:/tmp/.X11-unix/X0", - "HOME=/.hakurei", - "SHELL=/usr/bin/bash", - "TERM=xterm", - "USER=u0_a4", - "WAYLAND_DISPLAY=wayland-0", - "XDG_RUNTIME_DIR=/run/user/65534", - "XDG_SESSION_CLASS=user", - "XDG_SESSION_TYPE=wayland", - "PULSE_SERVER=unix:/run/user/65534/pulse/native", - }, - - FS: &testsuite.FS{Dir: dir{ - ".hakurei": {Mode: os.ModeDir | 0755, Dir: dir{ - "test-helper": {Mode: 0755}, - }}, - - // unstable host dev - "dev": {Mode: os.ModeDir | 0755}, - - "etc": {Mode: os.ModeDir | 0755, Dir: dir{ - "passwd": {Mode: 0600, - Data: new("u0_a4:x:65534:65534:Hakurei:/.hakurei:/usr/bin/bash\n")}, - "group": {Mode: 0600, - Data: new("hakurei:x:65534:\n")}, - }}, - - "lib64": {Mode: os.ModeDir | 0755, Dir: dir{ - "ld-linux-x86-64.so.2": {Mode: os.ModeSymlink | 0777}, - }}, - - "run": {Mode: os.ModeDir | 0755, Dir: dir{ - "user": {Mode: os.ModeDir | 0755, Dir: dir{ - "65534": {Mode: os.ModeDir | 0700, Dir: dir{ - "bus": {Mode: os.ModeSocket | 0775}, - "wayland-0": {Mode: os.ModeSocket | 070}, - "pulse": {Mode: os.ModeDir | 0700, Dir: dir{ - "native": {Mode: os.ModeSocket | 0777}, - }}, - }}, - }}, - }}, - - "tmp": {Mode: os.ModeDir | 0770, Dir: dir{ - ".X11-unix": {Mode: os.ModeDir | 0755, Dir: dir{ - "X0": {Mode: os.ModeSocket | 0775}, - }}, - }}, - - "lib": {Mode: os.ModeDir | 0755}, - "proc": {Mode: os.ModeDir | 0555}, - }}, - - Mount: []*mountinfo.Entry{ - r("/sysroot", "/", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110003,gid=110003,inode64"), - r("/", "/proc", "rw,nosuid,nodev,noexec,relatime", "proc", "proc", "rw"), - r("/", "/.hakurei", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=4k,mode=755,uid=110003,gid=110003,inode64"), - - // host /dev in testing environment - r("/", "/dev", "rw,nosuid", "tmpfs", "tmpfs", ignore), - r("/", "/dev/pts", "rw,nosuid,noexec,relatime", "devpts", "devpts", "rw,gid=100004,mode=620,ptmxmode=666"), - r("/", "/dev/mqueue", "rw,nosuid,nodev,noexec,relatime", "mqueue", "mqueue", "rw"), - r("/kvm", "/dev/kvm", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/fuse", "/dev/fuse", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/", "/dev/shm", "rw,nosuid,nodev,noexec,relatime", "tmpfs", "shm", ignore), - r("/null", "/dev/null", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/zero", "/dev/zero", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/full", "/dev/full", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/tty", "/dev/tty", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/random", "/dev/random", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/urandom", "/dev/urandom", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - - r("/", "/dev/shm", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,uid=110003,gid=110003,inode64"), - r("/", "/run/user", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=16384k,mode=755,uid=110003,gid=110003,inode64"), - r("/tmp/hakurei.0/tmpdir/4", "/tmp", "rw,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/etc/passwd", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110003,gid=110003,inode64"), - r(ignore, "/etc/group", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110003,gid=110003,inode64"), - r(ignore, "/run/user/65534/wayland-0", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/tmp/.X11-unix", "/tmp/.X11-unix", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/65534/bus", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/usr/lib", "/lib", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/opt/test-helper/bin/tester", "/.hakurei/test-helper", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/65534/pulse/native", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - }, - - Seccomp: true, - - TrySocket: "/tmp/.X11-unix/X0", - ErrnoAbstract: syscall.ECONNREFUSED, -}.register("device") diff --git a/test/sandbox/testdata/mapuid.go b/test/sandbox/testdata/mapuid.go deleted file mode 100644 index 8dee7b7f..00000000 --- a/test/sandbox/testdata/mapuid.go +++ /dev/null @@ -1,124 +0,0 @@ -//go:build testsuite || tester - -package testdata - -import ( - "os" - "syscall" - - "hakurei.app/fhs" - "hakurei.app/hst" - "hakurei.app/test/internal/mountinfo" - "hakurei.app/test/internal/testsuite" -) - -var _ = TestCase{ - Hakurei: hst.Config{ - ID: "app.hakurei.sample.mapuid", - Enablements: new(hst.EWayland | hst.EPipeWire | hst.EDBus), - Identity: 3, - - Container: &hst.ContainerConfig{ - Hostname: "hakurei-sample-mapuid", - - Filesystem: []hst.FilesystemConfigJSON{ - fcLinker, - fcLib, - fcTestHelper, - }, - - Username: "u0_a3", - Shell: fhs.AbsUsrBin.Append("bash"), - Home: hst.AbsPrivateTmp, - Path: absTestHelper, - Args: []string{"tester", "mapuid"}, - - Flags: hst.FMapRealUID | hst.FShareRuntime | hst.FShareTmpdir, - }, - }, - - // 0, PresetStrict - Sum: sumSimple, - - Env: []string{ - "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus", - "HOME=/.hakurei", - "SHELL=/usr/bin/bash", - "TERM=xterm", - "USER=u0_a3", - "WAYLAND_DISPLAY=wayland-0", - "XDG_RUNTIME_DIR=/run/user/1000", - "XDG_SESSION_CLASS=user", - "XDG_SESSION_TYPE=wayland", - "PULSE_SERVER=unix:/run/user/1000/pulse/native", - }, - - FS: &testsuite.FS{Dir: dir{ - ".hakurei": {Mode: os.ModeDir | 0755, Dir: dir{ - "test-helper": {Mode: 0755}, - }}, - - // unstable host dev - "dev": {Mode: os.ModeDir | 0755}, - - "etc": {Mode: os.ModeDir | 0755, Dir: dir{ - "passwd": {Mode: 0600, - Data: new("u0_a3:x:1000:100:Hakurei:/.hakurei:/usr/bin/bash\n")}, - "group": {Mode: 0600, - Data: new("hakurei:x:100:\n")}, - }}, - - "lib64": {Mode: os.ModeDir | 0755, Dir: dir{ - "ld-linux-x86-64.so.2": {Mode: os.ModeSymlink | 0777}, - }}, - - "run": {Mode: os.ModeDir | 0755, Dir: dir{ - "user": {Mode: os.ModeDir | 0755, Dir: dir{ - "1000": {Mode: os.ModeDir | 0770, Dir: dir{ - "bus": {Mode: os.ModeSocket | 0775}, - "wayland-0": {Mode: os.ModeSocket | 070}, - "pulse": {Mode: os.ModeDir | 0700, Dir: dir{ - "native": {Mode: os.ModeSocket | 0777}, - }}, - }}, - }}, - }}, - - "tmp": {Mode: os.ModeDir | 0770, Dir: dir{}}, - - "lib": {Mode: os.ModeDir | 0755}, - "proc": {Mode: os.ModeDir | 0555}, - }}, - - Mount: []*mountinfo.Entry{ - r("/sysroot", "/", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110002,gid=110002,inode64"), - r("/", "/proc", "rw,nosuid,nodev,noexec,relatime", "proc", "proc", "rw"), - r("/", "/.hakurei", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=4k,mode=755,uid=110002,gid=110002,inode64"), - r("/", "/dev", "ro,nosuid,nodev,relatime", "tmpfs", "devtmpfs", "rw,mode=755,uid=110002,gid=110002,inode64"), - r("/null", "/dev/null", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/zero", "/dev/zero", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/full", "/dev/full", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/random", "/dev/random", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/urandom", "/dev/urandom", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/tty", "/dev/tty", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/", "/dev/pts", "rw,nosuid,noexec,relatime", "devpts", "devpts", "rw,mode=620,ptmxmode=666"), - r("/", "/dev/mqueue", "rw,nosuid,nodev,noexec,relatime", "mqueue", "mqueue", "rw"), - r("/", "/dev/shm", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,uid=110002,gid=110002,inode64"), - r("/", "/run/user", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=16384k,mode=755,uid=110002,gid=110002,inode64"), - r("/tmp/hakurei.0/runtime/3", "/run/user/1000", "rw,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/tmp/hakurei.0/tmpdir/3", "/tmp", "rw,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/etc/passwd", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110002,gid=110002,inode64"), - r(ignore, "/etc/group", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110002,gid=110002,inode64"), - r(ignore, "/run/user/1000/wayland-0", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/1000/bus", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/usr/lib", "/lib", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/opt/test-helper/bin/tester", "/.hakurei/test-helper", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/1000/pulse/native", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - }, - - Seccomp: true, - - TrySocket: "/tmp/.X11-unix/X0", - ErrnoAbstract: syscall.ECONNREFUSED, - ErrnoPathname: syscall.ENOENT, -}.register("mapuid") diff --git a/test/sandbox/testdata/pdlike.go b/test/sandbox/testdata/pdlike.go deleted file mode 100644 index 53d8062a..00000000 --- a/test/sandbox/testdata/pdlike.go +++ /dev/null @@ -1,141 +0,0 @@ -//go:build testsuite || tester - -package testdata - -import ( - "os" - "syscall" - - "hakurei.app/fhs" - "hakurei.app/hst" - "hakurei.app/test/internal/mountinfo" - "hakurei.app/test/internal/testsuite" -) - -var _ = TestCase{ - Hakurei: hst.Config{ - ID: "app.hakurei.sample.pdlike", - Enablements: new(hst.EWayland | hst.EPipeWire | hst.EDBus), - Identity: 5, - - Container: &hst.ContainerConfig{ - Hostname: "hakurei-sample-pdlike", - - Filesystem: []hst.FilesystemConfigJSON{ - fcLinker, - fcLib, - fcTestHelper, - }, - - Username: "u0_a5", - Shell: fhs.AbsUsrBin.Append("bash"), - Home: hst.AbsPrivateTmp, - Path: absTestHelper, - Args: []string{"tester", "pdlike"}, - - Flags: hst.FHostNet | hst.FTty | hst.FUserns | hst.FShareRuntime | hst.FShareTmpdir, - }, - }, - - // 0, PresetExt | PresetDenyDevel - Sum: SumPD, - - Env: []string{ - "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/65534/bus", - "HOME=/.hakurei", - "SHELL=/usr/bin/bash", - "TERM=xterm", - "USER=u0_a5", - "WAYLAND_DISPLAY=wayland-0", - "XDG_RUNTIME_DIR=/run/user/65534", - "XDG_SESSION_CLASS=user", - "XDG_SESSION_TYPE=wayland", - "PULSE_SERVER=unix:/run/user/65534/pulse/native", - }, - - FS: &testsuite.FS{Dir: dir{ - ".hakurei": {Mode: os.ModeDir | 0755, Dir: dir{ - "test-helper": {Mode: 0755}, - }}, - - "dev": {Mode: os.ModeDir | 0755, Dir: dir{ - "core": {Mode: os.ModeSymlink | 0777}, - "fd": {Mode: os.ModeSymlink | 0777}, - "full": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "mqueue": {Mode: os.ModeDir | os.ModeSticky | 0777, Dir: dir{}}, - "null": {Mode: os.ModeDevice | os.ModeCharDevice | 0666, Data: new("")}, - "ptmx": {Mode: os.ModeSymlink | 0777}, - "pts": {Mode: os.ModeDir | 0755, Dir: dir{ - "ptmx": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - }}, - "random": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "shm": {Mode: os.ModeDir | os.ModeSticky | 0777, Dir: dir{}}, - "stderr": {Mode: os.ModeSymlink | 0777}, - "stdin": {Mode: os.ModeSymlink | 0777}, - "stdout": {Mode: os.ModeSymlink | 0777}, - "tty": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "urandom": {Mode: os.ModeDevice | os.ModeCharDevice | 0444}, - "zero": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - }}, - - "etc": {Mode: os.ModeDir | 0755, Dir: dir{ - "passwd": {Mode: 0600, - Data: new("u0_a5:x:65534:65534:Hakurei:/.hakurei:/usr/bin/bash\n")}, - "group": {Mode: 0600, - Data: new("hakurei:x:65534:\n")}, - }}, - - "lib64": {Mode: os.ModeDir | 0755, Dir: dir{ - "ld-linux-x86-64.so.2": {Mode: os.ModeSymlink | 0777}, - }}, - - "run": {Mode: os.ModeDir | 0755, Dir: dir{ - "user": {Mode: os.ModeDir | 0755, Dir: dir{ - "65534": {Mode: os.ModeDir | 0770, Dir: dir{ - "bus": {Mode: os.ModeSocket | 0775}, - "wayland-0": {Mode: os.ModeSocket | 070}, - "pulse": {Mode: os.ModeDir | 0700, Dir: dir{ - "native": {Mode: os.ModeSocket | 0777}, - }}, - }}, - }}, - }}, - - "tmp": {Mode: os.ModeDir | 0770, Dir: dir{}}, - - "lib": {Mode: os.ModeDir | 0755}, - "proc": {Mode: os.ModeDir | 0555}, - }}, - - Mount: []*mountinfo.Entry{ - r("/sysroot", "/", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110004,gid=110004,inode64"), - r("/", "/proc", "rw,nosuid,nodev,noexec,relatime", "proc", "proc", "rw"), - r("/", "/.hakurei", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=4k,mode=755,uid=110004,gid=110004,inode64"), - r("/", "/dev", "ro,nosuid,nodev,relatime", "tmpfs", "devtmpfs", "rw,mode=755,uid=110004,gid=110004,inode64"), - r("/null", "/dev/null", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/zero", "/dev/zero", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/full", "/dev/full", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/random", "/dev/random", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/urandom", "/dev/urandom", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/tty", "/dev/tty", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/", "/dev/pts", "rw,nosuid,noexec,relatime", "devpts", "devpts", "rw,mode=620,ptmxmode=666"), - r("/", "/dev/mqueue", "rw,nosuid,nodev,noexec,relatime", "mqueue", "mqueue", "rw"), - r("/", "/dev/shm", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,uid=110004,gid=110004,inode64"), - r("/", "/run/user", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=16384k,mode=755,uid=110004,gid=110004,inode64"), - r("/tmp/hakurei.0/runtime/5", "/run/user/65534", "rw,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/tmp/hakurei.0/tmpdir/5", "/tmp", "rw,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/etc/passwd", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110004,gid=110004,inode64"), - r(ignore, "/etc/group", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110004,gid=110004,inode64"), - r(ignore, "/run/user/65534/wayland-0", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/65534/bus", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/usr/lib", "/lib", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/opt/test-helper/bin/tester", "/.hakurei/test-helper", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/65534/pulse/native", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - }, - - Seccomp: true, - - TrySocket: "/tmp/.X11-unix/X0", - ErrnoAbstract: syscall.EPERM, - ErrnoPathname: syscall.ENOENT, -}.register("pdlike") diff --git a/test/sandbox/testdata/simple.go b/test/sandbox/testdata/simple.go deleted file mode 100644 index c410e626..00000000 --- a/test/sandbox/testdata/simple.go +++ /dev/null @@ -1,140 +0,0 @@ -//go:build testsuite || tester - -package testdata - -import ( - "os" - "syscall" - - "hakurei.app/fhs" - "hakurei.app/hst" - "hakurei.app/test/internal/mountinfo" - "hakurei.app/test/internal/testsuite" -) - -var _ = TestCase{ - Hakurei: hst.Config{ - ID: "app.hakurei.sample.simple", - Enablements: new(hst.EWayland | hst.EPipeWire | hst.EDBus), - Identity: 1, - - Container: &hst.ContainerConfig{ - Hostname: "hakurei-sample-simple", - Env: map[string]string{"HAKUREI_SAMPLE": "1"}, - - Filesystem: []hst.FilesystemConfigJSON{ - fcLinker, - fcLib, - fcTestHelper, - }, - - Username: "u0_a1", - Shell: fhs.AbsUsrBin.Append("bash"), - Home: hst.AbsPrivateTmp, - Path: absTestHelper, - Args: []string{"tester", "simple"}, - }, - }, - - // 0, PresetStrict - Sum: sumSimple, - - Env: []string{ - "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/65534/bus", - "HAKUREI_SAMPLE=1", - "HOME=/.hakurei", - "SHELL=/usr/bin/bash", - "TERM=xterm", - "USER=u0_a1", - "WAYLAND_DISPLAY=wayland-0", - "XDG_RUNTIME_DIR=/run/user/65534", - "XDG_SESSION_CLASS=user", - "XDG_SESSION_TYPE=wayland", - "PULSE_SERVER=unix:/run/user/65534/pulse/native", - }, - - FS: &testsuite.FS{Dir: dir{ - ".hakurei": {Mode: os.ModeDir | 0755, Dir: dir{ - "test-helper": {Mode: 0755}, - }}, - - "dev": {Mode: os.ModeDir | 0755, Dir: dir{ - "core": {Mode: os.ModeSymlink | 0777}, - "fd": {Mode: os.ModeSymlink | 0777}, - "full": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "mqueue": {Mode: os.ModeDir | os.ModeSticky | 0777, Dir: dir{}}, - "null": {Mode: os.ModeDevice | os.ModeCharDevice | 0666, Data: new("")}, - "ptmx": {Mode: os.ModeSymlink | 0777}, - "pts": {Mode: os.ModeDir | 0755, Dir: dir{ - "ptmx": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - }}, - "random": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "shm": {Mode: os.ModeDir | os.ModeSticky | 0777, Dir: dir{}}, - "stderr": {Mode: os.ModeSymlink | 0777}, - "stdin": {Mode: os.ModeSymlink | 0777}, - "stdout": {Mode: os.ModeSymlink | 0777}, - "tty": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "urandom": {Mode: os.ModeDevice | os.ModeCharDevice | 0444}, - "zero": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - }}, - - "etc": {Mode: os.ModeDir | 0755, Dir: dir{ - "passwd": {Mode: 0600, - Data: new("u0_a1:x:65534:65534:Hakurei:/.hakurei:/usr/bin/bash\n")}, - "group": {Mode: 0600, - Data: new("hakurei:x:65534:\n")}, - }}, - - "lib64": {Mode: os.ModeDir | 0755, Dir: dir{ - "ld-linux-x86-64.so.2": {Mode: os.ModeSymlink | 0777}, - }}, - - "run": {Mode: os.ModeDir | 0755, Dir: dir{ - "user": {Mode: os.ModeDir | 0755, Dir: dir{ - "65534": {Mode: os.ModeDir | 0700, Dir: dir{ - "bus": {Mode: os.ModeSocket | 0775}, - "wayland-0": {Mode: os.ModeSocket | 070}, - "pulse": {Mode: os.ModeDir | 0700, Dir: dir{ - "native": {Mode: os.ModeSocket | 0777}, - }}, - }}, - }}, - }}, - - "tmp": {Mode: os.ModeDir | os.ModeSticky | 0777, Dir: dir{}}, - - "lib": {Mode: os.ModeDir | 0755}, - "proc": {Mode: os.ModeDir | 0555}, - }}, - - Mount: []*mountinfo.Entry{ - r("/sysroot", "/", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110000,gid=110000,inode64"), - r("/", "/proc", "rw,nosuid,nodev,noexec,relatime", "proc", "proc", "rw"), - r("/", "/.hakurei", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=4k,mode=755,uid=110000,gid=110000,inode64"), - r("/", "/dev", "ro,nosuid,nodev,relatime", "tmpfs", "devtmpfs", "rw,mode=755,uid=110000,gid=110000,inode64"), - r("/null", "/dev/null", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/zero", "/dev/zero", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/full", "/dev/full", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/random", "/dev/random", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/urandom", "/dev/urandom", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/tty", "/dev/tty", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/", "/dev/pts", "rw,nosuid,noexec,relatime", "devpts", "devpts", "rw,mode=620,ptmxmode=666"), - r("/", "/dev/mqueue", "rw,nosuid,nodev,noexec,relatime", "mqueue", "mqueue", "rw"), - r("/", "/dev/shm", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,uid=110000,gid=110000,inode64"), - r("/", "/run/user", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=16384k,mode=755,uid=110000,gid=110000,inode64"), - r("/", "/tmp", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,uid=110000,gid=110000,inode64"), - r(ignore, "/etc/passwd", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110000,gid=110000,inode64"), - r(ignore, "/etc/group", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110000,gid=110000,inode64"), - r(ignore, "/run/user/65534/wayland-0", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/65534/bus", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/usr/lib", "/lib", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/opt/test-helper/bin/tester", "/.hakurei/test-helper", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/65534/pulse/native", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - }, - - Seccomp: true, - - TrySocket: "/tmp/.X11-unix/X0", - ErrnoAbstract: syscall.ECONNREFUSED, - ErrnoPathname: syscall.ENOENT, -}.register("simple") diff --git a/test/sandbox/testdata/sum.go b/test/sandbox/testdata/sum.go deleted file mode 100644 index e4e8643a..00000000 --- a/test/sandbox/testdata/sum.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build testsuite || tester - -package testdata - -import ( - "crypto/sha512" - "encoding/base64" - "strconv" -) - -// sum decodes s as [base64.StdEncoding] and panics if it is invalid or -// unexpectedly sized. -func sum(s string) [sha512.Size]byte { - p, err := base64.StdEncoding.DecodeString(s) - if err != nil { - panic(err) - } - if len(p) != sha512.Size { - panic("unexpected checksum sized " + strconv.Itoa(len(p))) - } - return ([sha512.Size]byte)(p) -} diff --git a/test/sandbox/testdata/sum_amd64.go b/test/sandbox/testdata/sum_amd64.go deleted file mode 100644 index bd751105..00000000 --- a/test/sandbox/testdata/sum_amd64.go +++ /dev/null @@ -1,9 +0,0 @@ -//go:build testsuite || tester - -package testdata - -var ( - SumPD = sum("xpiwgf+Vev4XptlDdFN9N/KmP2+d112nVGVCQHqeMkduvaMxK6d4XX9hhUK8+vJ8on3MLd26hSBp0ovP6MrTmg==") - sumSimple = sum("6IApjfK9Z1HQBA/CG8DtTAD5XcDXulBsJE2LjPaGbbqO9KMylvKHtmzMwdeOlwJll/hMx97BVz4UiWD701zXNQ==") - sumTTY = sum("C3YAdHbByeJdv2dMKf32CaFlanAGPkkydlThtTYK09oG4aPjK/gOlhxVFq2D1Lnn6b3odqk3l+J2J9JVXCWFiw==") -) diff --git a/test/sandbox/testdata/sum_arm64.go b/test/sandbox/testdata/sum_arm64.go deleted file mode 100644 index 1691828f..00000000 --- a/test/sandbox/testdata/sum_arm64.go +++ /dev/null @@ -1,9 +0,0 @@ -//go:build testsuite || tester - -package testdata - -var ( - SumPD = sum("QzzpuREoLW3MgCkxn7ebgWtg1aeV7I/JQ0TdAnYU1o8CMWapG7iB+q7u3Sbj2JR04UHlppqX6TuJhMqPFJmZgA==") - sumSimple = sum("eTGFOKPchRMUtr2W8Q1YYayyqn4Ty43gYZ0PanZwnWfwHvP9Z+GVhisC+XEeW3abxNHrT8DfxBpyPInJaKkylw==") - sumTTY = sum("zx9NyHQ2uo7JXSaLZjpjl7sLSlrGTYVX5sxSnYsPb2Xa06krYu0p2F7unG3eEmd1ek0PhgMuikXKG86t+jTPXg==") -) diff --git a/test/sandbox/testdata/testdata.go b/test/sandbox/testdata/testdata.go deleted file mode 100644 index 3418d8ae..00000000 --- a/test/sandbox/testdata/testdata.go +++ /dev/null @@ -1,125 +0,0 @@ -//go:build testsuite || tester - -// Package testdata holds sandbox inspection test cases. -package testdata - -import ( - "crypto/sha512" - "iter" - "log" - "strconv" - "syscall" - - "hakurei.app/check" - "hakurei.app/fhs" - "hakurei.app/hst" - "hakurei.app/test/internal/mountinfo" - "hakurei.app/test/internal/testsuite" -) - -// A TestCase represents a named test case that may be requested by the caller. -type TestCase struct { - // Configuration of the inspected container. - Hakurei hst.Config - // Checksum of expected seccomp filter program. - Sum [sha512.Size]byte - - // Expected environment. Skipped if nil. - Env []string `json:"env,omitempty"` - // Expected root filesystem. Skipped if nil. - FS *testsuite.FS `json:"fs,omitempty"` - // Expected mountinfo records. Skipped if nil. - Mount []*mountinfo.Entry `json:"mount,omitempty"` - // Whether to run seccomp checks. - Seccomp bool `json:"seccomp,omitempty"` - - // Name of pathname and abstract sockets to attempt. - TrySocket string `json:"try_socket,omitempty"` - // Errno to expect attempting to reach the abstract socket. - ErrnoAbstract syscall.Errno `json:"errno_abstract,omitempty"` - // Errno to expect attempting to reach the pathname socket. - ErrnoPathname syscall.Errno `json:"errno_pathname,omitempty"` -} - -// testCases hold all named test cases. -var testCases map[string]TestCase - -// fc returns c wrapped in its JSON adapter. -func fc(c hst.FilesystemConfig) hst.FilesystemConfigJSON { - return hst.FilesystemConfigJSON{ - FilesystemConfig: c, - } -} - -// ignore is the magic string for a mountinfo field to be ignored. -const ignore = "//ignore" - -type dir = map[string]*testsuite.FS - -// r returns the address of a [mountinfo.Entry]. -func r( - root, target, vfsOptstr string, - fsType, source, fsOptstr string, -) *mountinfo.Entry { - return &mountinfo.Entry{ - ID: -1, - Parent: -1, - Root: root, - Target: target, - VfsOptstr: vfsOptstr, - FsType: fsType, - Source: source, - FsOptstr: fsOptstr, - } -} - -var ( - // fcLinker is the dynamic linker symlink. - fcLinker = fc(&hst.FSLink{ - Target: fhs.AbsRoot.Append("lib64", "ld-linux-x86-64.so.2"), - Linkname: "../lib/x86_64-linux-gnu/ld-linux-x86-64.so.2", - }) - // fcLib is the dynamic library bind mount. - fcLib = fc(&hst.FSBind{Source: fhs.AbsRoot.Append("lib")}) - - // absTestHelper is the absolute pathname of the test helper program. - absTestHelper = hst.AbsPrivateTmp.Append("test-helper") - // fcTestHelper is the test helper bind mount. - fcTestHelper = fc(&hst.FSBind{ - Target: absTestHelper, - Source: check.MustAbs("/opt/test-helper/bin/tester"), - }) -) - -// register adds a test case to testCases. -func (c TestCase) register(name string) (_ struct{}) { - if testCases == nil { - testCases = make(map[string]TestCase) - } - - if _, ok := testCases[name]; ok { - panic("attempting to register " + strconv.Quote(name) + " twice") - } - testCases[name] = c - return -} - -// Get returns the named test case, or terminates the program if name is invalid. -func Get(name string) TestCase { - tc, ok := testCases[name] - if !ok { - log.Fatalf("invalid test case %q", name) - } - return tc -} - -// All returns an iterator over all named test cases. -func All() iter.Seq2[string, TestCase] { - return func(yield func(string, TestCase) bool) { - for name, tc := range testCases { - if !yield(name, tc) { - return - } - } - } -} diff --git a/test/sandbox/testdata/tty.go b/test/sandbox/testdata/tty.go deleted file mode 100644 index 4788f484..00000000 --- a/test/sandbox/testdata/tty.go +++ /dev/null @@ -1,145 +0,0 @@ -//go:build testsuite || tester - -package testdata - -import ( - "os" - - "hakurei.app/fhs" - "hakurei.app/hst" - "hakurei.app/test/internal/mountinfo" - "hakurei.app/test/internal/testsuite" -) - -var _ = TestCase{ - Hakurei: hst.Config{ - ID: "app.hakurei.sample.tty", - Enablements: new(hst.EWayland | hst.EPipeWire | hst.EDBus | hst.EX11), - Identity: 2, - - Container: &hst.ContainerConfig{ - Hostname: "hakurei-sample-tty", - - Filesystem: []hst.FilesystemConfigJSON{ - fcLinker, - fcLib, - fcTestHelper, - }, - - Username: "u0_a2", - Shell: fhs.AbsUsrBin.Append("bash"), - Home: hst.AbsPrivateTmp, - Path: absTestHelper, - Args: []string{"tester", "tty"}, - - Flags: hst.FHostNet | hst.FHostAbstract | - hst.FTty | hst.FShareRuntime, - }, - }, - - // 0, PresetExt | PresetDenyNS | PresetDenyDevel - Sum: sumTTY, - - Env: []string{ - "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/65534/bus", - "DISPLAY=:0", - "HOME=/.hakurei", - "SHELL=/usr/bin/bash", - "TERM=xterm", - "USER=u0_a2", - "WAYLAND_DISPLAY=wayland-0", - "XDG_RUNTIME_DIR=/run/user/65534", - "XDG_SESSION_CLASS=user", - "XDG_SESSION_TYPE=wayland", - "PULSE_SERVER=unix:/run/user/65534/pulse/native", - }, - - FS: &testsuite.FS{Dir: dir{ - ".hakurei": {Mode: os.ModeDir | 0755, Dir: dir{ - "test-helper": {Mode: 0755}, - }}, - - "dev": {Mode: os.ModeDir | 0755, Dir: dir{ - "core": {Mode: os.ModeSymlink | 0777}, - "fd": {Mode: os.ModeSymlink | 0777}, - "full": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "mqueue": {Mode: os.ModeDir | os.ModeSticky | 0777, Dir: dir{}}, - "null": {Mode: os.ModeDevice | os.ModeCharDevice | 0666, Data: new("")}, - "ptmx": {Mode: os.ModeSymlink | 0777}, - "pts": {Mode: os.ModeDir | 0755, Dir: dir{ - "ptmx": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - }}, - "random": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "shm": {Mode: os.ModeDir | os.ModeSticky | 0777, Dir: dir{}}, - "stderr": {Mode: os.ModeSymlink | 0777}, - "stdin": {Mode: os.ModeSymlink | 0777}, - "stdout": {Mode: os.ModeSymlink | 0777}, - "tty": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - "urandom": {Mode: os.ModeDevice | os.ModeCharDevice | 0444}, - "zero": {Mode: os.ModeDevice | os.ModeCharDevice | 0666}, - }}, - - "etc": {Mode: os.ModeDir | 0755, Dir: dir{ - "passwd": {Mode: 0600, - Data: new("u0_a2:x:65534:65534:Hakurei:/.hakurei:/usr/bin/bash\n")}, - "group": {Mode: 0600, - Data: new("hakurei:x:65534:\n")}, - }}, - - "lib64": {Mode: os.ModeDir | 0755, Dir: dir{ - "ld-linux-x86-64.so.2": {Mode: os.ModeSymlink | 0777}, - }}, - - "run": {Mode: os.ModeDir | 0755, Dir: dir{ - "user": {Mode: os.ModeDir | 0755, Dir: dir{ - "65534": {Mode: os.ModeDir | 0770, Dir: dir{ - "bus": {Mode: os.ModeSocket | 0775}, - "wayland-0": {Mode: os.ModeSocket | 070}, - "pulse": {Mode: os.ModeDir | 0700, Dir: dir{ - "native": {Mode: os.ModeSocket | 0777}, - }}, - }}, - }}, - }}, - - "tmp": {Mode: os.ModeDir | os.ModeSticky | 0777, Dir: dir{ - ".X11-unix": {Mode: os.ModeDir | 0755, Dir: dir{ - "X0": {Mode: os.ModeSocket | 0775}, - }}, - }}, - - "lib": {Mode: os.ModeDir | 0755}, - "proc": {Mode: os.ModeDir | 0555}, - }}, - - Mount: []*mountinfo.Entry{ - r("/sysroot", "/", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110001,gid=110001,inode64"), - r("/", "/proc", "rw,nosuid,nodev,noexec,relatime", "proc", "proc", "rw"), - r("/", "/.hakurei", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=4k,mode=755,uid=110001,gid=110001,inode64"), - r("/", "/dev", "ro,nosuid,nodev,relatime", "tmpfs", "devtmpfs", "rw,mode=755,uid=110001,gid=110001,inode64"), - r("/null", "/dev/null", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/zero", "/dev/zero", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/full", "/dev/full", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/random", "/dev/random", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/urandom", "/dev/urandom", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/tty", "/dev/tty", "rw,nosuid,noexec,relatime", "devtmpfs", "devtmpfs", ignore), - r("/", "/dev/pts", "rw,nosuid,noexec,relatime", "devpts", "devpts", "rw,mode=620,ptmxmode=666"), - r("/", "/dev/mqueue", "rw,nosuid,nodev,noexec,relatime", "mqueue", "mqueue", "rw"), - r("/", "/dev/shm", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,uid=110001,gid=110001,inode64"), - r("/", "/run/user", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,size=16384k,mode=755,uid=110001,gid=110001,inode64"), - r("/tmp/hakurei.0/runtime/2", "/run/user/65534", "rw,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/", "/tmp", "rw,nosuid,nodev,relatime", "tmpfs", "ephemeral", "rw,uid=110001,gid=110001,inode64"), - r(ignore, "/etc/passwd", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110001,gid=110001,inode64"), - r(ignore, "/etc/group", "ro,nosuid,nodev,relatime", "tmpfs", "rootfs", "rw,uid=110001,gid=110001,inode64"), - r(ignore, "/run/user/65534/wayland-0", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/tmp/.X11-unix", "/tmp/.X11-unix", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/65534/bus", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/usr/lib", "/lib", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r("/opt/test-helper/bin/tester", "/.hakurei/test-helper", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - r(ignore, "/run/user/65534/pulse/native", "ro,nosuid,nodev,relatime", "overlay", "overlay", ignore), - }, - - Seccomp: true, - - TrySocket: "/tmp/.X11-unix/X0", -}.register("tty") |
