summaryrefslogtreecommitdiff
path: root/internal/flags/flags_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-13 10:22:29 +0300
committerPaul Buetow <paul@buetow.org>2026-05-13 10:22:29 +0300
commit5856360a696b958a4c5c57cf512c5a04f0cfd66f (patch)
tree16a37002ac98f65429f7089b918b3f12c3047296 /internal/flags/flags_test.go
parent7c15d6058cf56e8c7801259f1f842a3a010c5f41 (diff)
fix: reject negative and zero -duration flag values with a clear error
A negative or zero -duration was silently accepted, causing the trace context to be cancelled immediately (time.Duration(N) * time.Second with N <= 0 yields a non-positive timeout), so no events were ever captured. parseFromFlagSet now returns an error for Duration <= 0, matching the existing pattern used for -resetTimer validation. Three new tests cover the negative, zero, and valid positive cases. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/flags/flags_test.go')
-rw-r--r--internal/flags/flags_test.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/internal/flags/flags_test.go b/internal/flags/flags_test.go
index 1630554..d4697d6 100644
--- a/internal/flags/flags_test.go
+++ b/internal/flags/flags_test.go
@@ -191,3 +191,67 @@ func TestParseResetTimerNegativeReturnsError(t *testing.T) {
t.Fatalf("unexpected error: %v", err)
}
}
+
+func TestParseDurationNegativeReturnsError(t *testing.T) {
+ _, err := parseForTest(t, "-duration", "-1")
+ if err == nil {
+ t.Fatalf("expected parse error for negative duration")
+ }
+ if !strings.Contains(err.Error(), "invalid duration") {
+ t.Fatalf("unexpected error: %v", err)
+ }
+}
+
+func TestParseDurationZeroReturnsError(t *testing.T) {
+ _, err := parseForTest(t, "-duration", "0")
+ if err == nil {
+ t.Fatalf("expected parse error for zero duration")
+ }
+ if !strings.Contains(err.Error(), "invalid duration") {
+ t.Fatalf("unexpected error: %v", err)
+ }
+}
+
+func TestParseDurationPositiveAccepted(t *testing.T) {
+ cfg, err := parseForTest(t, "-duration", "60")
+ if err != nil {
+ t.Fatalf("parse returned unexpected error: %v", err)
+ }
+ if cfg.Duration != 60 {
+ t.Fatalf("duration = %d, want 60", cfg.Duration)
+ }
+}
+
+func TestParseNegativeMapSizeReturnsError(t *testing.T) {
+ // A negative mapSize wraps to a huge uint32 when cast in resizeBPFMaps,
+ // causing a confusing BPF load failure. Parse must catch it early.
+ _, err := parseForTest(t, "-mapSize", "-1")
+ if err == nil {
+ t.Fatalf("expected parse error for negative mapSize")
+ }
+ if !strings.Contains(err.Error(), "invalid mapSize") {
+ t.Fatalf("unexpected error: %v", err)
+ }
+}
+
+func TestParseZeroMapSizeReturnsError(t *testing.T) {
+ // A zero mapSize would allocate an empty BPF ring buffer, which is
+ // equally invalid. Parse must catch it early.
+ _, err := parseForTest(t, "-mapSize", "0")
+ if err == nil {
+ t.Fatalf("expected parse error for zero mapSize")
+ }
+ if !strings.Contains(err.Error(), "invalid mapSize") {
+ t.Fatalf("unexpected error: %v", err)
+ }
+}
+
+func TestParsePositiveMapSizeAccepted(t *testing.T) {
+ cfg, err := parseForTest(t, "-mapSize", "8192")
+ if err != nil {
+ t.Fatalf("parse returned unexpected error: %v", err)
+ }
+ if cfg.EventMapSize != 8192 {
+ t.Fatalf("EventMapSize = %d, want 8192", cfg.EventMapSize)
+ }
+}