@@ -68,58 +68,60 @@ type (
68
68
)
69
69
70
70
type RunTestStage struct {
71
- startTime time.Time
72
- metrics * metrics.Metrics
73
- output * ui.Output
74
- runInstance * run.Run
75
- runResult * run.Result
76
- t * testing.T
77
- require * require.Assertions
78
- metricData * MetricData
79
- scenarioCleanup func ()
80
- assert * assert.Assertions
81
- iterationCleanup func ()
82
- f1 * f1.F1
83
- durations sync.Map
84
- frequency string
85
- rate string
86
- stages string
87
- distributionType string
88
- configFile string
89
- startRate string
90
- endRate string
91
- rampDuration string
92
- scenario string
93
- settings envsettings.Settings
94
- maxFailures uint64
95
- maxIterations uint64
96
- maxFailuresRate int
97
- duration time.Duration
98
- concurrency int
99
- triggerType TriggerType
100
- iterationTeardownCount atomic.Uint32
101
- setupTeardownCount atomic.Uint32
102
- runCount atomic.Uint32
103
- stdout syncWriter
104
- stderr syncWriter
105
- interactive bool
106
- verbose bool
71
+ startTime time.Time
72
+ metrics * metrics.Metrics
73
+ output * ui.Output
74
+ runInstance * run.Run
75
+ runResult * run.Result
76
+ t * testing.T
77
+ require * require.Assertions
78
+ metricData * MetricData
79
+ scenarioCleanup func ()
80
+ assert * assert.Assertions
81
+ iterationCleanup func ()
82
+ f1 * f1.F1
83
+ durations sync.Map
84
+ frequency string
85
+ rate string
86
+ stages string
87
+ distributionType string
88
+ configFile string
89
+ startRate string
90
+ endRate string
91
+ rampDuration string
92
+ scenario string
93
+ settings envsettings.Settings
94
+ maxFailures uint64
95
+ maxIterations uint64
96
+ maxFailuresRate int
97
+ duration time.Duration
98
+ waitForCompletionTimeout time.Duration
99
+ concurrency int
100
+ triggerType TriggerType
101
+ iterationTeardownCount atomic.Uint32
102
+ setupTeardownCount atomic.Uint32
103
+ runCount atomic.Uint32
104
+ stdout syncWriter
105
+ stderr syncWriter
106
+ interactive bool
107
+ verbose bool
107
108
}
108
109
109
110
func NewRunTestStage (t * testing.T ) (* RunTestStage , * RunTestStage , * RunTestStage ) {
110
111
t .Helper ()
111
112
stage := & RunTestStage {
112
- t : t ,
113
- concurrency : 100 ,
114
- assert : assert .New (t ),
115
- require : require .New (t ),
116
- f1 : f1 .New (),
117
- settings : envsettings .Get (),
118
- metricData : NewMetricData (),
119
- output : ui .NewDiscardOutput (),
120
- metrics : metrics .NewInstance (prometheus .NewRegistry (), true ),
121
- stdout : syncWriter {writer : & bytes.Buffer {}},
122
- stderr : syncWriter {writer : & bytes.Buffer {}},
113
+ t : t ,
114
+ concurrency : 100 ,
115
+ assert : assert .New (t ),
116
+ require : require .New (t ),
117
+ f1 : f1 .New (),
118
+ settings : envsettings .Get (),
119
+ metricData : NewMetricData (),
120
+ output : ui .NewDiscardOutput (),
121
+ metrics : metrics .NewInstance (prometheus .NewRegistry (), true ),
122
+ stdout : syncWriter {writer : & bytes.Buffer {}},
123
+ stderr : syncWriter {writer : & bytes.Buffer {}},
124
+ waitForCompletionTimeout : 5 * time .Second ,
123
125
}
124
126
125
127
handler := FakePrometheusHandler (t , stage .metricData )
@@ -141,6 +143,11 @@ func (s *RunTestStage) a_rate_of(rate string) *RunTestStage {
141
143
return s
142
144
}
143
145
146
+ func (s * RunTestStage ) wait_for_completion_timeout_of (timeout time.Duration ) * RunTestStage {
147
+ s .waitForCompletionTimeout = timeout
148
+ return s
149
+ }
150
+
144
151
func (s * RunTestStage ) and () * RunTestStage {
145
152
return s
146
153
}
@@ -198,7 +205,7 @@ func (s *RunTestStage) setupRun() {
198
205
MaxFailures : s .maxFailures ,
199
206
MaxFailuresRate : s .maxFailuresRate ,
200
207
Verbose : s .verbose ,
201
- }, s .f1 .GetScenarios (), s .build_trigger (), s .settings , s .metrics , outputer )
208
+ }, s .f1 .GetScenarios (), s .build_trigger (), s .waitForCompletionTimeout , s . settings , s .metrics , outputer )
202
209
203
210
s .require .NoError (err )
204
211
s .runInstance = r
@@ -218,8 +225,11 @@ func (s *RunTestStage) the_run_command_is_executed_and_cancelled_after(duration
218
225
s .setupRun ()
219
226
220
227
var err error
221
- ctx , cancel := context .WithTimeout (context .TODO (), duration )
222
- defer cancel ()
228
+ ctx , cancel := context .WithCancel (context .TODO ())
229
+ go func () {
230
+ <- time .After (duration )
231
+ cancel ()
232
+ }()
223
233
224
234
s .runResult , err = s .runInstance .Do (ctx )
225
235
s .require .NoError (err )
0 commit comments