package loadgen import ( "math" "strings" "testing" "time" ) func TestEvaluateAcceptancePassesWithinConfiguredThresholds(t *testing.T) { report := Report{ Completed: 100, Failed: 1, Latency: LatencyReport{Samples: 100, P99UpperBound: 80 * time.Millisecond}, } result, err := EvaluateAcceptance(report, AcceptanceCriteria{ EnforceFailureRate: true, MaxFailureRate: 0.02, EnforceP99Latency: true, MaxP99Latency: 100 * time.Millisecond, }) if err != nil || !result.Passed || result.FailureRate != 0.01 || len(result.Violations) != 0 { t.Fatalf("EvaluateAcceptance() = (%+v, %v)", result, err) } } func TestEvaluateAcceptanceReportsEveryBreachedThreshold(t *testing.T) { report := Report{ Completed: 10, Failed: 2, Latency: LatencyReport{Samples: 10, P99UpperBound: 250 * time.Millisecond}, } result, err := EvaluateAcceptance(report, AcceptanceCriteria{ EnforceFailureRate: true, MaxFailureRate: 0.1, EnforceP99Latency: true, MaxP99Latency: 100 * time.Millisecond, }) if err != nil || result.Passed || result.FailureRate != 0.2 || len(result.Violations) != 2 || !strings.Contains(result.Violations[0], "failure rate") || !strings.Contains(result.Violations[1], "p99 latency") { t.Fatalf("EvaluateAcceptance() = (%+v, %v)", result, err) } } func TestEvaluateAcceptanceRejectsInvalidCriteriaAndEmptyMeasurements(t *testing.T) { if _, err := EvaluateAcceptance(Report{}, AcceptanceCriteria{EnforceFailureRate: true, MaxFailureRate: 1.1}); err == nil { t.Fatal("EvaluateAcceptance() accepted failure rate above one") } if _, err := EvaluateAcceptance(Report{}, AcceptanceCriteria{EnforceP99Latency: true, MaxP99Latency: 0}); err == nil { t.Fatal("EvaluateAcceptance() accepted zero p99 limit") } for _, value := range []float64{math.NaN(), math.Inf(1)} { if _, err := EvaluateAcceptance(Report{}, AcceptanceCriteria{EnforceFailureRate: true, MaxFailureRate: value}); err == nil { t.Fatalf("EvaluateAcceptance() accepted non-finite failure rate %v", value) } } result, err := EvaluateAcceptance(Report{}, AcceptanceCriteria{EnforceFailureRate: true, MaxFailureRate: 0}) if err != nil || result.Passed || len(result.Violations) != 1 || !strings.Contains(result.Violations[0], "no completed requests") { t.Fatalf("EvaluateAcceptance(empty) = (%+v, %v)", result, err) } }