@@ -21,6 +21,58 @@ func TestSummarizeValues(t *testing.T) {
2121 }
2222}
2323
24+ func TestWriteScenarioBaselineRequiresMinimumSuccessfulSamples (t * testing.T ) {
25+ t .Parallel ()
26+
27+ opts := defaultOptions ("capture" )
28+ opts .BaselineDir = t .TempDir ()
29+ opts .MinimumSuccessfulSamples = 2
30+ scenario := scenarioSpec {
31+ Name : "lifecycle-convergence" ,
32+ Primary : []string {metricClusterAvailableSeconds },
33+ }
34+ samples := []sampleDocument {
35+ {
36+ Version : versionV2 ,
37+ Scenario : scenario .Name ,
38+ Sample : 1 ,
39+ Status : sampleStatusPass ,
40+ Environment : runEnvironment {Commit : "abc123" },
41+ Measurements : map [string ]float64 {
42+ metricClusterAvailableSeconds : 30 ,
43+ },
44+ },
45+ {
46+ Version : versionV2 ,
47+ Scenario : scenario .Name ,
48+ Sample : 2 ,
49+ Status : sampleStatusScenarioError ,
50+ Error : "setup failed" ,
51+ Measurements : map [string ]float64 {},
52+ },
53+ }
54+
55+ err := writeScenarioBaseline (opts , scenario , samples )
56+ if err == nil {
57+ t .Fatalf ("expected minimum successful sample error" )
58+ }
59+ if ! strings .Contains (err .Error (), "produced 1 passing measured samples, need at least 2" ) {
60+ t .Fatalf ("unexpected error: %v" , err )
61+ }
62+
63+ opts .MinimumSuccessfulSamples = 1
64+ if err := writeScenarioBaseline (opts , scenario , samples ); err != nil {
65+ t .Fatalf ("write baseline with enough samples: %v" , err )
66+ }
67+ doc , err := readScenarioBaseline (opts , scenario .Name )
68+ if err != nil {
69+ t .Fatalf ("read baseline: %v" , err )
70+ }
71+ if got := len (doc .Samples [metricClusterAvailableSeconds ]); got != 1 {
72+ t .Fatalf ("baseline sample count = %d, want 1" , got )
73+ }
74+ }
75+
2476func TestCompareMeasurementsRequiresAbsoluteAndRelativeRegression (t * testing.T ) {
2577 current := map [string ]measurementSummary {
2678 metricSampleTotalSeconds : {Median : 125 , UpperSample : 125 , Min : 125 , Max : 125 , Count : 3 },
0 commit comments