Skip to content

Commit 19a58ad

Browse files
committed
use store instead of fn
1 parent fec0066 commit 19a58ad

File tree

3 files changed

+33
-52
lines changed

3 files changed

+33
-52
lines changed

coderd/coderd.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -441,11 +441,11 @@ func New(options *Options) *API {
441441
WorkspaceProxiesFetchUpdater: *(options.WorkspaceProxiesFetchUpdater).Load(),
442442
},
443443
ProvisionerDaemons: healthcheck.ProvisionerDaemonsReportOptions{
444-
CurrentVersion: buildinfo.Version(),
445-
CurrentAPIVersion: provisionersdk.VersionCurrent,
446-
ProvisionerDaemonsFn: options.Database.GetProvisionerDaemons,
447-
TimeNowFn: dbtime.Now,
448-
StaleInterval: provisionerdserver.DefaultHeartbeatInterval * 3,
444+
CurrentVersion: buildinfo.Version(),
445+
CurrentAPIMajorVersion: provisionersdk.CurrentMajor,
446+
Store: options.Database,
447+
TimeNowFn: dbtime.Now,
448+
StaleInterval: provisionerdserver.DefaultHeartbeatInterval * 3,
449449
},
450450
})
451451
}

coderd/healthcheck/provisioner.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,18 @@ type ProvisionerDaemonsReportOptions struct {
3232
CurrentVersion string
3333
CurrentAPIMajorVersion int
3434

35-
// ProvisionerDaemonsFn is a function that returns ProvisionerDaemons.
36-
// Satisfied by database.Store.ProvisionerDaemons
37-
ProvisionerDaemonsFn func(context.Context) ([]database.ProvisionerDaemon, error)
35+
Store ProvisionerDaemonsStore
3836

3937
TimeNowFn func() time.Time
4038
StaleInterval time.Duration
4139

4240
Dismissed bool
4341
}
4442

43+
type ProvisionerDaemonsStore interface {
44+
GetProvisionerDaemons(ctx context.Context) ([]database.ProvisionerDaemon, error)
45+
}
46+
4547
func (r *ProvisionerDaemonsReport) Run(ctx context.Context, opts *ProvisionerDaemonsReportOptions) {
4648
r.ProvisionerDaemons = make([]codersdk.ProvisionerDaemon, 0)
4749
r.Severity = health.SeverityOK
@@ -60,18 +62,18 @@ func (r *ProvisionerDaemonsReport) Run(ctx context.Context, opts *ProvisionerDae
6062

6163
if opts.CurrentAPIMajorVersion == 0 {
6264
r.Severity = health.SeverityError
63-
r.Error = ptr.Ref("Developer error: CurrentAPIVersion must be non-zero!")
65+
r.Error = ptr.Ref("Developer error: CurrentAPIMajorVersion must be non-zero!")
6466
return
6567
}
6668

67-
if opts.ProvisionerDaemonsFn == nil {
69+
if opts.Store == nil {
6870
r.Severity = health.SeverityError
69-
r.Error = ptr.Ref("Developer error: ProvisionerDaemonsFn is nil!")
71+
r.Error = ptr.Ref("Developer error: Store is nil!")
7072
return
7173
}
7274

7375
// nolint: gocritic // need an actor to fetch provisioner daemons
74-
daemons, err := opts.ProvisionerDaemonsFn(dbauthz.AsSystemRestricted(ctx))
76+
daemons, err := opts.Store.GetProvisionerDaemons(dbauthz.AsSystemRestricted(ctx))
7577
if err != nil {
7678
r.Severity = health.SeverityError
7779
r.Error = ptr.Ref("error fetching provisioner daemons: " + err.Error())

coderd/healthcheck/provisioner_test.go

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ import (
1010
"github.com/stretchr/testify/assert"
1111

1212
"github.com/coder/coder/v2/coderd/database"
13+
"github.com/coder/coder/v2/coderd/database/dbmock"
1314
"github.com/coder/coder/v2/coderd/database/dbtime"
1415
"github.com/coder/coder/v2/coderd/healthcheck"
1516
"github.com/coder/coder/v2/coderd/healthcheck/health"
1617
"github.com/coder/coder/v2/provisionersdk"
18+
19+
gomock "go.uber.org/mock/gomock"
1720
)
1821

1922
func TestProvisionerDaemonReport(t *testing.T) {
@@ -23,7 +26,8 @@ func TestProvisionerDaemonReport(t *testing.T) {
2326
name string
2427
currentVersion string
2528
currentAPIMajorVersion int
26-
provisionerDaemonsFn func(context.Context) ([]database.ProvisionerDaemon, error)
29+
provisionerDaemons []database.ProvisionerDaemon
30+
provisionerDaemonsErr error
2731
expectedSeverity health.Severity
2832
expectedWarningCode health.Code
2933
expectedError string
@@ -34,26 +38,18 @@ func TestProvisionerDaemonReport(t *testing.T) {
3438
expectedSeverity: health.SeverityError,
3539
expectedError: "Developer error: CurrentVersion is empty",
3640
},
37-
{
38-
name: "provisionerdaemonsfn nil",
39-
currentVersion: "v1.2.3",
40-
currentAPIMajorVersion: 1,
41-
expectedSeverity: health.SeverityError,
42-
expectedError: "Developer error: ProvisionerDaemonsFn is nil",
43-
},
4441
{
4542
name: "no daemons",
4643
currentVersion: "v1.2.3",
4744
currentAPIMajorVersion: provisionersdk.CurrentMajor,
48-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(),
4945
expectedSeverity: health.SeverityError,
5046
expectedError: "No provisioner daemons found!",
5147
},
5248
{
5349
name: "error fetching daemons",
5450
currentVersion: "v1.2.3",
5551
currentAPIMajorVersion: provisionersdk.CurrentMajor,
56-
provisionerDaemonsFn: fakeProvisionerDaemonsFnErr(assert.AnError),
52+
provisionerDaemonsErr: assert.AnError,
5753
expectedSeverity: health.SeverityError,
5854
expectedError: assert.AnError.Error(),
5955
},
@@ -62,69 +58,62 @@ func TestProvisionerDaemonReport(t *testing.T) {
6258
currentVersion: "v1.2.3",
6359
currentAPIMajorVersion: provisionersdk.CurrentMajor,
6460
expectedSeverity: health.SeverityOK,
65-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(fakeProvisionerDaemon(t, "pd-ok", "v1.2.3", "1.0")),
61+
provisionerDaemons: []database.ProvisionerDaemon{fakeProvisionerDaemon(t, "pd-ok", "v1.2.3", "1.0")},
6662
},
6763
{
6864
name: "one daemon out of date",
6965
currentVersion: "v1.2.3",
7066
currentAPIMajorVersion: provisionersdk.CurrentMajor,
7167
expectedSeverity: health.SeverityWarning,
7268
expectedWarningCode: health.CodeProvisionerDaemonVersionMismatch,
73-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(fakeProvisionerDaemon(t, "pd-old", "v1.1.2", "1.0")),
69+
provisionerDaemons: []database.ProvisionerDaemon{fakeProvisionerDaemon(t, "pd-old", "v1.1.2", "1.0")},
7470
},
7571
{
7672
name: "invalid daemon version",
7773
currentVersion: "v1.2.3",
7874
currentAPIMajorVersion: provisionersdk.CurrentMajor,
7975
expectedSeverity: health.SeverityError,
8076
expectedWarningCode: health.CodeUnknown,
81-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(fakeProvisionerDaemon(t, "pd-invalid-version", "invalid", "1.0")),
77+
provisionerDaemons: []database.ProvisionerDaemon{fakeProvisionerDaemon(t, "pd-invalid-version", "invalid", "1.0")},
8278
},
8379
{
8480
name: "invalid daemon api version",
8581
currentVersion: "v1.2.3",
8682
currentAPIMajorVersion: provisionersdk.CurrentMajor,
8783
expectedSeverity: health.SeverityError,
8884
expectedWarningCode: health.CodeUnknown,
89-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(fakeProvisionerDaemon(t, "pd-new-minor", "v1.2.3", "invalid")),
85+
provisionerDaemons: []database.ProvisionerDaemon{fakeProvisionerDaemon(t, "pd-new-minor", "v1.2.3", "invalid")},
9086
},
9187
{
9288
name: "api version backward compat",
9389
currentVersion: "v2.3.4",
9490
currentAPIMajorVersion: 2,
9591
expectedSeverity: health.SeverityWarning,
9692
expectedWarningCode: health.CodeProvisionerDaemonAPIMajorVersionDeprecated,
97-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(
98-
fakeProvisionerDaemon(t, "pd-old-api", "v2.3.4", "1.0")),
93+
provisionerDaemons: []database.ProvisionerDaemon{fakeProvisionerDaemon(t, "pd-old-api", "v2.3.4", "1.0")},
9994
},
10095
{
10196
name: "one up to date, one out of date",
10297
currentVersion: "v1.2.3",
10398
currentAPIMajorVersion: provisionersdk.CurrentMajor,
10499
expectedSeverity: health.SeverityWarning,
105100
expectedWarningCode: health.CodeProvisionerDaemonVersionMismatch,
106-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(
107-
fakeProvisionerDaemon(t, "pd-ok", "v1.2.3", "1.0"),
108-
fakeProvisionerDaemon(t, "pd-old", "v1.1.2", "1.0")),
101+
provisionerDaemons: []database.ProvisionerDaemon{fakeProvisionerDaemon(t, "pd-ok", "v1.2.3", "1.0"), fakeProvisionerDaemon(t, "pd-old", "v1.1.2", "1.0")},
109102
},
110103
{
111104
name: "one up to date, one newer",
112105
currentVersion: "v1.2.3",
113106
currentAPIMajorVersion: provisionersdk.CurrentMajor,
114107
expectedSeverity: health.SeverityWarning,
115108
expectedWarningCode: health.CodeProvisionerDaemonVersionMismatch,
116-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(
117-
fakeProvisionerDaemon(t, "pd-ok", "v1.2.3", "1.0"),
118-
fakeProvisionerDaemon(t, "pd-new", "v2.3.4", "1.0")),
109+
provisionerDaemons: []database.ProvisionerDaemon{fakeProvisionerDaemon(t, "pd-ok", "v1.2.3", "1.0"), fakeProvisionerDaemon(t, "pd-new", "v2.3.4", "1.0")},
119110
},
120111
{
121112
name: "one up to date, one stale older",
122113
currentVersion: "v2.3.4",
123114
currentAPIMajorVersion: provisionersdk.CurrentMajor,
124115
expectedSeverity: health.SeverityOK,
125-
provisionerDaemonsFn: fakeProvisionerDaemonsFn(
126-
fakeProvisionerDaemonStale(t, "pd-ok", "v1.2.3", "0.9", dbtime.Now().Add(-5*time.Minute)),
127-
fakeProvisionerDaemon(t, "pd-new", "v2.3.4", "1.0")),
116+
provisionerDaemons: []database.ProvisionerDaemon{fakeProvisionerDaemonStale(t, "pd-ok", "v1.2.3", "0.9", dbtime.Now().Add(-5*time.Minute)), fakeProvisionerDaemon(t, "pd-new", "v2.3.4", "1.0")},
128117
},
129118
} {
130119
tt := tt
@@ -138,14 +127,16 @@ func TestProvisionerDaemonReport(t *testing.T) {
138127
if tt.currentAPIMajorVersion == 0 {
139128
opts.CurrentAPIMajorVersion = provisionersdk.CurrentMajor
140129
}
141-
if tt.provisionerDaemonsFn != nil {
142-
opts.ProvisionerDaemonsFn = tt.provisionerDaemonsFn
143-
}
144130
now := dbtime.Now()
145131
opts.TimeNowFn = func() time.Time {
146132
return now
147133
}
148134

135+
ctrl := gomock.NewController(t)
136+
mDB := dbmock.NewMockStore(ctrl)
137+
mDB.EXPECT().GetProvisionerDaemons(gomock.Any()).AnyTimes().Return(tt.provisionerDaemons, tt.provisionerDaemonsErr)
138+
opts.Store = mDB
139+
149140
rpt.Run(context.Background(), &opts)
150141

151142
assert.Equal(t, tt.expectedSeverity, rpt.Severity)
@@ -183,18 +174,6 @@ func fakeProvisionerDaemon(t *testing.T, name, version, apiVersion string) datab
183174
}
184175
}
185176

186-
func fakeProvisionerDaemonsFn(pds ...database.ProvisionerDaemon) func(context.Context) ([]database.ProvisionerDaemon, error) {
187-
return func(context.Context) ([]database.ProvisionerDaemon, error) {
188-
return pds, nil
189-
}
190-
}
191-
192-
func fakeProvisionerDaemonsFnErr(err error) func(context.Context) ([]database.ProvisionerDaemon, error) {
193-
return func(context.Context) ([]database.ProvisionerDaemon, error) {
194-
return nil, err
195-
}
196-
}
197-
198177
func fakeProvisionerDaemonStale(t *testing.T, name, version, apiVersion string, lastSeenAt time.Time) database.ProvisionerDaemon {
199178
t.Helper()
200179
d := fakeProvisionerDaemon(t, name, version, apiVersion)

0 commit comments

Comments
 (0)