summaryrefslogtreecommitdiff
path: root/internal/generate/classify_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-22 16:25:00 +0300
committerPaul Buetow <paul@buetow.org>2026-05-22 16:25:00 +0300
commitd300847a794fd9cc823747320d53422880072b3b (patch)
tree394e2d6455b041e1ca1a6c975c1efd67a9619e69 /internal/generate/classify_test.go
parent88b9ea74d880207c8af46b3defc03a0777293a83 (diff)
3c table-drive name-only syscall classification
Diffstat (limited to 'internal/generate/classify_test.go')
-rw-r--r--internal/generate/classify_test.go71
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 *",