diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-21 21:59:07 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-22 19:27:31 +0900 |
| commit | 09d284498109b847da0da1e2c5f883268a7f2d46 (patch) | |
| tree | 3784dee4b4e4ec97a95cb222c70d05463ae640ef /container/initsymlink_test.go | |
| parent | d500d6e55917e12a3f98b39cf0d29b6c96de9667 (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.go | 48 |
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}, |
