From cd5959fe5ab04786cd5dee3cf09f725229ae7c7b Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 17 Mar 2026 13:35:48 +0900 Subject: ext: isolate from container/std These are too general to belong in the container package. This targets the v0.4 release to reduce the wrapper maintenance burden. Signed-off-by: Ophestra --- ext/ext_test.go | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 ext/ext_test.go (limited to 'ext/ext_test.go') diff --git a/ext/ext_test.go b/ext/ext_test.go new file mode 100644 index 00000000..e6d7f579 --- /dev/null +++ b/ext/ext_test.go @@ -0,0 +1,62 @@ +package ext_test + +import ( + "encoding/json" + "errors" + "math" + "reflect" + "testing" + + "hakurei.app/ext" +) + +func TestSyscall(t *testing.T) { + t.Parallel() + + testCases := []struct { + name string + data string + want ext.SyscallNum + err error + }{ + {"epoll_create1", `"epoll_create1"`, ext.SNR_EPOLL_CREATE1, nil}, + {"clone3", `"clone3"`, ext.SNR_CLONE3, nil}, + + {"oob", `-2147483647`, -math.MaxInt32, + &json.UnmarshalTypeError{Value: "number", Type: reflect.TypeFor[string](), Offset: 11}}, + {"name", `"nonexistent_syscall"`, -math.MaxInt32, + ext.SyscallNameError("nonexistent_syscall")}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + t.Run("decode", func(t *testing.T) { + var got ext.SyscallNum + if err := json.Unmarshal([]byte(tc.data), &got); !reflect.DeepEqual(err, tc.err) { + t.Fatalf("Unmarshal: error = %#v, want %#v", err, tc.err) + } else if err == nil && got != tc.want { + t.Errorf("Unmarshal: %v, want %v", got, tc.want) + } + }) + if errors.As(tc.err, new(ext.SyscallNameError)) { + return + } + + t.Run("encode", func(t *testing.T) { + if got, err := json.Marshal(&tc.want); err != nil { + t.Fatalf("Marshal: error = %v", err) + } else if string(got) != tc.data { + t.Errorf("Marshal: %s, want %s", string(got), tc.data) + } + }) + }) + } + + t.Run("error", func(t *testing.T) { + const want = `invalid syscall name "\x00"` + if got := ext.SyscallNameError("\x00").Error(); got != want { + t.Fatalf("Error: %q, want %q", got, want) + } + }) +} -- cgit v1.3.1