container/std: relocate rule types
All checks were successful
Test / Create distribution (push) Successful in 33s
Test / Sandbox (push) Successful in 2m10s
Test / Hakurei (push) Successful in 3m13s
Test / Hpkg (push) Successful in 3m56s
Test / Sandbox (race detector) (push) Successful in 4m14s
Test / Hakurei (race detector) (push) Successful in 5m3s
Test / Flake checks (push) Successful in 1m28s
All checks were successful
Test / Create distribution (push) Successful in 33s
Test / Sandbox (push) Successful in 2m10s
Test / Hakurei (push) Successful in 3m13s
Test / Hpkg (push) Successful in 3m56s
Test / Sandbox (race detector) (push) Successful in 4m14s
Test / Hakurei (race detector) (push) Successful in 5m3s
Test / Flake checks (push) Successful in 1m28s
This enables its use in hst for #15. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
63
container/seccomp/std_test.go
Normal file
63
container/seccomp/std_test.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package seccomp
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
"unsafe"
|
||||
|
||||
"hakurei.app/container/std"
|
||||
)
|
||||
|
||||
func TestSyscallResolveName(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
for name, want := range std.Syscalls() {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// this checks the std implementation against libseccomp.
|
||||
if got, ok := syscallResolveName(name); !ok || got != want {
|
||||
t.Errorf("syscallResolveName(%q) = %d, want %d", name, got, want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRuleType(t *testing.T) {
|
||||
assertKind[std.ScmpUint, scmpUint](t)
|
||||
assertKind[std.ScmpInt, scmpInt](t)
|
||||
|
||||
assertSize[std.NativeRule, syscallRule](t)
|
||||
assertKind[std.ScmpDatum, scmpDatum](t)
|
||||
assertKind[std.ScmpCompare, scmpCompare](t)
|
||||
assertSize[std.ScmpArgCmp, scmpArgCmp](t)
|
||||
}
|
||||
|
||||
// assertSize asserts that native and equivalent are of the same size.
|
||||
func assertSize[native, equivalent any](t *testing.T) {
|
||||
t.Helper()
|
||||
|
||||
got, want := unsafe.Sizeof(*new(native)), unsafe.Sizeof(*new(equivalent))
|
||||
if got != want {
|
||||
t.Fatalf("%s: %d, want %d", reflect.TypeFor[native]().Name(), got, want)
|
||||
}
|
||||
}
|
||||
|
||||
// assertKind asserts that native and equivalent are of the same kind.
|
||||
func assertKind[native, equivalent any](t *testing.T) {
|
||||
t.Helper()
|
||||
|
||||
assertSize[native, equivalent](t)
|
||||
nativeType, equivalentType := reflect.TypeFor[native](), reflect.TypeFor[equivalent]()
|
||||
got, want := nativeType.Kind(), equivalentType.Kind()
|
||||
|
||||
if got == reflect.Invalid || want == reflect.Invalid {
|
||||
t.Fatalf("%s: invalid call to assertKind", nativeType.Name())
|
||||
}
|
||||
if got == reflect.Struct {
|
||||
t.Fatalf("%s: struct is unsupported by assertKind", nativeType.Name())
|
||||
}
|
||||
if got != want {
|
||||
t.Fatalf("%s: %s, want %s", nativeType.Name(), nativeType.Kind(), equivalentType.Kind())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user