diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-22 16:25:00 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-22 16:25:00 +0300 |
| commit | d300847a794fd9cc823747320d53422880072b3b (patch) | |
| tree | 394e2d6455b041e1ca1a6c975c1efd67a9619e69 /internal/generate/classify_test.go | |
| parent | 88b9ea74d880207c8af46b3defc03a0777293a83 (diff) | |
3c table-drive name-only syscall classification
Diffstat (limited to 'internal/generate/classify_test.go')
| -rw-r--r-- | internal/generate/classify_test.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/internal/generate/classify_test.go b/internal/generate/classify_test.go index ece25c6..618274a 100644 --- a/internal/generate/classify_test.go +++ b/internal/generate/classify_test.go @@ -1678,6 +1678,77 @@ func TestClassifyFormatNoExternalFields(t *testing.T) { } } +func TestClassifyNameOnlyTables(t *testing.T) { + tests := []struct { + name string + want TracepointKind + }{ + {"sys_enter_open_by_handle_at", KindOpenByHandleAt}, + {"sys_exit_socketpair", KindSocketpair}, + {"sys_enter_pidfd_open", KindPidfd}, + {"sys_enter_epoll_ctl", KindEpollCtl}, + {"sys_enter_perf_event_open", KindPerfOpen}, + {"sys_enter_futex", KindFutex}, + {"sys_enter_clone", KindProc}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + r, ok := classifyNameOnly(tt.name) + if !ok { + t.Fatalf("classifyNameOnly(%q) did not match", tt.name) + } + if r.Kind != tt.want { + t.Fatalf("classifyNameOnly(%q) kind = %d, want %d", tt.name, r.Kind, tt.want) + } + }) + } +} + +func TestClassifyNameOnlyPrefixKinds(t *testing.T) { + r, ok := classifyNameOnly("sys_enter_io_destroy") + if !ok { + t.Fatal("classifyNameOnly(sys_enter_io_destroy) did not match prefix metadata") + } + if r.Kind != KindNull { + t.Fatalf("classifyNameOnly(sys_enter_io_destroy) kind = %d, want KindNull", r.Kind) + } + + r, ok = classifyNameOnly("sys_enter_io_uring_enter") + if !ok { + t.Fatal("classifyNameOnly(sys_enter_io_uring_enter) did not match exact metadata") + } + if r.Kind != KindFd { + t.Fatalf("classifyNameOnly(sys_enter_io_uring_enter) kind = %d, want KindFd", r.Kind) + } +} + +func TestClassifyNameOnlyUnknown(t *testing.T) { + if r, ok := classifyNameOnly("sys_enter_not_real"); ok { + t.Fatalf("classifyNameOnly matched unknown syscall with kind %d", r.Kind) + } +} + +func TestNameOnlyKindMetadataIsValid(t *testing.T) { + for name, kind := range nameOnlyKindsTable { + if name == "" { + t.Fatal("nameOnlyKindsTable contains an empty syscall name") + } + if kind == KindNone { + t.Fatalf("nameOnlyKindsTable[%q] = KindNone", name) + } + } + + for _, prefixKind := range nameOnlyPrefixKinds { + if prefixKind.prefix == "" { + t.Fatal("nameOnlyPrefixKinds contains an empty prefix") + } + if prefixKind.kind == KindNone { + t.Fatalf("nameOnlyPrefixKinds[%q] = KindNone", prefixKind.prefix) + } + } +} + func TestIsFdTypeNonMatch(t *testing.T) { nonFdTypes := []string{ "const char *", |
