@@ -15,15 +15,21 @@ import (
15
15
"github.com/coder/coder/v2/coderd/database/dbtime"
16
16
"github.com/coder/coder/v2/coderd/healthcheck"
17
17
"github.com/coder/coder/v2/coderd/healthcheck/health"
18
+ "github.com/coder/coder/v2/coderd/provisionerdserver"
18
19
"github.com/coder/coder/v2/codersdk"
19
20
"github.com/coder/coder/v2/codersdk/healthsdk"
20
21
"github.com/coder/coder/v2/provisionerd/proto"
22
+ "github.com/coder/coder/v2/testutil"
21
23
)
22
24
23
25
func TestProvisionerDaemonReport (t * testing.T ) {
24
26
t .Parallel ()
25
27
26
- now := dbtime .Now ()
28
+ var (
29
+ now = dbtime .Now ()
30
+ oneHourAgo = now .Add (- time .Hour )
31
+ staleThreshold = now .Add (- provisionerdserver .StaleInterval ).Add (- time .Second )
32
+ )
27
33
28
34
for _ ,tt := range []struct {
29
35
name string
@@ -65,7 +71,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
65
71
currentVersion :"v1.2.3" ,
66
72
currentAPIMajorVersion :proto .CurrentMajor ,
67
73
expectedSeverity :health .SeverityOK ,
68
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemon (t ,"pd-ok" ,"v1.2.3" ,"1.0" ,now )},
74
+ provisionerDaemons : []database.ProvisionerDaemon {
75
+ fakeProvisionerDaemon (t ,withName ("pd-ok" ),withVersion ("v1.2.3" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
76
+ },
69
77
expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
70
78
{
71
79
ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -88,7 +96,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
88
96
currentAPIMajorVersion :proto .CurrentMajor ,
89
97
expectedSeverity :health .SeverityWarning ,
90
98
expectedWarningCode :health .CodeProvisionerDaemonVersionMismatch ,
91
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemon (t ,"pd-old" ,"v1.1.2" ,"1.0" ,now )},
99
+ provisionerDaemons : []database.ProvisionerDaemon {
100
+ fakeProvisionerDaemon (t ,withName ("pd-old" ),withVersion ("v1.1.2" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
101
+ },
92
102
expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
93
103
{
94
104
ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -116,7 +126,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
116
126
currentAPIMajorVersion :proto .CurrentMajor ,
117
127
expectedSeverity :health .SeverityError ,
118
128
expectedWarningCode :health .CodeUnknown ,
119
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemon (t ,"pd-invalid-version" ,"invalid" ,"1.0" ,now )},
129
+ provisionerDaemons : []database.ProvisionerDaemon {
130
+ fakeProvisionerDaemon (t ,withName ("pd-invalid-version" ),withVersion ("invalid" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
131
+ },
120
132
expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
121
133
{
122
134
ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -144,7 +156,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
144
156
currentAPIMajorVersion :proto .CurrentMajor ,
145
157
expectedSeverity :health .SeverityError ,
146
158
expectedWarningCode :health .CodeUnknown ,
147
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemon (t ,"pd-invalid-api" ,"v1.2.3" ,"invalid" ,now )},
159
+ provisionerDaemons : []database.ProvisionerDaemon {
160
+ fakeProvisionerDaemon (t ,withName ("pd-invalid-api" ),withVersion ("v1.2.3" ),withAPIVersion ("invalid" ),withCreatedAt (now ),withLastSeenAt (now )),
161
+ },
148
162
expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
149
163
{
150
164
ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -172,7 +186,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
172
186
currentAPIMajorVersion :2 ,
173
187
expectedSeverity :health .SeverityWarning ,
174
188
expectedWarningCode :health .CodeProvisionerDaemonAPIMajorVersionDeprecated ,
175
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemon (t ,"pd-old-api" ,"v2.3.4" ,"1.0" ,now )},
189
+ provisionerDaemons : []database.ProvisionerDaemon {
190
+ fakeProvisionerDaemon (t ,withName ("pd-old-api" ),withVersion ("v2.3.4" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
191
+ },
176
192
expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
177
193
{
178
194
ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -200,7 +216,10 @@ func TestProvisionerDaemonReport(t *testing.T) {
200
216
currentAPIMajorVersion :proto .CurrentMajor ,
201
217
expectedSeverity :health .SeverityWarning ,
202
218
expectedWarningCode :health .CodeProvisionerDaemonVersionMismatch ,
203
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemon (t ,"pd-ok" ,"v1.2.3" ,"1.0" ,now ),fakeProvisionerDaemon (t ,"pd-old" ,"v1.1.2" ,"1.0" ,now )},
219
+ provisionerDaemons : []database.ProvisionerDaemon {
220
+ fakeProvisionerDaemon (t ,withName ("pd-ok" ),withVersion ("v1.2.3" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
221
+ fakeProvisionerDaemon (t ,withName ("pd-old" ),withVersion ("v1.1.2" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
222
+ },
204
223
expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
205
224
{
206
225
ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -241,7 +260,10 @@ func TestProvisionerDaemonReport(t *testing.T) {
241
260
currentAPIMajorVersion :proto .CurrentMajor ,
242
261
expectedSeverity :health .SeverityWarning ,
243
262
expectedWarningCode :health .CodeProvisionerDaemonVersionMismatch ,
244
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemon (t ,"pd-ok" ,"v1.2.3" ,"1.0" ,now ),fakeProvisionerDaemon (t ,"pd-new" ,"v2.3.4" ,"1.0" ,now )},
263
+ provisionerDaemons : []database.ProvisionerDaemon {
264
+ fakeProvisionerDaemon (t ,withName ("pd-ok" ),withVersion ("v1.2.3" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
265
+ fakeProvisionerDaemon (t ,withName ("pd-new" ),withVersion ("v2.3.4" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
266
+ },
245
267
expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
246
268
{
247
269
ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -281,7 +303,10 @@ func TestProvisionerDaemonReport(t *testing.T) {
281
303
currentVersion :"v2.3.4" ,
282
304
currentAPIMajorVersion :proto .CurrentMajor ,
283
305
expectedSeverity :health .SeverityOK ,
284
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemonStale (t ,"pd-stale" ,"v1.2.3" ,"0.9" ,now .Add (- 5 * time .Minute ),now ),fakeProvisionerDaemon (t ,"pd-ok" ,"v2.3.4" ,"1.0" ,now )},
306
+ provisionerDaemons : []database.ProvisionerDaemon {
307
+ fakeProvisionerDaemon (t ,withName ("pd-stale" ),withVersion ("v1.2.3" ),withAPIVersion ("0.9" ),withCreatedAt (oneHourAgo ),withLastSeenAt (staleThreshold )),
308
+ fakeProvisionerDaemon (t ,withName ("pd-ok" ),withVersion ("v2.3.4" ),withAPIVersion ("1.0" ),withCreatedAt (now ),withLastSeenAt (now )),
309
+ },
285
310
expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
286
311
{
287
312
ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -304,8 +329,10 @@ func TestProvisionerDaemonReport(t *testing.T) {
304
329
currentAPIMajorVersion :proto .CurrentMajor ,
305
330
expectedSeverity :health .SeverityError ,
306
331
expectedWarningCode :health .CodeProvisionerDaemonsNoProvisionerDaemons ,
307
- provisionerDaemons : []database.ProvisionerDaemon {fakeProvisionerDaemonStale (t ,"pd-ok" ,"v1.2.3" ,"0.9" ,now .Add (- 5 * time .Minute ),now )},
308
- expectedItems : []healthsdk.ProvisionerDaemonsReportItem {},
332
+ provisionerDaemons : []database.ProvisionerDaemon {
333
+ fakeProvisionerDaemon (t ,withName ("pd-stale" ),withVersion ("v1.2.3" ),withAPIVersion ("0.9" ),withCreatedAt (oneHourAgo ),withLastSeenAt (staleThreshold )),
334
+ },
335
+ expectedItems : []healthsdk.ProvisionerDaemonsReportItem {},
309
336
},
310
337
} {
311
338
tt := tt
@@ -353,25 +380,52 @@ func TestProvisionerDaemonReport(t *testing.T) {
353
380
}
354
381
}
355
382
356
- func fakeProvisionerDaemon (t * testing.T ,name ,version ,apiVersion string ,now time.Time ) database.ProvisionerDaemon {
383
+ func withName (s string )func (* database.ProvisionerDaemon ) {
384
+ return func (pd * database.ProvisionerDaemon ) {
385
+ pd .Name = s
386
+ }
387
+ }
388
+
389
+ func withCreatedAt (at time.Time )func (* database.ProvisionerDaemon ) {
390
+ return func (pd * database.ProvisionerDaemon ) {
391
+ pd .CreatedAt = at
392
+ }
393
+ }
394
+
395
+ func withLastSeenAt (at time.Time )func (* database.ProvisionerDaemon ) {
396
+ return func (pd * database.ProvisionerDaemon ) {
397
+ pd .LastSeenAt .Valid = true
398
+ pd .LastSeenAt .Time = at
399
+ }
400
+ }
401
+
402
+ func withVersion (v string )func (* database.ProvisionerDaemon ) {
403
+ return func (pd * database.ProvisionerDaemon ) {
404
+ pd .Version = v
405
+ }
406
+ }
407
+
408
+ func withAPIVersion (v string )func (* database.ProvisionerDaemon ) {
409
+ return func (pd * database.ProvisionerDaemon ) {
410
+ pd .APIVersion = v
411
+ }
412
+ }
413
+
414
+ func fakeProvisionerDaemon (t * testing.T ,opts ... func (* database.ProvisionerDaemon )) database.ProvisionerDaemon {
357
415
t .Helper ()
358
- return database.ProvisionerDaemon {
416
+ pd := database.ProvisionerDaemon {
359
417
ID :uuid .Nil ,
360
- Name :name ,
361
- CreatedAt :now ,
362
- LastSeenAt : sql.NullTime {Time : now , Valid : true },
418
+ Name :testutil . GetRandomName ( t ) ,
419
+ CreatedAt :time. Time {} ,
420
+ LastSeenAt : sql.NullTime {},
363
421
Provisioners : []database.ProvisionerType {database .ProvisionerTypeEcho ,database .ProvisionerTypeTerraform },
364
422
ReplicaID : uuid.NullUUID {},
365
423
Tags :map [string ]string {},
366
- Version :version ,
367
- APIVersion :apiVersion ,
424
+ Version :"" ,
425
+ APIVersion :"" ,
368
426
}
369
- }
370
-
371
- func fakeProvisionerDaemonStale (t * testing.T ,name ,version ,apiVersion string ,lastSeenAt ,now time.Time ) database.ProvisionerDaemon {
372
- t .Helper ()
373
- d := fakeProvisionerDaemon (t ,name ,version ,apiVersion ,now )
374
- d .LastSeenAt .Valid = true
375
- d .LastSeenAt .Time = lastSeenAt
376
- return d
427
+ for _ ,o := range opts {
428
+ o (& pd )
429
+ }
430
+ return pd
377
431
}