proxy-pool/internal/loadgen/acceptance_test.go

65 lines
2.3 KiB
Go

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)
}
}