summaryrefslogtreecommitdiff
path: root/internal/ior_mode_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-08 20:16:56 +0200
committerPaul Buetow <paul@buetow.org>2026-03-08 20:16:56 +0200
commit83ff18252be5ad4d667084a3a6edbf7cd5271e6b (patch)
treee85454f7e8d4243de1d2eb1e75b20f499ec421e1 /internal/ior_mode_test.go
parent4acb116d78588489e79b7e17a79d4609a32fbba7 (diff)
task 368: filter live pairs before TUI ingestion
Diffstat (limited to 'internal/ior_mode_test.go')
-rw-r--r--internal/ior_mode_test.go39
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" {