@@ -24,11 +24,8 @@ import (
24
24
"github.com/stretchr/testify/require"
25
25
26
26
fbuild "github.com/elastic/fleet-server/v7/internal/pkg/build"
27
- "github.com/elastic/fleet-server/v7/internal/pkg/cache"
28
- "github.com/elastic/fleet-server/v7/internal/pkg/checkin"
29
27
"github.com/elastic/fleet-server/v7/internal/pkg/config"
30
28
"github.com/elastic/fleet-server/v7/internal/pkg/monitor/mock"
31
- "github.com/elastic/fleet-server/v7/internal/pkg/policy"
32
29
ftesting "github.com/elastic/fleet-server/v7/internal/pkg/testing"
33
30
"github.com/elastic/fleet-server/v7/internal/pkg/testing/certs"
34
31
testlog "github.com/elastic/fleet-server/v7/internal/pkg/testing/log"
@@ -46,40 +43,38 @@ func Test_server_Run(t *testing.T) {
46
43
cfg .Port = port
47
44
addr := cfg .BindEndpoints ()[0 ]
48
45
49
- verCon := mustBuildConstraints ("8.0.0" )
50
- c , err := cache .New (config.Cache {NumCounters : 100 , MaxCost : 100000 })
51
- require .NoError (t , err )
52
- bulker := ftesting .NewMockBulk ()
53
- pim := mock .NewMockMonitor ()
54
- pm := policy .NewMonitor (bulker , pim , config.ServerLimits {PolicyLimit : config.Limit {Interval : 5 * time .Millisecond , Burst : 1 }})
55
- bc := checkin .NewBulk (nil )
56
- ct := NewCheckinT (verCon , cfg , c , bc , pm , nil , nil , nil , nil )
57
- et , err := NewEnrollerT (verCon , cfg , nil , c )
58
- require .NoError (t , err )
59
-
60
- srv := NewServer (addr , cfg , ct , et , nil , nil , nil , nil , fbuild.Info {}, nil , nil , nil , nil , nil )
61
- errCh := make (chan error )
46
+ srv := NewServer (addr , cfg , nil , nil , nil , nil , nil , nil , fbuild.Info {}, nil , nil , nil , nil , nil )
62
47
48
+ started := make (chan struct {}, 1 )
49
+ errCh := make (chan error , 1 )
63
50
var wg sync.WaitGroup
64
51
wg .Add (1 )
65
52
go func () {
66
- if err := srv .Run (ctx ); err != nil {
53
+ started <- struct {}{}
54
+ if err := srv .Run (ctx ); err != nil && ! errors .Is (err , context .Canceled ) {
67
55
errCh <- err
68
56
}
69
57
wg .Done ()
70
58
}()
71
- var errFromChan error
72
- select {
59
+
60
+ select { // if the goroutine has started within 500ms something is wrong, test has timed out
61
+ case <- started :
62
+ case <- time .After (500 * time .Millisecond ):
63
+ require .Fail (t , "timed out waiting for server to start" )
64
+ }
65
+ select { // check if there is an error in the 1st 500ms of the server running
73
66
case err := <- errCh :
74
- errFromChan = err
67
+ require . NoError ( t , err , "error during startup" )
75
68
case <- time .After (500 * time .Millisecond ):
76
69
break
77
70
}
71
+
78
72
cancel ()
79
73
wg .Wait ()
80
- require . NoError ( t , errFromChan )
81
- if ! errors . Is ( err , http . ErrServerClosed ) {
74
+ select {
75
+ case err := <- errCh :
82
76
require .NoError (t , err )
77
+ default :
83
78
}
84
79
}
85
80
@@ -130,7 +125,6 @@ func Test_server_ClientCert(t *testing.T) {
130
125
131
126
st := NewStatusT (cfg , nil , nil )
132
127
srv := NewServer (addr , cfg , nil , nil , nil , nil , st , sm , fbuild.Info {}, nil , nil , nil , nil , nil )
133
- errCh := make (chan error )
134
128
135
129
// make http client with no client certs
136
130
certPool := x509 .NewCertPool ()
@@ -144,17 +138,29 @@ func Test_server_ClientCert(t *testing.T) {
144
138
}
145
139
146
140
started := make (chan struct {}, 1 )
141
+ errCh := make (chan error , 1 )
147
142
var wg sync.WaitGroup
148
143
wg .Add (1 )
149
144
go func () {
150
145
started <- struct {}{}
151
- if err := srv .Run (ctx ); err != nil {
146
+ if err := srv .Run (ctx ); err != nil && ! errors . Is ( err , context . Canceled ) {
152
147
errCh <- err
153
148
}
154
149
wg .Done ()
155
150
}()
156
151
157
- <- started
152
+ select { // make sure goroutine starts within 500ms
153
+ case <- started :
154
+ case <- time .After (500 * time .Millisecond ):
155
+ require .Fail (t , "timed out waiting for server to start" )
156
+ }
157
+ select { // make sure there are no errors within 500ms of api server running
158
+ case err := <- errCh :
159
+ require .NoError (t , err , "error during startup" )
160
+ case <- time .After (500 * time .Millisecond ):
161
+ break
162
+ }
163
+
158
164
rCtx , rCancel := context .WithTimeout (ctx , time .Second )
159
165
defer rCancel ()
160
166
req , err := http .NewRequestWithContext (rCtx , "GET" , "https://" + addr + "/api/status" , nil )
@@ -164,13 +170,13 @@ func Test_server_ClientCert(t *testing.T) {
164
170
resp .Body .Close ()
165
171
require .Equal (t , http .StatusOK , resp .StatusCode )
166
172
173
+ cancel ()
174
+ wg .Wait ()
167
175
select {
168
176
case err := <- errCh :
169
177
require .NoError (t , err )
170
178
default :
171
179
}
172
- cancel ()
173
- wg .Wait ()
174
180
})
175
181
176
182
t .Run ("valid client certs" , func (t * testing.T ) {
@@ -189,7 +195,6 @@ func Test_server_ClientCert(t *testing.T) {
189
195
190
196
st := NewStatusT (cfg , nil , nil )
191
197
srv := NewServer (addr , cfg , nil , nil , nil , nil , st , sm , fbuild.Info {}, nil , nil , nil , nil , nil )
192
- errCh := make (chan error )
193
198
194
199
// make http client with valid client certs
195
200
clientCert := certs .GenCert (t , ca )
@@ -205,17 +210,29 @@ func Test_server_ClientCert(t *testing.T) {
205
210
}
206
211
207
212
started := make (chan struct {}, 1 )
213
+ errCh := make (chan error , 1 )
208
214
var wg sync.WaitGroup
209
215
wg .Add (1 )
210
216
go func () {
211
217
started <- struct {}{}
212
- if err := srv .Run (ctx ); err != nil {
218
+ if err := srv .Run (ctx ); err != nil && ! errors . Is ( err , context . Canceled ) {
213
219
errCh <- err
214
220
}
215
221
wg .Done ()
216
222
}()
217
223
218
- <- started
224
+ select {
225
+ case <- started :
226
+ case <- time .After (500 * time .Millisecond ):
227
+ require .Fail (t , "timed out waiting for server to start" )
228
+ }
229
+ select {
230
+ case err := <- errCh :
231
+ require .NoError (t , err , "error during startup" )
232
+ case <- time .After (500 * time .Millisecond ):
233
+ break
234
+ }
235
+
219
236
rCtx , rCancel := context .WithTimeout (ctx , time .Second )
220
237
defer rCancel ()
221
238
req , err := http .NewRequestWithContext (rCtx , "GET" , "https://" + addr + "/api/status" , nil )
@@ -225,13 +242,13 @@ func Test_server_ClientCert(t *testing.T) {
225
242
resp .Body .Close ()
226
243
require .Equal (t , http .StatusOK , resp .StatusCode )
227
244
245
+ cancel ()
246
+ wg .Wait ()
228
247
select {
229
248
case err := <- errCh :
230
249
require .NoError (t , err )
231
250
default :
232
251
}
233
- cancel ()
234
- wg .Wait ()
235
252
})
236
253
237
254
t .Run ("invalid client certs" , func (t * testing.T ) {
@@ -250,7 +267,6 @@ func Test_server_ClientCert(t *testing.T) {
250
267
251
268
st := NewStatusT (cfg , nil , nil )
252
269
srv := NewServer (addr , cfg , nil , nil , nil , nil , st , sm , fbuild.Info {}, nil , nil , nil , nil , nil )
253
- errCh := make (chan error )
254
270
255
271
// make http client with invalid client certs
256
272
clientCA := certs .GenCA (t )
@@ -267,35 +283,46 @@ func Test_server_ClientCert(t *testing.T) {
267
283
}
268
284
269
285
started := make (chan struct {}, 1 )
286
+ errCh := make (chan error , 1 )
270
287
var wg sync.WaitGroup
271
288
wg .Add (1 )
272
289
go func () {
273
290
started <- struct {}{}
274
- if err := srv .Run (ctx ); err != nil {
291
+ if err := srv .Run (ctx ); err != nil && ! errors . Is ( err , context . Canceled ) {
275
292
errCh <- err
276
293
}
277
294
wg .Done ()
278
295
}()
279
296
280
- <- started
297
+ select {
298
+ case <- started :
299
+ case <- time .After (500 * time .Millisecond ):
300
+ require .Fail (t , "timed out waiting for server to start" )
301
+ }
302
+ select {
303
+ case err := <- errCh :
304
+ require .NoError (t , err , "error during startup" )
305
+ case <- time .After (500 * time .Millisecond ):
306
+ break
307
+ }
308
+
281
309
rCtx , rCancel := context .WithTimeout (ctx , time .Second )
282
310
defer rCancel ()
283
311
req , err := http .NewRequestWithContext (rCtx , "GET" , "https://" + addr + "/api/status" , nil )
284
312
require .NoError (t , err )
285
313
_ , err = httpClient .Do (req )
286
314
require .Error (t , err )
287
315
316
+ cancel ()
317
+ wg .Wait ()
288
318
select {
289
319
case err := <- errCh :
290
320
require .NoError (t , err )
291
321
default :
292
322
}
293
- cancel ()
294
- wg .Wait ()
295
323
})
296
324
297
325
t .Run ("valid client certs no certs requested" , func (t * testing.T ) {
298
- t .Skip ("test is flakey see fleet-server/issue/3266" )
299
326
ctx , cancel := context .WithCancel (context .Background ())
300
327
defer cancel ()
301
328
ctx = testlog .SetLogger (t ).WithContext (ctx )
@@ -323,7 +350,6 @@ key: %s`,
323
350
324
351
st := NewStatusT (cfg , nil , nil )
325
352
srv := NewServer (addr , cfg , nil , nil , nil , nil , st , sm , fbuild.Info {}, nil , nil , nil , nil , nil )
326
- errCh := make (chan error )
327
353
328
354
// make http client with valid client certs
329
355
clientCert := certs .GenCert (t , ca )
@@ -338,15 +364,30 @@ key: %s`,
338
364
},
339
365
}
340
366
367
+ started := make (chan struct {}, 1 )
368
+ errCh := make (chan error , 1 )
341
369
var wg sync.WaitGroup
342
370
wg .Add (1 )
343
371
go func () {
344
- if err := srv .Run (ctx ); err != nil {
372
+ started <- struct {}{}
373
+ if err := srv .Run (ctx ); err != nil && ! errors .Is (err , context .Canceled ) {
345
374
errCh <- err
346
375
}
347
376
wg .Done ()
348
377
}()
349
378
379
+ select {
380
+ case <- started :
381
+ case <- time .After (500 * time .Millisecond ):
382
+ require .Fail (t , "timed out waiting for server to start" )
383
+ }
384
+ select {
385
+ case err := <- errCh :
386
+ require .NoError (t , err , "error during startup" )
387
+ case <- time .After (500 * time .Millisecond ):
388
+ break
389
+ }
390
+
350
391
rCtx , rCancel := context .WithTimeout (ctx , time .Second )
351
392
defer rCancel ()
352
393
req , err := http .NewRequestWithContext (rCtx , "GET" , "https://" + addr + "/api/status" , nil )
@@ -356,12 +397,12 @@ key: %s`,
356
397
resp .Body .Close ()
357
398
require .Equal (t , http .StatusOK , resp .StatusCode )
358
399
400
+ cancel ()
401
+ wg .Wait ()
359
402
select {
360
403
case err := <- errCh :
361
404
require .NoError (t , err )
362
405
default :
363
406
}
364
- cancel ()
365
- wg .Wait ()
366
407
})
367
408
}
0 commit comments