From 36c2a3905ce4e798384c65c31158aa7765a11d42 Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Tue, 11 Jul 2023 12:38:45 +0000 Subject: [PATCH 1/3] pgCoord to GA, fix tests Signed-off-by: Spike Curtis --- coderd/apidoc/docs.go | 4 +- coderd/apidoc/swagger.json | 4 +- coderd/database/dbfake/dbfake.go | 507 +++++++++--------- coderd/database/pubsub/pubsub_memory.go | 17 +- codersdk/deployment.go | 7 +- docs/api/schemas.md | 2 +- enterprise/cli/features_test.go | 7 +- enterprise/cli/groupcreate_test.go | 7 +- enterprise/cli/groupdelete_test.go | 15 +- enterprise/cli/groupedit_test.go | 21 +- enterprise/cli/grouplist_test.go | 14 +- enterprise/cli/licenses_test.go | 10 +- enterprise/cli/workspaceproxy_test.go | 22 +- enterprise/coderd/appearance_test.go | 22 +- enterprise/coderd/authorize_test.go | 14 +- enterprise/coderd/coderd.go | 6 +- enterprise/coderd/coderd_test.go | 41 +- .../coderd/coderdenttest/coderdenttest.go | 38 +- .../coderdenttest/coderdenttest_test.go | 2 +- .../coderd/coderdenttest/swagger_test.go | 3 +- enterprise/coderd/groups_test.go | 184 ++----- enterprise/coderd/licenses_test.go | 22 +- enterprise/coderd/provisionerdaemons_test.go | 27 +- enterprise/coderd/replicas_test.go | 41 +- enterprise/coderd/scim_test.go | 92 ++-- enterprise/coderd/templates_test.go | 171 +++--- enterprise/coderd/userauth_test.go | 38 +- enterprise/coderd/workspaceagents_test.go | 22 +- enterprise/coderd/workspaceproxy_test.go | 80 ++- enterprise/coderd/workspacequota_test.go | 14 +- enterprise/coderd/workspaces_test.go | 258 ++++----- enterprise/wsproxy/wsproxy_test.go | 12 +- site/src/api/typesGenerated.ts | 4 +- 33 files changed, 797 insertions(+), 931 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index c1171e36c441a..6eda7c0d43c57 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -7608,14 +7608,14 @@ const docTemplate = `{ "enum": [ "moons", "workspace_actions", - "tailnet_pg_coordinator", + "tailnet_ha_coordinator", "convert-to-oidc", "workspace_build_logs_ui" ], "x-enum-varnames": [ "ExperimentMoons", "ExperimentWorkspaceActions", - "ExperimentTailnetPGCoordinator", + "ExperimentTailnetHACoordinator", "ExperimentConvertToOIDC", "ExperimentWorkspaceBuildLogsUI" ] diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 1579439282a2f..79f990f8f4675 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -6809,14 +6809,14 @@ "enum": [ "moons", "workspace_actions", - "tailnet_pg_coordinator", + "tailnet_ha_coordinator", "convert-to-oidc", "workspace_build_logs_ui" ], "x-enum-varnames": [ "ExperimentMoons", "ExperimentWorkspaceActions", - "ExperimentTailnetPGCoordinator", + "ExperimentTailnetHACoordinator", "ExperimentConvertToOIDC", "ExperimentWorkspaceBuildLogsUI" ] diff --git a/coderd/database/dbfake/dbfake.go b/coderd/database/dbfake/dbfake.go index 55c4973cb74b2..ec303139725d3 100644 --- a/coderd/database/dbfake/dbfake.go +++ b/coderd/database/dbfake/dbfake.go @@ -36,7 +36,7 @@ var errDuplicateKey = &pq.Error{ // New returns an in-memory fake of the database. func New() database.Store { - q := &fakeQuerier{ + q := &FakeQuerier{ mutex: &sync.RWMutex{}, data: &data{ apiKeys: make([]database.APIKey, 0), @@ -88,18 +88,19 @@ func (inTxMutex) RLock() {} func (inTxMutex) Unlock() {} func (inTxMutex) RUnlock() {} -// fakeQuerier replicates database functionality to enable quick testing. -type fakeQuerier struct { +// FakeQuerier replicates database functionality to enable quick testing. It's an exported type so that our test code +// can do type checks. +type FakeQuerier struct { mutex rwMutex *data } -func (*fakeQuerier) Wrappers() []string { +func (*FakeQuerier) Wrappers() []string { return []string{} } type fakeTx struct { - *fakeQuerier + *FakeQuerier locks map[int64]struct{} } @@ -213,41 +214,41 @@ func validateDatabaseType(args interface{}) error { return nil } -func (*fakeQuerier) Ping(_ context.Context) (time.Duration, error) { +func (*FakeQuerier) Ping(_ context.Context) (time.Duration, error) { return 0, nil } func (tx *fakeTx) AcquireLock(_ context.Context, id int64) error { - if _, ok := tx.fakeQuerier.locks[id]; ok { + if _, ok := tx.FakeQuerier.locks[id]; ok { return xerrors.Errorf("cannot acquire lock %d: already held", id) } - tx.fakeQuerier.locks[id] = struct{}{} + tx.FakeQuerier.locks[id] = struct{}{} tx.locks[id] = struct{}{} return nil } func (tx *fakeTx) TryAcquireLock(_ context.Context, id int64) (bool, error) { - if _, ok := tx.fakeQuerier.locks[id]; ok { + if _, ok := tx.FakeQuerier.locks[id]; ok { return false, nil } - tx.fakeQuerier.locks[id] = struct{}{} + tx.FakeQuerier.locks[id] = struct{}{} tx.locks[id] = struct{}{} return true, nil } func (tx *fakeTx) releaseLocks() { for id := range tx.locks { - delete(tx.fakeQuerier.locks, id) + delete(tx.FakeQuerier.locks, id) } tx.locks = map[int64]struct{}{} } // InTx doesn't rollback data properly for in-memory yet. -func (q *fakeQuerier) InTx(fn func(database.Store) error, _ *sql.TxOptions) error { +func (q *FakeQuerier) InTx(fn func(database.Store) error, _ *sql.TxOptions) error { q.mutex.Lock() defer q.mutex.Unlock() tx := &fakeTx{ - fakeQuerier: &fakeQuerier{mutex: inTxMutex{}, data: q.data}, + FakeQuerier: &FakeQuerier{mutex: inTxMutex{}, data: q.data}, locks: map[int64]struct{}{}, } defer tx.releaseLocks() @@ -256,7 +257,7 @@ func (q *fakeQuerier) InTx(fn func(database.Store) error, _ *sql.TxOptions) erro } // getUserByIDNoLock is used by other functions in the database fake. -func (q *fakeQuerier) getUserByIDNoLock(id uuid.UUID) (database.User, error) { +func (q *FakeQuerier) getUserByIDNoLock(id uuid.UUID) (database.User, error) { for _, user := range q.users { if user.ID == id { return user, nil @@ -265,7 +266,7 @@ func (q *fakeQuerier) getUserByIDNoLock(id uuid.UUID) (database.User, error) { return database.User{}, sql.ErrNoRows } -func (q *fakeQuerier) GetAuthorizedUserCount(ctx context.Context, params database.GetFilteredUserCountParams, prepared rbac.PreparedAuthorized) (int64, error) { +func (q *FakeQuerier) GetAuthorizedUserCount(ctx context.Context, params database.GetFilteredUserCountParams, prepared rbac.PreparedAuthorized) (int64, error) { if err := validateDatabaseType(params); err != nil { return 0, err } @@ -363,7 +364,7 @@ func convertUsers(users []database.User, count int64) []database.GetUsersRow { } //nolint:gocyclo -func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.GetWorkspacesParams, prepared rbac.PreparedAuthorized) ([]database.GetWorkspacesRow, error) { +func (q *FakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.GetWorkspacesParams, prepared rbac.PreparedAuthorized) ([]database.GetWorkspacesRow, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -670,7 +671,7 @@ func convertToWorkspaceRows(workspaces []database.Workspace, count int64) []data return rows } -func (q *fakeQuerier) getWorkspaceByIDNoLock(_ context.Context, id uuid.UUID) (database.Workspace, error) { +func (q *FakeQuerier) getWorkspaceByIDNoLock(_ context.Context, id uuid.UUID) (database.Workspace, error) { for _, workspace := range q.workspaces { if workspace.ID == id { return workspace, nil @@ -679,7 +680,7 @@ func (q *fakeQuerier) getWorkspaceByIDNoLock(_ context.Context, id uuid.UUID) (d return database.Workspace{}, sql.ErrNoRows } -func (q *fakeQuerier) getWorkspaceByAgentIDNoLock(_ context.Context, agentID uuid.UUID) (database.Workspace, error) { +func (q *FakeQuerier) getWorkspaceByAgentIDNoLock(_ context.Context, agentID uuid.UUID) (database.Workspace, error) { var agent database.WorkspaceAgent for _, _agent := range q.workspaceAgents { if _agent.ID == agentID { @@ -722,7 +723,7 @@ func (q *fakeQuerier) getWorkspaceByAgentIDNoLock(_ context.Context, agentID uui return database.Workspace{}, sql.ErrNoRows } -func (q *fakeQuerier) getWorkspaceBuildByIDNoLock(_ context.Context, id uuid.UUID) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) getWorkspaceBuildByIDNoLock(_ context.Context, id uuid.UUID) (database.WorkspaceBuild, error) { for _, history := range q.workspaceBuilds { if history.ID == id { return history, nil @@ -731,7 +732,7 @@ func (q *fakeQuerier) getWorkspaceBuildByIDNoLock(_ context.Context, id uuid.UUI return database.WorkspaceBuild{}, sql.ErrNoRows } -func (q *fakeQuerier) getLatestWorkspaceBuildByWorkspaceIDNoLock(_ context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) getLatestWorkspaceBuildByWorkspaceIDNoLock(_ context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) { var row database.WorkspaceBuild var buildNum int32 = -1 for _, workspaceBuild := range q.workspaceBuilds { @@ -746,7 +747,7 @@ func (q *fakeQuerier) getLatestWorkspaceBuildByWorkspaceIDNoLock(_ context.Conte return row, nil } -func (q *fakeQuerier) getTemplateByIDNoLock(_ context.Context, id uuid.UUID) (database.Template, error) { +func (q *FakeQuerier) getTemplateByIDNoLock(_ context.Context, id uuid.UUID) (database.Template, error) { for _, template := range q.templates { if template.ID == id { return template.DeepCopy(), nil @@ -755,7 +756,7 @@ func (q *fakeQuerier) getTemplateByIDNoLock(_ context.Context, id uuid.UUID) (da return database.Template{}, sql.ErrNoRows } -func (q *fakeQuerier) GetAuthorizedTemplates(ctx context.Context, arg database.GetTemplatesWithFilterParams, prepared rbac.PreparedAuthorized) ([]database.Template, error) { +func (q *FakeQuerier) GetAuthorizedTemplates(ctx context.Context, arg database.GetTemplatesWithFilterParams, prepared rbac.PreparedAuthorized) ([]database.Template, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -815,7 +816,7 @@ func (q *fakeQuerier) GetAuthorizedTemplates(ctx context.Context, arg database.G return nil, sql.ErrNoRows } -func (q *fakeQuerier) getTemplateVersionByIDNoLock(_ context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) { +func (q *FakeQuerier) getTemplateVersionByIDNoLock(_ context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) { for _, templateVersion := range q.templateVersions { if templateVersion.ID != templateVersionID { continue @@ -825,7 +826,7 @@ func (q *fakeQuerier) getTemplateVersionByIDNoLock(_ context.Context, templateVe return database.TemplateVersion{}, sql.ErrNoRows } -func (q *fakeQuerier) GetTemplateUserRoles(_ context.Context, id uuid.UUID) ([]database.TemplateUser, error) { +func (q *FakeQuerier) GetTemplateUserRoles(_ context.Context, id uuid.UUID) ([]database.TemplateUser, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -866,7 +867,7 @@ func (q *fakeQuerier) GetTemplateUserRoles(_ context.Context, id uuid.UUID) ([]d return users, nil } -func (q *fakeQuerier) GetTemplateGroupRoles(_ context.Context, id uuid.UUID) ([]database.TemplateGroup, error) { +func (q *FakeQuerier) GetTemplateGroupRoles(_ context.Context, id uuid.UUID) ([]database.TemplateGroup, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -903,7 +904,7 @@ func (q *fakeQuerier) GetTemplateGroupRoles(_ context.Context, id uuid.UUID) ([] return groups, nil } -func (q *fakeQuerier) getWorkspaceAgentByIDNoLock(_ context.Context, id uuid.UUID) (database.WorkspaceAgent, error) { +func (q *FakeQuerier) getWorkspaceAgentByIDNoLock(_ context.Context, id uuid.UUID) (database.WorkspaceAgent, error) { // The schema sorts this by created at, so we iterate the array backwards. for i := len(q.workspaceAgents) - 1; i >= 0; i-- { agent := q.workspaceAgents[i] @@ -914,7 +915,7 @@ func (q *fakeQuerier) getWorkspaceAgentByIDNoLock(_ context.Context, id uuid.UUI return database.WorkspaceAgent{}, sql.ErrNoRows } -func (q *fakeQuerier) getWorkspaceAgentsByResourceIDsNoLock(_ context.Context, resourceIDs []uuid.UUID) ([]database.WorkspaceAgent, error) { +func (q *FakeQuerier) getWorkspaceAgentsByResourceIDsNoLock(_ context.Context, resourceIDs []uuid.UUID) ([]database.WorkspaceAgent, error) { workspaceAgents := make([]database.WorkspaceAgent, 0) for _, agent := range q.workspaceAgents { for _, resourceID := range resourceIDs { @@ -927,7 +928,7 @@ func (q *fakeQuerier) getWorkspaceAgentsByResourceIDsNoLock(_ context.Context, r return workspaceAgents, nil } -func (q *fakeQuerier) getProvisionerJobByIDNoLock(_ context.Context, id uuid.UUID) (database.ProvisionerJob, error) { +func (q *FakeQuerier) getProvisionerJobByIDNoLock(_ context.Context, id uuid.UUID) (database.ProvisionerJob, error) { for _, provisionerJob := range q.provisionerJobs { if provisionerJob.ID != id { continue @@ -937,7 +938,7 @@ func (q *fakeQuerier) getProvisionerJobByIDNoLock(_ context.Context, id uuid.UUI return database.ProvisionerJob{}, sql.ErrNoRows } -func (q *fakeQuerier) getWorkspaceResourcesByJobIDNoLock(_ context.Context, jobID uuid.UUID) ([]database.WorkspaceResource, error) { +func (q *FakeQuerier) getWorkspaceResourcesByJobIDNoLock(_ context.Context, jobID uuid.UUID) ([]database.WorkspaceResource, error) { resources := make([]database.WorkspaceResource, 0) for _, resource := range q.workspaceResources { if resource.JobID != jobID { @@ -948,7 +949,7 @@ func (q *fakeQuerier) getWorkspaceResourcesByJobIDNoLock(_ context.Context, jobI return resources, nil } -func (q *fakeQuerier) getGroupByIDNoLock(_ context.Context, id uuid.UUID) (database.Group, error) { +func (q *FakeQuerier) getGroupByIDNoLock(_ context.Context, id uuid.UUID) (database.Group, error) { for _, group := range q.groups { if group.ID == id { return group, nil @@ -970,17 +971,17 @@ func isNotNull(v interface{}) bool { // ErrUnimplemented is returned by methods only used by the enterprise/tailnet.pgCoord. This coordinator explicitly // depends on postgres triggers that announce changes on the pubsub. Implementing support for this in the fake -// database would strongly couple the fakeQuerier to the pubsub, which is undesirable. Furthermore, it makes little -// sense to directly test the pgCoord against anything other than postgres. The fakeQuerier is designed to allow us to +// database would strongly couple the FakeQuerier to the pubsub, which is undesirable. Furthermore, it makes little +// sense to directly test the pgCoord against anything other than postgres. The FakeQuerier is designed to allow us to // test the Coderd API, and for that kind of test, the in-memory, AGPL tailnet coordinator is sufficient. Therefore, -// these methods remain unimplemented in the fakeQuerier. +// these methods remain unimplemented in the FakeQuerier. var ErrUnimplemented = xerrors.New("unimplemented") -func (*fakeQuerier) AcquireLock(_ context.Context, _ int64) error { +func (*FakeQuerier) AcquireLock(_ context.Context, _ int64) error { return xerrors.New("AcquireLock must only be called within a transaction") } -func (q *fakeQuerier) AcquireProvisionerJob(_ context.Context, arg database.AcquireProvisionerJobParams) (database.ProvisionerJob, error) { +func (q *FakeQuerier) AcquireProvisionerJob(_ context.Context, arg database.AcquireProvisionerJobParams) (database.ProvisionerJob, error) { if err := validateDatabaseType(arg); err != nil { return database.ProvisionerJob{}, err } @@ -1035,11 +1036,11 @@ func (q *fakeQuerier) AcquireProvisionerJob(_ context.Context, arg database.Acqu return database.ProvisionerJob{}, sql.ErrNoRows } -func (*fakeQuerier) CleanTailnetCoordinators(_ context.Context) error { +func (*FakeQuerier) CleanTailnetCoordinators(_ context.Context) error { return ErrUnimplemented } -func (q *fakeQuerier) DeleteAPIKeyByID(_ context.Context, id string) error { +func (q *FakeQuerier) DeleteAPIKeyByID(_ context.Context, id string) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -1054,7 +1055,7 @@ func (q *fakeQuerier) DeleteAPIKeyByID(_ context.Context, id string) error { return sql.ErrNoRows } -func (q *fakeQuerier) DeleteAPIKeysByUserID(_ context.Context, userID uuid.UUID) error { +func (q *FakeQuerier) DeleteAPIKeysByUserID(_ context.Context, userID uuid.UUID) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -1067,7 +1068,7 @@ func (q *fakeQuerier) DeleteAPIKeysByUserID(_ context.Context, userID uuid.UUID) return nil } -func (q *fakeQuerier) DeleteApplicationConnectAPIKeysByUserID(_ context.Context, userID uuid.UUID) error { +func (q *FakeQuerier) DeleteApplicationConnectAPIKeysByUserID(_ context.Context, userID uuid.UUID) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -1080,11 +1081,11 @@ func (q *fakeQuerier) DeleteApplicationConnectAPIKeysByUserID(_ context.Context, return nil } -func (*fakeQuerier) DeleteCoordinator(context.Context, uuid.UUID) error { +func (*FakeQuerier) DeleteCoordinator(context.Context, uuid.UUID) error { return ErrUnimplemented } -func (q *fakeQuerier) DeleteGitSSHKey(_ context.Context, userID uuid.UUID) error { +func (q *FakeQuerier) DeleteGitSSHKey(_ context.Context, userID uuid.UUID) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -1099,7 +1100,7 @@ func (q *fakeQuerier) DeleteGitSSHKey(_ context.Context, userID uuid.UUID) error return sql.ErrNoRows } -func (q *fakeQuerier) DeleteGroupByID(_ context.Context, id uuid.UUID) error { +func (q *FakeQuerier) DeleteGroupByID(_ context.Context, id uuid.UUID) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -1113,7 +1114,7 @@ func (q *fakeQuerier) DeleteGroupByID(_ context.Context, id uuid.UUID) error { return sql.ErrNoRows } -func (q *fakeQuerier) DeleteGroupMemberFromGroup(_ context.Context, arg database.DeleteGroupMemberFromGroupParams) error { +func (q *FakeQuerier) DeleteGroupMemberFromGroup(_ context.Context, arg database.DeleteGroupMemberFromGroupParams) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -1125,7 +1126,7 @@ func (q *fakeQuerier) DeleteGroupMemberFromGroup(_ context.Context, arg database return nil } -func (q *fakeQuerier) DeleteGroupMembersByOrgAndUser(_ context.Context, arg database.DeleteGroupMembersByOrgAndUserParams) error { +func (q *FakeQuerier) DeleteGroupMembersByOrgAndUser(_ context.Context, arg database.DeleteGroupMembersByOrgAndUserParams) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -1155,7 +1156,7 @@ func (q *fakeQuerier) DeleteGroupMembersByOrgAndUser(_ context.Context, arg data return nil } -func (q *fakeQuerier) DeleteLicense(_ context.Context, id int32) (int32, error) { +func (q *FakeQuerier) DeleteLicense(_ context.Context, id int32) (int32, error) { q.mutex.Lock() defer q.mutex.Unlock() @@ -1169,17 +1170,17 @@ func (q *fakeQuerier) DeleteLicense(_ context.Context, id int32) (int32, error) return 0, sql.ErrNoRows } -func (*fakeQuerier) DeleteOldWorkspaceAgentStartupLogs(_ context.Context) error { +func (*FakeQuerier) DeleteOldWorkspaceAgentStartupLogs(_ context.Context) error { // noop return nil } -func (*fakeQuerier) DeleteOldWorkspaceAgentStats(_ context.Context) error { +func (*FakeQuerier) DeleteOldWorkspaceAgentStats(_ context.Context) error { // no-op return nil } -func (q *fakeQuerier) DeleteReplicasUpdatedBefore(_ context.Context, before time.Time) error { +func (q *FakeQuerier) DeleteReplicasUpdatedBefore(_ context.Context, before time.Time) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -1192,15 +1193,15 @@ func (q *fakeQuerier) DeleteReplicasUpdatedBefore(_ context.Context, before time return nil } -func (*fakeQuerier) DeleteTailnetAgent(context.Context, database.DeleteTailnetAgentParams) (database.DeleteTailnetAgentRow, error) { +func (*FakeQuerier) DeleteTailnetAgent(context.Context, database.DeleteTailnetAgentParams) (database.DeleteTailnetAgentRow, error) { return database.DeleteTailnetAgentRow{}, ErrUnimplemented } -func (*fakeQuerier) DeleteTailnetClient(context.Context, database.DeleteTailnetClientParams) (database.DeleteTailnetClientRow, error) { +func (*FakeQuerier) DeleteTailnetClient(context.Context, database.DeleteTailnetClientParams) (database.DeleteTailnetClientRow, error) { return database.DeleteTailnetClientRow{}, ErrUnimplemented } -func (q *fakeQuerier) GetAPIKeyByID(_ context.Context, id string) (database.APIKey, error) { +func (q *FakeQuerier) GetAPIKeyByID(_ context.Context, id string) (database.APIKey, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1212,7 +1213,7 @@ func (q *fakeQuerier) GetAPIKeyByID(_ context.Context, id string) (database.APIK return database.APIKey{}, sql.ErrNoRows } -func (q *fakeQuerier) GetAPIKeyByName(_ context.Context, params database.GetAPIKeyByNameParams) (database.APIKey, error) { +func (q *FakeQuerier) GetAPIKeyByName(_ context.Context, params database.GetAPIKeyByNameParams) (database.APIKey, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1227,7 +1228,7 @@ func (q *fakeQuerier) GetAPIKeyByName(_ context.Context, params database.GetAPIK return database.APIKey{}, sql.ErrNoRows } -func (q *fakeQuerier) GetAPIKeysByLoginType(_ context.Context, t database.LoginType) ([]database.APIKey, error) { +func (q *FakeQuerier) GetAPIKeysByLoginType(_ context.Context, t database.LoginType) ([]database.APIKey, error) { if err := validateDatabaseType(t); err != nil { return nil, err } @@ -1244,7 +1245,7 @@ func (q *fakeQuerier) GetAPIKeysByLoginType(_ context.Context, t database.LoginT return apiKeys, nil } -func (q *fakeQuerier) GetAPIKeysByUserID(_ context.Context, params database.GetAPIKeysByUserIDParams) ([]database.APIKey, error) { +func (q *FakeQuerier) GetAPIKeysByUserID(_ context.Context, params database.GetAPIKeysByUserIDParams) ([]database.APIKey, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1257,7 +1258,7 @@ func (q *fakeQuerier) GetAPIKeysByUserID(_ context.Context, params database.GetA return apiKeys, nil } -func (q *fakeQuerier) GetAPIKeysLastUsedAfter(_ context.Context, after time.Time) ([]database.APIKey, error) { +func (q *FakeQuerier) GetAPIKeysLastUsedAfter(_ context.Context, after time.Time) ([]database.APIKey, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1270,7 +1271,7 @@ func (q *fakeQuerier) GetAPIKeysLastUsedAfter(_ context.Context, after time.Time return apiKeys, nil } -func (q *fakeQuerier) GetActiveUserCount(_ context.Context) (int64, error) { +func (q *FakeQuerier) GetActiveUserCount(_ context.Context) (int64, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1283,14 +1284,14 @@ func (q *fakeQuerier) GetActiveUserCount(_ context.Context) (int64, error) { return active, nil } -func (q *fakeQuerier) GetAppSecurityKey(_ context.Context) (string, error) { +func (q *FakeQuerier) GetAppSecurityKey(_ context.Context) (string, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.appSecurityKey, nil } -func (q *fakeQuerier) GetAuditLogsOffset(_ context.Context, arg database.GetAuditLogsOffsetParams) ([]database.GetAuditLogsOffsetRow, error) { +func (q *FakeQuerier) GetAuditLogsOffset(_ context.Context, arg database.GetAuditLogsOffsetParams) ([]database.GetAuditLogsOffsetRow, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -1383,7 +1384,7 @@ func (q *fakeQuerier) GetAuditLogsOffset(_ context.Context, arg database.GetAudi return logs, nil } -func (q *fakeQuerier) GetAuthorizationUserRoles(_ context.Context, userID uuid.UUID) (database.GetAuthorizationUserRolesRow, error) { +func (q *FakeQuerier) GetAuthorizationUserRoles(_ context.Context, userID uuid.UUID) (database.GetAuthorizationUserRolesRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1426,21 +1427,21 @@ func (q *fakeQuerier) GetAuthorizationUserRoles(_ context.Context, userID uuid.U }, nil } -func (q *fakeQuerier) GetDERPMeshKey(_ context.Context) (string, error) { +func (q *FakeQuerier) GetDERPMeshKey(_ context.Context) (string, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.derpMeshKey, nil } -func (q *fakeQuerier) GetDefaultProxyConfig(_ context.Context) (database.GetDefaultProxyConfigRow, error) { +func (q *FakeQuerier) GetDefaultProxyConfig(_ context.Context) (database.GetDefaultProxyConfigRow, error) { return database.GetDefaultProxyConfigRow{ DisplayName: q.defaultProxyDisplayName, IconUrl: q.defaultProxyIconURL, }, nil } -func (q *fakeQuerier) GetDeploymentDAUs(_ context.Context, tzOffset int32) ([]database.GetDeploymentDAUsRow, error) { +func (q *FakeQuerier) GetDeploymentDAUs(_ context.Context, tzOffset int32) ([]database.GetDeploymentDAUsRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1479,14 +1480,14 @@ func (q *fakeQuerier) GetDeploymentDAUs(_ context.Context, tzOffset int32) ([]da return rs, nil } -func (q *fakeQuerier) GetDeploymentID(_ context.Context) (string, error) { +func (q *FakeQuerier) GetDeploymentID(_ context.Context) (string, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.deploymentID, nil } -func (q *fakeQuerier) GetDeploymentWorkspaceAgentStats(_ context.Context, createdAfter time.Time) (database.GetDeploymentWorkspaceAgentStatsRow, error) { +func (q *FakeQuerier) GetDeploymentWorkspaceAgentStats(_ context.Context, createdAfter time.Time) (database.GetDeploymentWorkspaceAgentStatsRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1536,7 +1537,7 @@ func (q *fakeQuerier) GetDeploymentWorkspaceAgentStats(_ context.Context, create return stat, nil } -func (q *fakeQuerier) GetDeploymentWorkspaceStats(ctx context.Context) (database.GetDeploymentWorkspaceStatsRow, error) { +func (q *FakeQuerier) GetDeploymentWorkspaceStats(ctx context.Context) (database.GetDeploymentWorkspaceStatsRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1580,7 +1581,7 @@ func (q *fakeQuerier) GetDeploymentWorkspaceStats(ctx context.Context) (database return stat, nil } -func (q *fakeQuerier) GetFileByHashAndCreator(_ context.Context, arg database.GetFileByHashAndCreatorParams) (database.File, error) { +func (q *FakeQuerier) GetFileByHashAndCreator(_ context.Context, arg database.GetFileByHashAndCreatorParams) (database.File, error) { if err := validateDatabaseType(arg); err != nil { return database.File{}, err } @@ -1596,7 +1597,7 @@ func (q *fakeQuerier) GetFileByHashAndCreator(_ context.Context, arg database.Ge return database.File{}, sql.ErrNoRows } -func (q *fakeQuerier) GetFileByID(_ context.Context, id uuid.UUID) (database.File, error) { +func (q *FakeQuerier) GetFileByID(_ context.Context, id uuid.UUID) (database.File, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1608,7 +1609,7 @@ func (q *fakeQuerier) GetFileByID(_ context.Context, id uuid.UUID) (database.Fil return database.File{}, sql.ErrNoRows } -func (q *fakeQuerier) GetFileTemplates(_ context.Context, id uuid.UUID) ([]database.GetFileTemplatesRow, error) { +func (q *FakeQuerier) GetFileTemplates(_ context.Context, id uuid.UUID) ([]database.GetFileTemplatesRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1649,7 +1650,7 @@ func (q *fakeQuerier) GetFileTemplates(_ context.Context, id uuid.UUID) ([]datab return rows, nil } -func (q *fakeQuerier) GetFilteredUserCount(ctx context.Context, arg database.GetFilteredUserCountParams) (int64, error) { +func (q *FakeQuerier) GetFilteredUserCount(ctx context.Context, arg database.GetFilteredUserCountParams) (int64, error) { if err := validateDatabaseType(arg); err != nil { return 0, err } @@ -1657,7 +1658,7 @@ func (q *fakeQuerier) GetFilteredUserCount(ctx context.Context, arg database.Get return count, err } -func (q *fakeQuerier) GetGitAuthLink(_ context.Context, arg database.GetGitAuthLinkParams) (database.GitAuthLink, error) { +func (q *FakeQuerier) GetGitAuthLink(_ context.Context, arg database.GetGitAuthLinkParams) (database.GitAuthLink, error) { if err := validateDatabaseType(arg); err != nil { return database.GitAuthLink{}, err } @@ -1676,7 +1677,7 @@ func (q *fakeQuerier) GetGitAuthLink(_ context.Context, arg database.GetGitAuthL return database.GitAuthLink{}, sql.ErrNoRows } -func (q *fakeQuerier) GetGitSSHKey(_ context.Context, userID uuid.UUID) (database.GitSSHKey, error) { +func (q *FakeQuerier) GetGitSSHKey(_ context.Context, userID uuid.UUID) (database.GitSSHKey, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1688,14 +1689,14 @@ func (q *fakeQuerier) GetGitSSHKey(_ context.Context, userID uuid.UUID) (databas return database.GitSSHKey{}, sql.ErrNoRows } -func (q *fakeQuerier) GetGroupByID(ctx context.Context, id uuid.UUID) (database.Group, error) { +func (q *FakeQuerier) GetGroupByID(ctx context.Context, id uuid.UUID) (database.Group, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getGroupByIDNoLock(ctx, id) } -func (q *fakeQuerier) GetGroupByOrgAndName(_ context.Context, arg database.GetGroupByOrgAndNameParams) (database.Group, error) { +func (q *FakeQuerier) GetGroupByOrgAndName(_ context.Context, arg database.GetGroupByOrgAndNameParams) (database.Group, error) { if err := validateDatabaseType(arg); err != nil { return database.Group{}, err } @@ -1713,7 +1714,7 @@ func (q *fakeQuerier) GetGroupByOrgAndName(_ context.Context, arg database.GetGr return database.Group{}, sql.ErrNoRows } -func (q *fakeQuerier) GetGroupMembers(_ context.Context, groupID uuid.UUID) ([]database.User, error) { +func (q *FakeQuerier) GetGroupMembers(_ context.Context, groupID uuid.UUID) ([]database.User, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1738,7 +1739,7 @@ func (q *fakeQuerier) GetGroupMembers(_ context.Context, groupID uuid.UUID) ([]d return users, nil } -func (q *fakeQuerier) GetGroupsByOrganizationID(_ context.Context, organizationID uuid.UUID) ([]database.Group, error) { +func (q *FakeQuerier) GetGroupsByOrganizationID(_ context.Context, organizationID uuid.UUID) ([]database.Group, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1753,7 +1754,7 @@ func (q *fakeQuerier) GetGroupsByOrganizationID(_ context.Context, organizationI return groups, nil } -func (q *fakeQuerier) GetHungProvisionerJobs(_ context.Context, hungSince time.Time) ([]database.ProvisionerJob, error) { +func (q *FakeQuerier) GetHungProvisionerJobs(_ context.Context, hungSince time.Time) ([]database.ProvisionerJob, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1766,7 +1767,7 @@ func (q *fakeQuerier) GetHungProvisionerJobs(_ context.Context, hungSince time.T return hungJobs, nil } -func (q *fakeQuerier) GetLastUpdateCheck(_ context.Context) (string, error) { +func (q *FakeQuerier) GetLastUpdateCheck(_ context.Context) (string, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1776,14 +1777,14 @@ func (q *fakeQuerier) GetLastUpdateCheck(_ context.Context) (string, error) { return string(q.lastUpdateCheck), nil } -func (q *fakeQuerier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getLatestWorkspaceBuildByWorkspaceIDNoLock(ctx, workspaceID) } -func (q *fakeQuerier) GetLatestWorkspaceBuilds(_ context.Context) ([]database.WorkspaceBuild, error) { +func (q *FakeQuerier) GetLatestWorkspaceBuilds(_ context.Context) ([]database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1809,7 +1810,7 @@ func (q *fakeQuerier) GetLatestWorkspaceBuilds(_ context.Context) ([]database.Wo return returnBuilds, nil } -func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceBuild, error) { +func (q *FakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1836,7 +1837,7 @@ func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context, return returnBuilds, nil } -func (q *fakeQuerier) GetLicenseByID(_ context.Context, id int32) (database.License, error) { +func (q *FakeQuerier) GetLicenseByID(_ context.Context, id int32) (database.License, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1848,7 +1849,7 @@ func (q *fakeQuerier) GetLicenseByID(_ context.Context, id int32) (database.Lice return database.License{}, sql.ErrNoRows } -func (q *fakeQuerier) GetLicenses(_ context.Context) ([]database.License, error) { +func (q *FakeQuerier) GetLicenses(_ context.Context) ([]database.License, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1857,7 +1858,7 @@ func (q *fakeQuerier) GetLicenses(_ context.Context) ([]database.License, error) return results, nil } -func (q *fakeQuerier) GetLogoURL(_ context.Context) (string, error) { +func (q *FakeQuerier) GetLogoURL(_ context.Context) (string, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1868,14 +1869,14 @@ func (q *fakeQuerier) GetLogoURL(_ context.Context) (string, error) { return q.logoURL, nil } -func (q *fakeQuerier) GetOAuthSigningKey(_ context.Context) (string, error) { +func (q *FakeQuerier) GetOAuthSigningKey(_ context.Context) (string, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.oauthSigningKey, nil } -func (q *fakeQuerier) GetOrganizationByID(_ context.Context, id uuid.UUID) (database.Organization, error) { +func (q *FakeQuerier) GetOrganizationByID(_ context.Context, id uuid.UUID) (database.Organization, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1887,7 +1888,7 @@ func (q *fakeQuerier) GetOrganizationByID(_ context.Context, id uuid.UUID) (data return database.Organization{}, sql.ErrNoRows } -func (q *fakeQuerier) GetOrganizationByName(_ context.Context, name string) (database.Organization, error) { +func (q *FakeQuerier) GetOrganizationByName(_ context.Context, name string) (database.Organization, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1899,7 +1900,7 @@ func (q *fakeQuerier) GetOrganizationByName(_ context.Context, name string) (dat return database.Organization{}, sql.ErrNoRows } -func (q *fakeQuerier) GetOrganizationIDsByMemberIDs(_ context.Context, ids []uuid.UUID) ([]database.GetOrganizationIDsByMemberIDsRow, error) { +func (q *FakeQuerier) GetOrganizationIDsByMemberIDs(_ context.Context, ids []uuid.UUID) ([]database.GetOrganizationIDsByMemberIDsRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1922,7 +1923,7 @@ func (q *fakeQuerier) GetOrganizationIDsByMemberIDs(_ context.Context, ids []uui return getOrganizationIDsByMemberIDRows, nil } -func (q *fakeQuerier) GetOrganizationMemberByUserID(_ context.Context, arg database.GetOrganizationMemberByUserIDParams) (database.OrganizationMember, error) { +func (q *FakeQuerier) GetOrganizationMemberByUserID(_ context.Context, arg database.GetOrganizationMemberByUserIDParams) (database.OrganizationMember, error) { if err := validateDatabaseType(arg); err != nil { return database.OrganizationMember{}, err } @@ -1942,7 +1943,7 @@ func (q *fakeQuerier) GetOrganizationMemberByUserID(_ context.Context, arg datab return database.OrganizationMember{}, sql.ErrNoRows } -func (q *fakeQuerier) GetOrganizationMembershipsByUserID(_ context.Context, userID uuid.UUID) ([]database.OrganizationMember, error) { +func (q *FakeQuerier) GetOrganizationMembershipsByUserID(_ context.Context, userID uuid.UUID) ([]database.OrganizationMember, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1957,7 +1958,7 @@ func (q *fakeQuerier) GetOrganizationMembershipsByUserID(_ context.Context, user return memberships, nil } -func (q *fakeQuerier) GetOrganizations(_ context.Context) ([]database.Organization, error) { +func (q *FakeQuerier) GetOrganizations(_ context.Context) ([]database.Organization, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1967,7 +1968,7 @@ func (q *fakeQuerier) GetOrganizations(_ context.Context) ([]database.Organizati return q.organizations, nil } -func (q *fakeQuerier) GetOrganizationsByUserID(_ context.Context, userID uuid.UUID) ([]database.Organization, error) { +func (q *FakeQuerier) GetOrganizationsByUserID(_ context.Context, userID uuid.UUID) ([]database.Organization, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -1989,7 +1990,7 @@ func (q *fakeQuerier) GetOrganizationsByUserID(_ context.Context, userID uuid.UU return organizations, nil } -func (q *fakeQuerier) GetParameterSchemasByJobID(_ context.Context, jobID uuid.UUID) ([]database.ParameterSchema, error) { +func (q *FakeQuerier) GetParameterSchemasByJobID(_ context.Context, jobID uuid.UUID) ([]database.ParameterSchema, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2009,7 +2010,7 @@ func (q *fakeQuerier) GetParameterSchemasByJobID(_ context.Context, jobID uuid.U return parameters, nil } -func (q *fakeQuerier) GetPreviousTemplateVersion(_ context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) { +func (q *FakeQuerier) GetPreviousTemplateVersion(_ context.Context, arg database.GetPreviousTemplateVersionParams) (database.TemplateVersion, error) { if err := validateDatabaseType(arg); err != nil { return database.TemplateVersion{}, err } @@ -2060,7 +2061,7 @@ func (q *fakeQuerier) GetPreviousTemplateVersion(_ context.Context, arg database return previousTemplateVersions[0], nil } -func (q *fakeQuerier) GetProvisionerDaemons(_ context.Context) ([]database.ProvisionerDaemon, error) { +func (q *FakeQuerier) GetProvisionerDaemons(_ context.Context) ([]database.ProvisionerDaemon, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2070,14 +2071,14 @@ func (q *fakeQuerier) GetProvisionerDaemons(_ context.Context) ([]database.Provi return q.provisionerDaemons, nil } -func (q *fakeQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (database.ProvisionerJob, error) { +func (q *FakeQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (database.ProvisionerJob, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getProvisionerJobByIDNoLock(ctx, id) } -func (q *fakeQuerier) GetProvisionerJobsByIDs(_ context.Context, ids []uuid.UUID) ([]database.ProvisionerJob, error) { +func (q *FakeQuerier) GetProvisionerJobsByIDs(_ context.Context, ids []uuid.UUID) ([]database.ProvisionerJob, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2097,7 +2098,7 @@ func (q *fakeQuerier) GetProvisionerJobsByIDs(_ context.Context, ids []uuid.UUID return jobs, nil } -func (q *fakeQuerier) GetProvisionerJobsByIDsWithQueuePosition(_ context.Context, ids []uuid.UUID) ([]database.GetProvisionerJobsByIDsWithQueuePositionRow, error) { +func (q *FakeQuerier) GetProvisionerJobsByIDsWithQueuePosition(_ context.Context, ids []uuid.UUID) ([]database.GetProvisionerJobsByIDsWithQueuePositionRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2129,7 +2130,7 @@ func (q *fakeQuerier) GetProvisionerJobsByIDsWithQueuePosition(_ context.Context return jobs, nil } -func (q *fakeQuerier) GetProvisionerJobsCreatedAfter(_ context.Context, after time.Time) ([]database.ProvisionerJob, error) { +func (q *FakeQuerier) GetProvisionerJobsCreatedAfter(_ context.Context, after time.Time) ([]database.ProvisionerJob, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2142,7 +2143,7 @@ func (q *fakeQuerier) GetProvisionerJobsCreatedAfter(_ context.Context, after ti return jobs, nil } -func (q *fakeQuerier) GetProvisionerLogsAfterID(_ context.Context, arg database.GetProvisionerLogsAfterIDParams) ([]database.ProvisionerJobLog, error) { +func (q *FakeQuerier) GetProvisionerLogsAfterID(_ context.Context, arg database.GetProvisionerLogsAfterIDParams) ([]database.ProvisionerJobLog, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -2163,7 +2164,7 @@ func (q *fakeQuerier) GetProvisionerLogsAfterID(_ context.Context, arg database. return logs, nil } -func (q *fakeQuerier) GetQuotaAllowanceForUser(_ context.Context, userID uuid.UUID) (int64, error) { +func (q *FakeQuerier) GetQuotaAllowanceForUser(_ context.Context, userID uuid.UUID) (int64, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2181,7 +2182,7 @@ func (q *fakeQuerier) GetQuotaAllowanceForUser(_ context.Context, userID uuid.UU return sum, nil } -func (q *fakeQuerier) GetQuotaConsumedForUser(_ context.Context, userID uuid.UUID) (int64, error) { +func (q *FakeQuerier) GetQuotaConsumedForUser(_ context.Context, userID uuid.UUID) (int64, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2208,7 +2209,7 @@ func (q *fakeQuerier) GetQuotaConsumedForUser(_ context.Context, userID uuid.UUI return sum, nil } -func (q *fakeQuerier) GetReplicasUpdatedAfter(_ context.Context, updatedAt time.Time) ([]database.Replica, error) { +func (q *FakeQuerier) GetReplicasUpdatedAfter(_ context.Context, updatedAt time.Time) ([]database.Replica, error) { q.mutex.RLock() defer q.mutex.RUnlock() replicas := make([]database.Replica, 0) @@ -2220,7 +2221,7 @@ func (q *fakeQuerier) GetReplicasUpdatedAfter(_ context.Context, updatedAt time. return replicas, nil } -func (q *fakeQuerier) GetServiceBanner(_ context.Context) (string, error) { +func (q *FakeQuerier) GetServiceBanner(_ context.Context) (string, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2231,15 +2232,15 @@ func (q *fakeQuerier) GetServiceBanner(_ context.Context) (string, error) { return string(q.serviceBanner), nil } -func (*fakeQuerier) GetTailnetAgents(context.Context, uuid.UUID) ([]database.TailnetAgent, error) { +func (*FakeQuerier) GetTailnetAgents(context.Context, uuid.UUID) ([]database.TailnetAgent, error) { return nil, ErrUnimplemented } -func (*fakeQuerier) GetTailnetClientsForAgent(context.Context, uuid.UUID) ([]database.TailnetClient, error) { +func (*FakeQuerier) GetTailnetClientsForAgent(context.Context, uuid.UUID) ([]database.TailnetClient, error) { return nil, ErrUnimplemented } -func (q *fakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg database.GetTemplateAverageBuildTimeParams) (database.GetTemplateAverageBuildTimeRow, error) { +func (q *FakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg database.GetTemplateAverageBuildTimeParams) (database.GetTemplateAverageBuildTimeRow, error) { if err := validateDatabaseType(arg); err != nil { return database.GetTemplateAverageBuildTimeRow{}, err } @@ -2293,14 +2294,14 @@ func (q *fakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg datab return row, nil } -func (q *fakeQuerier) GetTemplateByID(ctx context.Context, id uuid.UUID) (database.Template, error) { +func (q *FakeQuerier) GetTemplateByID(ctx context.Context, id uuid.UUID) (database.Template, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getTemplateByIDNoLock(ctx, id) } -func (q *fakeQuerier) GetTemplateByOrganizationAndName(_ context.Context, arg database.GetTemplateByOrganizationAndNameParams) (database.Template, error) { +func (q *FakeQuerier) GetTemplateByOrganizationAndName(_ context.Context, arg database.GetTemplateByOrganizationAndNameParams) (database.Template, error) { if err := validateDatabaseType(arg); err != nil { return database.Template{}, err } @@ -2323,7 +2324,7 @@ func (q *fakeQuerier) GetTemplateByOrganizationAndName(_ context.Context, arg da return database.Template{}, sql.ErrNoRows } -func (q *fakeQuerier) GetTemplateDAUs(_ context.Context, arg database.GetTemplateDAUsParams) ([]database.GetTemplateDAUsRow, error) { +func (q *FakeQuerier) GetTemplateDAUs(_ context.Context, arg database.GetTemplateDAUsParams) ([]database.GetTemplateDAUsRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2366,14 +2367,14 @@ func (q *fakeQuerier) GetTemplateDAUs(_ context.Context, arg database.GetTemplat return rs, nil } -func (q *fakeQuerier) GetTemplateVersionByID(ctx context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) { +func (q *FakeQuerier) GetTemplateVersionByID(ctx context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getTemplateVersionByIDNoLock(ctx, templateVersionID) } -func (q *fakeQuerier) GetTemplateVersionByJobID(_ context.Context, jobID uuid.UUID) (database.TemplateVersion, error) { +func (q *FakeQuerier) GetTemplateVersionByJobID(_ context.Context, jobID uuid.UUID) (database.TemplateVersion, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2386,7 +2387,7 @@ func (q *fakeQuerier) GetTemplateVersionByJobID(_ context.Context, jobID uuid.UU return database.TemplateVersion{}, sql.ErrNoRows } -func (q *fakeQuerier) GetTemplateVersionByTemplateIDAndName(_ context.Context, arg database.GetTemplateVersionByTemplateIDAndNameParams) (database.TemplateVersion, error) { +func (q *FakeQuerier) GetTemplateVersionByTemplateIDAndName(_ context.Context, arg database.GetTemplateVersionByTemplateIDAndNameParams) (database.TemplateVersion, error) { if err := validateDatabaseType(arg); err != nil { return database.TemplateVersion{}, err } @@ -2406,7 +2407,7 @@ func (q *fakeQuerier) GetTemplateVersionByTemplateIDAndName(_ context.Context, a return database.TemplateVersion{}, sql.ErrNoRows } -func (q *fakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionParameter, error) { +func (q *FakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionParameter, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2426,7 +2427,7 @@ func (q *fakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVe return parameters, nil } -func (q *fakeQuerier) GetTemplateVersionVariables(_ context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionVariable, error) { +func (q *FakeQuerier) GetTemplateVersionVariables(_ context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionVariable, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2440,7 +2441,7 @@ func (q *fakeQuerier) GetTemplateVersionVariables(_ context.Context, templateVer return variables, nil } -func (q *fakeQuerier) GetTemplateVersionsByIDs(_ context.Context, ids []uuid.UUID) ([]database.TemplateVersion, error) { +func (q *FakeQuerier) GetTemplateVersionsByIDs(_ context.Context, ids []uuid.UUID) ([]database.TemplateVersion, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2460,7 +2461,7 @@ func (q *fakeQuerier) GetTemplateVersionsByIDs(_ context.Context, ids []uuid.UUI return versions, nil } -func (q *fakeQuerier) GetTemplateVersionsByTemplateID(_ context.Context, arg database.GetTemplateVersionsByTemplateIDParams) (version []database.TemplateVersion, err error) { +func (q *FakeQuerier) GetTemplateVersionsByTemplateID(_ context.Context, arg database.GetTemplateVersionsByTemplateIDParams) (version []database.TemplateVersion, err error) { if err := validateDatabaseType(arg); err != nil { return version, err } @@ -2523,7 +2524,7 @@ func (q *fakeQuerier) GetTemplateVersionsByTemplateID(_ context.Context, arg dat return version, nil } -func (q *fakeQuerier) GetTemplateVersionsCreatedAfter(_ context.Context, after time.Time) ([]database.TemplateVersion, error) { +func (q *FakeQuerier) GetTemplateVersionsCreatedAfter(_ context.Context, after time.Time) ([]database.TemplateVersion, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2536,7 +2537,7 @@ func (q *fakeQuerier) GetTemplateVersionsCreatedAfter(_ context.Context, after t return versions, nil } -func (q *fakeQuerier) GetTemplates(_ context.Context) ([]database.Template, error) { +func (q *FakeQuerier) GetTemplates(_ context.Context) ([]database.Template, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2554,7 +2555,7 @@ func (q *fakeQuerier) GetTemplates(_ context.Context) ([]database.Template, erro return templates, nil } -func (q *fakeQuerier) GetTemplatesWithFilter(ctx context.Context, arg database.GetTemplatesWithFilterParams) ([]database.Template, error) { +func (q *FakeQuerier) GetTemplatesWithFilter(ctx context.Context, arg database.GetTemplatesWithFilterParams) ([]database.Template, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -2562,7 +2563,7 @@ func (q *fakeQuerier) GetTemplatesWithFilter(ctx context.Context, arg database.G return q.GetAuthorizedTemplates(ctx, arg, nil) } -func (q *fakeQuerier) GetUnexpiredLicenses(_ context.Context) ([]database.License, error) { +func (q *FakeQuerier) GetUnexpiredLicenses(_ context.Context) ([]database.License, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2577,7 +2578,7 @@ func (q *fakeQuerier) GetUnexpiredLicenses(_ context.Context) ([]database.Licens return results, nil } -func (q *fakeQuerier) GetUserByEmailOrUsername(_ context.Context, arg database.GetUserByEmailOrUsernameParams) (database.User, error) { +func (q *FakeQuerier) GetUserByEmailOrUsername(_ context.Context, arg database.GetUserByEmailOrUsernameParams) (database.User, error) { if err := validateDatabaseType(arg); err != nil { return database.User{}, err } @@ -2593,14 +2594,14 @@ func (q *fakeQuerier) GetUserByEmailOrUsername(_ context.Context, arg database.G return database.User{}, sql.ErrNoRows } -func (q *fakeQuerier) GetUserByID(_ context.Context, id uuid.UUID) (database.User, error) { +func (q *FakeQuerier) GetUserByID(_ context.Context, id uuid.UUID) (database.User, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getUserByIDNoLock(id) } -func (q *fakeQuerier) GetUserCount(_ context.Context) (int64, error) { +func (q *FakeQuerier) GetUserCount(_ context.Context) (int64, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2613,7 +2614,7 @@ func (q *fakeQuerier) GetUserCount(_ context.Context) (int64, error) { return existing, nil } -func (q *fakeQuerier) GetUserLinkByLinkedID(_ context.Context, id string) (database.UserLink, error) { +func (q *FakeQuerier) GetUserLinkByLinkedID(_ context.Context, id string) (database.UserLink, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2625,7 +2626,7 @@ func (q *fakeQuerier) GetUserLinkByLinkedID(_ context.Context, id string) (datab return database.UserLink{}, sql.ErrNoRows } -func (q *fakeQuerier) GetUserLinkByUserIDLoginType(_ context.Context, params database.GetUserLinkByUserIDLoginTypeParams) (database.UserLink, error) { +func (q *FakeQuerier) GetUserLinkByUserIDLoginType(_ context.Context, params database.GetUserLinkByUserIDLoginTypeParams) (database.UserLink, error) { if err := validateDatabaseType(params); err != nil { return database.UserLink{}, err } @@ -2641,7 +2642,7 @@ func (q *fakeQuerier) GetUserLinkByUserIDLoginType(_ context.Context, params dat return database.UserLink{}, sql.ErrNoRows } -func (q *fakeQuerier) GetUsers(_ context.Context, params database.GetUsersParams) ([]database.GetUsersRow, error) { +func (q *FakeQuerier) GetUsers(_ context.Context, params database.GetUsersParams) ([]database.GetUsersRow, error) { if err := validateDatabaseType(params); err != nil { return nil, err } @@ -2757,7 +2758,7 @@ func (q *fakeQuerier) GetUsers(_ context.Context, params database.GetUsersParams return convertUsers(users, int64(beforePageCount)), nil } -func (q *fakeQuerier) GetUsersByIDs(_ context.Context, ids []uuid.UUID) ([]database.User, error) { +func (q *FakeQuerier) GetUsersByIDs(_ context.Context, ids []uuid.UUID) ([]database.User, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2773,7 +2774,7 @@ func (q *fakeQuerier) GetUsersByIDs(_ context.Context, ids []uuid.UUID) ([]datab return users, nil } -func (q *fakeQuerier) GetWorkspaceAgentByAuthToken(_ context.Context, authToken uuid.UUID) (database.WorkspaceAgent, error) { +func (q *FakeQuerier) GetWorkspaceAgentByAuthToken(_ context.Context, authToken uuid.UUID) (database.WorkspaceAgent, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2787,14 +2788,14 @@ func (q *fakeQuerier) GetWorkspaceAgentByAuthToken(_ context.Context, authToken return database.WorkspaceAgent{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (database.WorkspaceAgent, error) { +func (q *FakeQuerier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (database.WorkspaceAgent, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getWorkspaceAgentByIDNoLock(ctx, id) } -func (q *fakeQuerier) GetWorkspaceAgentByInstanceID(_ context.Context, instanceID string) (database.WorkspaceAgent, error) { +func (q *FakeQuerier) GetWorkspaceAgentByInstanceID(_ context.Context, instanceID string) (database.WorkspaceAgent, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2808,7 +2809,7 @@ func (q *fakeQuerier) GetWorkspaceAgentByInstanceID(_ context.Context, instanceI return database.WorkspaceAgent{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceAgentLifecycleStateByID(ctx context.Context, id uuid.UUID) (database.GetWorkspaceAgentLifecycleStateByIDRow, error) { +func (q *FakeQuerier) GetWorkspaceAgentLifecycleStateByID(ctx context.Context, id uuid.UUID) (database.GetWorkspaceAgentLifecycleStateByIDRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2823,7 +2824,7 @@ func (q *fakeQuerier) GetWorkspaceAgentLifecycleStateByID(ctx context.Context, i }, nil } -func (q *fakeQuerier) GetWorkspaceAgentMetadata(_ context.Context, workspaceAgentID uuid.UUID) ([]database.WorkspaceAgentMetadatum, error) { +func (q *FakeQuerier) GetWorkspaceAgentMetadata(_ context.Context, workspaceAgentID uuid.UUID) ([]database.WorkspaceAgentMetadatum, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2836,7 +2837,7 @@ func (q *fakeQuerier) GetWorkspaceAgentMetadata(_ context.Context, workspaceAgen return metadata, nil } -func (q *fakeQuerier) GetWorkspaceAgentStartupLogsAfter(_ context.Context, arg database.GetWorkspaceAgentStartupLogsAfterParams) ([]database.WorkspaceAgentStartupLog, error) { +func (q *FakeQuerier) GetWorkspaceAgentStartupLogsAfter(_ context.Context, arg database.GetWorkspaceAgentStartupLogsAfterParams) ([]database.WorkspaceAgentStartupLog, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -2857,7 +2858,7 @@ func (q *fakeQuerier) GetWorkspaceAgentStartupLogsAfter(_ context.Context, arg d return logs, nil } -func (q *fakeQuerier) GetWorkspaceAgentStats(_ context.Context, createdAfter time.Time) ([]database.GetWorkspaceAgentStatsRow, error) { +func (q *FakeQuerier) GetWorkspaceAgentStats(_ context.Context, createdAfter time.Time) ([]database.GetWorkspaceAgentStatsRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -2930,7 +2931,7 @@ func (q *fakeQuerier) GetWorkspaceAgentStats(_ context.Context, createdAfter tim return stats, nil } -func (q *fakeQuerier) GetWorkspaceAgentStatsAndLabels(ctx context.Context, createdAfter time.Time) ([]database.GetWorkspaceAgentStatsAndLabelsRow, error) { +func (q *FakeQuerier) GetWorkspaceAgentStatsAndLabels(ctx context.Context, createdAfter time.Time) ([]database.GetWorkspaceAgentStatsAndLabelsRow, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3001,14 +3002,14 @@ func (q *fakeQuerier) GetWorkspaceAgentStatsAndLabels(ctx context.Context, creat return stats, nil } -func (q *fakeQuerier) GetWorkspaceAgentsByResourceIDs(ctx context.Context, resourceIDs []uuid.UUID) ([]database.WorkspaceAgent, error) { +func (q *FakeQuerier) GetWorkspaceAgentsByResourceIDs(ctx context.Context, resourceIDs []uuid.UUID) ([]database.WorkspaceAgent, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getWorkspaceAgentsByResourceIDsNoLock(ctx, resourceIDs) } -func (q *fakeQuerier) GetWorkspaceAgentsCreatedAfter(_ context.Context, after time.Time) ([]database.WorkspaceAgent, error) { +func (q *FakeQuerier) GetWorkspaceAgentsCreatedAfter(_ context.Context, after time.Time) ([]database.WorkspaceAgent, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3021,7 +3022,7 @@ func (q *fakeQuerier) GetWorkspaceAgentsCreatedAfter(_ context.Context, after ti return workspaceAgents, nil } -func (q *fakeQuerier) GetWorkspaceAgentsInLatestBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) ([]database.WorkspaceAgent, error) { +func (q *FakeQuerier) GetWorkspaceAgentsInLatestBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) ([]database.WorkspaceAgent, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3053,7 +3054,7 @@ func (q *fakeQuerier) GetWorkspaceAgentsInLatestBuildByWorkspaceID(ctx context.C return agents, nil } -func (q *fakeQuerier) GetWorkspaceAppByAgentIDAndSlug(_ context.Context, arg database.GetWorkspaceAppByAgentIDAndSlugParams) (database.WorkspaceApp, error) { +func (q *FakeQuerier) GetWorkspaceAppByAgentIDAndSlug(_ context.Context, arg database.GetWorkspaceAppByAgentIDAndSlugParams) (database.WorkspaceApp, error) { if err := validateDatabaseType(arg); err != nil { return database.WorkspaceApp{}, err } @@ -3073,7 +3074,7 @@ func (q *fakeQuerier) GetWorkspaceAppByAgentIDAndSlug(_ context.Context, arg dat return database.WorkspaceApp{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceAppsByAgentID(_ context.Context, id uuid.UUID) ([]database.WorkspaceApp, error) { +func (q *FakeQuerier) GetWorkspaceAppsByAgentID(_ context.Context, id uuid.UUID) ([]database.WorkspaceApp, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3089,7 +3090,7 @@ func (q *fakeQuerier) GetWorkspaceAppsByAgentID(_ context.Context, id uuid.UUID) return apps, nil } -func (q *fakeQuerier) GetWorkspaceAppsByAgentIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceApp, error) { +func (q *FakeQuerier) GetWorkspaceAppsByAgentIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceApp, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3105,7 +3106,7 @@ func (q *fakeQuerier) GetWorkspaceAppsByAgentIDs(_ context.Context, ids []uuid.U return apps, nil } -func (q *fakeQuerier) GetWorkspaceAppsCreatedAfter(_ context.Context, after time.Time) ([]database.WorkspaceApp, error) { +func (q *FakeQuerier) GetWorkspaceAppsCreatedAfter(_ context.Context, after time.Time) ([]database.WorkspaceApp, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3118,14 +3119,14 @@ func (q *fakeQuerier) GetWorkspaceAppsCreatedAfter(_ context.Context, after time return apps, nil } -func (q *fakeQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getWorkspaceBuildByIDNoLock(ctx, id) } -func (q *fakeQuerier) GetWorkspaceBuildByJobID(_ context.Context, jobID uuid.UUID) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) GetWorkspaceBuildByJobID(_ context.Context, jobID uuid.UUID) (database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3137,7 +3138,7 @@ func (q *fakeQuerier) GetWorkspaceBuildByJobID(_ context.Context, jobID uuid.UUI return database.WorkspaceBuild{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(_ context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(_ context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) { if err := validateDatabaseType(arg); err != nil { return database.WorkspaceBuild{}, err } @@ -3157,7 +3158,7 @@ func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(_ context.Con return database.WorkspaceBuild{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceBuildParameters(_ context.Context, workspaceBuildID uuid.UUID) ([]database.WorkspaceBuildParameter, error) { +func (q *FakeQuerier) GetWorkspaceBuildParameters(_ context.Context, workspaceBuildID uuid.UUID) ([]database.WorkspaceBuildParameter, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3171,7 +3172,7 @@ func (q *fakeQuerier) GetWorkspaceBuildParameters(_ context.Context, workspaceBu return params, nil } -func (q *fakeQuerier) GetWorkspaceBuildsByWorkspaceID(_ context.Context, +func (q *FakeQuerier) GetWorkspaceBuildsByWorkspaceID(_ context.Context, params database.GetWorkspaceBuildsByWorkspaceIDParams, ) ([]database.WorkspaceBuild, error) { if err := validateDatabaseType(params); err != nil { @@ -3234,7 +3235,7 @@ func (q *fakeQuerier) GetWorkspaceBuildsByWorkspaceID(_ context.Context, return history, nil } -func (q *fakeQuerier) GetWorkspaceBuildsCreatedAfter(_ context.Context, after time.Time) ([]database.WorkspaceBuild, error) { +func (q *FakeQuerier) GetWorkspaceBuildsCreatedAfter(_ context.Context, after time.Time) ([]database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3247,21 +3248,21 @@ func (q *fakeQuerier) GetWorkspaceBuildsCreatedAfter(_ context.Context, after ti return workspaceBuilds, nil } -func (q *fakeQuerier) GetWorkspaceByAgentID(ctx context.Context, agentID uuid.UUID) (database.Workspace, error) { +func (q *FakeQuerier) GetWorkspaceByAgentID(ctx context.Context, agentID uuid.UUID) (database.Workspace, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getWorkspaceByAgentIDNoLock(ctx, agentID) } -func (q *fakeQuerier) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (database.Workspace, error) { +func (q *FakeQuerier) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (database.Workspace, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getWorkspaceByIDNoLock(ctx, id) } -func (q *fakeQuerier) GetWorkspaceByOwnerIDAndName(_ context.Context, arg database.GetWorkspaceByOwnerIDAndNameParams) (database.Workspace, error) { +func (q *FakeQuerier) GetWorkspaceByOwnerIDAndName(_ context.Context, arg database.GetWorkspaceByOwnerIDAndNameParams) (database.Workspace, error) { if err := validateDatabaseType(arg); err != nil { return database.Workspace{}, err } @@ -3293,7 +3294,7 @@ func (q *fakeQuerier) GetWorkspaceByOwnerIDAndName(_ context.Context, arg databa return database.Workspace{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceByWorkspaceAppID(_ context.Context, workspaceAppID uuid.UUID) (database.Workspace, error) { +func (q *FakeQuerier) GetWorkspaceByWorkspaceAppID(_ context.Context, workspaceAppID uuid.UUID) (database.Workspace, error) { if err := validateDatabaseType(workspaceAppID); err != nil { return database.Workspace{}, err } @@ -3310,7 +3311,7 @@ func (q *fakeQuerier) GetWorkspaceByWorkspaceAppID(_ context.Context, workspaceA return database.Workspace{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceProxies(_ context.Context) ([]database.WorkspaceProxy, error) { +func (q *FakeQuerier) GetWorkspaceProxies(_ context.Context) ([]database.WorkspaceProxy, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3324,7 +3325,7 @@ func (q *fakeQuerier) GetWorkspaceProxies(_ context.Context) ([]database.Workspa return cpy, nil } -func (q *fakeQuerier) GetWorkspaceProxyByHostname(_ context.Context, params database.GetWorkspaceProxyByHostnameParams) (database.WorkspaceProxy, error) { +func (q *FakeQuerier) GetWorkspaceProxyByHostname(_ context.Context, params database.GetWorkspaceProxyByHostnameParams) (database.WorkspaceProxy, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3360,7 +3361,7 @@ func (q *fakeQuerier) GetWorkspaceProxyByHostname(_ context.Context, params data return database.WorkspaceProxy{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceProxyByID(_ context.Context, id uuid.UUID) (database.WorkspaceProxy, error) { +func (q *FakeQuerier) GetWorkspaceProxyByID(_ context.Context, id uuid.UUID) (database.WorkspaceProxy, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3372,7 +3373,7 @@ func (q *fakeQuerier) GetWorkspaceProxyByID(_ context.Context, id uuid.UUID) (da return database.WorkspaceProxy{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceProxyByName(_ context.Context, name string) (database.WorkspaceProxy, error) { +func (q *FakeQuerier) GetWorkspaceProxyByName(_ context.Context, name string) (database.WorkspaceProxy, error) { q.mutex.Lock() defer q.mutex.Unlock() @@ -3387,7 +3388,7 @@ func (q *fakeQuerier) GetWorkspaceProxyByName(_ context.Context, name string) (d return database.WorkspaceProxy{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceResourceByID(_ context.Context, id uuid.UUID) (database.WorkspaceResource, error) { +func (q *FakeQuerier) GetWorkspaceResourceByID(_ context.Context, id uuid.UUID) (database.WorkspaceResource, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3399,7 +3400,7 @@ func (q *fakeQuerier) GetWorkspaceResourceByID(_ context.Context, id uuid.UUID) return database.WorkspaceResource{}, sql.ErrNoRows } -func (q *fakeQuerier) GetWorkspaceResourceMetadataByResourceIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceResourceMetadatum, error) { +func (q *FakeQuerier) GetWorkspaceResourceMetadataByResourceIDs(_ context.Context, ids []uuid.UUID) ([]database.WorkspaceResourceMetadatum, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3414,7 +3415,7 @@ func (q *fakeQuerier) GetWorkspaceResourceMetadataByResourceIDs(_ context.Contex return metadata, nil } -func (q *fakeQuerier) GetWorkspaceResourceMetadataCreatedAfter(ctx context.Context, after time.Time) ([]database.WorkspaceResourceMetadatum, error) { +func (q *FakeQuerier) GetWorkspaceResourceMetadataCreatedAfter(ctx context.Context, after time.Time) ([]database.WorkspaceResourceMetadatum, error) { resources, err := q.GetWorkspaceResourcesCreatedAfter(ctx, after) if err != nil { return nil, err @@ -3438,14 +3439,14 @@ func (q *fakeQuerier) GetWorkspaceResourceMetadataCreatedAfter(ctx context.Conte return metadata, nil } -func (q *fakeQuerier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.UUID) ([]database.WorkspaceResource, error) { +func (q *FakeQuerier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.UUID) ([]database.WorkspaceResource, error) { q.mutex.RLock() defer q.mutex.RUnlock() return q.getWorkspaceResourcesByJobIDNoLock(ctx, jobID) } -func (q *fakeQuerier) GetWorkspaceResourcesByJobIDs(_ context.Context, jobIDs []uuid.UUID) ([]database.WorkspaceResource, error) { +func (q *FakeQuerier) GetWorkspaceResourcesByJobIDs(_ context.Context, jobIDs []uuid.UUID) ([]database.WorkspaceResource, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3461,7 +3462,7 @@ func (q *fakeQuerier) GetWorkspaceResourcesByJobIDs(_ context.Context, jobIDs [] return resources, nil } -func (q *fakeQuerier) GetWorkspaceResourcesCreatedAfter(_ context.Context, after time.Time) ([]database.WorkspaceResource, error) { +func (q *FakeQuerier) GetWorkspaceResourcesCreatedAfter(_ context.Context, after time.Time) ([]database.WorkspaceResource, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3474,7 +3475,7 @@ func (q *fakeQuerier) GetWorkspaceResourcesCreatedAfter(_ context.Context, after return resources, nil } -func (q *fakeQuerier) GetWorkspaces(ctx context.Context, arg database.GetWorkspacesParams) ([]database.GetWorkspacesRow, error) { +func (q *FakeQuerier) GetWorkspaces(ctx context.Context, arg database.GetWorkspacesParams) ([]database.GetWorkspacesRow, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -3484,7 +3485,7 @@ func (q *fakeQuerier) GetWorkspaces(ctx context.Context, arg database.GetWorkspa return workspaceRows, err } -func (q *fakeQuerier) GetWorkspacesEligibleForTransition(ctx context.Context, now time.Time) ([]database.Workspace, error) { +func (q *FakeQuerier) GetWorkspacesEligibleForTransition(ctx context.Context, now time.Time) ([]database.Workspace, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -3536,7 +3537,7 @@ func (q *fakeQuerier) GetWorkspacesEligibleForTransition(ctx context.Context, no return workspaces, nil } -func (q *fakeQuerier) InsertAPIKey(_ context.Context, arg database.InsertAPIKeyParams) (database.APIKey, error) { +func (q *FakeQuerier) InsertAPIKey(_ context.Context, arg database.InsertAPIKeyParams) (database.APIKey, error) { if err := validateDatabaseType(arg); err != nil { return database.APIKey{}, err } @@ -3573,7 +3574,7 @@ func (q *fakeQuerier) InsertAPIKey(_ context.Context, arg database.InsertAPIKeyP return key, nil } -func (q *fakeQuerier) InsertAllUsersGroup(ctx context.Context, orgID uuid.UUID) (database.Group, error) { +func (q *FakeQuerier) InsertAllUsersGroup(ctx context.Context, orgID uuid.UUID) (database.Group, error) { return q.InsertGroup(ctx, database.InsertGroupParams{ ID: orgID, Name: database.AllUsersGroup, @@ -3581,7 +3582,7 @@ func (q *fakeQuerier) InsertAllUsersGroup(ctx context.Context, orgID uuid.UUID) }) } -func (q *fakeQuerier) InsertAuditLog(_ context.Context, arg database.InsertAuditLogParams) (database.AuditLog, error) { +func (q *FakeQuerier) InsertAuditLog(_ context.Context, arg database.InsertAuditLogParams) (database.AuditLog, error) { if err := validateDatabaseType(arg); err != nil { return database.AuditLog{}, err } @@ -3599,7 +3600,7 @@ func (q *fakeQuerier) InsertAuditLog(_ context.Context, arg database.InsertAudit return alog, nil } -func (q *fakeQuerier) InsertDERPMeshKey(_ context.Context, id string) error { +func (q *FakeQuerier) InsertDERPMeshKey(_ context.Context, id string) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -3607,7 +3608,7 @@ func (q *fakeQuerier) InsertDERPMeshKey(_ context.Context, id string) error { return nil } -func (q *fakeQuerier) InsertDeploymentID(_ context.Context, id string) error { +func (q *FakeQuerier) InsertDeploymentID(_ context.Context, id string) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -3615,7 +3616,7 @@ func (q *fakeQuerier) InsertDeploymentID(_ context.Context, id string) error { return nil } -func (q *fakeQuerier) InsertFile(_ context.Context, arg database.InsertFileParams) (database.File, error) { +func (q *FakeQuerier) InsertFile(_ context.Context, arg database.InsertFileParams) (database.File, error) { if err := validateDatabaseType(arg); err != nil { return database.File{}, err } @@ -3636,7 +3637,7 @@ func (q *fakeQuerier) InsertFile(_ context.Context, arg database.InsertFileParam return file, nil } -func (q *fakeQuerier) InsertGitAuthLink(_ context.Context, arg database.InsertGitAuthLinkParams) (database.GitAuthLink, error) { +func (q *FakeQuerier) InsertGitAuthLink(_ context.Context, arg database.InsertGitAuthLinkParams) (database.GitAuthLink, error) { if err := validateDatabaseType(arg); err != nil { return database.GitAuthLink{}, err } @@ -3657,7 +3658,7 @@ func (q *fakeQuerier) InsertGitAuthLink(_ context.Context, arg database.InsertGi return gitAuthLink, nil } -func (q *fakeQuerier) InsertGitSSHKey(_ context.Context, arg database.InsertGitSSHKeyParams) (database.GitSSHKey, error) { +func (q *FakeQuerier) InsertGitSSHKey(_ context.Context, arg database.InsertGitSSHKeyParams) (database.GitSSHKey, error) { if err := validateDatabaseType(arg); err != nil { return database.GitSSHKey{}, err } @@ -3677,7 +3678,7 @@ func (q *fakeQuerier) InsertGitSSHKey(_ context.Context, arg database.InsertGitS return gitSSHKey, nil } -func (q *fakeQuerier) InsertGroup(_ context.Context, arg database.InsertGroupParams) (database.Group, error) { +func (q *FakeQuerier) InsertGroup(_ context.Context, arg database.InsertGroupParams) (database.Group, error) { if err := validateDatabaseType(arg); err != nil { return database.Group{}, err } @@ -3706,7 +3707,7 @@ func (q *fakeQuerier) InsertGroup(_ context.Context, arg database.InsertGroupPar return group, nil } -func (q *fakeQuerier) InsertGroupMember(_ context.Context, arg database.InsertGroupMemberParams) error { +func (q *FakeQuerier) InsertGroupMember(_ context.Context, arg database.InsertGroupMemberParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -3730,7 +3731,7 @@ func (q *fakeQuerier) InsertGroupMember(_ context.Context, arg database.InsertGr return nil } -func (q *fakeQuerier) InsertLicense( +func (q *FakeQuerier) InsertLicense( _ context.Context, arg database.InsertLicenseParams, ) (database.License, error) { if err := validateDatabaseType(arg); err != nil { @@ -3751,7 +3752,7 @@ func (q *fakeQuerier) InsertLicense( return l, nil } -func (q *fakeQuerier) InsertOrganization(_ context.Context, arg database.InsertOrganizationParams) (database.Organization, error) { +func (q *FakeQuerier) InsertOrganization(_ context.Context, arg database.InsertOrganizationParams) (database.Organization, error) { if err := validateDatabaseType(arg); err != nil { return database.Organization{}, err } @@ -3769,7 +3770,7 @@ func (q *fakeQuerier) InsertOrganization(_ context.Context, arg database.InsertO return organization, nil } -func (q *fakeQuerier) InsertOrganizationMember(_ context.Context, arg database.InsertOrganizationMemberParams) (database.OrganizationMember, error) { +func (q *FakeQuerier) InsertOrganizationMember(_ context.Context, arg database.InsertOrganizationMemberParams) (database.OrganizationMember, error) { if err := validateDatabaseType(arg); err != nil { return database.OrganizationMember{}, err } @@ -3789,7 +3790,7 @@ func (q *fakeQuerier) InsertOrganizationMember(_ context.Context, arg database.I return organizationMember, nil } -func (q *fakeQuerier) InsertProvisionerDaemon(_ context.Context, arg database.InsertProvisionerDaemonParams) (database.ProvisionerDaemon, error) { +func (q *FakeQuerier) InsertProvisionerDaemon(_ context.Context, arg database.InsertProvisionerDaemonParams) (database.ProvisionerDaemon, error) { if err := validateDatabaseType(arg); err != nil { return database.ProvisionerDaemon{}, err } @@ -3808,7 +3809,7 @@ func (q *fakeQuerier) InsertProvisionerDaemon(_ context.Context, arg database.In return daemon, nil } -func (q *fakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) { +func (q *FakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) { if err := validateDatabaseType(arg); err != nil { return database.ProvisionerJob{}, err } @@ -3833,7 +3834,7 @@ func (q *fakeQuerier) InsertProvisionerJob(_ context.Context, arg database.Inser return job, nil } -func (q *fakeQuerier) InsertProvisionerJobLogs(_ context.Context, arg database.InsertProvisionerJobLogsParams) ([]database.ProvisionerJobLog, error) { +func (q *FakeQuerier) InsertProvisionerJobLogs(_ context.Context, arg database.InsertProvisionerJobLogsParams) ([]database.ProvisionerJobLog, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -3862,7 +3863,7 @@ func (q *fakeQuerier) InsertProvisionerJobLogs(_ context.Context, arg database.I return logs, nil } -func (q *fakeQuerier) InsertReplica(_ context.Context, arg database.InsertReplicaParams) (database.Replica, error) { +func (q *FakeQuerier) InsertReplica(_ context.Context, arg database.InsertReplicaParams) (database.Replica, error) { if err := validateDatabaseType(arg); err != nil { return database.Replica{}, err } @@ -3885,7 +3886,7 @@ func (q *fakeQuerier) InsertReplica(_ context.Context, arg database.InsertReplic return replica, nil } -func (q *fakeQuerier) InsertTemplate(_ context.Context, arg database.InsertTemplateParams) (database.Template, error) { +func (q *FakeQuerier) InsertTemplate(_ context.Context, arg database.InsertTemplateParams) (database.Template, error) { if err := validateDatabaseType(arg); err != nil { return database.Template{}, err } @@ -3916,7 +3917,7 @@ func (q *fakeQuerier) InsertTemplate(_ context.Context, arg database.InsertTempl return template.DeepCopy(), nil } -func (q *fakeQuerier) InsertTemplateVersion(_ context.Context, arg database.InsertTemplateVersionParams) (database.TemplateVersion, error) { +func (q *FakeQuerier) InsertTemplateVersion(_ context.Context, arg database.InsertTemplateVersionParams) (database.TemplateVersion, error) { if err := validateDatabaseType(arg); err != nil { return database.TemplateVersion{}, err } @@ -3940,7 +3941,7 @@ func (q *fakeQuerier) InsertTemplateVersion(_ context.Context, arg database.Inse return version, nil } -func (q *fakeQuerier) InsertTemplateVersionParameter(_ context.Context, arg database.InsertTemplateVersionParameterParams) (database.TemplateVersionParameter, error) { +func (q *FakeQuerier) InsertTemplateVersionParameter(_ context.Context, arg database.InsertTemplateVersionParameterParams) (database.TemplateVersionParameter, error) { if err := validateDatabaseType(arg); err != nil { return database.TemplateVersionParameter{}, err } @@ -3972,7 +3973,7 @@ func (q *fakeQuerier) InsertTemplateVersionParameter(_ context.Context, arg data return param, nil } -func (q *fakeQuerier) InsertTemplateVersionVariable(_ context.Context, arg database.InsertTemplateVersionVariableParams) (database.TemplateVersionVariable, error) { +func (q *FakeQuerier) InsertTemplateVersionVariable(_ context.Context, arg database.InsertTemplateVersionVariableParams) (database.TemplateVersionVariable, error) { if err := validateDatabaseType(arg); err != nil { return database.TemplateVersionVariable{}, err } @@ -3995,7 +3996,7 @@ func (q *fakeQuerier) InsertTemplateVersionVariable(_ context.Context, arg datab return variable, nil } -func (q *fakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParams) (database.User, error) { +func (q *FakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParams) (database.User, error) { if err := validateDatabaseType(arg); err != nil { return database.User{}, err } @@ -4039,7 +4040,7 @@ func (q *fakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParam return user, nil } -func (q *fakeQuerier) InsertUserGroupsByName(_ context.Context, arg database.InsertUserGroupsByNameParams) error { +func (q *FakeQuerier) InsertUserGroupsByName(_ context.Context, arg database.InsertUserGroupsByNameParams) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -4062,7 +4063,7 @@ func (q *fakeQuerier) InsertUserGroupsByName(_ context.Context, arg database.Ins return nil } -func (q *fakeQuerier) InsertUserLink(_ context.Context, args database.InsertUserLinkParams) (database.UserLink, error) { +func (q *FakeQuerier) InsertUserLink(_ context.Context, args database.InsertUserLinkParams) (database.UserLink, error) { q.mutex.Lock() defer q.mutex.Unlock() @@ -4081,7 +4082,7 @@ func (q *fakeQuerier) InsertUserLink(_ context.Context, args database.InsertUser return link, nil } -func (q *fakeQuerier) InsertWorkspace(_ context.Context, arg database.InsertWorkspaceParams) (database.Workspace, error) { +func (q *FakeQuerier) InsertWorkspace(_ context.Context, arg database.InsertWorkspaceParams) (database.Workspace, error) { if err := validateDatabaseType(arg); err != nil { return database.Workspace{}, err } @@ -4106,7 +4107,7 @@ func (q *fakeQuerier) InsertWorkspace(_ context.Context, arg database.InsertWork return workspace, nil } -func (q *fakeQuerier) InsertWorkspaceAgent(_ context.Context, arg database.InsertWorkspaceAgentParams) (database.WorkspaceAgent, error) { +func (q *FakeQuerier) InsertWorkspaceAgent(_ context.Context, arg database.InsertWorkspaceAgentParams) (database.WorkspaceAgent, error) { if err := validateDatabaseType(arg); err != nil { return database.WorkspaceAgent{}, err } @@ -4141,7 +4142,7 @@ func (q *fakeQuerier) InsertWorkspaceAgent(_ context.Context, arg database.Inser return agent, nil } -func (q *fakeQuerier) InsertWorkspaceAgentMetadata(_ context.Context, arg database.InsertWorkspaceAgentMetadataParams) error { +func (q *FakeQuerier) InsertWorkspaceAgentMetadata(_ context.Context, arg database.InsertWorkspaceAgentMetadataParams) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -4159,7 +4160,7 @@ func (q *fakeQuerier) InsertWorkspaceAgentMetadata(_ context.Context, arg databa return nil } -func (q *fakeQuerier) InsertWorkspaceAgentStartupLogs(_ context.Context, arg database.InsertWorkspaceAgentStartupLogsParams) ([]database.WorkspaceAgentStartupLog, error) { +func (q *FakeQuerier) InsertWorkspaceAgentStartupLogs(_ context.Context, arg database.InsertWorkspaceAgentStartupLogsParams) ([]database.WorkspaceAgentStartupLog, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -4203,7 +4204,7 @@ func (q *fakeQuerier) InsertWorkspaceAgentStartupLogs(_ context.Context, arg dat return logs, nil } -func (q *fakeQuerier) InsertWorkspaceAgentStat(_ context.Context, p database.InsertWorkspaceAgentStatParams) (database.WorkspaceAgentStat, error) { +func (q *FakeQuerier) InsertWorkspaceAgentStat(_ context.Context, p database.InsertWorkspaceAgentStatParams) (database.WorkspaceAgentStat, error) { if err := validateDatabaseType(p); err != nil { return database.WorkspaceAgentStat{}, err } @@ -4234,7 +4235,7 @@ func (q *fakeQuerier) InsertWorkspaceAgentStat(_ context.Context, p database.Ins return stat, nil } -func (q *fakeQuerier) InsertWorkspaceApp(_ context.Context, arg database.InsertWorkspaceAppParams) (database.WorkspaceApp, error) { +func (q *FakeQuerier) InsertWorkspaceApp(_ context.Context, arg database.InsertWorkspaceAppParams) (database.WorkspaceApp, error) { if err := validateDatabaseType(arg); err != nil { return database.WorkspaceApp{}, err } @@ -4268,7 +4269,7 @@ func (q *fakeQuerier) InsertWorkspaceApp(_ context.Context, arg database.InsertW return workspaceApp, nil } -func (q *fakeQuerier) InsertWorkspaceBuild(_ context.Context, arg database.InsertWorkspaceBuildParams) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) InsertWorkspaceBuild(_ context.Context, arg database.InsertWorkspaceBuildParams) (database.WorkspaceBuild, error) { if err := validateDatabaseType(arg); err != nil { return database.WorkspaceBuild{}, err } @@ -4294,7 +4295,7 @@ func (q *fakeQuerier) InsertWorkspaceBuild(_ context.Context, arg database.Inser return workspaceBuild, nil } -func (q *fakeQuerier) InsertWorkspaceBuildParameters(_ context.Context, arg database.InsertWorkspaceBuildParametersParams) error { +func (q *FakeQuerier) InsertWorkspaceBuildParameters(_ context.Context, arg database.InsertWorkspaceBuildParametersParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4312,7 +4313,7 @@ func (q *fakeQuerier) InsertWorkspaceBuildParameters(_ context.Context, arg data return nil } -func (q *fakeQuerier) InsertWorkspaceProxy(_ context.Context, arg database.InsertWorkspaceProxyParams) (database.WorkspaceProxy, error) { +func (q *FakeQuerier) InsertWorkspaceProxy(_ context.Context, arg database.InsertWorkspaceProxyParams) (database.WorkspaceProxy, error) { q.mutex.Lock() defer q.mutex.Unlock() @@ -4336,7 +4337,7 @@ func (q *fakeQuerier) InsertWorkspaceProxy(_ context.Context, arg database.Inser return p, nil } -func (q *fakeQuerier) InsertWorkspaceResource(_ context.Context, arg database.InsertWorkspaceResourceParams) (database.WorkspaceResource, error) { +func (q *FakeQuerier) InsertWorkspaceResource(_ context.Context, arg database.InsertWorkspaceResourceParams) (database.WorkspaceResource, error) { if err := validateDatabaseType(arg); err != nil { return database.WorkspaceResource{}, err } @@ -4360,7 +4361,7 @@ func (q *fakeQuerier) InsertWorkspaceResource(_ context.Context, arg database.In return resource, nil } -func (q *fakeQuerier) InsertWorkspaceResourceMetadata(_ context.Context, arg database.InsertWorkspaceResourceMetadataParams) ([]database.WorkspaceResourceMetadatum, error) { +func (q *FakeQuerier) InsertWorkspaceResourceMetadata(_ context.Context, arg database.InsertWorkspaceResourceMetadataParams) ([]database.WorkspaceResourceMetadatum, error) { if err := validateDatabaseType(arg); err != nil { return nil, err } @@ -4391,7 +4392,7 @@ func (q *fakeQuerier) InsertWorkspaceResourceMetadata(_ context.Context, arg dat return metadata, nil } -func (q *fakeQuerier) RegisterWorkspaceProxy(_ context.Context, arg database.RegisterWorkspaceProxyParams) (database.WorkspaceProxy, error) { +func (q *FakeQuerier) RegisterWorkspaceProxy(_ context.Context, arg database.RegisterWorkspaceProxyParams) (database.WorkspaceProxy, error) { q.mutex.Lock() defer q.mutex.Unlock() @@ -4407,11 +4408,11 @@ func (q *fakeQuerier) RegisterWorkspaceProxy(_ context.Context, arg database.Reg return database.WorkspaceProxy{}, sql.ErrNoRows } -func (*fakeQuerier) TryAcquireLock(_ context.Context, _ int64) (bool, error) { +func (*FakeQuerier) TryAcquireLock(_ context.Context, _ int64) (bool, error) { return false, xerrors.New("TryAcquireLock must only be called within a transaction") } -func (q *fakeQuerier) UpdateAPIKeyByID(_ context.Context, arg database.UpdateAPIKeyByIDParams) error { +func (q *FakeQuerier) UpdateAPIKeyByID(_ context.Context, arg database.UpdateAPIKeyByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4432,7 +4433,7 @@ func (q *fakeQuerier) UpdateAPIKeyByID(_ context.Context, arg database.UpdateAPI return sql.ErrNoRows } -func (q *fakeQuerier) UpdateGitAuthLink(_ context.Context, arg database.UpdateGitAuthLinkParams) (database.GitAuthLink, error) { +func (q *FakeQuerier) UpdateGitAuthLink(_ context.Context, arg database.UpdateGitAuthLinkParams) (database.GitAuthLink, error) { if err := validateDatabaseType(arg); err != nil { return database.GitAuthLink{}, err } @@ -4457,7 +4458,7 @@ func (q *fakeQuerier) UpdateGitAuthLink(_ context.Context, arg database.UpdateGi return database.GitAuthLink{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateGitSSHKey(_ context.Context, arg database.UpdateGitSSHKeyParams) (database.GitSSHKey, error) { +func (q *FakeQuerier) UpdateGitSSHKey(_ context.Context, arg database.UpdateGitSSHKeyParams) (database.GitSSHKey, error) { if err := validateDatabaseType(arg); err != nil { return database.GitSSHKey{}, err } @@ -4478,7 +4479,7 @@ func (q *fakeQuerier) UpdateGitSSHKey(_ context.Context, arg database.UpdateGitS return database.GitSSHKey{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateGroupByID(_ context.Context, arg database.UpdateGroupByIDParams) (database.Group, error) { +func (q *FakeQuerier) UpdateGroupByID(_ context.Context, arg database.UpdateGroupByIDParams) (database.Group, error) { if err := validateDatabaseType(arg); err != nil { return database.Group{}, err } @@ -4498,7 +4499,7 @@ func (q *fakeQuerier) UpdateGroupByID(_ context.Context, arg database.UpdateGrou return database.Group{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateMemberRoles(_ context.Context, arg database.UpdateMemberRolesParams) (database.OrganizationMember, error) { +func (q *FakeQuerier) UpdateMemberRoles(_ context.Context, arg database.UpdateMemberRolesParams) (database.OrganizationMember, error) { if err := validateDatabaseType(arg); err != nil { return database.OrganizationMember{}, err } @@ -4528,7 +4529,7 @@ func (q *fakeQuerier) UpdateMemberRoles(_ context.Context, arg database.UpdateMe return database.OrganizationMember{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateProvisionerJobByID(_ context.Context, arg database.UpdateProvisionerJobByIDParams) error { +func (q *FakeQuerier) UpdateProvisionerJobByID(_ context.Context, arg database.UpdateProvisionerJobByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4547,7 +4548,7 @@ func (q *fakeQuerier) UpdateProvisionerJobByID(_ context.Context, arg database.U return sql.ErrNoRows } -func (q *fakeQuerier) UpdateProvisionerJobWithCancelByID(_ context.Context, arg database.UpdateProvisionerJobWithCancelByIDParams) error { +func (q *FakeQuerier) UpdateProvisionerJobWithCancelByID(_ context.Context, arg database.UpdateProvisionerJobWithCancelByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4567,7 +4568,7 @@ func (q *fakeQuerier) UpdateProvisionerJobWithCancelByID(_ context.Context, arg return sql.ErrNoRows } -func (q *fakeQuerier) UpdateProvisionerJobWithCompleteByID(_ context.Context, arg database.UpdateProvisionerJobWithCompleteByIDParams) error { +func (q *FakeQuerier) UpdateProvisionerJobWithCompleteByID(_ context.Context, arg database.UpdateProvisionerJobWithCompleteByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4589,7 +4590,7 @@ func (q *fakeQuerier) UpdateProvisionerJobWithCompleteByID(_ context.Context, ar return sql.ErrNoRows } -func (q *fakeQuerier) UpdateReplica(_ context.Context, arg database.UpdateReplicaParams) (database.Replica, error) { +func (q *FakeQuerier) UpdateReplica(_ context.Context, arg database.UpdateReplicaParams) (database.Replica, error) { if err := validateDatabaseType(arg); err != nil { return database.Replica{}, err } @@ -4616,7 +4617,7 @@ func (q *fakeQuerier) UpdateReplica(_ context.Context, arg database.UpdateReplic return database.Replica{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateTemplateACLByID(_ context.Context, arg database.UpdateTemplateACLByIDParams) (database.Template, error) { +func (q *FakeQuerier) UpdateTemplateACLByID(_ context.Context, arg database.UpdateTemplateACLByIDParams) (database.Template, error) { if err := validateDatabaseType(arg); err != nil { return database.Template{}, err } @@ -4637,7 +4638,7 @@ func (q *fakeQuerier) UpdateTemplateACLByID(_ context.Context, arg database.Upda return database.Template{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateTemplateActiveVersionByID(_ context.Context, arg database.UpdateTemplateActiveVersionByIDParams) error { +func (q *FakeQuerier) UpdateTemplateActiveVersionByID(_ context.Context, arg database.UpdateTemplateActiveVersionByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4657,7 +4658,7 @@ func (q *fakeQuerier) UpdateTemplateActiveVersionByID(_ context.Context, arg dat return sql.ErrNoRows } -func (q *fakeQuerier) UpdateTemplateDeletedByID(_ context.Context, arg database.UpdateTemplateDeletedByIDParams) error { +func (q *FakeQuerier) UpdateTemplateDeletedByID(_ context.Context, arg database.UpdateTemplateDeletedByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4677,7 +4678,7 @@ func (q *fakeQuerier) UpdateTemplateDeletedByID(_ context.Context, arg database. return sql.ErrNoRows } -func (q *fakeQuerier) UpdateTemplateMetaByID(_ context.Context, arg database.UpdateTemplateMetaByIDParams) (database.Template, error) { +func (q *FakeQuerier) UpdateTemplateMetaByID(_ context.Context, arg database.UpdateTemplateMetaByIDParams) (database.Template, error) { if err := validateDatabaseType(arg); err != nil { return database.Template{}, err } @@ -4701,7 +4702,7 @@ func (q *fakeQuerier) UpdateTemplateMetaByID(_ context.Context, arg database.Upd return database.Template{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateTemplateScheduleByID(_ context.Context, arg database.UpdateTemplateScheduleByIDParams) (database.Template, error) { +func (q *FakeQuerier) UpdateTemplateScheduleByID(_ context.Context, arg database.UpdateTemplateScheduleByIDParams) (database.Template, error) { if err := validateDatabaseType(arg); err != nil { return database.Template{}, err } @@ -4728,7 +4729,7 @@ func (q *fakeQuerier) UpdateTemplateScheduleByID(_ context.Context, arg database return database.Template{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database.UpdateTemplateVersionByIDParams) (database.TemplateVersion, error) { +func (q *FakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database.UpdateTemplateVersionByIDParams) (database.TemplateVersion, error) { if err := validateDatabaseType(arg); err != nil { return database.TemplateVersion{}, err } @@ -4749,7 +4750,7 @@ func (q *fakeQuerier) UpdateTemplateVersionByID(_ context.Context, arg database. return database.TemplateVersion{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateTemplateVersionDescriptionByJobID(_ context.Context, arg database.UpdateTemplateVersionDescriptionByJobIDParams) error { +func (q *FakeQuerier) UpdateTemplateVersionDescriptionByJobID(_ context.Context, arg database.UpdateTemplateVersionDescriptionByJobIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4769,7 +4770,7 @@ func (q *fakeQuerier) UpdateTemplateVersionDescriptionByJobID(_ context.Context, return sql.ErrNoRows } -func (q *fakeQuerier) UpdateTemplateVersionGitAuthProvidersByJobID(_ context.Context, arg database.UpdateTemplateVersionGitAuthProvidersByJobIDParams) error { +func (q *FakeQuerier) UpdateTemplateVersionGitAuthProvidersByJobID(_ context.Context, arg database.UpdateTemplateVersionGitAuthProvidersByJobIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4789,7 +4790,7 @@ func (q *fakeQuerier) UpdateTemplateVersionGitAuthProvidersByJobID(_ context.Con return sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserDeletedByID(_ context.Context, params database.UpdateUserDeletedByIDParams) error { +func (q *FakeQuerier) UpdateUserDeletedByID(_ context.Context, params database.UpdateUserDeletedByIDParams) error { if err := validateDatabaseType(params); err != nil { return err } @@ -4822,7 +4823,7 @@ func (q *fakeQuerier) UpdateUserDeletedByID(_ context.Context, params database.U return sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserHashedPassword(_ context.Context, arg database.UpdateUserHashedPasswordParams) error { +func (q *FakeQuerier) UpdateUserHashedPassword(_ context.Context, arg database.UpdateUserHashedPasswordParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -4841,7 +4842,7 @@ func (q *fakeQuerier) UpdateUserHashedPassword(_ context.Context, arg database.U return sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserLastSeenAt(_ context.Context, arg database.UpdateUserLastSeenAtParams) (database.User, error) { +func (q *FakeQuerier) UpdateUserLastSeenAt(_ context.Context, arg database.UpdateUserLastSeenAtParams) (database.User, error) { if err := validateDatabaseType(arg); err != nil { return database.User{}, err } @@ -4861,7 +4862,7 @@ func (q *fakeQuerier) UpdateUserLastSeenAt(_ context.Context, arg database.Updat return database.User{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserLink(_ context.Context, params database.UpdateUserLinkParams) (database.UserLink, error) { +func (q *FakeQuerier) UpdateUserLink(_ context.Context, params database.UpdateUserLinkParams) (database.UserLink, error) { if err := validateDatabaseType(params); err != nil { return database.UserLink{}, err } @@ -4883,7 +4884,7 @@ func (q *fakeQuerier) UpdateUserLink(_ context.Context, params database.UpdateUs return database.UserLink{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserLinkedID(_ context.Context, params database.UpdateUserLinkedIDParams) (database.UserLink, error) { +func (q *FakeQuerier) UpdateUserLinkedID(_ context.Context, params database.UpdateUserLinkedIDParams) (database.UserLink, error) { if err := validateDatabaseType(params); err != nil { return database.UserLink{}, err } @@ -4903,7 +4904,7 @@ func (q *fakeQuerier) UpdateUserLinkedID(_ context.Context, params database.Upda return database.UserLink{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserLoginType(_ context.Context, arg database.UpdateUserLoginTypeParams) (database.User, error) { +func (q *FakeQuerier) UpdateUserLoginType(_ context.Context, arg database.UpdateUserLoginTypeParams) (database.User, error) { if err := validateDatabaseType(arg); err != nil { return database.User{}, err } @@ -4924,7 +4925,7 @@ func (q *fakeQuerier) UpdateUserLoginType(_ context.Context, arg database.Update return database.User{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserProfile(_ context.Context, arg database.UpdateUserProfileParams) (database.User, error) { +func (q *FakeQuerier) UpdateUserProfile(_ context.Context, arg database.UpdateUserProfileParams) (database.User, error) { if err := validateDatabaseType(arg); err != nil { return database.User{}, err } @@ -4945,7 +4946,7 @@ func (q *fakeQuerier) UpdateUserProfile(_ context.Context, arg database.UpdateUs return database.User{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserRoles(_ context.Context, arg database.UpdateUserRolesParams) (database.User, error) { +func (q *FakeQuerier) UpdateUserRoles(_ context.Context, arg database.UpdateUserRolesParams) (database.User, error) { if err := validateDatabaseType(arg); err != nil { return database.User{}, err } @@ -4979,7 +4980,7 @@ func (q *fakeQuerier) UpdateUserRoles(_ context.Context, arg database.UpdateUser return database.User{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateUserStatus(_ context.Context, arg database.UpdateUserStatusParams) (database.User, error) { +func (q *FakeQuerier) UpdateUserStatus(_ context.Context, arg database.UpdateUserStatusParams) (database.User, error) { if err := validateDatabaseType(arg); err != nil { return database.User{}, err } @@ -4999,7 +5000,7 @@ func (q *fakeQuerier) UpdateUserStatus(_ context.Context, arg database.UpdateUse return database.User{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspace(_ context.Context, arg database.UpdateWorkspaceParams) (database.Workspace, error) { +func (q *FakeQuerier) UpdateWorkspace(_ context.Context, arg database.UpdateWorkspaceParams) (database.Workspace, error) { if err := validateDatabaseType(arg); err != nil { return database.Workspace{}, err } @@ -5029,7 +5030,7 @@ func (q *fakeQuerier) UpdateWorkspace(_ context.Context, arg database.UpdateWork return database.Workspace{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceAgentConnectionByID(_ context.Context, arg database.UpdateWorkspaceAgentConnectionByIDParams) error { +func (q *FakeQuerier) UpdateWorkspaceAgentConnectionByID(_ context.Context, arg database.UpdateWorkspaceAgentConnectionByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5051,7 +5052,7 @@ func (q *fakeQuerier) UpdateWorkspaceAgentConnectionByID(_ context.Context, arg return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceAgentLifecycleStateByID(_ context.Context, arg database.UpdateWorkspaceAgentLifecycleStateByIDParams) error { +func (q *FakeQuerier) UpdateWorkspaceAgentLifecycleStateByID(_ context.Context, arg database.UpdateWorkspaceAgentLifecycleStateByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5070,7 +5071,7 @@ func (q *fakeQuerier) UpdateWorkspaceAgentLifecycleStateByID(_ context.Context, return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceAgentMetadata(_ context.Context, arg database.UpdateWorkspaceAgentMetadataParams) error { +func (q *FakeQuerier) UpdateWorkspaceAgentMetadata(_ context.Context, arg database.UpdateWorkspaceAgentMetadataParams) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -5093,7 +5094,7 @@ func (q *fakeQuerier) UpdateWorkspaceAgentMetadata(_ context.Context, arg databa return nil } -func (q *fakeQuerier) UpdateWorkspaceAgentStartupByID(_ context.Context, arg database.UpdateWorkspaceAgentStartupByIDParams) error { +func (q *FakeQuerier) UpdateWorkspaceAgentStartupByID(_ context.Context, arg database.UpdateWorkspaceAgentStartupByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5115,7 +5116,7 @@ func (q *fakeQuerier) UpdateWorkspaceAgentStartupByID(_ context.Context, arg dat return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceAgentStartupLogOverflowByID(_ context.Context, arg database.UpdateWorkspaceAgentStartupLogOverflowByIDParams) error { +func (q *FakeQuerier) UpdateWorkspaceAgentStartupLogOverflowByID(_ context.Context, arg database.UpdateWorkspaceAgentStartupLogOverflowByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5132,7 +5133,7 @@ func (q *fakeQuerier) UpdateWorkspaceAgentStartupLogOverflowByID(_ context.Conte return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceAppHealthByID(_ context.Context, arg database.UpdateWorkspaceAppHealthByIDParams) error { +func (q *FakeQuerier) UpdateWorkspaceAppHealthByID(_ context.Context, arg database.UpdateWorkspaceAppHealthByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5151,7 +5152,7 @@ func (q *fakeQuerier) UpdateWorkspaceAppHealthByID(_ context.Context, arg databa return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceAutostart(_ context.Context, arg database.UpdateWorkspaceAutostartParams) error { +func (q *FakeQuerier) UpdateWorkspaceAutostart(_ context.Context, arg database.UpdateWorkspaceAutostartParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5171,7 +5172,7 @@ func (q *fakeQuerier) UpdateWorkspaceAutostart(_ context.Context, arg database.U return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceBuildByID(_ context.Context, arg database.UpdateWorkspaceBuildByIDParams) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) UpdateWorkspaceBuildByID(_ context.Context, arg database.UpdateWorkspaceBuildByIDParams) (database.WorkspaceBuild, error) { if err := validateDatabaseType(arg); err != nil { return database.WorkspaceBuild{}, err } @@ -5193,7 +5194,7 @@ func (q *fakeQuerier) UpdateWorkspaceBuildByID(_ context.Context, arg database.U return database.WorkspaceBuild{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceBuildCostByID(_ context.Context, arg database.UpdateWorkspaceBuildCostByIDParams) (database.WorkspaceBuild, error) { +func (q *FakeQuerier) UpdateWorkspaceBuildCostByID(_ context.Context, arg database.UpdateWorkspaceBuildCostByIDParams) (database.WorkspaceBuild, error) { if err := validateDatabaseType(arg); err != nil { return database.WorkspaceBuild{}, err } @@ -5212,7 +5213,7 @@ func (q *fakeQuerier) UpdateWorkspaceBuildCostByID(_ context.Context, arg databa return database.WorkspaceBuild{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceDeletedByID(_ context.Context, arg database.UpdateWorkspaceDeletedByIDParams) error { +func (q *FakeQuerier) UpdateWorkspaceDeletedByID(_ context.Context, arg database.UpdateWorkspaceDeletedByIDParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5231,7 +5232,7 @@ func (q *fakeQuerier) UpdateWorkspaceDeletedByID(_ context.Context, arg database return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceLastUsedAt(_ context.Context, arg database.UpdateWorkspaceLastUsedAtParams) error { +func (q *FakeQuerier) UpdateWorkspaceLastUsedAt(_ context.Context, arg database.UpdateWorkspaceLastUsedAtParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5251,7 +5252,7 @@ func (q *fakeQuerier) UpdateWorkspaceLastUsedAt(_ context.Context, arg database. return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceLockedAt(_ context.Context, arg database.UpdateWorkspaceLockedAtParams) error { +func (q *FakeQuerier) UpdateWorkspaceLockedAt(_ context.Context, arg database.UpdateWorkspaceLockedAtParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5272,7 +5273,7 @@ func (q *fakeQuerier) UpdateWorkspaceLockedAt(_ context.Context, arg database.Up return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceProxy(_ context.Context, arg database.UpdateWorkspaceProxyParams) (database.WorkspaceProxy, error) { +func (q *FakeQuerier) UpdateWorkspaceProxy(_ context.Context, arg database.UpdateWorkspaceProxyParams) (database.WorkspaceProxy, error) { q.mutex.Lock() defer q.mutex.Unlock() @@ -5297,7 +5298,7 @@ func (q *fakeQuerier) UpdateWorkspaceProxy(_ context.Context, arg database.Updat return database.WorkspaceProxy{}, sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceProxyDeleted(_ context.Context, arg database.UpdateWorkspaceProxyDeletedParams) error { +func (q *FakeQuerier) UpdateWorkspaceProxyDeleted(_ context.Context, arg database.UpdateWorkspaceProxyDeletedParams) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -5312,7 +5313,7 @@ func (q *fakeQuerier) UpdateWorkspaceProxyDeleted(_ context.Context, arg databas return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceTTL(_ context.Context, arg database.UpdateWorkspaceTTLParams) error { +func (q *FakeQuerier) UpdateWorkspaceTTL(_ context.Context, arg database.UpdateWorkspaceTTLParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5332,7 +5333,7 @@ func (q *fakeQuerier) UpdateWorkspaceTTL(_ context.Context, arg database.UpdateW return sql.ErrNoRows } -func (q *fakeQuerier) UpdateWorkspaceTTLToBeWithinTemplateMax(_ context.Context, arg database.UpdateWorkspaceTTLToBeWithinTemplateMaxParams) error { +func (q *FakeQuerier) UpdateWorkspaceTTLToBeWithinTemplateMax(_ context.Context, arg database.UpdateWorkspaceTTLToBeWithinTemplateMaxParams) error { if err := validateDatabaseType(arg); err != nil { return err } @@ -5352,7 +5353,7 @@ func (q *fakeQuerier) UpdateWorkspaceTTLToBeWithinTemplateMax(_ context.Context, return nil } -func (q *fakeQuerier) UpsertAppSecurityKey(_ context.Context, data string) error { +func (q *FakeQuerier) UpsertAppSecurityKey(_ context.Context, data string) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -5360,13 +5361,13 @@ func (q *fakeQuerier) UpsertAppSecurityKey(_ context.Context, data string) error return nil } -func (q *fakeQuerier) UpsertDefaultProxy(_ context.Context, arg database.UpsertDefaultProxyParams) error { +func (q *FakeQuerier) UpsertDefaultProxy(_ context.Context, arg database.UpsertDefaultProxyParams) error { q.defaultProxyDisplayName = arg.DisplayName q.defaultProxyIconURL = arg.IconUrl return nil } -func (q *fakeQuerier) UpsertLastUpdateCheck(_ context.Context, data string) error { +func (q *FakeQuerier) UpsertLastUpdateCheck(_ context.Context, data string) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -5374,7 +5375,7 @@ func (q *fakeQuerier) UpsertLastUpdateCheck(_ context.Context, data string) erro return nil } -func (q *fakeQuerier) UpsertLogoURL(_ context.Context, data string) error { +func (q *FakeQuerier) UpsertLogoURL(_ context.Context, data string) error { q.mutex.RLock() defer q.mutex.RUnlock() @@ -5382,7 +5383,7 @@ func (q *fakeQuerier) UpsertLogoURL(_ context.Context, data string) error { return nil } -func (q *fakeQuerier) UpsertOAuthSigningKey(_ context.Context, value string) error { +func (q *FakeQuerier) UpsertOAuthSigningKey(_ context.Context, value string) error { q.mutex.Lock() defer q.mutex.Unlock() @@ -5390,7 +5391,7 @@ func (q *fakeQuerier) UpsertOAuthSigningKey(_ context.Context, value string) err return nil } -func (q *fakeQuerier) UpsertServiceBanner(_ context.Context, data string) error { +func (q *FakeQuerier) UpsertServiceBanner(_ context.Context, data string) error { q.mutex.RLock() defer q.mutex.RUnlock() @@ -5398,14 +5399,14 @@ func (q *fakeQuerier) UpsertServiceBanner(_ context.Context, data string) error return nil } -func (*fakeQuerier) UpsertTailnetAgent(context.Context, database.UpsertTailnetAgentParams) (database.TailnetAgent, error) { +func (*FakeQuerier) UpsertTailnetAgent(context.Context, database.UpsertTailnetAgentParams) (database.TailnetAgent, error) { return database.TailnetAgent{}, ErrUnimplemented } -func (*fakeQuerier) UpsertTailnetClient(context.Context, database.UpsertTailnetClientParams) (database.TailnetClient, error) { +func (*FakeQuerier) UpsertTailnetClient(context.Context, database.UpsertTailnetClientParams) (database.TailnetClient, error) { return database.TailnetClient{}, ErrUnimplemented } -func (*fakeQuerier) UpsertTailnetCoordinator(context.Context, uuid.UUID) (database.TailnetCoordinator, error) { +func (*FakeQuerier) UpsertTailnetCoordinator(context.Context, uuid.UUID) (database.TailnetCoordinator, error) { return database.TailnetCoordinator{}, ErrUnimplemented } diff --git a/coderd/database/pubsub/pubsub_memory.go b/coderd/database/pubsub/pubsub_memory.go index ec4c26a4f01e0..c4766c3dfa3fb 100644 --- a/coderd/database/pubsub/pubsub_memory.go +++ b/coderd/database/pubsub/pubsub_memory.go @@ -22,21 +22,22 @@ func (g genericListener) send(ctx context.Context, message []byte) { } } -// memoryPubsub is an in-memory Pubsub implementation. -type memoryPubsub struct { +// MemoryPubsub is an in-memory Pubsub implementation. It's an exported type so that our test code can do type +// checks. +type MemoryPubsub struct { mut sync.RWMutex listeners map[string]map[uuid.UUID]genericListener } -func (m *memoryPubsub) Subscribe(event string, listener Listener) (cancel func(), err error) { +func (m *MemoryPubsub) Subscribe(event string, listener Listener) (cancel func(), err error) { return m.subscribeGeneric(event, genericListener{l: listener}) } -func (m *memoryPubsub) SubscribeWithErr(event string, listener ListenerWithErr) (cancel func(), err error) { +func (m *MemoryPubsub) SubscribeWithErr(event string, listener ListenerWithErr) (cancel func(), err error) { return m.subscribeGeneric(event, genericListener{le: listener}) } -func (m *memoryPubsub) subscribeGeneric(event string, listener genericListener) (cancel func(), err error) { +func (m *MemoryPubsub) subscribeGeneric(event string, listener genericListener) (cancel func(), err error) { m.mut.Lock() defer m.mut.Unlock() @@ -62,7 +63,7 @@ func (m *memoryPubsub) subscribeGeneric(event string, listener genericListener) }, nil } -func (m *memoryPubsub) Publish(event string, message []byte) error { +func (m *MemoryPubsub) Publish(event string, message []byte) error { m.mut.RLock() defer m.mut.RUnlock() listeners, ok := m.listeners[event] @@ -83,12 +84,12 @@ func (m *memoryPubsub) Publish(event string, message []byte) error { return nil } -func (*memoryPubsub) Close() error { +func (*MemoryPubsub) Close() error { return nil } func NewInMemory() Pubsub { - return &memoryPubsub{ + return &MemoryPubsub{ listeners: make(map[string]map[uuid.UUID]genericListener), } } diff --git a/codersdk/deployment.go b/codersdk/deployment.go index add8cd0fa2ad4..3921963e86f4b 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -1755,9 +1755,10 @@ const ( // https://github.com/coder/coder/milestone/19 ExperimentWorkspaceActions Experiment = "workspace_actions" - // ExperimentTailnetPGCoordinator enables the PGCoord in favor of the pubsub- - // only Coordinator - ExperimentTailnetPGCoordinator Experiment = "tailnet_pg_coordinator" + // ExperimentTailnetHACoordinator downgrades to the haCoordinator instead + // of PGCoord. Should only be used if we see issues in prod with PGCoord + // which is now the default. + ExperimentTailnetHACoordinator Experiment = "tailnet_ha_coordinator" // ExperimentConvertToOIDC enables users to convert from password to // oidc. diff --git a/docs/api/schemas.md b/docs/api/schemas.md index 27e6f02b3e63f..300da30de1f8a 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -2535,7 +2535,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in | ------------------------- | | `moons` | | `workspace_actions` | -| `tailnet_pg_coordinator` | +| `tailnet_ha_coordinator` | | `convert-to-oidc` | | `workspace_build_logs_ui` | diff --git a/enterprise/cli/features_test.go b/enterprise/cli/features_test.go index 64db776284750..042a67a2dad31 100644 --- a/enterprise/cli/features_test.go +++ b/enterprise/cli/features_test.go @@ -9,7 +9,6 @@ import ( "github.com/stretchr/testify/require" "github.com/coder/coder/cli/clitest" - "github.com/coder/coder/coderd/coderdtest" "github.com/coder/coder/codersdk" "github.com/coder/coder/enterprise/coderd/coderdenttest" "github.com/coder/coder/pty/ptytest" @@ -19,8 +18,7 @@ func TestFeaturesList(t *testing.T) { t.Parallel() t.Run("Table", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) inv, conf := newCLI(t, "features", "list") clitest.SetupConfig(t, client, conf) pty := ptytest.New(t).Attach(inv) @@ -31,8 +29,7 @@ func TestFeaturesList(t *testing.T) { t.Run("JSON", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) inv, conf := newCLI(t, "features", "list", "-o", "json") clitest.SetupConfig(t, client, conf) doneChan := make(chan struct{}) diff --git a/enterprise/cli/groupcreate_test.go b/enterprise/cli/groupcreate_test.go index 5b625f1a1e500..484cb42c46b59 100644 --- a/enterprise/cli/groupcreate_test.go +++ b/enterprise/cli/groupcreate_test.go @@ -8,7 +8,6 @@ import ( "github.com/coder/coder/cli/clitest" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/coderdtest" "github.com/coder/coder/codersdk" "github.com/coder/coder/enterprise/coderd/coderdenttest" "github.com/coder/coder/enterprise/coderd/license" @@ -21,13 +20,11 @@ func TestCreateGroup(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) var ( groupName = "test" diff --git a/enterprise/cli/groupdelete_test.go b/enterprise/cli/groupdelete_test.go index b9a9ce413e39f..91ee5a337155b 100644 --- a/enterprise/cli/groupdelete_test.go +++ b/enterprise/cli/groupdelete_test.go @@ -8,7 +8,6 @@ import ( "github.com/coder/coder/cli/clitest" "github.com/coder/coder/cli/cliui" - "github.com/coder/coder/coderd/coderdtest" "github.com/coder/coder/codersdk" "github.com/coder/coder/enterprise/coderd/coderdenttest" "github.com/coder/coder/enterprise/coderd/license" @@ -22,14 +21,11 @@ func TestGroupDelete(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - admin := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, admin := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, admin.OrganizationID, codersdk.CreateGroupRequest{ @@ -55,14 +51,11 @@ func TestGroupDelete(t *testing.T) { t.Run("NoArg", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) inv, conf := newCLI( t, diff --git a/enterprise/cli/groupedit_test.go b/enterprise/cli/groupedit_test.go index bf446c81e0eb5..d91704885717d 100644 --- a/enterprise/cli/groupedit_test.go +++ b/enterprise/cli/groupedit_test.go @@ -22,14 +22,11 @@ func TestGroupEdit(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - admin := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, admin := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) _, user1 := coderdtest.CreateAnotherUser(t, client, admin.OrganizationID) @@ -74,14 +71,11 @@ func TestGroupEdit(t *testing.T) { t.Run("InvalidUserInput", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - admin := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, admin := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) @@ -106,14 +100,11 @@ func TestGroupEdit(t *testing.T) { t.Run("NoArg", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) inv, conf := newCLI(t, "groups", "edit") clitest.SetupConfig(t, client, conf) diff --git a/enterprise/cli/grouplist_test.go b/enterprise/cli/grouplist_test.go index 682dc74c7366e..90e054a03faab 100644 --- a/enterprise/cli/grouplist_test.go +++ b/enterprise/cli/grouplist_test.go @@ -20,14 +20,11 @@ func TestGroupList(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - admin := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, admin := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) _, user1 := coderdtest.CreateAnotherUser(t, client, admin.OrganizationID) @@ -80,14 +77,11 @@ func TestGroupList(t *testing.T) { t.Run("NoGroups", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) inv, conf := newCLI(t, "groups", "list") diff --git a/enterprise/cli/licenses_test.go b/enterprise/cli/licenses_test.go index fc4fb2bdc04ab..a660a130e6616 100644 --- a/enterprise/cli/licenses_test.go +++ b/enterprise/cli/licenses_test.go @@ -18,7 +18,6 @@ import ( "github.com/coder/coder/cli/clibase" "github.com/coder/coder/cli/clitest" - "github.com/coder/coder/coderd/coderdtest" "github.com/coder/coder/coderd/httpapi" "github.com/coder/coder/codersdk" "github.com/coder/coder/enterprise/coderd/coderdenttest" @@ -118,8 +117,7 @@ func TestLicensesAddReal(t *testing.T) { t.Parallel() t.Run("Fails", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) inv, conf := newCLI( t, "licenses", "add", "-l", fakeLicenseJWT, @@ -173,8 +171,7 @@ func TestLicensesListReal(t *testing.T) { t.Parallel() t.Run("Empty", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) inv, conf := newCLI( t, "licenses", "list", @@ -215,8 +212,7 @@ func TestLicensesDeleteReal(t *testing.T) { t.Parallel() t.Run("Empty", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) inv, conf := newCLI( t, "licenses", "delete", "1") diff --git a/enterprise/cli/workspaceproxy_test.go b/enterprise/cli/workspaceproxy_test.go index 3662c1036a6b0..e7396ab12191f 100644 --- a/enterprise/cli/workspaceproxy_test.go +++ b/enterprise/cli/workspaceproxy_test.go @@ -29,15 +29,14 @@ func Test_ProxyCRUD(t *testing.T) { "*", } - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: dv, }, - }) - _ = coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, }, }) @@ -102,15 +101,14 @@ func Test_ProxyCRUD(t *testing.T) { "*", } - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: dv, }, - }) - _ = coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, }, }) diff --git a/enterprise/coderd/appearance_test.go b/enterprise/coderd/appearance_test.go index e2bcc40019bea..dc6ce99052b60 100644 --- a/enterprise/coderd/appearance_test.go +++ b/enterprise/coderd/appearance_test.go @@ -30,9 +30,7 @@ func TestServiceBanners(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - adminClient := coderdenttest.New(t, &coderdenttest.Options{}) - - adminUser := coderdtest.CreateFirstUser(t, adminClient) + adminClient, adminUser := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) // Even without a license, the banner should return as disabled. sb, err := adminClient.Appearance(ctx) @@ -88,12 +86,12 @@ func TestServiceBanners(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, + DontAddLicense: true, }) - user := coderdtest.CreateFirstUser(t, client) license := coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureAppearance: 1, @@ -164,15 +162,14 @@ func TestCustomSupportLinks(t *testing.T) { Value: supportLinks, } - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: cfg, }, - }) - coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureAppearance: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureAppearance: 1, + }, }, }) @@ -187,9 +184,8 @@ func TestCustomSupportLinks(t *testing.T) { func TestDefaultSupportLinks(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - coderdtest.CreateFirstUser(t, client) // Don't need to set the license, as default links are passed without it. + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitMedium) defer cancel() diff --git a/enterprise/coderd/authorize_test.go b/enterprise/coderd/authorize_test.go index e176fb2c47ac4..68452bc52b38f 100644 --- a/enterprise/coderd/authorize_test.go +++ b/enterprise/coderd/authorize_test.go @@ -21,19 +21,17 @@ func TestCheckACLPermissions(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) t.Cleanup(cancel) - adminClient := coderdenttest.New(t, &coderdenttest.Options{ + adminClient, adminUser := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, - }) - // Create adminClient, member, and org adminClient - adminUser := coderdtest.CreateFirstUser(t, adminClient) - _ = coderdenttest.AddLicense(t, adminClient, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureTemplateRBAC: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureTemplateRBAC: 1, + }, }, }) - + // Create member and org adminClient memberClient, _ := coderdtest.CreateAnotherUser(t, adminClient, adminUser.OrganizationID) memberUser, err := memberClient.User(ctx, codersdk.Me) require.NoError(t, err) diff --git a/enterprise/coderd/coderd.go b/enterprise/coderd/coderd.go index 75476b508eaad..d08289d620d1e 100644 --- a/enterprise/coderd/coderd.go +++ b/enterprise/coderd/coderd.go @@ -446,10 +446,10 @@ func (api *API) updateEntitlements(ctx context.Context) error { coordinator := agpltailnet.NewCoordinator(api.Logger) if enabled { var haCoordinator agpltailnet.Coordinator - if api.AGPL.Experiments.Enabled(codersdk.ExperimentTailnetPGCoordinator) { - haCoordinator, err = tailnet.NewPGCoord(api.ctx, api.Logger, api.Pubsub, api.Database) - } else { + if api.AGPL.Experiments.Enabled(codersdk.ExperimentTailnetHACoordinator) { haCoordinator, err = tailnet.NewCoordinator(api.Logger, api.Pubsub) + } else { + haCoordinator, err = tailnet.NewPGCoord(api.ctx, api.Logger, api.Pubsub, api.Database) } if err != nil { api.Logger.Error(ctx, "unable to set up high availability coordinator", slog.Error(err)) diff --git a/enterprise/coderd/coderd_test.go b/enterprise/coderd/coderd_test.go index 27aa2cb4c33eb..71f95c97a69e2 100644 --- a/enterprise/coderd/coderd_test.go +++ b/enterprise/coderd/coderd_test.go @@ -34,7 +34,9 @@ func TestEntitlements(t *testing.T) { t.Parallel() t.Run("NoLicense", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + DontAddLicense: true, + }) res, err := client.Entitlements(context.Background()) require.NoError(t, err) require.False(t, res.HasLicense) @@ -42,10 +44,10 @@ func TestEntitlements(t *testing.T) { }) t.Run("FullLicense", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, &coderdenttest.Options{ - AuditLogging: true, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + AuditLogging: true, + DontAddLicense: true, }) - _ = coderdtest.CreateFirstUser(t, client) coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureUserLimit: 100, @@ -74,10 +76,10 @@ func TestEntitlements(t *testing.T) { }) t.Run("FullLicenseToNone", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, &coderdenttest.Options{ - AuditLogging: true, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + AuditLogging: true, + DontAddLicense: true, }) - _ = coderdtest.CreateFirstUser(t, client) license := coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureUserLimit: 100, @@ -103,11 +105,10 @@ func TestEntitlements(t *testing.T) { }) t.Run("Pubsub", func(t *testing.T) { t.Parallel() - client, _, api := coderdenttest.NewWithAPI(t, nil) + client, _, api, _ := coderdenttest.NewWithAPI(t, &coderdenttest.Options{DontAddLicense: true}) entitlements, err := client.Entitlements(context.Background()) require.NoError(t, err) require.False(t, entitlements.HasLicense) - coderdtest.CreateFirstUser(t, client) //nolint:gocritic // unit test ctx := testDBAuthzRole(context.Background()) _, err = api.Database.InsertLicense(ctx, database.InsertLicenseParams{ @@ -130,13 +131,13 @@ func TestEntitlements(t *testing.T) { }) t.Run("Resync", func(t *testing.T) { t.Parallel() - client, _, api := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ + client, _, api, _ := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ EntitlementsUpdateInterval: 25 * time.Millisecond, + DontAddLicense: true, }) entitlements, err := client.Entitlements(context.Background()) require.NoError(t, err) require.False(t, entitlements.HasLicense) - coderdtest.CreateFirstUser(t, client) // Valid ctx := context.Background() //nolint:gocritic // unit test @@ -180,16 +181,15 @@ func TestAuditLogging(t *testing.T) { t.Parallel() t.Run("Enabled", func(t *testing.T) { t.Parallel() - client, _, api := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ + _, _, api, _ := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ AuditLogging: true, Options: &coderdtest.Options{ Auditor: audit.NewAuditor(audit.DefaultFilter), }, - }) - coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureAuditLog: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureAuditLog: 1, + }, }, }) auditor := *api.AGPL.Auditor.Load() @@ -199,8 +199,7 @@ func TestAuditLogging(t *testing.T) { }) t.Run("Disabled", func(t *testing.T) { t.Parallel() - client, _, api := coderdenttest.NewWithAPI(t, nil) - coderdtest.CreateFirstUser(t, client) + _, _, api, _ := coderdenttest.NewWithAPI(t, &coderdenttest.Options{DontAddLicense: true}) auditor := *api.AGPL.Auditor.Load() ea := agplaudit.NewNop() t.Logf("%T = %T", auditor, ea) @@ -211,12 +210,12 @@ func TestAuditLogging(t *testing.T) { t.Run("FullBuild", func(t *testing.T) { t.Parallel() ctx := testutil.Context(t, testutil.WaitLong) - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, + DontAddLicense: true, }) - user := coderdtest.CreateFirstUser(t, client) workspace, agent := setupWorkspaceAgent(t, client, user, 0) conn, err := client.DialWorkspaceAgent(ctx, agent.ID, nil) require.NoError(t, err) diff --git a/enterprise/coderd/coderdenttest/coderdenttest.go b/enterprise/coderd/coderdenttest/coderdenttest.go index 7c34e8ef2066d..3311689d98653 100644 --- a/enterprise/coderd/coderdenttest/coderdenttest.go +++ b/enterprise/coderd/coderdenttest/coderdenttest.go @@ -10,6 +10,9 @@ import ( "testing" "time" + "github.com/coder/coder/coderd/database/dbfake" + "github.com/coder/coder/coderd/database/pubsub" + "github.com/golang-jwt/jwt/v4" "github.com/google/uuid" "github.com/stretchr/testify/require" @@ -48,15 +51,20 @@ type Options struct { SCIMAPIKey []byte UserWorkspaceQuota int ProxyHealthInterval time.Duration + LicenseOptions *LicenseOptions + DontAddLicense bool + DontAddFirstUser bool } // New constructs a codersdk client connected to an in-memory Enterprise API instance. -func New(t *testing.T, options *Options) *codersdk.Client { - client, _, _ := NewWithAPI(t, options) - return client +func New(t *testing.T, options *Options) (*codersdk.Client, codersdk.CreateFirstUserResponse) { + client, _, _, user := NewWithAPI(t, options) + return client, user } -func NewWithAPI(t *testing.T, options *Options) (*codersdk.Client, io.Closer, *coderd.API) { +func NewWithAPI(t *testing.T, options *Options) ( + *codersdk.Client, io.Closer, *coderd.API, codersdk.CreateFirstUserResponse, +) { t.Helper() if options == nil { @@ -65,6 +73,7 @@ func NewWithAPI(t *testing.T, options *Options) (*codersdk.Client, io.Closer, *c if options.Options == nil { options.Options = &coderdtest.Options{} } + require.False(t, options.DontAddFirstUser && !options.DontAddLicense, "DontAddFirstUser requires DontAddLicense") setHandler, cancelFunc, serverURL, oop := coderdtest.NewOptions(t, options.Options) coderAPI, err := coderd.New(context.Background(), &coderd.Options{ RBAC: true, @@ -99,7 +108,26 @@ func NewWithAPI(t *testing.T, options *Options) (*codersdk.Client, io.Closer, *c }, }, } - return client, provisionerCloser, coderAPI + var user codersdk.CreateFirstUserResponse + if !options.DontAddFirstUser { + user = coderdtest.CreateFirstUser(t, client) + if !options.DontAddLicense { + lo := LicenseOptions{} + if options.LicenseOptions != nil { + lo = *options.LicenseOptions + // The pgCoord is not supported by the fake DB & in-memory Pubsub. It only works on a real postgres. + if lo.AllFeatures || (lo.Features != nil && lo.Features[codersdk.FeatureHighAvailability] != 0) { + // we check for the in-memory test types so that the real types don't have to exported + _, ok := coderAPI.Pubsub.(*pubsub.MemoryPubsub) + require.False(t, ok, "FeatureHighAvailability is incompatible with MemoryPubsub") + _, ok = coderAPI.Database.(*dbfake.FakeQuerier) + require.False(t, ok, "FeatureHighAvailability is incompatible with dbfake") + } + } + _ = AddLicense(t, client, lo) + } + } + return client, provisionerCloser, coderAPI, user } type LicenseOptions struct { diff --git a/enterprise/coderd/coderdenttest/coderdenttest_test.go b/enterprise/coderd/coderdenttest/coderdenttest_test.go index 04d6dab6e96a5..c3db8b31eadc2 100644 --- a/enterprise/coderd/coderdenttest/coderdenttest_test.go +++ b/enterprise/coderd/coderdenttest/coderdenttest_test.go @@ -8,5 +8,5 @@ import ( func TestNew(t *testing.T) { t.Parallel() - _ = coderdenttest.New(t, nil) + _, _ = coderdenttest.New(t, nil) } diff --git a/enterprise/coderd/coderdenttest/swagger_test.go b/enterprise/coderd/coderdenttest/swagger_test.go index 2d3e16aa9929b..7de2678d55dba 100644 --- a/enterprise/coderd/coderdenttest/swagger_test.go +++ b/enterprise/coderd/coderdenttest/swagger_test.go @@ -16,6 +16,7 @@ func TestEnterpriseEndpointsDocumented(t *testing.T) { require.NoError(t, err, "can't parse swagger comments") require.NotEmpty(t, swaggerComments, "swagger comments must be present") - _, _, api := coderdenttest.NewWithAPI(t, nil) + //nolint: dogsled + _, _, api, _ := coderdenttest.NewWithAPI(t, nil) coderdtest.VerifySwaggerDefinitions(t, api.AGPL.APIHandler, swaggerComments) } diff --git a/enterprise/coderd/groups_test.go b/enterprise/coderd/groups_test.go index 48efe1611448b..3b1bd553f9752 100644 --- a/enterprise/coderd/groups_test.go +++ b/enterprise/coderd/groups_test.go @@ -23,14 +23,11 @@ func TestCreateGroup(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -47,19 +44,17 @@ func TestCreateGroup(t *testing.T) { t.Parallel() auditor := audit.NewMock() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ AuditLogging: true, Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, Auditor: auditor, }, - }) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureTemplateRBAC: 1, - codersdk.FeatureAuditLog: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureTemplateRBAC: 1, + codersdk.FeatureAuditLog: 1, + }, }, }) @@ -79,14 +74,11 @@ func TestCreateGroup(t *testing.T) { t.Run("Conflict", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) _, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -105,14 +97,11 @@ func TestCreateGroup(t *testing.T) { t.Run("allUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) _, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: database.AllUsersGroup, @@ -130,14 +119,11 @@ func TestPatchGroup(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -164,14 +150,11 @@ func TestPatchGroup(t *testing.T) { t.Run("SameNameOK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -188,14 +171,11 @@ func TestPatchGroup(t *testing.T) { t.Run("AddUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user3 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -216,14 +196,11 @@ func TestPatchGroup(t *testing.T) { t.Run("RemoveUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user3 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user4 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -254,23 +231,19 @@ func TestPatchGroup(t *testing.T) { t.Parallel() auditor := audit.NewMock() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ AuditLogging: true, Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, Auditor: auditor, }, - }) - - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureTemplateRBAC: 1, - codersdk.FeatureAuditLog: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureTemplateRBAC: 1, + codersdk.FeatureAuditLog: 1, + }, }, }) - ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ @@ -292,14 +265,11 @@ func TestPatchGroup(t *testing.T) { t.Run("NameConflict", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group1, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -325,14 +295,11 @@ func TestPatchGroup(t *testing.T) { t.Run("UserNotExist", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -351,14 +318,11 @@ func TestPatchGroup(t *testing.T) { t.Run("MalformedUUID", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -377,14 +341,11 @@ func TestPatchGroup(t *testing.T) { t.Run("AddDuplicateUser", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ @@ -405,14 +366,11 @@ func TestPatchGroup(t *testing.T) { t.Run("allUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -436,14 +394,11 @@ func TestGroup(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -458,14 +413,11 @@ func TestGroup(t *testing.T) { t.Run("ByName", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -480,14 +432,11 @@ func TestGroup(t *testing.T) { t.Run("WithUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user3 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -512,14 +461,11 @@ func TestGroup(t *testing.T) { t.Run("RegularUserReadGroup", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) client1, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) ctx := testutil.Context(t, testutil.WaitLong) @@ -536,13 +482,11 @@ func TestGroup(t *testing.T) { t.Run("FilterDeletedUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user1 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -571,13 +515,11 @@ func TestGroup(t *testing.T) { t.Run("FilterSuspendedUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user1 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -609,14 +551,11 @@ func TestGroup(t *testing.T) { t.Run("everyoneGroupReturnsEmpty", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) // The 'Everyone' group always has an ID that matches the organization ID. group, err := client.Group(ctx, user.OrganizationID) @@ -634,13 +573,11 @@ func TestGroups(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user3 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user4 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -681,14 +618,11 @@ func TestDeleteGroup(t *testing.T) { t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) group1, err := client.CreateGroup(ctx, user.OrganizationID, codersdk.CreateGroupRequest{ Name: "hi", @@ -709,14 +643,13 @@ func TestDeleteGroup(t *testing.T) { t.Parallel() auditor := audit.NewMock() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ AuditLogging: true, Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, Auditor: auditor, }, }) - user := coderdtest.CreateFirstUser(t, client) _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ Features: license.Features{ @@ -744,14 +677,11 @@ func TestDeleteGroup(t *testing.T) { t.Run("allUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) err := client.DeleteGroup(ctx, user.OrganizationID) require.Error(t, err) diff --git a/enterprise/coderd/licenses_test.go b/enterprise/coderd/licenses_test.go index 4c0595cc12fa8..273e64bba6f59 100644 --- a/enterprise/coderd/licenses_test.go +++ b/enterprise/coderd/licenses_test.go @@ -9,7 +9,6 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/xerrors" - "github.com/coder/coder/coderd/coderdtest" "github.com/coder/coder/codersdk" "github.com/coder/coder/enterprise/coderd/coderdenttest" "github.com/coder/coder/enterprise/coderd/license" @@ -21,8 +20,7 @@ func TestPostLicense(t *testing.T) { t.Run("Success", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) respLic := coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ AccountType: license.AccountTypeSalesforce, AccountID: "testing", @@ -40,7 +38,8 @@ func TestPostLicense(t *testing.T) { t.Run("Unauthorized", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) + client.SetSessionToken("") _, err := client.AddLicense(context.Background(), codersdk.AddLicenseRequest{ License: "content", }) @@ -54,8 +53,7 @@ func TestPostLicense(t *testing.T) { t.Run("Corrupted", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{}) _, err := client.AddLicense(context.Background(), codersdk.AddLicenseRequest{ License: "invalid", @@ -73,8 +71,7 @@ func TestGetLicense(t *testing.T) { t.Parallel() t.Run("Success", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() @@ -132,8 +129,7 @@ func TestDeleteLicense(t *testing.T) { t.Parallel() t.Run("Empty", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() @@ -148,8 +144,7 @@ func TestDeleteLicense(t *testing.T) { t.Run("BadID", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() @@ -161,8 +156,7 @@ func TestDeleteLicense(t *testing.T) { t.Run("Success", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) + client, _ := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() diff --git a/enterprise/coderd/provisionerdaemons_test.go b/enterprise/coderd/provisionerdaemons_test.go index 75582ede27c06..28a89431b4f00 100644 --- a/enterprise/coderd/provisionerdaemons_test.go +++ b/enterprise/coderd/provisionerdaemons_test.go @@ -23,13 +23,11 @@ func TestProvisionerDaemonServe(t *testing.T) { t.Parallel() t.Run("OK", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureExternalProvisionerDaemons: 1, }, - }) + }}) srv, err := client.ServeProvisionerDaemon(context.Background(), user.OrganizationID, []codersdk.ProvisionerType{ codersdk.ProvisionerTypeEcho, }, map[string]string{}) @@ -39,8 +37,7 @@ func TestProvisionerDaemonServe(t *testing.T) { t.Run("NoLicense", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) + client, user := coderdenttest.New(t, &coderdenttest.Options{DontAddLicense: true}) _, err := client.ServeProvisionerDaemon(context.Background(), user.OrganizationID, []codersdk.ProvisionerType{ codersdk.ProvisionerTypeEcho, }, map[string]string{}) @@ -52,13 +49,11 @@ func TestProvisionerDaemonServe(t *testing.T) { t.Run("Organization", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureExternalProvisionerDaemons: 1, }, - }) + }}) another, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID, rbac.RoleOrgAdmin(user.OrganizationID)) _, err := another.ServeProvisionerDaemon(context.Background(), user.OrganizationID, []codersdk.ProvisionerType{ codersdk.ProvisionerTypeEcho, @@ -73,13 +68,11 @@ func TestProvisionerDaemonServe(t *testing.T) { t.Run("OrganizationNoPerms", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureExternalProvisionerDaemons: 1, }, - }) + }}) another, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, err := another.ServeProvisionerDaemon(context.Background(), user.OrganizationID, []codersdk.ProvisionerType{ codersdk.ProvisionerTypeEcho, @@ -94,13 +87,11 @@ func TestProvisionerDaemonServe(t *testing.T) { t.Run("UserLocal", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureExternalProvisionerDaemons: 1, }, - }) + }}) closer := coderdtest.NewExternalProvisionerDaemon(t, client, user.OrganizationID, map[string]string{ provisionerdserver.TagScope: provisionerdserver.ScopeUser, }) diff --git a/enterprise/coderd/replicas_test.go b/enterprise/coderd/replicas_test.go index 50eac66392940..7133919c6715b 100644 --- a/enterprise/coderd/replicas_test.go +++ b/enterprise/coderd/replicas_test.go @@ -20,22 +20,27 @@ import ( func TestReplicas(t *testing.T) { t.Parallel() + if !dbtestutil.WillUsePostgres() { + t.Skip("only test with real postgresF") + } t.Run("ErrorWithoutLicense", func(t *testing.T) { t.Parallel() db, pubsub := dbtestutil.NewDB(t) - firstClient := coderdenttest.New(t, &coderdenttest.Options{ + firstClient, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, Database: db, Pubsub: pubsub, }, + DontAddLicense: true, }) - _ = coderdtest.CreateFirstUser(t, firstClient) - secondClient, _, secondAPI := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ + secondClient, _, secondAPI, _ := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ Options: &coderdtest.Options{ Database: db, Pubsub: pubsub, }, + DontAddFirstUser: true, + DontAddLicense: true, }) secondClient.SetSessionToken(firstClient.SessionToken()) ents, err := secondClient.Entitlements(context.Background()) @@ -50,25 +55,26 @@ func TestReplicas(t *testing.T) { t.Run("ConnectAcrossMultiple", func(t *testing.T) { t.Parallel() db, pubsub := dbtestutil.NewDB(t) - firstClient := coderdenttest.New(t, &coderdenttest.Options{ + firstClient, firstUser := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, Database: db, Pubsub: pubsub, }, - }) - firstUser := coderdtest.CreateFirstUser(t, firstClient) - coderdenttest.AddLicense(t, firstClient, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureHighAvailability: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureHighAvailability: 1, + }, }, }) - secondClient := coderdenttest.New(t, &coderdenttest.Options{ + secondClient, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ Database: db, Pubsub: pubsub, }, + DontAddLicense: true, + DontAddFirstUser: true, }) secondClient.SetSessionToken(firstClient.SessionToken()) replicas, err := secondClient.Replicas(context.Background()) @@ -93,27 +99,28 @@ func TestReplicas(t *testing.T) { t.Parallel() db, pubsub := dbtestutil.NewDB(t) certificates := []tls.Certificate{testutil.GenerateTLSCertificate(t, "localhost")} - firstClient := coderdenttest.New(t, &coderdenttest.Options{ + firstClient, firstUser := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, Database: db, Pubsub: pubsub, TLSCertificates: certificates, }, - }) - firstUser := coderdtest.CreateFirstUser(t, firstClient) - coderdenttest.AddLicense(t, firstClient, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureHighAvailability: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureHighAvailability: 1, + }, }, }) - secondClient := coderdenttest.New(t, &coderdenttest.Options{ + secondClient, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ Database: db, Pubsub: pubsub, TLSCertificates: certificates, }, + DontAddFirstUser: true, + DontAddLicense: true, }) secondClient.SetSessionToken(firstClient.SessionToken()) replicas, err := secondClient.Replicas(context.Background()) diff --git a/enterprise/coderd/scim_test.go b/enterprise/coderd/scim_test.go index 42f6d976d0e48..a72a1d227424b 100644 --- a/enterprise/coderd/scim_test.go +++ b/enterprise/coderd/scim_test.go @@ -10,7 +10,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/coder/coder/coderd/coderdtest" "github.com/coder/coder/codersdk" "github.com/coder/coder/cryptorand" "github.com/coder/coder/enterprise/coderd" @@ -63,12 +62,13 @@ func TestScim(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - client := coderdenttest.New(t, &coderdenttest.Options{SCIMAPIKey: []byte("hi")}) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AccountID: "coolin", - Features: license.Features{ - codersdk.FeatureSCIM: 0, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + SCIMAPIKey: []byte("hi"), + LicenseOptions: &coderdenttest.LicenseOptions{ + AccountID: "coolin", + Features: license.Features{ + codersdk.FeatureSCIM: 0, + }, }, }) @@ -84,12 +84,13 @@ func TestScim(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - client := coderdenttest.New(t, &coderdenttest.Options{SCIMAPIKey: []byte("hi")}) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AccountID: "coolin", - Features: license.Features{ - codersdk.FeatureSCIM: 1, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + SCIMAPIKey: []byte("hi"), + LicenseOptions: &coderdenttest.LicenseOptions{ + AccountID: "coolin", + Features: license.Features{ + codersdk.FeatureSCIM: 1, + }, }, }) @@ -106,12 +107,13 @@ func TestScim(t *testing.T) { defer cancel() scimAPIKey := []byte("hi") - client := coderdenttest.New(t, &coderdenttest.Options{SCIMAPIKey: scimAPIKey}) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AccountID: "coolin", - Features: license.Features{ - codersdk.FeatureSCIM: 1, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + SCIMAPIKey: scimAPIKey, + LicenseOptions: &coderdenttest.LicenseOptions{ + AccountID: "coolin", + Features: license.Features{ + codersdk.FeatureSCIM: 1, + }, }, }) @@ -136,12 +138,13 @@ func TestScim(t *testing.T) { defer cancel() scimAPIKey := []byte("hi") - client := coderdenttest.New(t, &coderdenttest.Options{SCIMAPIKey: scimAPIKey}) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AccountID: "coolin", - Features: license.Features{ - codersdk.FeatureSCIM: 1, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + SCIMAPIKey: scimAPIKey, + LicenseOptions: &coderdenttest.LicenseOptions{ + AccountID: "coolin", + Features: license.Features{ + codersdk.FeatureSCIM: 1, + }, }, }) @@ -172,12 +175,13 @@ func TestScim(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - client := coderdenttest.New(t, &coderdenttest.Options{SCIMAPIKey: []byte("hi")}) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AccountID: "coolin", - Features: license.Features{ - codersdk.FeatureSCIM: 0, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + SCIMAPIKey: []byte("hi"), + LicenseOptions: &coderdenttest.LicenseOptions{ + AccountID: "coolin", + Features: license.Features{ + codersdk.FeatureSCIM: 0, + }, }, }) @@ -193,12 +197,13 @@ func TestScim(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - client := coderdenttest.New(t, &coderdenttest.Options{SCIMAPIKey: []byte("hi")}) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AccountID: "coolin", - Features: license.Features{ - codersdk.FeatureSCIM: 1, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + SCIMAPIKey: []byte("hi"), + LicenseOptions: &coderdenttest.LicenseOptions{ + AccountID: "coolin", + Features: license.Features{ + codersdk.FeatureSCIM: 1, + }, }, }) @@ -215,12 +220,13 @@ func TestScim(t *testing.T) { defer cancel() scimAPIKey := []byte("hi") - client := coderdenttest.New(t, &coderdenttest.Options{SCIMAPIKey: scimAPIKey}) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AccountID: "coolin", - Features: license.Features{ - codersdk.FeatureSCIM: 1, + client, _ := coderdenttest.New(t, &coderdenttest.Options{ + SCIMAPIKey: scimAPIKey, + LicenseOptions: &coderdenttest.LicenseOptions{ + AccountID: "coolin", + Features: license.Features{ + codersdk.FeatureSCIM: 1, + }, }, }) diff --git a/enterprise/coderd/templates_test.go b/enterprise/coderd/templates_test.go index fb0730191135f..c0f9a3592f169 100644 --- a/enterprise/coderd/templates_test.go +++ b/enterprise/coderd/templates_test.go @@ -28,15 +28,14 @@ func TestTemplates(t *testing.T) { t.Run("SetMaxTTL", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, - }) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureAdvancedTemplateScheduling: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureAdvancedTemplateScheduling: 1, + }, }, }) @@ -95,15 +94,14 @@ func TestTemplates(t *testing.T) { t.Run("CreateUpdateWorkspaceMaxTTL", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, - }) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureAdvancedTemplateScheduling: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureAdvancedTemplateScheduling: 1, + }, }, }) @@ -156,15 +154,14 @@ func TestTemplates(t *testing.T) { t.Run("BlockDisablingAutoOffWithMaxTTL", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, - }) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureAdvancedTemplateScheduling: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureAdvancedTemplateScheduling: 1, + }, }, }) @@ -211,13 +208,16 @@ func TestTemplates(t *testing.T) { t.Parallel() ctx := testutil.Context(t, testutil.WaitMedium) - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureAdvancedTemplateScheduling: 1, + }, + }, }) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) coderdtest.AwaitTemplateVersionJob(t, client, version.ID) @@ -262,13 +262,11 @@ func TestTemplateACL(t *testing.T) { t.Run("UserRoles", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user3 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -305,13 +303,11 @@ func TestTemplateACL(t *testing.T) { t.Run("everyoneGroup", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) // Create a user to assert they aren't returned in the response. _, _ = coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -332,13 +328,11 @@ func TestTemplateACL(t *testing.T) { t.Run("NoGroups", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) client1, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) @@ -384,13 +378,11 @@ func TestTemplateACL(t *testing.T) { t.Run("FilterDeletedUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user1 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) @@ -424,13 +416,11 @@ func TestTemplateACL(t *testing.T) { t.Run("FilterSuspendedUsers", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user1 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) @@ -464,13 +454,11 @@ func TestTemplateACL(t *testing.T) { t.Run("FilterDeletedGroups", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) @@ -514,13 +502,11 @@ func TestTemplateACL(t *testing.T) { t.Run("AdminCanPushVersions", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) client1, user1 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) @@ -572,13 +558,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("UserPerms", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user3 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -618,20 +602,17 @@ func TestUpdateTemplateACL(t *testing.T) { t.Parallel() auditor := audit.NewMock() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ AuditLogging: true, Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, Auditor: auditor, }, - }) - - user := coderdtest.CreateFirstUser(t, client) - - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureTemplateRBAC: 1, - codersdk.FeatureAuditLog: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureTemplateRBAC: 1, + codersdk.FeatureAuditLog: 1, + }, }, }) @@ -659,13 +640,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("DeleteUser", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user3 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -722,13 +701,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("InvalidUUID", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) @@ -749,13 +726,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("InvalidUser", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) @@ -776,13 +751,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("InvalidRole", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) _, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) @@ -804,13 +777,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("RegularUserCannotUpdatePerms", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) client2, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) @@ -841,13 +812,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("RegularUserWithAdminCanUpdate", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) client2, user2 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) _, user3 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) @@ -885,13 +854,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("allUsersGroup", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) @@ -909,13 +876,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("CustomGroupHasAccess", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) client1, user1 := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) @@ -976,13 +941,11 @@ func TestUpdateTemplateACL(t *testing.T) { t.Run("NoAccess", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) client1, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) @@ -1031,13 +994,11 @@ func TestReadFileWithTemplateUpdate(t *testing.T) { t.Parallel() // Upload a file - client := coderdenttest.New(t, nil) - first := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, first := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) ctx := testutil.Context(t, testutil.WaitLong) @@ -1086,13 +1047,11 @@ func TestTemplateAccess(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong*3) t.Cleanup(cancel) - ownerClient := coderdenttest.New(t, nil) - owner := coderdtest.CreateFirstUser(t, ownerClient) - _ = coderdenttest.AddLicense(t, ownerClient, coderdenttest.LicenseOptions{ + ownerClient, owner := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) type coderUser struct { *codersdk.Client diff --git a/enterprise/coderd/userauth_test.go b/enterprise/coderd/userauth_test.go index a7f720e42a5a9..ca787ba8f74e6 100644 --- a/enterprise/coderd/userauth_test.go +++ b/enterprise/coderd/userauth_test.go @@ -7,6 +7,8 @@ import ( "net/http" "testing" + "github.com/coder/coder/enterprise/coderd/license" + "github.com/golang-jwt/jwt" "github.com/google/uuid" "github.com/stretchr/testify/assert" @@ -36,14 +38,13 @@ func TestUserOIDC(t *testing.T) { }) config.AllowSignups = true - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ OIDCConfig: config, }, - }) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AllFeatures: true, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureTemplateRBAC: 1}, + }, }) admin, err := client.User(ctx, "me") @@ -81,14 +82,13 @@ func TestUserOIDC(t *testing.T) { }) config.AllowSignups = true - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ OIDCConfig: config, }, - }) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AllFeatures: true, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureTemplateRBAC: 1}, + }, }) admin, err := client.User(ctx, "me") @@ -121,14 +121,13 @@ func TestUserOIDC(t *testing.T) { config := conf.OIDCConfig(t, jwt.MapClaims{}) config.AllowSignups = true - client := coderdenttest.New(t, &coderdenttest.Options{ + client, firstUser := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ OIDCConfig: config, }, - }) - firstUser := coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AllFeatures: true, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureTemplateRBAC: 1}, + }, }) // Add some extra users/groups that should be asserted after. @@ -187,14 +186,13 @@ func TestUserOIDC(t *testing.T) { config := conf.OIDCConfig(t, jwt.MapClaims{}) config.AllowSignups = true - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ OIDCConfig: config, }, - }) - _ = coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - AllFeatures: true, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureTemplateRBAC: 1}, + }, }) admin, err := client.User(ctx, "me") diff --git a/enterprise/coderd/workspaceagents_test.go b/enterprise/coderd/workspaceagents_test.go index 8cfae279954bb..0395d71c3ca4e 100644 --- a/enterprise/coderd/workspaceagents_test.go +++ b/enterprise/coderd/workspaceagents_test.go @@ -33,16 +33,15 @@ func TestBlockNonBrowser(t *testing.T) { t.Parallel() t.Run("Enabled", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ BrowserOnly: true, Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, - }) - user := coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureBrowserOnly: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureBrowserOnly: 1, + }, }, }) _, agent := setupWorkspaceAgent(t, client, user, 0) @@ -53,15 +52,14 @@ func TestBlockNonBrowser(t *testing.T) { }) t.Run("Disabled", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, - }) - user := coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureBrowserOnly: 0, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureBrowserOnly: 0, + }, }, }) _, agent := setupWorkspaceAgent(t, client, user, 0) diff --git a/enterprise/coderd/workspaceproxy_test.go b/enterprise/coderd/workspaceproxy_test.go index 9793269216762..0f0de8dfe9e65 100644 --- a/enterprise/coderd/workspaceproxy_test.go +++ b/enterprise/coderd/workspaceproxy_test.go @@ -45,7 +45,7 @@ func TestRegions(t *testing.T) { db, pubsub := dbtestutil.NewDB(t) - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ AppHostname: appHostname, Database: db, @@ -54,7 +54,6 @@ func TestRegions(t *testing.T) { }, }) - _ = coderdtest.CreateFirstUser(t, client) ctx := testutil.Context(t, testutil.WaitLong) deploymentID, err := db.GetDeploymentID(ctx) require.NoError(t, err, "get deployment ID") @@ -89,13 +88,18 @@ func TestRegions(t *testing.T) { db, pubsub := dbtestutil.NewDB(t) - client, closer, api := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ + client, closer, api, _ := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ Options: &coderdtest.Options{ AppHostname: appHostname, Database: db, Pubsub: pubsub, DeploymentValues: dv, }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, + }, }) t.Cleanup(func() { _ = closer.Close() @@ -103,12 +107,6 @@ func TestRegions(t *testing.T) { ctx := testutil.Context(t, testutil.WaitLong) deploymentID, err := db.GetDeploymentID(ctx) require.NoError(t, err, "get deployment ID") - _ = coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, - }, - }) const proxyName = "hello" _ = coderdenttest.NewWorkspaceProxy(t, api, client, &coderdenttest.ProxyOptions{ @@ -157,13 +155,12 @@ func TestRegions(t *testing.T) { } ctx := testutil.Context(t, testutil.WaitLong) - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ AppHostname: appHostname, DeploymentValues: dv, }, }) - _ = coderdtest.CreateFirstUser(t, client) unauthedClient := codersdk.New(client.URL) regions, err := unauthedClient.Regions(ctx) @@ -185,7 +182,7 @@ func TestRegions(t *testing.T) { ctx := testutil.Context(t, testutil.WaitLong) - client, closer, api := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ + client, closer, api, _ := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ Options: &coderdtest.Options{ AppHostname: appHostname, Database: db, @@ -196,16 +193,15 @@ func TestRegions(t *testing.T) { // check will never happen manually. All checks will be // forced updates. ProxyHealthInterval: time.Hour, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, + }, }) t.Cleanup(func() { _ = closer.Close() }) - _ = coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, - }, - }) const proxyName = "testproxy" proxy := coderdenttest.NewWorkspaceProxy(t, api, client, &coderdenttest.ProxyOptions{ @@ -247,15 +243,14 @@ func TestWorkspaceProxyCRUD(t *testing.T) { string(codersdk.ExperimentMoons), "*", } - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: dv, }, - }) - _ = coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, }, }) ctx := testutil.Context(t, testutil.WaitLong) @@ -299,15 +294,14 @@ func TestWorkspaceProxyCRUD(t *testing.T) { string(codersdk.ExperimentMoons), "*", } - client := coderdenttest.New(t, &coderdenttest.Options{ + client, _ := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: dv, }, - }) - _ = coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, }, }) ctx := testutil.Context(t, testutil.WaitLong) @@ -337,19 +331,17 @@ func TestIssueSignedAppToken(t *testing.T) { } db, pubsub := dbtestutil.NewDB(t) - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: dv, Database: db, Pubsub: pubsub, IncludeProvisionerDaemon: true, }, - }) - - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, }, }) @@ -445,25 +437,23 @@ func TestReconnectingPTYSignedToken(t *testing.T) { } db, pubsub := dbtestutil.NewDB(t) - client, closer, api := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ + client, closer, api, user := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: dv, Database: db, Pubsub: pubsub, IncludeProvisionerDaemon: true, }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, + }, }) t.Cleanup(func() { closer.Close() }) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, - }, - }) - // Create a workspace + apps authToken := uuid.NewString() version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ diff --git a/enterprise/coderd/workspacequota_test.go b/enterprise/coderd/workspacequota_test.go index c1695c814b74c..a142c86535c4d 100644 --- a/enterprise/coderd/workspacequota_test.go +++ b/enterprise/coderd/workspacequota_test.go @@ -39,20 +39,18 @@ func TestWorkspaceQuota(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() max := 1 - client, _, api := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ + client, _, api, user := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ UserWorkspaceQuota: max, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureTemplateRBAC: 1, + }, + }, }) coderdtest.NewProvisionerDaemon(t, api.AGPL) coderdtest.NewProvisionerDaemon(t, api.AGPL) coderdtest.NewProvisionerDaemon(t, api.AGPL) - user := coderdtest.CreateFirstUser(t, client) - coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureTemplateRBAC: 1, - }, - }) - verifyQuota(ctx, t, client, 0, 0) // Add user to two groups, granting them a total budget of 3. diff --git a/enterprise/coderd/workspaces_test.go b/enterprise/coderd/workspaces_test.go index 740d4ef77cae9..5aa36ec1691a0 100644 --- a/enterprise/coderd/workspaces_test.go +++ b/enterprise/coderd/workspaces_test.go @@ -33,13 +33,11 @@ func TestCreateWorkspace(t *testing.T) { t.Run("Unauthorized", func(t *testing.T) { t.Parallel() - client := coderdenttest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ codersdk.FeatureTemplateRBAC: 1, }, - }) + }}) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) @@ -95,19 +93,20 @@ func TestWorkspaceAutobuild(t *testing.T) { IgnoreErrors: true, }) failureTTL = time.Minute - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - Logger: &logger, - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + Logger: &logger, + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, @@ -141,19 +140,20 @@ func TestWorkspaceAutobuild(t *testing.T) { IgnoreErrors: true, }) failureTTL = time.Minute - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - Logger: &logger, - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + Logger: &logger, + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, ProvisionPlan: echo.ProvisionComplete, @@ -186,19 +186,20 @@ func TestWorkspaceAutobuild(t *testing.T) { // builds. IgnoreErrors: true, }) - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - Logger: &logger, - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + Logger: &logger, + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, ProvisionPlan: echo.ProvisionComplete, @@ -228,18 +229,19 @@ func TestWorkspaceAutobuild(t *testing.T) { ticker = make(chan time.Time) statCh = make(chan autobuild.Stats) inactiveTTL = time.Minute - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, @@ -284,18 +286,19 @@ func TestWorkspaceAutobuild(t *testing.T) { ticker = make(chan time.Time) statCh = make(chan autobuild.Stats) inactiveTTL = time.Minute - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, ProvisionPlan: echo.ProvisionComplete, @@ -325,18 +328,19 @@ func TestWorkspaceAutobuild(t *testing.T) { ticker = make(chan time.Time) statCh = make(chan autobuild.Stats) lockedTTL = time.Minute - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, ProvisionPlan: echo.ProvisionComplete, @@ -366,18 +370,19 @@ func TestWorkspaceAutobuild(t *testing.T) { ticker = make(chan time.Time) statCh = make(chan autobuild.Stats) inactiveTTL = time.Minute - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, ProvisionPlan: echo.ProvisionComplete, @@ -416,18 +421,19 @@ func TestWorkspaceAutobuild(t *testing.T) { ticker = make(chan time.Time) statCh = make(chan autobuild.Stats) transitionTTL = time.Minute - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, @@ -485,18 +491,19 @@ func TestWorkspaceAutobuild(t *testing.T) { ticker = make(chan time.Time) statCh = make(chan autobuild.Stats) lockedTTL = time.Minute - - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - AutobuildTicker: ticker, - IncludeProvisionerDaemon: true, - AutobuildStats: statCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) ) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + AutobuildTicker: ticker, + IncludeProvisionerDaemon: true, + AutobuildStats: statCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, ProvisionPlan: echo.ProvisionComplete, @@ -542,22 +549,22 @@ func TestWorkspaceAutobuild(t *testing.T) { t.Parallel() var ( - ctx = testutil.Context(t, testutil.WaitMedium) - tickCh = make(chan time.Time) - statsCh = make(chan autobuild.Stats) - client = coderdenttest.New(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - AutobuildTicker: tickCh, - IncludeProvisionerDaemon: true, - AutobuildStats: statsCh, - TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, - }, - }) + ctx = testutil.Context(t, testutil.WaitMedium) + tickCh = make(chan time.Time) + statsCh = make(chan autobuild.Stats) inactiveTTL = time.Minute ) - - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddFullLicense(t, client) + client, user := coderdenttest.New(t, &coderdenttest.Options{ + Options: &coderdtest.Options{ + AutobuildTicker: tickCh, + IncludeProvisionerDaemon: true, + AutobuildStats: statsCh, + TemplateScheduleStore: &coderd.EnterpriseTemplateScheduleStore{}, + }, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, + }, + }) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, @@ -623,15 +630,14 @@ func TestWorkspacesFiltering(t *testing.T) { inactivityTTL := 1 * 24 * time.Hour - client := coderdenttest.New(t, &coderdenttest.Options{ + client, user := coderdenttest.New(t, &coderdenttest.Options{ Options: &coderdtest.Options{ IncludeProvisionerDaemon: true, }, - }) - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureAdvancedTemplateScheduling: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureAdvancedTemplateScheduling: 1, + }, }, }) diff --git a/enterprise/wsproxy/wsproxy_test.go b/enterprise/wsproxy/wsproxy_test.go index 2c5ce4405b719..fa4a168dba5e1 100644 --- a/enterprise/wsproxy/wsproxy_test.go +++ b/enterprise/wsproxy/wsproxy_test.go @@ -26,7 +26,7 @@ func TestWorkspaceProxyWorkspaceApps(t *testing.T) { "*", } - client, _, api := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ + client, _, api, user := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: deploymentValues, AppHostname: "*.primary.test.coder.com", @@ -41,12 +41,10 @@ func TestWorkspaceProxyWorkspaceApps(t *testing.T) { }, }, }, - }) - - user := coderdtest.CreateFirstUser(t, client) - _ = coderdenttest.AddLicense(t, client, coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, + LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureWorkspaceProxy: 1, + }, }, }) diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 7a8f01ffc1a01..222103e0b1183 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1429,13 +1429,13 @@ export const Entitlements: Entitlement[] = [ export type Experiment = | "convert-to-oidc" | "moons" - | "tailnet_pg_coordinator" + | "tailnet_ha_coordinator" | "workspace_actions" | "workspace_build_logs_ui" export const Experiments: Experiment[] = [ "convert-to-oidc", "moons", - "tailnet_pg_coordinator", + "tailnet_ha_coordinator", "workspace_actions", "workspace_build_logs_ui", ] From 50b4908703bb3687a19d81a0e693b9b836dd8c1f Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Wed, 12 Jul 2023 06:53:03 +0000 Subject: [PATCH 2/3] Fix generation and coordinator delete RBAC Signed-off-by: Spike Curtis --- enterprise/tailnet/pgcoord.go | 35 +++++++++++++++++++---------------- scripts/dbgen/main.go | 2 +- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/enterprise/tailnet/pgcoord.go b/enterprise/tailnet/pgcoord.go index a1a664a61c986..6c3cc73ac9e9d 100644 --- a/enterprise/tailnet/pgcoord.go +++ b/enterprise/tailnet/pgcoord.go @@ -81,24 +81,26 @@ type pgCoord struct { querier *querier } +var pgCoordSubject = rbac.Subject{ + ID: uuid.Nil.String(), + Roles: rbac.Roles([]rbac.Role{ + { + Name: "tailnetcoordinator", + DisplayName: "Tailnet Coordinator", + Site: rbac.Permissions(map[string][]rbac.Action{ + rbac.ResourceTailnetCoordinator.Type: {rbac.WildcardSymbol}, + }), + Org: map[string][]rbac.Permission{}, + User: []rbac.Permission{}, + }, + }), + Scope: rbac.ScopeAll, +}.WithCachedASTValue() + // NewPGCoord creates a high-availability coordinator that stores state in the PostgreSQL database and // receives notifications of updates via the pubsub. func NewPGCoord(ctx context.Context, logger slog.Logger, ps pubsub.Pubsub, store database.Store) (agpl.Coordinator, error) { - ctx, cancel := context.WithCancel(dbauthz.As(ctx, rbac.Subject{ - ID: uuid.Nil.String(), - Roles: rbac.Roles([]rbac.Role{ - { - Name: "tailnetcoordinator", - DisplayName: "Tailnet Coordinator", - Site: rbac.Permissions(map[string][]rbac.Action{ - rbac.ResourceTailnetCoordinator.Type: {rbac.WildcardSymbol}, - }), - Org: map[string][]rbac.Permission{}, - User: []rbac.Permission{}, - }, - }), - Scope: rbac.ScopeAll, - }.WithCachedASTValue())) + ctx, cancel := context.WithCancel(dbauthz.As(ctx, pgCoordSubject)) id := uuid.New() logger = logger.Named("pgcoord").With(slog.F("coordinator_id", id)) bCh := make(chan binding) @@ -1243,7 +1245,8 @@ func (h *heartbeats) sendBeat() { func (h *heartbeats) sendDelete() { // here we don't want to use the main context, since it will have been canceled - err := h.store.DeleteCoordinator(context.Background(), h.self) + ctx := dbauthz.As(context.Background(), pgCoordSubject) + err := h.store.DeleteCoordinator(ctx, h.self) if err != nil { h.logger.Error(h.ctx, "failed to send coordinator delete", slog.Error(err)) return diff --git a/scripts/dbgen/main.go b/scripts/dbgen/main.go index 8f87892510103..6141980428cef 100644 --- a/scripts/dbgen/main.go +++ b/scripts/dbgen/main.go @@ -53,7 +53,7 @@ func run() error { } databasePath := filepath.Join(localPath, "..", "..", "..", "coderd", "database") - err = orderAndStubDatabaseFunctions(filepath.Join(databasePath, "dbfake", "dbfake.go"), "q", "fakeQuerier", func(params stubParams) string { + err = orderAndStubDatabaseFunctions(filepath.Join(databasePath, "dbfake", "dbfake.go"), "q", "FakeQuerier", func(params stubParams) string { return `panic("not implemented")` }) if err != nil { From 52aad5789883e49924e157d22039b1395a8444d4 Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Wed, 12 Jul 2023 09:02:54 +0000 Subject: [PATCH 3/3] Fix fakeQuerier -> FakeQuerier Signed-off-by: Spike Curtis --- coderd/database/dbfake/dbfake.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coderd/database/dbfake/dbfake.go b/coderd/database/dbfake/dbfake.go index ab1b988dc3062..bdcfd9366dabb 100644 --- a/coderd/database/dbfake/dbfake.go +++ b/coderd/database/dbfake/dbfake.go @@ -650,7 +650,7 @@ func mapAgentStatus(dbAgent database.WorkspaceAgent, agentInactiveDisconnectTime return status } -func (q *fakeQuerier) convertToWorkspaceRowsNoLock(ctx context.Context, workspaces []database.Workspace, count int64) []database.GetWorkspacesRow { +func (q *FakeQuerier) convertToWorkspaceRowsNoLock(ctx context.Context, workspaces []database.Workspace, count int64) []database.GetWorkspacesRow { rows := make([]database.GetWorkspacesRow, 0, len(workspaces)) for _, w := range workspaces { wr := database.GetWorkspacesRow{