Skip to content

Commit 8ef1d3e

Browse files
committed
test(dbauthz): migrate TestSystemFunctions to mocked db
- Convert many System functions to s.Mocked with gomock - Add expectations for read/update/create/delete system paths - Fix UpdateWorkspaceBuildCostByID expectation (returns error)
1 parent b615cb1 commit 8ef1d3e

File tree

1 file changed

+117
-121
lines changed

1 file changed

+117
-121
lines changed

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 117 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -3847,127 +3847,123 @@ func (s *MethodTestSuite) TestCryptoKeys() {
38473847
}
38483848

38493849
func (s *MethodTestSuite) TestSystemFunctions() {
3850-
s.Run("UpdateUserLinkedID", s.Subtest(func(db database.Store, check *expects) {
3851-
u := dbgen.User(s.T(), db, database.User{})
3852-
l := dbgen.UserLink(s.T(), db, database.UserLink{UserID: u.ID})
3853-
check.Args(database.UpdateUserLinkedIDParams{
3854-
UserID: u.ID,
3855-
LinkedID: l.LinkedID,
3856-
LoginType: database.LoginTypeGithub,
3857-
}).Asserts(rbac.ResourceSystem, policy.ActionUpdate).Returns(l)
3858-
}))
3859-
s.Run("GetLatestWorkspaceAppStatusesByWorkspaceIDs", s.Subtest(func(db database.Store, check *expects) {
3860-
check.Args([]uuid.UUID{}).Asserts(rbac.ResourceSystem, policy.ActionRead)
3861-
}))
3862-
s.Run("GetWorkspaceAppStatusesByAppIDs", s.Subtest(func(db database.Store, check *expects) {
3863-
check.Args([]uuid.UUID{}).Asserts(rbac.ResourceSystem, policy.ActionRead)
3864-
}))
3865-
s.Run("GetLatestWorkspaceBuildsByWorkspaceIDs", s.Subtest(func(db database.Store, check *expects) {
3866-
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
3867-
ws := dbgen.Workspace(s.T(), db, database.WorkspaceTable{})
3868-
b := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{WorkspaceID: ws.ID})
3869-
check.Args([]uuid.UUID{ws.ID}).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(slice.New(b))
3870-
}))
3871-
s.Run("UpsertDefaultProxy", s.Subtest(func(db database.Store, check *expects) {
3872-
check.Args(database.UpsertDefaultProxyParams{}).Asserts(rbac.ResourceSystem, policy.ActionUpdate).Returns()
3873-
}))
3874-
s.Run("GetUserLinkByLinkedID", s.Subtest(func(db database.Store, check *expects) {
3875-
u := dbgen.User(s.T(), db, database.User{})
3876-
l := dbgen.UserLink(s.T(), db, database.UserLink{UserID: u.ID})
3877-
check.Args(l.LinkedID).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(l)
3878-
}))
3879-
s.Run("GetUserLinkByUserIDLoginType", s.Subtest(func(db database.Store, check *expects) {
3880-
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
3881-
l := dbgen.UserLink(s.T(), db, database.UserLink{})
3882-
check.Args(database.GetUserLinkByUserIDLoginTypeParams{
3883-
UserID: l.UserID,
3884-
LoginType: l.LoginType,
3885-
}).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(l)
3886-
}))
3887-
s.Run("GetLatestWorkspaceBuilds", s.Subtest(func(db database.Store, check *expects) {
3888-
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
3889-
dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{})
3890-
dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{})
3891-
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3892-
}))
3893-
s.Run("GetActiveUserCount", s.Subtest(func(db database.Store, check *expects) {
3894-
check.Args(false).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(int64(0))
3895-
}))
3896-
s.Run("GetUnexpiredLicenses", s.Subtest(func(db database.Store, check *expects) {
3897-
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3898-
}))
3899-
s.Run("GetAuthorizationUserRoles", s.Subtest(func(db database.Store, check *expects) {
3900-
u := dbgen.User(s.T(), db, database.User{})
3901-
check.Args(u.ID).Asserts(rbac.ResourceSystem, policy.ActionRead)
3902-
}))
3903-
s.Run("GetDERPMeshKey", s.Subtest(func(db database.Store, check *expects) {
3904-
db.InsertDERPMeshKey(context.Background(), "testing")
3905-
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3906-
}))
3907-
s.Run("InsertDERPMeshKey", s.Subtest(func(db database.Store, check *expects) {
3908-
check.Args("value").Asserts(rbac.ResourceSystem, policy.ActionCreate).Returns()
3909-
}))
3910-
s.Run("InsertDeploymentID", s.Subtest(func(db database.Store, check *expects) {
3911-
check.Args("value").Asserts(rbac.ResourceSystem, policy.ActionCreate).Returns()
3912-
}))
3913-
s.Run("InsertReplica", s.Subtest(func(db database.Store, check *expects) {
3914-
check.Args(database.InsertReplicaParams{
3915-
ID: uuid.New(),
3916-
}).Asserts(rbac.ResourceSystem, policy.ActionCreate)
3917-
}))
3918-
s.Run("UpdateReplica", s.Subtest(func(db database.Store, check *expects) {
3919-
replica, err := db.InsertReplica(context.Background(), database.InsertReplicaParams{ID: uuid.New()})
3920-
require.NoError(s.T(), err)
3921-
check.Args(database.UpdateReplicaParams{
3922-
ID: replica.ID,
3923-
DatabaseLatency: 100,
3924-
}).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
3925-
}))
3926-
s.Run("DeleteReplicasUpdatedBefore", s.Subtest(func(db database.Store, check *expects) {
3927-
_, err := db.InsertReplica(context.Background(), database.InsertReplicaParams{ID: uuid.New(), UpdatedAt: time.Now()})
3928-
require.NoError(s.T(), err)
3929-
check.Args(time.Now().Add(time.Hour)).Asserts(rbac.ResourceSystem, policy.ActionDelete)
3930-
}))
3931-
s.Run("GetReplicasUpdatedAfter", s.Subtest(func(db database.Store, check *expects) {
3932-
_, err := db.InsertReplica(context.Background(), database.InsertReplicaParams{ID: uuid.New(), UpdatedAt: time.Now()})
3933-
require.NoError(s.T(), err)
3934-
check.Args(time.Now().Add(time.Hour*-1)).Asserts(rbac.ResourceSystem, policy.ActionRead)
3935-
}))
3936-
s.Run("GetUserCount", s.Subtest(func(db database.Store, check *expects) {
3937-
check.Args(false).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(int64(0))
3938-
}))
3939-
s.Run("GetTemplates", s.Subtest(func(db database.Store, check *expects) {
3940-
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
3941-
_ = dbgen.Template(s.T(), db, database.Template{})
3942-
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3943-
}))
3944-
s.Run("UpdateWorkspaceBuildCostByID", s.Subtest(func(db database.Store, check *expects) {
3945-
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
3946-
b := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{})
3947-
o := b
3948-
o.DailyCost = 10
3949-
check.Args(database.UpdateWorkspaceBuildCostByIDParams{
3950-
ID: b.ID,
3951-
DailyCost: 10,
3952-
}).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
3953-
}))
3954-
s.Run("UpdateWorkspaceBuildProvisionerStateByID", s.Subtest(func(db database.Store, check *expects) {
3955-
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
3956-
ws := dbgen.Workspace(s.T(), db, database.WorkspaceTable{})
3957-
build := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{WorkspaceID: ws.ID, JobID: uuid.New()})
3958-
check.Args(database.UpdateWorkspaceBuildProvisionerStateByIDParams{
3959-
ID: build.ID,
3960-
ProvisionerState: []byte("testing"),
3961-
}).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
3962-
}))
3963-
s.Run("UpsertLastUpdateCheck", s.Subtest(func(db database.Store, check *expects) {
3964-
check.Args("value").Asserts(rbac.ResourceSystem, policy.ActionUpdate)
3965-
}))
3966-
s.Run("GetLastUpdateCheck", s.Subtest(func(db database.Store, check *expects) {
3967-
err := db.UpsertLastUpdateCheck(context.Background(), "value")
3968-
require.NoError(s.T(), err)
3969-
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3970-
}))
3850+
s.Run("UpdateUserLinkedID", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
3851+
u := testutil.Fake(s.T(), faker, database.User{})
3852+
l := testutil.Fake(s.T(), faker, database.UserLink{UserID: u.ID})
3853+
arg := database.UpdateUserLinkedIDParams{UserID: u.ID, LinkedID: l.LinkedID, LoginType: database.LoginTypeGithub}
3854+
dbm.EXPECT().UpdateUserLinkedID(gomock.Any(), arg).Return(l, nil).AnyTimes()
3855+
check.Args(arg).Asserts(rbac.ResourceSystem, policy.ActionUpdate).Returns(l)
3856+
}))
3857+
s.Run("GetLatestWorkspaceAppStatusesByWorkspaceIDs", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3858+
ids := []uuid.UUID{uuid.New()}
3859+
dbm.EXPECT().GetLatestWorkspaceAppStatusesByWorkspaceIDs(gomock.Any(), ids).Return([]database.WorkspaceAppStatus{}, nil).AnyTimes()
3860+
check.Args(ids).Asserts(rbac.ResourceSystem, policy.ActionRead)
3861+
}))
3862+
s.Run("GetWorkspaceAppStatusesByAppIDs", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3863+
ids := []uuid.UUID{uuid.New()}
3864+
dbm.EXPECT().GetWorkspaceAppStatusesByAppIDs(gomock.Any(), ids).Return([]database.WorkspaceAppStatus{}, nil).AnyTimes()
3865+
check.Args(ids).Asserts(rbac.ResourceSystem, policy.ActionRead)
3866+
}))
3867+
s.Run("GetLatestWorkspaceBuildsByWorkspaceIDs", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
3868+
wsID := uuid.New()
3869+
b := testutil.Fake(s.T(), faker, database.WorkspaceBuild{})
3870+
dbm.EXPECT().GetLatestWorkspaceBuildsByWorkspaceIDs(gomock.Any(), []uuid.UUID{wsID}).Return([]database.WorkspaceBuild{b}, nil).AnyTimes()
3871+
check.Args([]uuid.UUID{wsID}).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(slice.New(b))
3872+
}))
3873+
s.Run("UpsertDefaultProxy", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3874+
arg := database.UpsertDefaultProxyParams{}
3875+
dbm.EXPECT().UpsertDefaultProxy(gomock.Any(), arg).Return(nil).AnyTimes()
3876+
check.Args(arg).Asserts(rbac.ResourceSystem, policy.ActionUpdate).Returns()
3877+
}))
3878+
s.Run("GetUserLinkByLinkedID", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
3879+
l := testutil.Fake(s.T(), faker, database.UserLink{})
3880+
dbm.EXPECT().GetUserLinkByLinkedID(gomock.Any(), l.LinkedID).Return(l, nil).AnyTimes()
3881+
check.Args(l.LinkedID).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(l)
3882+
}))
3883+
s.Run("GetUserLinkByUserIDLoginType", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
3884+
l := testutil.Fake(s.T(), faker, database.UserLink{})
3885+
arg := database.GetUserLinkByUserIDLoginTypeParams{UserID: l.UserID, LoginType: l.LoginType}
3886+
dbm.EXPECT().GetUserLinkByUserIDLoginType(gomock.Any(), arg).Return(l, nil).AnyTimes()
3887+
check.Args(arg).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(l)
3888+
}))
3889+
s.Run("GetLatestWorkspaceBuilds", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3890+
dbm.EXPECT().GetLatestWorkspaceBuilds(gomock.Any()).Return([]database.WorkspaceBuild{}, nil).AnyTimes()
3891+
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3892+
}))
3893+
s.Run("GetActiveUserCount", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3894+
dbm.EXPECT().GetActiveUserCount(gomock.Any(), false).Return(int64(0), nil).AnyTimes()
3895+
check.Args(false).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(int64(0))
3896+
}))
3897+
s.Run("GetUnexpiredLicenses", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3898+
dbm.EXPECT().GetUnexpiredLicenses(gomock.Any()).Return([]database.License{}, nil).AnyTimes()
3899+
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3900+
}))
3901+
s.Run("GetAuthorizationUserRoles", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
3902+
u := testutil.Fake(s.T(), faker, database.User{})
3903+
dbm.EXPECT().GetAuthorizationUserRoles(gomock.Any(), u.ID).Return(database.GetAuthorizationUserRolesRow{}, nil).AnyTimes()
3904+
check.Args(u.ID).Asserts(rbac.ResourceSystem, policy.ActionRead)
3905+
}))
3906+
s.Run("GetDERPMeshKey", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3907+
dbm.EXPECT().GetDERPMeshKey(gomock.Any()).Return("testing", nil).AnyTimes()
3908+
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3909+
}))
3910+
s.Run("InsertDERPMeshKey", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3911+
dbm.EXPECT().InsertDERPMeshKey(gomock.Any(), "value").Return(nil).AnyTimes()
3912+
check.Args("value").Asserts(rbac.ResourceSystem, policy.ActionCreate).Returns()
3913+
}))
3914+
s.Run("InsertDeploymentID", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3915+
dbm.EXPECT().InsertDeploymentID(gomock.Any(), "value").Return(nil).AnyTimes()
3916+
check.Args("value").Asserts(rbac.ResourceSystem, policy.ActionCreate).Returns()
3917+
}))
3918+
s.Run("InsertReplica", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3919+
arg := database.InsertReplicaParams{ID: uuid.New()}
3920+
dbm.EXPECT().InsertReplica(gomock.Any(), arg).Return(database.Replica{}, nil).AnyTimes()
3921+
check.Args(arg).Asserts(rbac.ResourceSystem, policy.ActionCreate)
3922+
}))
3923+
s.Run("UpdateReplica", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
3924+
rep := testutil.Fake(s.T(), faker, database.Replica{})
3925+
arg := database.UpdateReplicaParams{ID: rep.ID, DatabaseLatency: 100}
3926+
dbm.EXPECT().UpdateReplica(gomock.Any(), arg).Return(rep, nil).AnyTimes()
3927+
check.Args(arg).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
3928+
}))
3929+
s.Run("DeleteReplicasUpdatedBefore", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3930+
t := time.Now().Add(time.Hour)
3931+
dbm.EXPECT().DeleteReplicasUpdatedBefore(gomock.Any(), t).Return(nil).AnyTimes()
3932+
check.Args(t).Asserts(rbac.ResourceSystem, policy.ActionDelete)
3933+
}))
3934+
s.Run("GetReplicasUpdatedAfter", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3935+
t := time.Now().Add(-time.Hour)
3936+
dbm.EXPECT().GetReplicasUpdatedAfter(gomock.Any(), t).Return([]database.Replica{}, nil).AnyTimes()
3937+
check.Args(t).Asserts(rbac.ResourceSystem, policy.ActionRead)
3938+
}))
3939+
s.Run("GetUserCount", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3940+
dbm.EXPECT().GetUserCount(gomock.Any(), false).Return(int64(0), nil).AnyTimes()
3941+
check.Args(false).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(int64(0))
3942+
}))
3943+
s.Run("GetTemplates", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3944+
dbm.EXPECT().GetTemplates(gomock.Any()).Return([]database.Template{}, nil).AnyTimes()
3945+
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3946+
}))
3947+
s.Run("UpdateWorkspaceBuildCostByID", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
3948+
b := testutil.Fake(s.T(), faker, database.WorkspaceBuild{})
3949+
arg := database.UpdateWorkspaceBuildCostByIDParams{ID: b.ID, DailyCost: 10}
3950+
dbm.EXPECT().UpdateWorkspaceBuildCostByID(gomock.Any(), arg).Return(nil).AnyTimes()
3951+
check.Args(arg).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
3952+
}))
3953+
s.Run("UpdateWorkspaceBuildProvisionerStateByID", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) {
3954+
b := testutil.Fake(s.T(), faker, database.WorkspaceBuild{})
3955+
arg := database.UpdateWorkspaceBuildProvisionerStateByIDParams{ID: b.ID, ProvisionerState: []byte("testing")}
3956+
dbm.EXPECT().UpdateWorkspaceBuildProvisionerStateByID(gomock.Any(), arg).Return(nil).AnyTimes()
3957+
check.Args(arg).Asserts(rbac.ResourceSystem, policy.ActionUpdate)
3958+
}))
3959+
s.Run("UpsertLastUpdateCheck", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3960+
dbm.EXPECT().UpsertLastUpdateCheck(gomock.Any(), "value").Return(nil).AnyTimes()
3961+
check.Args("value").Asserts(rbac.ResourceSystem, policy.ActionUpdate)
3962+
}))
3963+
s.Run("GetLastUpdateCheck", s.Mocked(func(dbm *dbmock.MockStore, _ *gofakeit.Faker, check *expects) {
3964+
dbm.EXPECT().GetLastUpdateCheck(gomock.Any()).Return("value", nil).AnyTimes()
3965+
check.Args().Asserts(rbac.ResourceSystem, policy.ActionRead)
3966+
}))
39713967
s.Run("GetWorkspaceBuildsCreatedAfter", s.Subtest(func(db database.Store, check *expects) {
39723968
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
39733969
_ = dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{CreatedAt: time.Now().Add(-time.Hour)})

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy