diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-08 20:16:56 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-08 20:16:56 +0200 |
| commit | 83ff18252be5ad4d667084a3a6edbf7cd5271e6b (patch) | |
| tree | e85454f7e8d4243de1d2eb1e75b20f499ec421e1 /internal/ior_mode_test.go | |
| parent | 4acb116d78588489e79b7e17a79d4609a32fbba7 (diff) | |
task 368: filter live pairs before TUI ingestion
Diffstat (limited to 'internal/ior_mode_test.go')
| -rw-r--r-- | internal/ior_mode_test.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/internal/ior_mode_test.go b/internal/ior_mode_test.go index fef3125..4140485 100644 --- a/internal/ior_mode_test.go +++ b/internal/ior_mode_test.go @@ -9,9 +9,12 @@ import ( "testing/synctest" "time" + "ior/internal/event" + "ior/internal/file" "ior/internal/flags" "ior/internal/globalfilter" "ior/internal/tui" + "ior/internal/types" ) func TestShouldRunTraceMode(t *testing.T) { @@ -472,6 +475,42 @@ func TestTuiTraceStarterFromRunTraceUsesContextFilters(t *testing.T) { } } +func TestShouldIngestTracePairAppliesFullGlobalFilter(t *testing.T) { + pair := &event.Pair{ + EnterEv: &types.RetEvent{TraceId: types.SYS_ENTER_READ, Pid: 1234, Tid: 1235}, + ExitEv: &types.RetEvent{TraceId: types.SYS_EXIT_READ, Pid: 1234, Tid: 1235, Ret: -1}, + Comm: "nginx", + File: file.NewFd(7, "/var/log/access.log", 0), + Duration: 1_500_000, + DurationToPrev: 12_000, + Bytes: 4_096, + } + + filter := globalfilter.Filter{ + Syscall: &globalfilter.StringFilter{Pattern: "rea"}, + Comm: &globalfilter.StringFilter{Pattern: "ngi"}, + File: &globalfilter.StringFilter{Pattern: "access"}, + PID: &globalfilter.NumericFilter{Op: globalfilter.OpEq, Value: 1234}, + TID: &globalfilter.NumericFilter{Op: globalfilter.OpEq, Value: 1235}, + FD: &globalfilter.NumericFilter{Op: globalfilter.OpEq, Value: 7}, + LatencyNs: &globalfilter.NumericFilter{Op: globalfilter.OpGt, Value: 1_000_000}, + GapNs: &globalfilter.NumericFilter{Op: globalfilter.OpLte, Value: 12_000}, + Bytes: &globalfilter.NumericFilter{Op: globalfilter.OpLt, Value: 8_192}, + RetVal: &globalfilter.NumericFilter{Op: globalfilter.OpEq, Value: -1}, + ErrorsOnly: true, + } + + if !shouldIngestTracePair(filter, pair) { + t.Fatalf("expected full filter to accept matching pair") + } + if shouldIngestTracePair(globalfilter.Filter{Syscall: &globalfilter.StringFilter{Pattern: "write"}}, pair) { + t.Fatalf("expected syscall mismatch to reject pair") + } + if shouldIngestTracePair(globalfilter.Filter{FD: &globalfilter.NumericFilter{Op: globalfilter.OpEq, Value: 99}}, pair) { + t.Fatalf("expected fd mismatch to reject pair") + } +} + func TestProfilingFilesForMode(t *testing.T) { cpu, mem, execTrace, duration := profilingFilesForMode(false) if cpu != "ior.cpuprofile" || mem != "ior.memprofile" { |
