diff --git a/coderd/database/dbauthz/dbauthz_test.go b/coderd/database/dbauthz/dbauthz_test.go index d6d59ad3a7..a8d4d197d2 100644 --- a/coderd/database/dbauthz/dbauthz_test.go +++ b/coderd/database/dbauthz/dbauthz_test.go @@ -3189,109 +3189,59 @@ func (s *MethodTestSuite) TestWorkspace() { } func (s *MethodTestSuite) TestWorkspacePortSharing() { - s.Run("UpsertWorkspaceAgentPortShare", s.Subtest(func(db database.Store, check *expects) { - u := dbgen.User(s.T(), db, database.User{}) - org := dbgen.Organization(s.T(), db, database.Organization{}) - tpl := dbgen.Template(s.T(), db, database.Template{ - OrganizationID: org.ID, - CreatedBy: u.ID, - }) - ws := dbgen.Workspace(s.T(), db, database.WorkspaceTable{ - OwnerID: u.ID, - OrganizationID: org.ID, - TemplateID: tpl.ID, - }) - ps := dbgen.WorkspaceAgentPortShare(s.T(), db, database.WorkspaceAgentPortShare{WorkspaceID: ws.ID}) - //nolint:gosimple // casting is not a simplification - check.Args(database.UpsertWorkspaceAgentPortShareParams{ + s.Run("UpsertWorkspaceAgentPortShare", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + ws := testutil.Fake(s.T(), faker, database.Workspace{}) + ps := testutil.Fake(s.T(), faker, database.WorkspaceAgentPortShare{}) + ps.WorkspaceID = ws.ID + arg := database.UpsertWorkspaceAgentPortShareParams(ps) + dbm.EXPECT().GetWorkspaceByID(gomock.Any(), ws.ID).Return(ws, nil).AnyTimes() + dbm.EXPECT().UpsertWorkspaceAgentPortShare(gomock.Any(), arg).Return(ps, nil).AnyTimes() + check.Args(arg).Asserts(ws, policy.ActionUpdate).Returns(ps) + })) + s.Run("GetWorkspaceAgentPortShare", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + ws := testutil.Fake(s.T(), faker, database.Workspace{}) + ps := testutil.Fake(s.T(), faker, database.WorkspaceAgentPortShare{}) + ps.WorkspaceID = ws.ID + arg := database.GetWorkspaceAgentPortShareParams{ WorkspaceID: ps.WorkspaceID, AgentName: ps.AgentName, Port: ps.Port, - ShareLevel: ps.ShareLevel, - Protocol: ps.Protocol, - }).Asserts(ws, policy.ActionUpdate).Returns(ps) + } + dbm.EXPECT().GetWorkspaceByID(gomock.Any(), ws.ID).Return(ws, nil).AnyTimes() + dbm.EXPECT().GetWorkspaceAgentPortShare(gomock.Any(), arg).Return(ps, nil).AnyTimes() + check.Args(arg).Asserts(ws, policy.ActionRead).Returns(ps) })) - s.Run("GetWorkspaceAgentPortShare", s.Subtest(func(db database.Store, check *expects) { - u := dbgen.User(s.T(), db, database.User{}) - org := dbgen.Organization(s.T(), db, database.Organization{}) - tpl := dbgen.Template(s.T(), db, database.Template{ - OrganizationID: org.ID, - CreatedBy: u.ID, - }) - ws := dbgen.Workspace(s.T(), db, database.WorkspaceTable{ - OwnerID: u.ID, - OrganizationID: org.ID, - TemplateID: tpl.ID, - }) - ps := dbgen.WorkspaceAgentPortShare(s.T(), db, database.WorkspaceAgentPortShare{WorkspaceID: ws.ID}) - check.Args(database.GetWorkspaceAgentPortShareParams{ - WorkspaceID: ps.WorkspaceID, - AgentName: ps.AgentName, - Port: ps.Port, - }).Asserts(ws, policy.ActionRead).Returns(ps) - })) - s.Run("ListWorkspaceAgentPortShares", s.Subtest(func(db database.Store, check *expects) { - u := dbgen.User(s.T(), db, database.User{}) - org := dbgen.Organization(s.T(), db, database.Organization{}) - tpl := dbgen.Template(s.T(), db, database.Template{ - OrganizationID: org.ID, - CreatedBy: u.ID, - }) - ws := dbgen.Workspace(s.T(), db, database.WorkspaceTable{ - OwnerID: u.ID, - OrganizationID: org.ID, - TemplateID: tpl.ID, - }) - ps := dbgen.WorkspaceAgentPortShare(s.T(), db, database.WorkspaceAgentPortShare{WorkspaceID: ws.ID}) + s.Run("ListWorkspaceAgentPortShares", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + ws := testutil.Fake(s.T(), faker, database.Workspace{}) + ps := testutil.Fake(s.T(), faker, database.WorkspaceAgentPortShare{}) + ps.WorkspaceID = ws.ID + dbm.EXPECT().GetWorkspaceByID(gomock.Any(), ws.ID).Return(ws, nil).AnyTimes() + dbm.EXPECT().ListWorkspaceAgentPortShares(gomock.Any(), ws.ID).Return([]database.WorkspaceAgentPortShare{ps}, nil).AnyTimes() check.Args(ws.ID).Asserts(ws, policy.ActionRead).Returns([]database.WorkspaceAgentPortShare{ps}) })) - s.Run("DeleteWorkspaceAgentPortShare", s.Subtest(func(db database.Store, check *expects) { - u := dbgen.User(s.T(), db, database.User{}) - org := dbgen.Organization(s.T(), db, database.Organization{}) - tpl := dbgen.Template(s.T(), db, database.Template{ - OrganizationID: org.ID, - CreatedBy: u.ID, - }) - ws := dbgen.Workspace(s.T(), db, database.WorkspaceTable{ - OwnerID: u.ID, - OrganizationID: org.ID, - TemplateID: tpl.ID, - }) - ps := dbgen.WorkspaceAgentPortShare(s.T(), db, database.WorkspaceAgentPortShare{WorkspaceID: ws.ID}) - check.Args(database.DeleteWorkspaceAgentPortShareParams{ + s.Run("DeleteWorkspaceAgentPortShare", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + ws := testutil.Fake(s.T(), faker, database.Workspace{}) + ps := testutil.Fake(s.T(), faker, database.WorkspaceAgentPortShare{}) + ps.WorkspaceID = ws.ID + arg := database.DeleteWorkspaceAgentPortShareParams{ WorkspaceID: ps.WorkspaceID, AgentName: ps.AgentName, Port: ps.Port, - }).Asserts(ws, policy.ActionUpdate).Returns() + } + dbm.EXPECT().GetWorkspaceByID(gomock.Any(), ws.ID).Return(ws, nil).AnyTimes() + dbm.EXPECT().DeleteWorkspaceAgentPortShare(gomock.Any(), arg).Return(nil).AnyTimes() + check.Args(arg).Asserts(ws, policy.ActionUpdate).Returns() })) - s.Run("DeleteWorkspaceAgentPortSharesByTemplate", s.Subtest(func(db database.Store, check *expects) { - u := dbgen.User(s.T(), db, database.User{}) - org := dbgen.Organization(s.T(), db, database.Organization{}) - tpl := dbgen.Template(s.T(), db, database.Template{ - OrganizationID: org.ID, - CreatedBy: u.ID, - }) - ws := dbgen.Workspace(s.T(), db, database.WorkspaceTable{ - OwnerID: u.ID, - OrganizationID: org.ID, - TemplateID: tpl.ID, - }) - _ = dbgen.WorkspaceAgentPortShare(s.T(), db, database.WorkspaceAgentPortShare{WorkspaceID: ws.ID}) + s.Run("DeleteWorkspaceAgentPortSharesByTemplate", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + tpl := testutil.Fake(s.T(), faker, database.Template{}) + dbm.EXPECT().GetTemplateByID(gomock.Any(), tpl.ID).Return(tpl, nil).AnyTimes() + dbm.EXPECT().DeleteWorkspaceAgentPortSharesByTemplate(gomock.Any(), tpl.ID).Return(nil).AnyTimes() check.Args(tpl.ID).Asserts(tpl, policy.ActionUpdate).Returns() })) - s.Run("ReduceWorkspaceAgentShareLevelToAuthenticatedByTemplate", s.Subtest(func(db database.Store, check *expects) { - u := dbgen.User(s.T(), db, database.User{}) - org := dbgen.Organization(s.T(), db, database.Organization{}) - tpl := dbgen.Template(s.T(), db, database.Template{ - OrganizationID: org.ID, - CreatedBy: u.ID, - }) - ws := dbgen.Workspace(s.T(), db, database.WorkspaceTable{ - OwnerID: u.ID, - OrganizationID: org.ID, - TemplateID: tpl.ID, - }) - _ = dbgen.WorkspaceAgentPortShare(s.T(), db, database.WorkspaceAgentPortShare{WorkspaceID: ws.ID}) + s.Run("ReduceWorkspaceAgentShareLevelToAuthenticatedByTemplate", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + tpl := testutil.Fake(s.T(), faker, database.Template{}) + dbm.EXPECT().GetTemplateByID(gomock.Any(), tpl.ID).Return(tpl, nil).AnyTimes() + dbm.EXPECT().ReduceWorkspaceAgentShareLevelToAuthenticatedByTemplate(gomock.Any(), tpl.ID).Return(nil).AnyTimes() check.Args(tpl.ID).Asserts(tpl, policy.ActionUpdate).Returns() })) } @@ -5008,113 +4958,69 @@ func (s *MethodTestSuite) TestOAuth2ProviderAppTokens() { } func (s *MethodTestSuite) TestResourcesMonitor() { - createAgent := func(t *testing.T, db database.Store) (database.WorkspaceAgent, database.WorkspaceTable) { - t.Helper() - - u := dbgen.User(t, db, database.User{}) - o := dbgen.Organization(t, db, database.Organization{}) - tpl := dbgen.Template(t, db, database.Template{ - OrganizationID: o.ID, - CreatedBy: u.ID, - }) - tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{ - TemplateID: uuid.NullUUID{UUID: tpl.ID, Valid: true}, - OrganizationID: o.ID, - CreatedBy: u.ID, - }) - w := dbgen.Workspace(t, db, database.WorkspaceTable{ - TemplateID: tpl.ID, - OrganizationID: o.ID, - OwnerID: u.ID, - }) - j := dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{ - Type: database.ProvisionerJobTypeWorkspaceBuild, - }) - b := dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{ - JobID: j.ID, - WorkspaceID: w.ID, - TemplateVersionID: tv.ID, - }) - res := dbgen.WorkspaceResource(t, db, database.WorkspaceResource{JobID: b.JobID}) - agt := dbgen.WorkspaceAgent(t, db, database.WorkspaceAgent{ResourceID: res.ID}) - - return agt, w - } - - s.Run("InsertMemoryResourceMonitor", s.Subtest(func(db database.Store, check *expects) { - agt, _ := createAgent(s.T(), db) - - check.Args(database.InsertMemoryResourceMonitorParams{ - AgentID: agt.ID, + s.Run("InsertMemoryResourceMonitor", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + arg := database.InsertMemoryResourceMonitorParams{ + AgentID: uuid.New(), State: database.WorkspaceAgentMonitorStateOK, - }).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionCreate) + } + dbm.EXPECT().InsertMemoryResourceMonitor(gomock.Any(), arg).Return(database.WorkspaceAgentMemoryResourceMonitor{}, nil).AnyTimes() + check.Args(arg).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionCreate) })) - s.Run("InsertVolumeResourceMonitor", s.Subtest(func(db database.Store, check *expects) { - agt, _ := createAgent(s.T(), db) - - check.Args(database.InsertVolumeResourceMonitorParams{ - AgentID: agt.ID, + s.Run("InsertVolumeResourceMonitor", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + arg := database.InsertVolumeResourceMonitorParams{ + AgentID: uuid.New(), State: database.WorkspaceAgentMonitorStateOK, - }).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionCreate) + } + dbm.EXPECT().InsertVolumeResourceMonitor(gomock.Any(), arg).Return(database.WorkspaceAgentVolumeResourceMonitor{}, nil).AnyTimes() + check.Args(arg).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionCreate) })) - s.Run("UpdateMemoryResourceMonitor", s.Subtest(func(db database.Store, check *expects) { - agt, _ := createAgent(s.T(), db) - - check.Args(database.UpdateMemoryResourceMonitorParams{ - AgentID: agt.ID, + s.Run("UpdateMemoryResourceMonitor", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + arg := database.UpdateMemoryResourceMonitorParams{ + AgentID: uuid.New(), State: database.WorkspaceAgentMonitorStateOK, - }).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionUpdate) + } + dbm.EXPECT().UpdateMemoryResourceMonitor(gomock.Any(), arg).Return(nil).AnyTimes() + check.Args(arg).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionUpdate) })) - s.Run("UpdateVolumeResourceMonitor", s.Subtest(func(db database.Store, check *expects) { - agt, _ := createAgent(s.T(), db) - - check.Args(database.UpdateVolumeResourceMonitorParams{ - AgentID: agt.ID, + s.Run("UpdateVolumeResourceMonitor", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + arg := database.UpdateVolumeResourceMonitorParams{ + AgentID: uuid.New(), State: database.WorkspaceAgentMonitorStateOK, - }).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionUpdate) + } + dbm.EXPECT().UpdateVolumeResourceMonitor(gomock.Any(), arg).Return(nil).AnyTimes() + check.Args(arg).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionUpdate) })) - s.Run("FetchMemoryResourceMonitorsUpdatedAfter", s.Subtest(func(db database.Store, check *expects) { + s.Run("FetchMemoryResourceMonitorsUpdatedAfter", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + dbm.EXPECT().FetchMemoryResourceMonitorsUpdatedAfter(gomock.Any(), gomock.Any()).Return(nil, nil).AnyTimes() check.Args(dbtime.Now()).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionRead) })) - s.Run("FetchVolumesResourceMonitorsUpdatedAfter", s.Subtest(func(db database.Store, check *expects) { + s.Run("FetchVolumesResourceMonitorsUpdatedAfter", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + dbm.EXPECT().FetchVolumesResourceMonitorsUpdatedAfter(gomock.Any(), gomock.Any()).Return(nil, nil).AnyTimes() check.Args(dbtime.Now()).Asserts(rbac.ResourceWorkspaceAgentResourceMonitor, policy.ActionRead) })) - s.Run("FetchMemoryResourceMonitorsByAgentID", s.Subtest(func(db database.Store, check *expects) { - agt, w := createAgent(s.T(), db) - - dbgen.WorkspaceAgentMemoryResourceMonitor(s.T(), db, database.WorkspaceAgentMemoryResourceMonitor{ - AgentID: agt.ID, - Enabled: true, - Threshold: 80, - CreatedAt: dbtime.Now(), - }) - - monitor, err := db.FetchMemoryResourceMonitorsByAgentID(context.Background(), agt.ID) - require.NoError(s.T(), err) - + s.Run("FetchMemoryResourceMonitorsByAgentID", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + w := testutil.Fake(s.T(), faker, database.Workspace{}) + agt := testutil.Fake(s.T(), faker, database.WorkspaceAgent{}) + monitor := testutil.Fake(s.T(), faker, database.WorkspaceAgentMemoryResourceMonitor{}) + dbm.EXPECT().GetWorkspaceByAgentID(gomock.Any(), agt.ID).Return(w, nil).AnyTimes() + dbm.EXPECT().FetchMemoryResourceMonitorsByAgentID(gomock.Any(), agt.ID).Return(monitor, nil).AnyTimes() check.Args(agt.ID).Asserts(w, policy.ActionRead).Returns(monitor) })) - s.Run("FetchVolumesResourceMonitorsByAgentID", s.Subtest(func(db database.Store, check *expects) { - agt, w := createAgent(s.T(), db) - - dbgen.WorkspaceAgentVolumeResourceMonitor(s.T(), db, database.WorkspaceAgentVolumeResourceMonitor{ - AgentID: agt.ID, - Path: "/var/lib", - Enabled: true, - Threshold: 80, - CreatedAt: dbtime.Now(), - }) - - monitors, err := db.FetchVolumesResourceMonitorsByAgentID(context.Background(), agt.ID) - require.NoError(s.T(), err) - + s.Run("FetchVolumesResourceMonitorsByAgentID", s.Mocked(func(dbm *dbmock.MockStore, faker *gofakeit.Faker, check *expects) { + w := testutil.Fake(s.T(), faker, database.Workspace{}) + agt := testutil.Fake(s.T(), faker, database.WorkspaceAgent{}) + monitors := []database.WorkspaceAgentVolumeResourceMonitor{ + testutil.Fake(s.T(), faker, database.WorkspaceAgentVolumeResourceMonitor{}), + } + dbm.EXPECT().GetWorkspaceByAgentID(gomock.Any(), agt.ID).Return(w, nil).AnyTimes() + dbm.EXPECT().FetchVolumesResourceMonitorsByAgentID(gomock.Any(), agt.ID).Return(monitors, nil).AnyTimes() check.Args(agt.ID).Asserts(w, policy.ActionRead).Returns(monitors) })) }