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)
pFad - Phonifier reborn

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

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


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy