@@ -22,6 +22,64 @@ type BasicData struct {
2222 GeneratorConfigs map [string ]* wasp.Config `json:"generator_configs"`
2323}
2424
25+ func MustNewBasicData (commitOrTag string , generators ... * wasp.Generator ) BasicData {
26+ b , err := NewBasicData (commitOrTag , generators ... )
27+ if err != nil {
28+ panic (err )
29+ }
30+
31+ return * b
32+ }
33+
34+ func NewBasicData (commitOrTag string , generators ... * wasp.Generator ) (* BasicData , error ) {
35+ if len (generators ) == 0 {
36+ return nil , errors .New ("at least one generator is required" )
37+ }
38+
39+ if generators [0 ].Cfg .T == nil {
40+ return nil , errors .New ("generators are not associated with a testing.T instance. Please set it as generator.Cfg.T and try again" )
41+ }
42+
43+ b := & BasicData {
44+ TestName : generators [0 ].Cfg .T .Name (),
45+ CommitOrTag : commitOrTag ,
46+ GeneratorConfigs : make (map [string ]* wasp.Config ),
47+ }
48+
49+ for _ , g := range generators {
50+ b .GeneratorConfigs [g .Cfg .GenName ] = g .Cfg
51+ }
52+
53+ return b , nil
54+ }
55+
56+ func (b * BasicData ) FillStartEndTimes () error {
57+ earliestTime := time .Now ()
58+ var latestTime time.Time
59+
60+ for _ , cfg := range b .GeneratorConfigs {
61+ for _ , segment := range cfg .Schedule {
62+ if segment .StartTime .IsZero () {
63+ return fmt .Errorf ("start time is missing in one of the segments belonging to generator %s. Did that generator run?" , cfg .GenName )
64+ }
65+ if segment .StartTime .Before (earliestTime ) {
66+ earliestTime = segment .StartTime
67+ }
68+ if segment .EndTime .IsZero () {
69+ return fmt .Errorf ("end time is missing in one of the segments belonging to generator %s. Did that generator finish running?" , cfg .GenName )
70+ }
71+ if segment .EndTime .After (latestTime ) {
72+ latestTime = segment .EndTime
73+ }
74+ }
75+ }
76+
77+ b .TestStart = earliestTime
78+ b .TestEnd = latestTime
79+
80+ return nil
81+ }
82+
2583func (b * BasicData ) Validate () error {
2684 if b .TestStart .IsZero () {
2785 return errors .New ("test start time is missing. We cannot query Loki without a time range. Please set it and try again" )
@@ -59,8 +117,6 @@ func (b *BasicData) IsComparable(otherData BasicData) error {
59117 }
60118 }
61119
62- // TODO: would be good to be able to check if Gun and VU are the same, but idk yet how we could do that easily [hash the code?]
63-
64120 return nil
65121}
66122
@@ -73,6 +129,10 @@ func compareGeneratorConfigs(cfg1, cfg2 *wasp.Config) error {
73129 return fmt .Errorf ("schedules are different. Expected %d, got %d" , len (cfg1 .Schedule ), len (cfg2 .Schedule ))
74130 }
75131
132+ var areSegmentsEqual = func (segment1 , segment2 * wasp.Segment ) bool {
133+ return segment1 .From == segment2 .From && segment1 .Duration == segment2 .Duration && segment1 .Type == segment2 .Type
134+ }
135+
76136 for i , segment1 := range cfg1 .Schedule {
77137 segment2 := cfg2 .Schedule [i ]
78138 if segment1 == nil {
@@ -81,7 +141,7 @@ func compareGeneratorConfigs(cfg1, cfg2 *wasp.Config) error {
81141 if segment2 == nil {
82142 return fmt .Errorf ("schedule at index %d is nil in the other report" , i )
83143 }
84- if * segment1 != * segment2 {
144+ if ! areSegmentsEqual ( segment1 , segment2 ) {
85145 return fmt .Errorf ("schedules at index %d are different. Expected %s, got %s" , i , mustMarshallSegment (segment1 ), mustMarshallSegment (segment2 ))
86146 }
87147 }
0 commit comments