aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/initsymlink_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-08-21 21:59:07 +0900
committerOphestra <cat@gensokyo.uk>2025-08-22 19:27:31 +0900
commit09d284498109b847da0da1e2c5f883268a7f2d46 (patch)
tree3784dee4b4e4ec97a95cb222c70d05463ae640ef /container/initsymlink_test.go
parentd500d6e55917e12a3f98b39cf0d29b6c96de9667 (diff)
container/init: wrap syscall helper functions
This allows tests to stub all kernel behaviour, enabling measurement of all function call arguments and error injection. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'container/initsymlink_test.go')
-rw-r--r--container/initsymlink_test.go48
1 files changed, 47 insertions, 1 deletions
diff --git a/container/initsymlink_test.go b/container/initsymlink_test.go
index 4ae2da86..1bd0589e 100644
--- a/container/initsymlink_test.go
+++ b/container/initsymlink_test.go
@@ -1,8 +1,54 @@
package container
-import "testing"
+import (
+ "io/fs"
+ "os"
+ "testing"
+)
func TestSymlinkOp(t *testing.T) {
+ checkOpBehaviour(t, []opBehaviourTestCase{
+ {"mkdir", &Params{ParentPerm: 0700}, &SymlinkOp{
+ Target: MustAbs("/etc/nixos"),
+ LinkName: "/etc/static/nixos",
+ }, nil, nil, []kexpect{
+ {"mkdirAll", expectArgs{"/sysroot/etc", os.FileMode(0700)}, nil, errUnique},
+ }, wrapErrSelf(errUnique)},
+
+ {"abs", &Params{ParentPerm: 0755}, &SymlinkOp{
+ Target: MustAbs("/etc/mtab"),
+ LinkName: "etc/mtab",
+ Dereference: true,
+ }, nil, msg.WrapErr(fs.ErrInvalid, `path "etc/mtab" is not absolute`), nil, nil},
+
+ {"readlink", &Params{ParentPerm: 0755}, &SymlinkOp{
+ Target: MustAbs("/etc/mtab"),
+ LinkName: "/etc/mtab",
+ Dereference: true,
+ }, []kexpect{
+ {"readlink", expectArgs{"/etc/mtab"}, "/proc/mounts", errUnique},
+ }, wrapErrSelf(errUnique), nil, nil},
+
+ {"success noderef", &Params{ParentPerm: 0700}, &SymlinkOp{
+ Target: MustAbs("/etc/nixos"),
+ LinkName: "/etc/static/nixos",
+ }, nil, nil, []kexpect{
+ {"mkdirAll", expectArgs{"/sysroot/etc", os.FileMode(0700)}, nil, nil},
+ {"symlink", expectArgs{"/etc/static/nixos", "/sysroot/etc/nixos"}, nil, nil},
+ }, nil},
+
+ {"success", &Params{ParentPerm: 0755}, &SymlinkOp{
+ Target: MustAbs("/etc/mtab"),
+ LinkName: "/etc/mtab",
+ Dereference: true,
+ }, []kexpect{
+ {"readlink", expectArgs{"/etc/mtab"}, "/proc/mounts", nil},
+ }, nil, []kexpect{
+ {"mkdirAll", expectArgs{"/sysroot/etc", os.FileMode(0755)}, nil, nil},
+ {"symlink", expectArgs{"/proc/mounts", "/sysroot/etc/mtab"}, nil, nil},
+ }, nil},
+ })
+
checkOpsValid(t, []opValidTestCase{
{"nil", (*SymlinkOp)(nil), false},
{"zero", new(SymlinkOp), false},