65 lines
2.3 KiB
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)
|
|
}
|
|
}
|