Skip to content

Commit 6e44f26

Browse files
committed
remove coderd test
1 parent a9f2bad commit 6e44f26

File tree

4 files changed

+93
-106
lines changed

4 files changed

+93
-106
lines changed

coderd/database/querier_test.go

Lines changed: 91 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ import (
2424
"github.com/coder/coder/v2/coderd/database/dbtestutil"
2525
"github.com/coder/coder/v2/coderd/database/dbtime"
2626
"github.com/coder/coder/v2/coderd/database/migrations"
27+
"github.com/coder/coder/v2/coderd/httpmw"
2728
"github.com/coder/coder/v2/coderd/rbac"
29+
"github.com/coder/coder/v2/coderd/rbac/policy"
2830
"github.com/coder/coder/v2/testutil"
2931
)
3032

@@ -612,70 +614,98 @@ func TestGetWorkspaceAgentUsageStatsAndLabels(t *testing.T) {
612614
})
613615
}
614616

615-
func TestGetWorkspacesAndAgents(t *testing.T) {
617+
func TestGetAuthorizedWorkspacesAndAgents(t *testing.T) {
616618
t.Parallel()
617619
if testing.Short() {
618620
t.SkipNow()
619621
}
620622

623+
ctx := testutil.Context(t, testutil.WaitLong)
621624
sqlDB := testSQLDB(t)
622625
err := migrations.Up(sqlDB)
623626
require.NoError(t, err)
624627
db := database.New(sqlDB)
625628

626629
org := dbgen.Organization(t, db, database.Organization{})
630+
owner := dbgen.User(t, db, database.User{
631+
RBACRoles: []string{rbac.RoleOwner().String()},
632+
})
627633
user := dbgen.User(t, db, database.User{})
628634
tpl := dbgen.Template(t, db, database.Template{
629635
OrganizationID: org.ID,
630-
CreatedBy: user.ID,
636+
CreatedBy: owner.ID,
631637
})
632638

633-
pending := createTemplateVersion(t, db, tpl, tvArgs{
639+
pendingID := uuid.New()
640+
createTemplateVersion(t, db, tpl, tvArgs{
634641
Status: database.ProvisionerJobStatusPending,
635642
CreateWorkspace: true,
643+
WorkspaceID: pendingID,
636644
CreateAgent: true,
637645
})
638-
failed := createTemplateVersion(t, db, tpl, tvArgs{
646+
failedID := uuid.New()
647+
createTemplateVersion(t, db, tpl, tvArgs{
639648
Status: database.ProvisionerJobStatusFailed,
640649
CreateWorkspace: true,
641650
CreateAgent: true,
651+
WorkspaceID: failedID,
642652
})
643-
succeeded := createTemplateVersion(t, db, tpl, tvArgs{
653+
succeededID := uuid.New()
654+
createTemplateVersion(t, db, tpl, tvArgs{
644655
Status: database.ProvisionerJobStatusSucceeded,
645656
WorkspaceTransition: database.WorkspaceTransitionStart,
646657
CreateWorkspace: true,
658+
WorkspaceID: succeededID,
647659
CreateAgent: true,
648660
ExtraAgents: 1,
649661
ExtraBuilds: 2,
650662
})
651-
deleted := createTemplateVersion(t, db, tpl, tvArgs{
663+
deletedID := uuid.New()
664+
createTemplateVersion(t, db, tpl, tvArgs{
652665
Status: database.ProvisionerJobStatusSucceeded,
653666
WorkspaceTransition: database.WorkspaceTransitionDelete,
654667
CreateWorkspace: true,
668+
WorkspaceID: deletedID,
655669
CreateAgent: false,
656670
})
657671

658-
ctx := testutil.Context(t, testutil.WaitLong)
659-
rows, err := db.GetWorkspacesAndAgents(ctx)
672+
authorizer := rbac.NewStrictCachingAuthorizer(prometheus.NewRegistry())
673+
674+
userSubject, _, err := httpmw.UserRBACSubject(ctx, db, user.ID, rbac.ExpandableScope(rbac.ScopeAll))
675+
require.NoError(t, err)
676+
preparedUser, err := authorizer.Prepare(ctx, userSubject, policy.ActionRead, rbac.ResourceWorkspace.Type)
660677
require.NoError(t, err)
678+
userCtx := dbauthz.As(ctx, userSubject)
679+
userRows, err := db.GetAuthorizedWorkspacesAndAgents(userCtx, preparedUser)
680+
require.NoError(t, err)
681+
require.Len(t, userRows, 0)
661682

662-
require.Len(t, rows, 4)
663-
for _, row := range rows {
683+
ownerSubject, _, err := httpmw.UserRBACSubject(ctx, db, owner.ID, rbac.ExpandableScope(rbac.ScopeAll))
684+
require.NoError(t, err)
685+
preparedOwner, err := authorizer.Prepare(ctx, ownerSubject, policy.ActionRead, rbac.ResourceWorkspace.Type)
686+
require.NoError(t, err)
687+
ownerCtx := dbauthz.As(ctx, ownerSubject)
688+
ownerRows, err := db.GetAuthorizedWorkspacesAndAgents(ownerCtx, preparedOwner)
689+
require.NoError(t, err)
690+
require.Len(t, ownerRows, 4)
691+
for _, row := range ownerRows {
664692
switch row.WorkspaceID {
665-
case pending.ID:
693+
case pendingID:
666694
require.Len(t, row.AgentIds, 1)
667695
require.Equal(t, database.ProvisionerJobStatusPending, row.JobStatus)
668-
case failed.ID:
696+
case failedID:
669697
require.Len(t, row.AgentIds, 1)
670698
require.Equal(t, database.ProvisionerJobStatusFailed, row.JobStatus)
671-
case succeeded.ID:
699+
case succeededID:
672700
require.Len(t, row.AgentIds, 2)
673701
require.Equal(t, database.ProvisionerJobStatusSucceeded, row.JobStatus)
674702
require.Equal(t, database.WorkspaceTransitionStart, row.Transition)
675-
case deleted.ID:
703+
case deletedID:
676704
require.Len(t, row.AgentIds, 0)
677705
require.Equal(t, database.ProvisionerJobStatusSucceeded, row.JobStatus)
678706
require.Equal(t, database.WorkspaceTransitionDelete, row.Transition)
707+
default:
708+
t.Fatalf("unexpected workspace ID: %s", row.WorkspaceID)
679709
}
680710
}
681711
}
@@ -1605,6 +1635,7 @@ type tvArgs struct {
16051635
Status database.ProvisionerJobStatus
16061636
// CreateWorkspace is true if we should create a workspace for the template version
16071637
CreateWorkspace bool
1638+
WorkspaceID uuid.UUID
16081639
CreateAgent bool
16091640
WorkspaceTransition database.WorkspaceTransition
16101641
ExtraAgents int
@@ -1625,49 +1656,18 @@ func createTemplateVersion(t testing.TB, db database.Store, tpl database.Templat
16251656
CreatedBy: tpl.CreatedBy,
16261657
})
16271658

1628-
earlier := sql.NullTime{
1629-
Time: dbtime.Now().Add(time.Second * -30),
1630-
Valid: true,
1631-
}
1632-
now := sql.NullTime{
1633-
Time: dbtime.Now(),
1634-
Valid: true,
1635-
}
1636-
j := database.ProvisionerJob{
1659+
latestJob := database.ProvisionerJob{
16371660
ID: version.JobID,
1638-
CreatedAt: earlier.Time,
1639-
UpdatedAt: earlier.Time,
16401661
Error: sql.NullString{},
16411662
OrganizationID: tpl.OrganizationID,
16421663
InitiatorID: tpl.CreatedBy,
16431664
Type: database.ProvisionerJobTypeTemplateVersionImport,
16441665
}
1645-
1646-
switch args.Status {
1647-
case database.ProvisionerJobStatusRunning:
1648-
j.StartedAt = earlier
1649-
case database.ProvisionerJobStatusPending:
1650-
case database.ProvisionerJobStatusFailed:
1651-
j.StartedAt = earlier
1652-
j.CompletedAt = now
1653-
j.Error = sql.NullString{
1654-
String: "failed",
1655-
Valid: true,
1656-
}
1657-
j.ErrorCode = sql.NullString{
1658-
String: "failed",
1659-
Valid: true,
1660-
}
1661-
case database.ProvisionerJobStatusSucceeded:
1662-
j.StartedAt = earlier
1663-
j.CompletedAt = now
1664-
default:
1665-
t.Fatalf("invalid status: %s", args.Status)
1666-
}
1667-
1668-
dbgen.ProvisionerJob(t, db, nil, j)
1666+
setJobStatus(t, args.Status, &latestJob)
1667+
dbgen.ProvisionerJob(t, db, nil, latestJob)
16691668
if args.CreateWorkspace {
16701669
wrk := dbgen.Workspace(t, db, database.Workspace{
1670+
ID: args.WorkspaceID,
16711671
CreatedAt: time.Time{},
16721672
UpdatedAt: time.Time{},
16731673
OwnerID: tpl.CreatedBy,
@@ -1678,13 +1678,13 @@ func createTemplateVersion(t testing.TB, db database.Store, tpl database.Templat
16781678
if args.WorkspaceTransition != "" {
16791679
trans = args.WorkspaceTransition
16801680
}
1681-
1682-
latestJob := dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{
1681+
latestJob = database.ProvisionerJob{
16831682
Type: database.ProvisionerJobTypeWorkspaceBuild,
1684-
CompletedAt: now,
16851683
InitiatorID: tpl.CreatedBy,
16861684
OrganizationID: tpl.OrganizationID,
1687-
})
1685+
}
1686+
setJobStatus(t, args.Status, &latestJob)
1687+
latestJob = dbgen.ProvisionerJob(t, db, nil, latestJob)
16881688
latestResource := dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
16891689
JobID: latestJob.ID,
16901690
})
@@ -1697,12 +1697,13 @@ func createTemplateVersion(t testing.TB, db database.Store, tpl database.Templat
16971697
JobID: latestJob.ID,
16981698
})
16991699
for i := 0; i < args.ExtraBuilds; i++ {
1700-
latestJob = dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{
1700+
latestJob = database.ProvisionerJob{
17011701
Type: database.ProvisionerJobTypeWorkspaceBuild,
1702-
CompletedAt: now,
17031702
InitiatorID: tpl.CreatedBy,
17041703
OrganizationID: tpl.OrganizationID,
1705-
})
1704+
}
1705+
setJobStatus(t, args.Status, &latestJob)
1706+
latestJob = dbgen.ProvisionerJob(t, db, nil, latestJob)
17061707
latestResource = dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
17071708
JobID: latestJob.ID,
17081709
})
@@ -1730,6 +1731,40 @@ func createTemplateVersion(t testing.TB, db database.Store, tpl database.Templat
17301731
return version
17311732
}
17321733

1734+
func setJobStatus(t testing.TB, status database.ProvisionerJobStatus, j *database.ProvisionerJob) {
1735+
t.Helper()
1736+
1737+
earlier := sql.NullTime{
1738+
Time: dbtime.Now().Add(time.Second * -30),
1739+
Valid: true,
1740+
}
1741+
now := sql.NullTime{
1742+
Time: dbtime.Now(),
1743+
Valid: true,
1744+
}
1745+
switch status {
1746+
case database.ProvisionerJobStatusRunning:
1747+
j.StartedAt = earlier
1748+
case database.ProvisionerJobStatusPending:
1749+
case database.ProvisionerJobStatusFailed:
1750+
j.StartedAt = earlier
1751+
j.CompletedAt = now
1752+
j.Error = sql.NullString{
1753+
String: "failed",
1754+
Valid: true,
1755+
}
1756+
j.ErrorCode = sql.NullString{
1757+
String: "failed",
1758+
Valid: true,
1759+
}
1760+
case database.ProvisionerJobStatusSucceeded:
1761+
j.StartedAt = earlier
1762+
j.CompletedAt = now
1763+
default:
1764+
t.Fatalf("invalid status: %s", status)
1765+
}
1766+
}
1767+
17331768
func TestArchiveVersions(t *testing.T) {
17341769
t.Parallel()
17351770
if testing.Short() {

coderd/database/queries.sql.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaces.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ SELECT
694694
workspaces.name as workspace_name,
695695
job_status,
696696
transition,
697-
array_agg(agent_id)::uuid[] as agent_ids
697+
(array_agg(agent_id) FILTER (WHERE agent_id IS NOT NULL))::uuid[] as agent_ids
698698
FROM workspaces
699699
LEFT JOIN LATERAL (
700700
SELECT

coderd/workspaces_test.go

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
"github.com/coder/coder/v2/coderd/database/dbgen"
3131
"github.com/coder/coder/v2/coderd/database/dbtestutil"
3232
"github.com/coder/coder/v2/coderd/database/dbtime"
33-
"github.com/coder/coder/v2/coderd/httpmw"
3433
"github.com/coder/coder/v2/coderd/notifications"
3534
"github.com/coder/coder/v2/coderd/rbac"
3635
"github.com/coder/coder/v2/coderd/rbac/policy"
@@ -3723,50 +3722,3 @@ func TestWorkspaceTimings(t *testing.T) {
37233722
})
37243723
}
37253724
}
3726-
3727-
func TestGetAuthorizedWorkspacesAndAgents(t *testing.T) {
3728-
t.Parallel()
3729-
3730-
ownerClient, _, api := coderdtest.NewWithAPI(t, &coderdtest.Options{
3731-
IncludeProvisionerDaemon: true,
3732-
})
3733-
owner := coderdtest.CreateFirstUser(t, ownerClient)
3734-
_, user := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
3735-
authToken := uuid.NewString()
3736-
version := coderdtest.CreateTemplateVersion(t, ownerClient, owner.OrganizationID, &echo.Responses{
3737-
Parse: echo.ParseComplete,
3738-
ProvisionPlan: echo.PlanComplete,
3739-
ProvisionApply: echo.ProvisionApplyWithAgent(authToken),
3740-
})
3741-
coderdtest.AwaitTemplateVersionJobCompleted(t, ownerClient, version.ID)
3742-
template := coderdtest.CreateTemplate(t, ownerClient, owner.OrganizationID, version.ID)
3743-
workspace := coderdtest.CreateWorkspace(t, ownerClient, template.ID)
3744-
coderdtest.AwaitWorkspaceBuildJobCompleted(t, ownerClient, workspace.LatestBuild.ID)
3745-
_ = agenttest.New(t, ownerClient.URL, authToken)
3746-
_ = coderdtest.NewWorkspaceAgentWaiter(t, ownerClient, workspace.ID).Wait()
3747-
3748-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
3749-
defer cancel()
3750-
3751-
ownerSubject, _, err := httpmw.UserRBACSubject(ctx, api.Database, owner.UserID, rbac.ExpandableScope(rbac.ScopeAll))
3752-
require.NoError(t, err)
3753-
preparedOwner, err := api.Authorizer.Prepare(ctx, ownerSubject, policy.ActionRead, rbac.ResourceWorkspace.Type)
3754-
require.NoError(t, err)
3755-
3756-
ownerCtx := dbauthz.As(ctx, ownerSubject)
3757-
ownerRows, err := api.Database.GetAuthorizedWorkspacesAndAgents(ownerCtx, preparedOwner)
3758-
require.NoError(t, err)
3759-
require.Len(t, ownerRows, 1)
3760-
require.Equal(t, workspace.ID, ownerRows[0].WorkspaceID)
3761-
require.Len(t, ownerRows[0].AgentIds, 1)
3762-
3763-
userSubject, _, err := httpmw.UserRBACSubject(ctx, api.Database, user.ID, rbac.ExpandableScope(rbac.ScopeAll))
3764-
require.NoError(t, err)
3765-
preparedUser, err := api.Authorizer.Prepare(ctx, userSubject, policy.ActionRead, rbac.ResourceWorkspace.Type)
3766-
require.NoError(t, err)
3767-
3768-
userCtx := dbauthz.As(ctx, userSubject)
3769-
userRows, err := api.Database.GetAuthorizedWorkspacesAndAgents(userCtx, preparedUser)
3770-
require.NoError(t, err)
3771-
require.Len(t, userRows, 0)
3772-
}

0 commit comments

Comments
 (0)