From 09d284498109b847da0da1e2c5f883268a7f2d46 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Thu, 21 Aug 2025 21:59:07 +0900 Subject: 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 --- container/initsymlink_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'container/initsymlink_test.go') 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}, -- cgit v1.3.1