Skip to content

Commit 2b87ae1

Browse files
committed
Fix duplicate test, remove pointer.Handle
1 parent b0a3c95 commit 2b87ae1

File tree

9 files changed

+50
-116
lines changed

9 files changed

+50
-116
lines changed

coderd/coderd.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"net/url"
88
"path/filepath"
99
"sync"
10+
"sync/atomic"
1011
"time"
1112

1213
"github.com/andybalholm/brotli"
@@ -32,7 +33,6 @@ import (
3233
"github.com/coder/coder/coderd/httpapi"
3334
"github.com/coder/coder/coderd/httpmw"
3435
"github.com/coder/coder/coderd/metricscache"
35-
"github.com/coder/coder/coderd/pointer"
3636
"github.com/coder/coder/coderd/rbac"
3737
"github.com/coder/coder/coderd/telemetry"
3838
"github.com/coder/coder/coderd/tracing"
@@ -148,8 +148,9 @@ func New(options *Options) *API {
148148
Logger: options.Logger,
149149
},
150150
metricsCache: metricsCache,
151-
Auditor: pointer.New(options.Auditor),
151+
Auditor: atomic.Pointer[audit.Auditor]{},
152152
}
153+
api.Auditor.Store(&options.Auditor)
153154

154155
if options.TailscaleEnable {
155156
api.workspaceAgentCache = wsconncache.New(api.dialWorkspaceAgentTailnet, 0)
@@ -498,7 +499,7 @@ func New(options *Options) *API {
498499

499500
type API struct {
500501
*Options
501-
Auditor *pointer.Handle[audit.Auditor]
502+
Auditor atomic.Pointer[audit.Auditor]
502503
HTTPAuth *HTTPAuthorizer
503504

504505
// APIHandler serves "/api/v2"

coderd/pointer/pointer.go

Lines changed: 0 additions & 38 deletions
This file was deleted.

coderd/pointer/pointer_test.go

Lines changed: 0 additions & 36 deletions
This file was deleted.

coderd/templates.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func (api *API) template(rw http.ResponseWriter, r *http.Request) {
8585
func (api *API) deleteTemplate(rw http.ResponseWriter, r *http.Request) {
8686
var (
8787
template = httpmw.TemplateParam(r)
88-
_, auditor = api.Auditor.Load(r.Context())
88+
auditor = *api.Auditor.Load()
8989
aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{
9090
Audit: auditor,
9191
Log: api.Logger,
@@ -140,7 +140,7 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
140140
createTemplate codersdk.CreateTemplateRequest
141141
organization = httpmw.OrganizationParam(r)
142142
apiKey = httpmw.APIKey(r)
143-
_, auditor = api.Auditor.Load(r.Context())
143+
auditor = *api.Auditor.Load()
144144
templateAudit, commitTemplateAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{
145145
Audit: auditor,
146146
Log: api.Logger,
@@ -437,7 +437,7 @@ func (api *API) templateByOrganizationAndName(rw http.ResponseWriter, r *http.Re
437437
func (api *API) patchTemplateMeta(rw http.ResponseWriter, r *http.Request) {
438438
var (
439439
template = httpmw.TemplateParam(r)
440-
_, auditor = api.Auditor.Load(r.Context())
440+
auditor = *api.Auditor.Load()
441441
aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{
442442
Audit: auditor,
443443
Log: api.Logger,

coderd/templateversions.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ func (api *API) templateVersionByName(rw http.ResponseWriter, r *http.Request) {
559559
func (api *API) patchActiveTemplateVersion(rw http.ResponseWriter, r *http.Request) {
560560
var (
561561
template = httpmw.TemplateParam(r)
562-
_, auditor = api.Auditor.Load(r.Context())
562+
auditor = *api.Auditor.Load()
563563
aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{
564564
Audit: auditor,
565565
Log: api.Logger,
@@ -632,7 +632,7 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
632632
var (
633633
apiKey = httpmw.APIKey(r)
634634
organization = httpmw.OrganizationParam(r)
635-
_, auditor = api.Auditor.Load(r.Context())
635+
auditor = *api.Auditor.Load()
636636
aReq, commitAudit = audit.InitRequest[database.TemplateVersion](rw, &audit.RequestParams{
637637
Audit: auditor,
638638
Log: api.Logger,

coderd/users.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func (api *API) users(rw http.ResponseWriter, r *http.Request) {
255255

256256
// Creates a new user.
257257
func (api *API) postUser(rw http.ResponseWriter, r *http.Request) {
258-
_, auditor := api.Auditor.Load(r.Context())
258+
auditor := *api.Auditor.Load()
259259
aReq, commitAudit := audit.InitRequest[database.User](rw, &audit.RequestParams{
260260
Audit: auditor,
261261
Log: api.Logger,
@@ -340,7 +340,7 @@ func (api *API) postUser(rw http.ResponseWriter, r *http.Request) {
340340
}
341341

342342
func (api *API) deleteUser(rw http.ResponseWriter, r *http.Request) {
343-
_, auditor := api.Auditor.Load(r.Context())
343+
auditor := *api.Auditor.Load()
344344
user := httpmw.UserParam(r)
345345
aReq, commitAudit := audit.InitRequest[database.User](rw, &audit.RequestParams{
346346
Audit: auditor,
@@ -416,7 +416,7 @@ func (api *API) userByName(rw http.ResponseWriter, r *http.Request) {
416416
func (api *API) putUserProfile(rw http.ResponseWriter, r *http.Request) {
417417
var (
418418
user = httpmw.UserParam(r)
419-
_, auditor = api.Auditor.Load(r.Context())
419+
auditor = *api.Auditor.Load()
420420
aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{
421421
Audit: auditor,
422422
Log: api.Logger,
@@ -497,7 +497,7 @@ func (api *API) putUserStatus(status database.UserStatus) func(rw http.ResponseW
497497
var (
498498
user = httpmw.UserParam(r)
499499
apiKey = httpmw.APIKey(r)
500-
_, auditor = api.Auditor.Load(r.Context())
500+
auditor = *api.Auditor.Load()
501501
aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{
502502
Audit: auditor,
503503
Log: api.Logger,
@@ -564,7 +564,7 @@ func (api *API) putUserPassword(rw http.ResponseWriter, r *http.Request) {
564564
var (
565565
user = httpmw.UserParam(r)
566566
params codersdk.UpdateUserPasswordRequest
567-
_, auditor = api.Auditor.Load(r.Context())
567+
auditor = *api.Auditor.Load()
568568
aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{
569569
Audit: auditor,
570570
Log: api.Logger,
@@ -703,7 +703,7 @@ func (api *API) putUserRoles(rw http.ResponseWriter, r *http.Request) {
703703
user = httpmw.UserParam(r)
704704
actorRoles = httpmw.UserAuthorization(r)
705705
apiKey = httpmw.APIKey(r)
706-
_, auditor = api.Auditor.Load(r.Context())
706+
auditor = *api.Auditor.Load()
707707
aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{
708708
Audit: auditor,
709709
Log: api.Logger,

coderd/workspaces.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,9 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req
217217
var (
218218
organization = httpmw.OrganizationParam(r)
219219
apiKey = httpmw.APIKey(r)
220-
_, auditor = api.Auditor.Load(r.Context())
220+
auditor = api.Auditor.Load()
221221
aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{
222-
Audit: auditor,
222+
Audit: *auditor,
223223
Log: api.Logger,
224224
Request: r,
225225
Action: database.AuditActionCreate,
@@ -481,9 +481,9 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req
481481
func (api *API) patchWorkspace(rw http.ResponseWriter, r *http.Request) {
482482
var (
483483
workspace = httpmw.WorkspaceParam(r)
484-
_, auditor = api.Auditor.Load(r.Context())
484+
auditor = api.Auditor.Load()
485485
aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{
486-
Audit: auditor,
486+
Audit: *auditor,
487487
Log: api.Logger,
488488
Request: r,
489489
Action: database.AuditActionWrite,
@@ -558,9 +558,9 @@ func (api *API) patchWorkspace(rw http.ResponseWriter, r *http.Request) {
558558
func (api *API) putWorkspaceAutostart(rw http.ResponseWriter, r *http.Request) {
559559
var (
560560
workspace = httpmw.WorkspaceParam(r)
561-
_, auditor = api.Auditor.Load(r.Context())
561+
auditor = api.Auditor.Load()
562562
aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{
563-
Audit: auditor,
563+
Audit: *auditor,
564564
Log: api.Logger,
565565
Request: r,
566566
Action: database.AuditActionWrite,
@@ -619,9 +619,9 @@ func (api *API) putWorkspaceAutostart(rw http.ResponseWriter, r *http.Request) {
619619
func (api *API) putWorkspaceTTL(rw http.ResponseWriter, r *http.Request) {
620620
var (
621621
workspace = httpmw.WorkspaceParam(r)
622-
_, auditor = api.Auditor.Load(r.Context())
622+
auditor = api.Auditor.Load()
623623
aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{
624-
Audit: auditor,
624+
Audit: *auditor,
625625
Log: api.Logger,
626626
Request: r,
627627
Action: database.AuditActionWrite,

enterprise/coderd/coderd.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,6 @@ func New(ctx context.Context, options *Options) (*API, error) {
6565
if err != nil {
6666
return nil, xerrors.Errorf("update entitlements: %w", err)
6767
}
68-
api.closeLicenseSubscribe, err = api.Pubsub.Subscribe(PubsubEventLicenses, func(ctx context.Context, message []byte) {
69-
_ = api.updateEntitlements(ctx)
70-
})
71-
if err != nil {
72-
return nil, xerrors.Errorf("subscribe to license updates: %w", err)
73-
}
7468
go api.runEntitlementsLoop(ctx)
7569

7670
return api, nil
@@ -88,7 +82,6 @@ type API struct {
8882
AGPL *coderd.API
8983
*Options
9084

91-
closeLicenseSubscribe func()
9285
cancelEntitlementsLoop func()
9386
mutex sync.RWMutex
9487
hasLicense bool
@@ -97,7 +90,6 @@ type API struct {
9790
}
9891

9992
func (api *API) Close() error {
100-
api.closeLicenseSubscribe()
10193
api.cancelEntitlementsLoop()
10294
return api.AGPL.Close()
10395
}
@@ -160,7 +152,7 @@ func (api *API) updateEntitlements(ctx context.Context) error {
160152
backends.NewSlog(api.Logger),
161153
)
162154
}
163-
api.AGPL.Auditor.Store(auditor)
155+
api.AGPL.Auditor.Store(&auditor)
164156
}
165157

166158
api.hasLicense = hasLicense
@@ -242,7 +234,11 @@ func (api *API) runEntitlementsLoop(ctx context.Context) {
242234
})
243235
if err != nil {
244236
api.Logger.Warn(ctx, "failed to subscribe to license updates", slog.Error(err))
245-
time.Sleep(b.NextBackOff())
237+
select {
238+
case <-ctx.Done():
239+
return
240+
case <-time.After(b.NextBackOff()):
241+
}
246242
continue
247243
}
248244
// nolint: revive

enterprise/coderd/coderd_test.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,6 @@ func TestEntitlements(t *testing.T) {
3434
require.False(t, res.HasLicense)
3535
require.Empty(t, res.Warnings)
3636
})
37-
t.Run("NoLicense", func(t *testing.T) {
38-
t.Parallel()
39-
client := coderdenttest.New(t, nil)
40-
res, err := client.Entitlements(context.Background())
41-
require.NoError(t, err)
42-
require.False(t, res.HasLicense)
43-
require.Empty(t, res.Warnings)
44-
})
4537
t.Run("FullLicense", func(t *testing.T) {
4638
t.Parallel()
4739
client := coderdenttest.New(t, nil)
@@ -153,6 +145,7 @@ func TestEntitlements(t *testing.T) {
153145
require.NoError(t, err)
154146
require.False(t, entitlements.HasLicense)
155147
coderdtest.CreateFirstUser(t, client)
148+
// Valid
156149
_, err = api.Database.InsertLicense(context.Background(), database.InsertLicenseParams{
157150
UploadedAt: database.Now(),
158151
Exp: database.Now().AddDate(1, 0, 0),
@@ -161,6 +154,22 @@ func TestEntitlements(t *testing.T) {
161154
}),
162155
})
163156
require.NoError(t, err)
157+
// Expired
158+
_, err = api.Database.InsertLicense(context.Background(), database.InsertLicenseParams{
159+
UploadedAt: database.Now(),
160+
Exp: database.Now().AddDate(-1, 0, 0),
161+
JWT: coderdenttest.GenerateLicense(t, coderdenttest.LicenseOptions{
162+
AuditLog: true,
163+
}),
164+
})
165+
require.NoError(t, err)
166+
// Invalid
167+
_, err = api.Database.InsertLicense(context.Background(), database.InsertLicenseParams{
168+
UploadedAt: database.Now(),
169+
Exp: database.Now().AddDate(1, 0, 0),
170+
JWT: "invalid",
171+
})
172+
require.NoError(t, err)
164173
require.Eventually(t, func() bool {
165174
entitlements, err := client.Entitlements(context.Background())
166175
assert.NoError(t, err)
@@ -178,16 +187,18 @@ func TestAuditLogging(t *testing.T) {
178187
coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{
179188
AuditLog: true,
180189
})
181-
_, auditor := api.AGPL.Auditor.Load(context.Background())
190+
auditor := *api.AGPL.Auditor.Load()
182191
ea := audit.NewAuditor(audit.DefaultFilter)
192+
t.Logf("%T = %T", auditor, ea)
183193
assert.Equal(t, reflect.ValueOf(ea).Type(), reflect.ValueOf(auditor).Type())
184194
})
185195
t.Run("Disabled", func(t *testing.T) {
186196
t.Parallel()
187197
client, _, api := coderdenttest.NewWithAPI(t, nil)
188198
coderdtest.CreateFirstUser(t, client)
189-
_, auditor := api.AGPL.Auditor.Load(context.Background())
199+
auditor := *api.AGPL.Auditor.Load()
190200
ea := agplaudit.NewNop()
201+
t.Logf("%T = %T", auditor, ea)
191202
assert.Equal(t, reflect.ValueOf(ea).Type(), reflect.ValueOf(auditor).Type())
192203
})
193204
}

0 commit comments

Comments
 (0)