Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit700b51a

Browse files
authored
Merge branch 'main' into restructure-new
2 parentsc3728ba +a4d785d commit700b51a

File tree

8 files changed

+198
-191
lines changed

8 files changed

+198
-191
lines changed

‎coderd/coderdtest/coderdtest.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,10 @@ func NewOptions(t testing.TB, options *Options) (func(http.Handler), context.Can
268268
ifoptions.DeploymentValues==nil {
269269
options.DeploymentValues=DeploymentValues(t)
270270
}
271-
// This value is not safe to run in parallel. Force it to be false.
272-
options.DeploymentValues.DisableOwnerWorkspaceExec=false
271+
// This value is not safe to run in parallel.
272+
ifoptions.DeploymentValues.DisableOwnerWorkspaceExec {
273+
t.Logf("WARNING: DisableOwnerWorkspaceExec is set, this is not safe in parallel tests!")
274+
}
273275

274276
// If no ratelimits are set, disable all rate limiting for tests.
275277
ifoptions.APIRateLimit==0 {
@@ -1385,10 +1387,13 @@ func SDKError(t testing.TB, err error) *codersdk.Error {
13851387
returncerr
13861388
}
13871389

1388-
funcDeploymentValues(t testing.TB)*codersdk.DeploymentValues {
1389-
varcfg codersdk.DeploymentValues
1390+
funcDeploymentValues(t testing.TB,mut...func(*codersdk.DeploymentValues))*codersdk.DeploymentValues {
1391+
cfg:=&codersdk.DeploymentValues{}
13901392
opts:=cfg.Options()
13911393
err:=opts.SetDefaults()
13921394
require.NoError(t,err)
1393-
return&cfg
1395+
for_,fn:=rangemut {
1396+
fn(cfg)
1397+
}
1398+
returncfg
13941399
}

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -236,20 +236,23 @@ var (
236236
Identifier: rbac.RoleIdentifier{Name:"system"},
237237
DisplayName:"Coder",
238238
Site:rbac.Permissions(map[string][]policy.Action{
239-
rbac.ResourceWildcard.Type: {policy.ActionRead},
240-
rbac.ResourceApiKey.Type:rbac.ResourceApiKey.AvailableActions(),
241-
rbac.ResourceGroup.Type: {policy.ActionCreate,policy.ActionUpdate},
242-
rbac.ResourceAssignRole.Type:rbac.ResourceAssignRole.AvailableActions(),
243-
rbac.ResourceAssignOrgRole.Type:rbac.ResourceAssignOrgRole.AvailableActions(),
244-
rbac.ResourceSystem.Type: {policy.WildcardSymbol},
245-
rbac.ResourceOrganization.Type: {policy.ActionCreate,policy.ActionRead},
246-
rbac.ResourceOrganizationMember.Type: {policy.ActionCreate},
247-
rbac.ResourceProvisionerDaemon.Type: {policy.ActionCreate,policy.ActionUpdate},
248-
rbac.ResourceProvisionerKeys.Type: {policy.ActionCreate,policy.ActionRead,policy.ActionDelete},
249-
rbac.ResourceUser.Type:rbac.ResourceUser.AvailableActions(),
250-
rbac.ResourceWorkspaceDormant.Type: {policy.ActionUpdate,policy.ActionDelete,policy.ActionWorkspaceStop},
251-
rbac.ResourceWorkspace.Type: {policy.ActionUpdate,policy.ActionDelete,policy.ActionWorkspaceStart,policy.ActionWorkspaceStop,policy.ActionSSH},
252-
rbac.ResourceWorkspaceProxy.Type: {policy.ActionCreate,policy.ActionUpdate,policy.ActionDelete},
239+
rbac.ResourceWildcard.Type: {policy.ActionRead},
240+
rbac.ResourceApiKey.Type:rbac.ResourceApiKey.AvailableActions(),
241+
rbac.ResourceGroup.Type: {policy.ActionCreate,policy.ActionUpdate},
242+
rbac.ResourceAssignRole.Type:rbac.ResourceAssignRole.AvailableActions(),
243+
rbac.ResourceAssignOrgRole.Type:rbac.ResourceAssignOrgRole.AvailableActions(),
244+
rbac.ResourceSystem.Type: {policy.WildcardSymbol},
245+
rbac.ResourceOrganization.Type: {policy.ActionCreate,policy.ActionRead},
246+
rbac.ResourceOrganizationMember.Type: {policy.ActionCreate},
247+
rbac.ResourceProvisionerDaemon.Type: {policy.ActionCreate,policy.ActionUpdate},
248+
rbac.ResourceProvisionerKeys.Type: {policy.ActionCreate,policy.ActionRead,policy.ActionDelete},
249+
rbac.ResourceUser.Type:rbac.ResourceUser.AvailableActions(),
250+
rbac.ResourceWorkspaceDormant.Type: {policy.ActionUpdate,policy.ActionDelete,policy.ActionWorkspaceStop},
251+
rbac.ResourceWorkspace.Type: {policy.ActionUpdate,policy.ActionDelete,policy.ActionWorkspaceStart,policy.ActionWorkspaceStop,policy.ActionSSH},
252+
rbac.ResourceWorkspaceProxy.Type: {policy.ActionCreate,policy.ActionUpdate,policy.ActionDelete},
253+
rbac.ResourceDeploymentConfig.Type: {policy.ActionCreate,policy.ActionUpdate,policy.ActionDelete},
254+
rbac.ResourceNotificationPreference.Type: {policy.ActionCreate,policy.ActionUpdate,policy.ActionDelete},
255+
rbac.ResourceNotificationTemplate.Type: {policy.ActionCreate,policy.ActionUpdate,policy.ActionDelete},
253256
}),
254257
Org:map[string][]rbac.Permission{},
255258
User: []rbac.Permission{},

‎coderd/database/dbmem/dbmem.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10203,7 +10203,7 @@ func (q *FakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
1020310203

1020410204
ifarg.Offset>0 {
1020510205
ifint(arg.Offset)>len(workspaces) {
10206-
return []database.GetWorkspacesRow{},nil
10206+
returnq.convertToWorkspaceRowsNoLock(ctx,[]database.Workspace{},int64(beforePageCount),arg.WithSummary),nil
1020710207
}
1020810208
workspaces=workspaces[arg.Offset:]
1020910209
}

‎coderd/notifications/manager_test.go

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ import (
1515
"github.com/coder/quartz"
1616
"github.com/coder/serpent"
1717

18+
"github.com/coder/coder/v2/coderd/coderdtest"
1819
"github.com/coder/coder/v2/coderd/database"
20+
"github.com/coder/coder/v2/coderd/database/dbauthz"
1921
"github.com/coder/coder/v2/coderd/database/dbgen"
2022
"github.com/coder/coder/v2/coderd/notifications"
2123
"github.com/coder/coder/v2/coderd/notifications/dispatch"
@@ -27,31 +29,34 @@ func TestBufferedUpdates(t *testing.T) {
2729
t.Parallel()
2830

2931
// setup
30-
ctx,logger,db:=setupInMemory(t)
3132

32-
interceptor:=&syncInterceptor{Store:db}
33+
// nolint:gocritic // Unit test.
34+
ctx:=dbauthz.AsSystemRestricted(testutil.Context(t,testutil.WaitSuperLong))
35+
_,_,api:=coderdtest.NewWithAPI(t,nil)
36+
37+
interceptor:=&syncInterceptor{Store:api.Database}
3338
santa:=&santaHandler{}
3439

3540
cfg:=defaultNotificationsConfig(database.NotificationMethodSmtp)
3641
cfg.StoreSyncInterval=serpent.Duration(time.Hour)// Ensure we don't sync the store automatically.
3742

3843
// GIVEN: a manager which will pass or fail notifications based on their "nice" labels
39-
mgr,err:=notifications.NewManager(cfg,interceptor,defaultHelpers(),createMetrics(),logger.Named("notifications-manager"))
44+
mgr,err:=notifications.NewManager(cfg,interceptor,defaultHelpers(),createMetrics(),api.Logger.Named("notifications-manager"))
4045
require.NoError(t,err)
4146
mgr.WithHandlers(map[database.NotificationMethod]notifications.Handler{
4247
database.NotificationMethodSmtp:santa,
4348
})
44-
enq,err:=notifications.NewStoreEnqueuer(cfg,interceptor,defaultHelpers(),logger.Named("notifications-enqueuer"),quartz.NewReal())
49+
enq,err:=notifications.NewStoreEnqueuer(cfg,interceptor,defaultHelpers(),api.Logger.Named("notifications-enqueuer"),quartz.NewReal())
4550
require.NoError(t,err)
4651

47-
user:=dbgen.User(t,db, database.User{})
52+
user:=dbgen.User(t,api.Database, database.User{})
4853

4954
// WHEN: notifications are enqueued which should succeed and fail
50-
_,err=enq.Enqueue(ctx,user.ID,notifications.TemplateWorkspaceDeleted,map[string]string{"nice":"true"},"")// Will succeed.
55+
_,err=enq.Enqueue(ctx,user.ID,notifications.TemplateWorkspaceDeleted,map[string]string{"nice":"true","i":"0"},"")// Will succeed.
5156
require.NoError(t,err)
52-
_,err=enq.Enqueue(ctx,user.ID,notifications.TemplateWorkspaceDeleted,map[string]string{"nice":"true"},"")// Will succeed.
57+
_,err=enq.Enqueue(ctx,user.ID,notifications.TemplateWorkspaceDeleted,map[string]string{"nice":"true","i":"1"},"")// Will succeed.
5358
require.NoError(t,err)
54-
_,err=enq.Enqueue(ctx,user.ID,notifications.TemplateWorkspaceDeleted,map[string]string{"nice":"false"},"")// Will fail.
59+
_,err=enq.Enqueue(ctx,user.ID,notifications.TemplateWorkspaceDeleted,map[string]string{"nice":"false","i":"2"},"")// Will fail.
5560
require.NoError(t,err)
5661

5762
mgr.Run(ctx)
@@ -95,7 +100,10 @@ func TestBuildPayload(t *testing.T) {
95100
t.Parallel()
96101

97102
// SETUP
98-
ctx,logger,db:=setupInMemory(t)
103+
104+
// nolint:gocritic // Unit test.
105+
ctx:=dbauthz.AsSystemRestricted(testutil.Context(t,testutil.WaitSuperLong))
106+
_,_,api:=coderdtest.NewWithAPI(t,nil)
99107

100108
// GIVEN: a set of helpers to be injected into the templates
101109
constlabel="Click here!"
@@ -107,7 +115,7 @@ func TestBuildPayload(t *testing.T) {
107115
}
108116

109117
// GIVEN: an enqueue interceptor which returns mock metadata
110-
interceptor:=newEnqueueInterceptor(db,
118+
interceptor:=newEnqueueInterceptor(api.Database,
111119
// Inject custom message metadata to influence the payload construction.
112120
func() database.FetchNewMessageMetadataRow {
113121
// Inject template actions which use injected help functions.
@@ -129,7 +137,7 @@ func TestBuildPayload(t *testing.T) {
129137
}
130138
})
131139

132-
enq,err:=notifications.NewStoreEnqueuer(defaultNotificationsConfig(database.NotificationMethodSmtp),interceptor,helpers,logger.Named("notifications-enqueuer"),quartz.NewReal())
140+
enq,err:=notifications.NewStoreEnqueuer(defaultNotificationsConfig(database.NotificationMethodSmtp),interceptor,helpers,api.Logger.Named("notifications-enqueuer"),quartz.NewReal())
133141
require.NoError(t,err)
134142

135143
// WHEN: a notification is enqueued
@@ -149,10 +157,13 @@ func TestStopBeforeRun(t *testing.T) {
149157
t.Parallel()
150158

151159
// SETUP
152-
ctx,logger,db:=setupInMemory(t)
160+
161+
// nolint:gocritic // Unit test.
162+
ctx:=dbauthz.AsSystemRestricted(testutil.Context(t,testutil.WaitSuperLong))
163+
_,_,api:=coderdtest.NewWithAPI(t,nil)
153164

154165
// GIVEN: a standard manager
155-
mgr,err:=notifications.NewManager(defaultNotificationsConfig(database.NotificationMethodSmtp),db,defaultHelpers(),createMetrics(),logger.Named("notifications-manager"))
166+
mgr,err:=notifications.NewManager(defaultNotificationsConfig(database.NotificationMethodSmtp),api.Database,defaultHelpers(),createMetrics(),api.Logger.Named("notifications-manager"))
156167
require.NoError(t,err)
157168

158169
// THEN: validate that the manager can be stopped safely without Run() having been called yet

‎coderd/notifications/metrics_test.go

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package notifications_test
22

33
import (
44
"context"
5+
"strconv"
56
"testing"
67
"time"
78

@@ -17,7 +18,9 @@ import (
1718

1819
"github.com/coder/serpent"
1920

21+
"github.com/coder/coder/v2/coderd/coderdtest"
2022
"github.com/coder/coder/v2/coderd/database"
23+
"github.com/coder/coder/v2/coderd/database/dbauthz"
2124
"github.com/coder/coder/v2/coderd/database/dbtestutil"
2225
"github.com/coder/coder/v2/coderd/notifications"
2326
"github.com/coder/coder/v2/coderd/notifications/dispatch"
@@ -33,7 +36,9 @@ func TestMetrics(t *testing.T) {
3336
t.Skip("This test requires postgres; it relies on business-logic only implemented in the database")
3437
}
3538

36-
ctx,logger,store:=setup(t)
39+
// nolint:gocritic // Unit test.
40+
ctx:=dbauthz.AsSystemRestricted(testutil.Context(t,testutil.WaitSuperLong))
41+
_,_,api:=coderdtest.NewWithAPI(t,nil)
3742

3843
reg:=prometheus.NewRegistry()
3944
metrics:=notifications.NewMetrics(reg)
@@ -53,7 +58,7 @@ func TestMetrics(t *testing.T) {
5358
cfg.RetryInterval=serpent.Duration(time.Millisecond*50)
5459
cfg.StoreSyncInterval=serpent.Duration(time.Millisecond*100)// Twice as long as fetch interval to ensure we catch pending updates.
5560

56-
mgr,err:=notifications.NewManager(cfg,store,defaultHelpers(),metrics,logger.Named("manager"))
61+
mgr,err:=notifications.NewManager(cfg,api.Database,defaultHelpers(),metrics,api.Logger.Named("manager"))
5762
require.NoError(t,err)
5863
t.Cleanup(func() {
5964
assert.NoError(t,mgr.Stop(ctx))
@@ -63,10 +68,10 @@ func TestMetrics(t *testing.T) {
6368
method:handler,
6469
})
6570

66-
enq,err:=notifications.NewStoreEnqueuer(cfg,store,defaultHelpers(),logger.Named("enqueuer"),quartz.NewReal())
71+
enq,err:=notifications.NewStoreEnqueuer(cfg,api.Database,defaultHelpers(),api.Logger.Named("enqueuer"),quartz.NewReal())
6772
require.NoError(t,err)
6873

69-
user:=createSampleUser(t,store)
74+
user:=createSampleUser(t,api.Database)
7075

7176
// Build fingerprints for the two different series we expect.
7277
methodTemplateFP:=fingerprintLabels(notifications.LabelMethod,string(method),notifications.LabelTemplateID,template.String())
@@ -204,7 +209,9 @@ func TestPendingUpdatesMetric(t *testing.T) {
204209
t.Parallel()
205210

206211
// SETUP
207-
ctx,logger,store:=setupInMemory(t)
212+
// nolint:gocritic // Unit test.
213+
ctx:=dbauthz.AsSystemRestricted(testutil.Context(t,testutil.WaitSuperLong))
214+
_,_,api:=coderdtest.NewWithAPI(t,nil)
208215

209216
reg:=prometheus.NewRegistry()
210217
metrics:=notifications.NewMetrics(reg)
@@ -218,9 +225,9 @@ func TestPendingUpdatesMetric(t *testing.T) {
218225
cfg.RetryInterval=serpent.Duration(time.Hour)// Delay retries so they don't interfere.
219226
cfg.StoreSyncInterval=serpent.Duration(time.Millisecond*100)
220227

221-
syncer:=&syncInterceptor{Store:store}
228+
syncer:=&syncInterceptor{Store:api.Database}
222229
interceptor:=newUpdateSignallingInterceptor(syncer)
223-
mgr,err:=notifications.NewManager(cfg,interceptor,defaultHelpers(),metrics,logger.Named("manager"))
230+
mgr,err:=notifications.NewManager(cfg,interceptor,defaultHelpers(),metrics,api.Logger.Named("manager"))
224231
require.NoError(t,err)
225232
t.Cleanup(func() {
226233
assert.NoError(t,mgr.Stop(ctx))
@@ -230,10 +237,10 @@ func TestPendingUpdatesMetric(t *testing.T) {
230237
method:handler,
231238
})
232239

233-
enq,err:=notifications.NewStoreEnqueuer(cfg,store,defaultHelpers(),logger.Named("enqueuer"),quartz.NewReal())
240+
enq,err:=notifications.NewStoreEnqueuer(cfg,api.Database,defaultHelpers(),api.Logger.Named("enqueuer"),quartz.NewReal())
234241
require.NoError(t,err)
235242

236-
user:=createSampleUser(t,store)
243+
user:=createSampleUser(t,api.Database)
237244

238245
// WHEN: 2 notifications are enqueued, one of which will fail and one which will succeed
239246
_,err=enq.Enqueue(ctx,user.ID,template,map[string]string{"type":"success"},"test")// this will succeed
@@ -279,7 +286,9 @@ func TestInflightDispatchesMetric(t *testing.T) {
279286
t.Parallel()
280287

281288
// SETUP
282-
ctx,logger,store:=setupInMemory(t)
289+
// nolint:gocritic // Unit test.
290+
ctx:=dbauthz.AsSystemRestricted(testutil.Context(t,testutil.WaitSuperLong))
291+
_,_,api:=coderdtest.NewWithAPI(t,nil)
283292

284293
reg:=prometheus.NewRegistry()
285294
metrics:=notifications.NewMetrics(reg)
@@ -294,7 +303,7 @@ func TestInflightDispatchesMetric(t *testing.T) {
294303
cfg.RetryInterval=serpent.Duration(time.Hour)// Delay retries so they don't interfere.
295304
cfg.StoreSyncInterval=serpent.Duration(time.Millisecond*100)
296305

297-
mgr,err:=notifications.NewManager(cfg,store,defaultHelpers(),metrics,logger.Named("manager"))
306+
mgr,err:=notifications.NewManager(cfg,api.Database,defaultHelpers(),metrics,api.Logger.Named("manager"))
298307
require.NoError(t,err)
299308
t.Cleanup(func() {
300309
assert.NoError(t,mgr.Stop(ctx))
@@ -307,15 +316,15 @@ func TestInflightDispatchesMetric(t *testing.T) {
307316
method:delayer,
308317
})
309318

310-
enq,err:=notifications.NewStoreEnqueuer(cfg,store,defaultHelpers(),logger.Named("enqueuer"),quartz.NewReal())
319+
enq,err:=notifications.NewStoreEnqueuer(cfg,api.Database,defaultHelpers(),api.Logger.Named("enqueuer"),quartz.NewReal())
311320
require.NoError(t,err)
312321

313-
user:=createSampleUser(t,store)
322+
user:=createSampleUser(t,api.Database)
314323

315324
// WHEN: notifications are enqueued which will succeed (and be delayed during dispatch)
316325
constmsgCount=2
317326
fori:=0;i<msgCount;i++ {
318-
_,err=enq.Enqueue(ctx,user.ID,template,map[string]string{"type":"success"},"test")
327+
_,err=enq.Enqueue(ctx,user.ID,template,map[string]string{"type":"success","i":strconv.Itoa(i)},"test")
319328
require.NoError(t,err)
320329
}
321330

@@ -349,7 +358,10 @@ func TestCustomMethodMetricCollection(t *testing.T) {
349358
// UpdateNotificationTemplateMethodByID only makes sense with a real database.
350359
t.Skip("This test requires postgres; it relies on business-logic only implemented in the database")
351360
}
352-
ctx,logger,store:=setup(t)
361+
362+
// nolint:gocritic // Unit test.
363+
ctx:=dbauthz.AsSystemRestricted(testutil.Context(t,testutil.WaitSuperLong))
364+
_,_,api:=coderdtest.NewWithAPI(t,nil)
353365

354366
var (
355367
reg=prometheus.NewRegistry()
@@ -364,7 +376,7 @@ func TestCustomMethodMetricCollection(t *testing.T) {
364376
)
365377

366378
// GIVEN: a template whose notification method differs from the default.
367-
out,err:=store.UpdateNotificationTemplateMethodByID(ctx, database.UpdateNotificationTemplateMethodByIDParams{
379+
out,err:=api.Database.UpdateNotificationTemplateMethodByID(ctx, database.UpdateNotificationTemplateMethodByIDParams{
368380
ID:template,
369381
Method: database.NullNotificationMethod{NotificationMethod:customMethod,Valid:true},
370382
})
@@ -373,7 +385,7 @@ func TestCustomMethodMetricCollection(t *testing.T) {
373385

374386
// WHEN: two notifications (each with different templates) are enqueued.
375387
cfg:=defaultNotificationsConfig(defaultMethod)
376-
mgr,err:=notifications.NewManager(cfg,store,defaultHelpers(),metrics,logger.Named("manager"))
388+
mgr,err:=notifications.NewManager(cfg,api.Database,defaultHelpers(),metrics,api.Logger.Named("manager"))
377389
require.NoError(t,err)
378390
t.Cleanup(func() {
379391
assert.NoError(t,mgr.Stop(ctx))
@@ -386,10 +398,10 @@ func TestCustomMethodMetricCollection(t *testing.T) {
386398
customMethod:webhookHandler,
387399
})
388400

389-
enq,err:=notifications.NewStoreEnqueuer(cfg,store,defaultHelpers(),logger.Named("enqueuer"),quartz.NewReal())
401+
enq,err:=notifications.NewStoreEnqueuer(cfg,api.Database,defaultHelpers(),api.Logger.Named("enqueuer"),quartz.NewReal())
390402
require.NoError(t,err)
391403

392-
user:=createSampleUser(t,store)
404+
user:=createSampleUser(t,api.Database)
393405

394406
_,err=enq.Enqueue(ctx,user.ID,template,map[string]string{"type":"success"},"test")
395407
require.NoError(t,err)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp