aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-10-16 02:08:31 +0900
committerOphestra <cat@gensokyo.uk>2025-10-16 02:08:31 +0900
commit6cf58ca1b31458611f493dbc24188980a179ed1c (patch)
treef0535d156c4c53a92d620c6d2e26580c400f28f1 /internal
parent425421d9b1641036d300dc965e597ec6c7648537 (diff)
internal/app/spfinal: check behaviour
This will be merged with spFilesystemOp eventually. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal')
-rw-r--r--internal/app/spfinal_test.go65
1 files changed, 65 insertions, 0 deletions
diff --git a/internal/app/spfinal_test.go b/internal/app/spfinal_test.go
new file mode 100644
index 00000000..1683d92a
--- /dev/null
+++ b/internal/app/spfinal_test.go
@@ -0,0 +1,65 @@
+package app
+
+import (
+ "syscall"
+ "testing"
+
+ "hakurei.app/container"
+ "hakurei.app/container/fhs"
+ "hakurei.app/container/stub"
+ "hakurei.app/hst"
+ "hakurei.app/system"
+ "hakurei.app/system/acl"
+)
+
+func TestSpFinalOp(t *testing.T) {
+ checkOpBehaviour(t, []opBehaviourTestCase{
+ {"nil extra invalid env", func(bool, bool) outcomeOp {
+ return spFinalOp{}
+ }, func() *hst.Config {
+ c := hst.Template()
+ // verify nil check behaviour
+ c.ExtraPerms = append(c.ExtraPerms, hst.ExtraPermConfig{})
+ // verify toContainer behaviour
+ c.Container.Env["="] = "\x00"
+ return c
+ }, nil, []stub.Call{
+ // this op configures the system state and does not make calls during toSystem
+ }, newI().
+ Ensure(m("/var/lib/hakurei/u0"), 0700).
+ UpdatePermType(system.User, m("/var/lib/hakurei/u0"),
+ acl.Execute).
+ UpdatePermType(system.User, m("/var/lib/hakurei/u0/org.chromium.Chromium"),
+ acl.Read, acl.Write, acl.Execute), nil, nil, func(state *outcomeStateParams) {
+ state.params.Ops = new(container.Ops)
+ }, []stub.Call{
+ // this op configures the container state and does not make calls during toContainer
+ }, nil, nil, &hst.AppError{
+ Step: "flatten environment",
+ Err: syscall.EINVAL,
+ Msg: "invalid environment variable =",
+ }},
+
+ {"success", func(bool, bool) outcomeOp {
+ return spFinalOp{}
+ }, hst.Template, nil, []stub.Call{
+ // this op configures the system state and does not make calls during toSystem
+ }, newI().
+ Ensure(m("/var/lib/hakurei/u0"), 0700).
+ UpdatePermType(system.User, m("/var/lib/hakurei/u0"),
+ acl.Execute).
+ UpdatePermType(system.User, m("/var/lib/hakurei/u0/org.chromium.Chromium"),
+ acl.Read, acl.Write, acl.Execute), nil, nil, func(state *outcomeStateParams) {
+ state.params.Ops = new(container.Ops)
+ }, []stub.Call{
+ // this op configures the container state and does not make calls during toContainer
+ }, &container.Params{
+ Env: []string{
+ "GOOGLE_API_KEY=AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY",
+ "GOOGLE_DEFAULT_CLIENT_ID=77185425430.apps.googleusercontent.com",
+ "GOOGLE_DEFAULT_CLIENT_SECRET=OTJgUOQcT7lO7GsGZq2G4IlT",
+ },
+ Ops: new(container.Ops).Remount(fhs.AbsRoot, syscall.MS_RDONLY),
+ }, nil, nil},
+ })
+}