@@ -15,15 +15,21 @@ import (
1515"github.com/coder/coder/v2/coderd/database/dbtime"
1616"github.com/coder/coder/v2/coderd/healthcheck"
1717"github.com/coder/coder/v2/coderd/healthcheck/health"
18+ "github.com/coder/coder/v2/coderd/provisionerdserver"
1819"github.com/coder/coder/v2/codersdk"
1920"github.com/coder/coder/v2/codersdk/healthsdk"
2021"github.com/coder/coder/v2/provisionerd/proto"
22+ "github.com/coder/coder/v2/testutil"
2123)
2224
2325func TestProvisionerDaemonReport (t * testing.T ) {
2426t .Parallel ()
2527
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+ )
2733
2834for _ ,tt := range []struct {
2935name string
@@ -65,7 +71,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
6571currentVersion :"v1.2.3" ,
6672currentAPIMajorVersion :proto .CurrentMajor ,
6773expectedSeverity :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+ },
6977expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
7078{
7179ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -88,7 +96,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
8896currentAPIMajorVersion :proto .CurrentMajor ,
8997expectedSeverity :health .SeverityWarning ,
9098expectedWarningCode :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+ },
92102expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
93103{
94104ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -116,7 +126,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
116126currentAPIMajorVersion :proto .CurrentMajor ,
117127expectedSeverity :health .SeverityError ,
118128expectedWarningCode :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+ },
120132expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
121133{
122134ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -144,7 +156,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
144156currentAPIMajorVersion :proto .CurrentMajor ,
145157expectedSeverity :health .SeverityError ,
146158expectedWarningCode :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+ },
148162expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
149163{
150164ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -172,7 +186,9 @@ func TestProvisionerDaemonReport(t *testing.T) {
172186currentAPIMajorVersion :2 ,
173187expectedSeverity :health .SeverityWarning ,
174188expectedWarningCode :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+ },
176192expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
177193{
178194ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -200,7 +216,10 @@ func TestProvisionerDaemonReport(t *testing.T) {
200216currentAPIMajorVersion :proto .CurrentMajor ,
201217expectedSeverity :health .SeverityWarning ,
202218expectedWarningCode :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+ },
204223expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
205224{
206225ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -241,7 +260,10 @@ func TestProvisionerDaemonReport(t *testing.T) {
241260currentAPIMajorVersion :proto .CurrentMajor ,
242261expectedSeverity :health .SeverityWarning ,
243262expectedWarningCode :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+ },
245267expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
246268{
247269ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -281,7 +303,10 @@ func TestProvisionerDaemonReport(t *testing.T) {
281303currentVersion :"v2.3.4" ,
282304currentAPIMajorVersion :proto .CurrentMajor ,
283305expectedSeverity :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+ },
285310expectedItems : []healthsdk.ProvisionerDaemonsReportItem {
286311{
287312ProvisionerDaemon : codersdk.ProvisionerDaemon {
@@ -304,8 +329,10 @@ func TestProvisionerDaemonReport(t *testing.T) {
304329currentAPIMajorVersion :proto .CurrentMajor ,
305330expectedSeverity :health .SeverityError ,
306331expectedWarningCode :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 {},
309336},
310337} {
311338tt := tt
@@ -353,25 +380,52 @@ func TestProvisionerDaemonReport(t *testing.T) {
353380}
354381}
355382
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 {
357415t .Helper ()
358- return database.ProvisionerDaemon {
416+ pd := database.ProvisionerDaemon {
359417ID :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 {},
363421Provisioners : []database.ProvisionerType {database .ProvisionerTypeEcho ,database .ProvisionerTypeTerraform },
364422ReplicaID : uuid.NullUUID {},
365423Tags :map [string ]string {},
366- Version :version ,
367- APIVersion :apiVersion ,
424+ Version :"" ,
425+ APIVersion :"" ,
368426}
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
377431}