aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-10-19 01:00:12 +0900
committerOphestra <cat@gensokyo.uk>2025-10-19 01:00:12 +0900
commit543bf69102215d7c041dac39418ea96d4441cf8f (patch)
tree1282655be473f49ae603d82b411e628140aa8b90
parent4cfb1fda8f07045f50a8e6d0f1c5469e3fa3e269 (diff)
internal/app/spx11: check behaviour
This outcomeOp will likely never change. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/app/spx11_test.go119
1 files changed, 119 insertions, 0 deletions
diff --git a/internal/app/spx11_test.go b/internal/app/spx11_test.go
new file mode 100644
index 00000000..0486a1e0
--- /dev/null
+++ b/internal/app/spx11_test.go
@@ -0,0 +1,119 @@
+package app
+
+import (
+ "os"
+ "testing"
+
+ "hakurei.app/container"
+ "hakurei.app/container/stub"
+ "hakurei.app/hst"
+ "hakurei.app/system/acl"
+)
+
+func TestSpX11Op(t *testing.T) {
+ t.Parallel()
+ config := hst.Template()
+
+ checkOpBehaviour(t, []opBehaviourTestCase{
+ {"not enabled", func(bool, bool) outcomeOp {
+ return new(spX11Op)
+ }, hst.Template, nil, nil, nil, nil, errNotEnabled, nil, nil, nil, nil, nil},
+
+ {"lookupEnv", func(bool, bool) outcomeOp {
+ return new(spX11Op)
+ }, func() *hst.Config {
+ c := hst.Template()
+ *c.Enablements |= hst.Enablements(hst.EX11)
+ return c
+ }, nil, []stub.Call{
+ call("lookupEnv", stub.ExpectArgs{"DISPLAY"}, nil, nil),
+ }, nil, nil, &hst.AppError{
+ Step: "finalise",
+ Err: os.ErrInvalid,
+ Msg: "DISPLAY is not set",
+ }, nil, nil, nil, nil, nil},
+
+ {"abs stat", func(bool, bool) outcomeOp {
+ return new(spX11Op)
+ }, func() *hst.Config {
+ c := hst.Template()
+ *c.Enablements |= hst.Enablements(hst.EX11)
+ return c
+ }, nil, []stub.Call{
+ call("lookupEnv", stub.ExpectArgs{"DISPLAY"}, "unix:/tmp/.X11-unix/X0", nil),
+ call("stat", stub.ExpectArgs{"/tmp/.X11-unix/X0"}, (*stubFi)(nil), stub.UniqueError(0)),
+ }, nil, nil, &hst.AppError{
+ Step: `access X11 socket "/tmp/.X11-unix/X0"`,
+ Err: stub.UniqueError(0),
+ }, nil, nil, nil, nil, nil},
+
+ {"success abs nonexistent", func(isShim, _ bool) outcomeOp {
+ if !isShim {
+ return new(spX11Op)
+ }
+ return &spX11Op{Display: "unix:/tmp/.X11-unix/X0"}
+ }, func() *hst.Config {
+ c := hst.Template()
+ *c.Enablements |= hst.Enablements(hst.EX11)
+ return c
+ }, nil, []stub.Call{
+ call("lookupEnv", stub.ExpectArgs{"DISPLAY"}, "unix:/tmp/.X11-unix/X0", nil),
+ call("stat", stub.ExpectArgs{"/tmp/.X11-unix/X0"}, (*stubFi)(nil), os.ErrNotExist),
+ }, newI().
+ ChangeHosts("#1000009"), nil, nil, insertsOps(nil), []stub.Call{
+ // this op configures the container state and does not make calls during toContainer
+ }, &container.Params{
+ Ops: new(container.Ops).
+ Bind(absX11SocketDir, absX11SocketDir, 0),
+ }, paramsWantEnv(config, map[string]string{
+ "DISPLAY": "unix:/tmp/.X11-unix/X0",
+ }, nil), nil},
+
+ {"success abs abstract", func(isShim, _ bool) outcomeOp {
+ if !isShim {
+ return new(spX11Op)
+ }
+ return &spX11Op{Display: "unix:/tmp/.X11-unix/X0"}
+ }, func() *hst.Config {
+ c := hst.Template()
+ *c.Enablements |= hst.Enablements(hst.EX11)
+ c.Container.Flags &= ^hst.FHostAbstract
+ return c
+ }, nil, []stub.Call{
+ call("lookupEnv", stub.ExpectArgs{"DISPLAY"}, "unix:/tmp/.X11-unix/X0", nil),
+ call("stat", stub.ExpectArgs{"/tmp/.X11-unix/X0"}, (*stubFi)(nil), nil),
+ }, newI().
+ UpdatePermType(hst.EX11, m("/tmp/.X11-unix/X0"), acl.Read, acl.Write, acl.Execute).
+ ChangeHosts("#1000009"), nil, nil, insertsOps(nil), []stub.Call{
+ // this op configures the container state and does not make calls during toContainer
+ }, &container.Params{
+ Ops: new(container.Ops).
+ Bind(absX11SocketDir, absX11SocketDir, 0),
+ }, paramsWantEnv(config, map[string]string{
+ "DISPLAY": "unix:/tmp/.X11-unix/X0",
+ }, nil), nil},
+
+ {"success", func(isShim, _ bool) outcomeOp {
+ if !isShim {
+ return new(spX11Op)
+ }
+ return &spX11Op{Display: ":0"}
+ }, func() *hst.Config {
+ c := hst.Template()
+ *c.Enablements |= hst.Enablements(hst.EX11)
+ return c
+ }, nil, []stub.Call{
+ call("lookupEnv", stub.ExpectArgs{"DISPLAY"}, ":0", nil),
+ call("stat", stub.ExpectArgs{"/tmp/.X11-unix/X0"}, (*stubFi)(nil), nil),
+ }, newI().
+ UpdatePermType(hst.EX11, m("/tmp/.X11-unix/X0"), acl.Read, acl.Write, acl.Execute).
+ ChangeHosts("#1000009"), nil, nil, insertsOps(nil), []stub.Call{
+ // this op configures the container state and does not make calls during toContainer
+ }, &container.Params{
+ Ops: new(container.Ops).
+ Bind(absX11SocketDir, absX11SocketDir, 0),
+ }, paramsWantEnv(config, map[string]string{
+ "DISPLAY": ":0",
+ }, nil), nil},
+ })
+}