Skip to content

Commit de2f3fc

Browse files
committed
TestCompleteJob - Modules WIP
1 parent a337403 commit de2f3fc

File tree

7 files changed

+211
-1
lines changed

7 files changed

+211
-1
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2664,6 +2664,13 @@ func (q *querier) GetWorkspaceByWorkspaceAppID(ctx context.Context, workspaceApp
26642664
return fetch(q.log, q.auth, q.db.GetWorkspaceByWorkspaceAppID)(ctx, workspaceAppID)
26652665
}
26662666

2667+
func (q *querier) GetWorkspaceModulesByJobID(ctx context.Context, jobID uuid.UUID) ([]database.WorkspaceModule, error) {
2668+
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {
2669+
return nil, err
2670+
}
2671+
return q.db.GetWorkspaceModulesByJobID(ctx, jobID)
2672+
}
2673+
26672674
func (q *querier) GetWorkspaceProxies(ctx context.Context) ([]database.WorkspaceProxy, error) {
26682675
return fetchWithPostFilter(q.auth, policy.ActionRead, func(ctx context.Context, _ interface{}) ([]database.WorkspaceProxy, error) {
26692676
return q.db.GetWorkspaceProxies(ctx)

coderd/database/dbmem/dbmem.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ func New() database.Store {
7373
workspaceAgents: make([]database.WorkspaceAgent, 0),
7474
provisionerJobLogs: make([]database.ProvisionerJobLog, 0),
7575
workspaceResources: make([]database.WorkspaceResource, 0),
76+
workspaceModules: make([]database.WorkspaceModule, 0),
7677
workspaceResourceMetadata: make([]database.WorkspaceResourceMetadatum, 0),
7778
provisionerJobs: make([]database.ProvisionerJob, 0),
7879
templateVersions: make([]database.TemplateVersionTable, 0),
@@ -232,6 +233,7 @@ type data struct {
232233
workspaceBuildParameters []database.WorkspaceBuildParameter
233234
workspaceResourceMetadata []database.WorkspaceResourceMetadatum
234235
workspaceResources []database.WorkspaceResource
236+
workspaceModules []database.WorkspaceModule
235237
workspaces []database.WorkspaceTable
236238
workspaceProxies []database.WorkspaceProxy
237239
customRoles []database.CustomRole
@@ -6659,6 +6661,19 @@ func (q *FakeQuerier) GetWorkspaceByWorkspaceAppID(_ context.Context, workspaceA
66596661
return database.Workspace{}, sql.ErrNoRows
66606662
}
66616663

6664+
func (q *FakeQuerier) GetWorkspaceModulesByJobID(_ context.Context, jobID uuid.UUID) ([]database.WorkspaceModule, error) {
6665+
q.mutex.RLock()
6666+
defer q.mutex.RUnlock()
6667+
6668+
modules := make([]database.WorkspaceModule, 0)
6669+
for _, module := range q.workspaceModules {
6670+
if module.JobID == jobID {
6671+
modules = append(modules, module)
6672+
}
6673+
}
6674+
return modules, nil
6675+
}
6676+
66626677
func (q *FakeQuerier) GetWorkspaceProxies(_ context.Context) ([]database.WorkspaceProxy, error) {
66636678
q.mutex.RLock()
66646679
defer q.mutex.RUnlock()
@@ -8200,7 +8215,20 @@ func (q *FakeQuerier) InsertWorkspaceModule(ctx context.Context, arg database.In
82008215
return database.WorkspaceModule{}, err
82018216
}
82028217

8203-
panic("not implemented")
8218+
q.mutex.Lock()
8219+
defer q.mutex.Unlock()
8220+
8221+
workspaceModule := database.WorkspaceModule{
8222+
ID: arg.ID,
8223+
JobID: arg.JobID,
8224+
Transition: arg.Transition,
8225+
Source: arg.Source,
8226+
Version: arg.Version,
8227+
Key: arg.Key,
8228+
CreatedAt: arg.CreatedAt,
8229+
}
8230+
q.workspaceModules = append(q.workspaceModules, workspaceModule)
8231+
return workspaceModule, nil
82048232
}
82058233

82068234
func (q *FakeQuerier) InsertWorkspaceProxy(_ context.Context, arg database.InsertWorkspaceProxyParams) (database.WorkspaceProxy, error) {
@@ -8253,6 +8281,7 @@ func (q *FakeQuerier) InsertWorkspaceResource(_ context.Context, arg database.In
82538281
Hide: arg.Hide,
82548282
Icon: arg.Icon,
82558283
DailyCost: arg.DailyCost,
8284+
ModulePath: arg.ModulePath,
82568285
}
82578286
q.workspaceResources = append(q.workspaceResources, resource)
82588287
return resource, nil

coderd/database/dbmetrics/querymetrics.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

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

coderd/database/queries.sql.go

Lines changed: 40 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspacemodules.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,11 @@ INSERT INTO
33
workspace_modules (id, job_id, transition, source, version, key, created_at)
44
VALUES
55
($1, $2, $3, $4, $5, $6, $7) RETURNING *;
6+
7+
-- name: GetWorkspaceModulesByJobID :many
8+
SELECT
9+
*
10+
FROM
11+
workspace_modules
12+
WHERE
13+
job_id = $1;

coderd/provisionerdserver/provisionerdserver_test.go

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,6 +1428,124 @@ func TestCompleteJob(t *testing.T) {
14281428
})
14291429
require.NoError(t, err)
14301430
})
1431+
1432+
t.Run("Modules", func(t *testing.T) {
1433+
t.Parallel()
1434+
srv, db, _, pd := setup(t, false, &overrides{})
1435+
job, err := db.InsertProvisionerJob(ctx, database.InsertProvisionerJobParams{
1436+
ID: uuid.New(),
1437+
Provisioner: database.ProvisionerTypeEcho,
1438+
Type: database.ProvisionerJobTypeTemplateVersionDryRun,
1439+
StorageMethod: database.ProvisionerStorageMethodFile,
1440+
})
1441+
require.NoError(t, err)
1442+
_, err = db.AcquireProvisionerJob(ctx, database.AcquireProvisionerJobParams{
1443+
WorkerID: uuid.NullUUID{
1444+
UUID: pd.ID,
1445+
Valid: true,
1446+
},
1447+
Types: []database.ProvisionerType{database.ProvisionerTypeEcho},
1448+
})
1449+
require.NoError(t, err)
1450+
1451+
cases := []struct {
1452+
name string
1453+
job *proto.CompletedJob
1454+
expectedResources []database.WorkspaceResource
1455+
expectedModules []database.WorkspaceModule
1456+
}{
1457+
{
1458+
name: "TemplateDryRun",
1459+
job: &proto.CompletedJob{
1460+
Type: &proto.CompletedJob_TemplateDryRun_{
1461+
TemplateDryRun: &proto.CompletedJob_TemplateDryRun{
1462+
Resources: []*sdkproto.Resource{{
1463+
Name: "something",
1464+
Type: "aws_instance",
1465+
ModulePath: "module.test1",
1466+
}, {
1467+
Name: "something2",
1468+
Type: "aws_instance",
1469+
ModulePath: "",
1470+
}},
1471+
Modules: []*sdkproto.Module{
1472+
{
1473+
Key: "test1",
1474+
Version: "1.0.0",
1475+
Source: "github.com/example/example",
1476+
},
1477+
},
1478+
},
1479+
},
1480+
},
1481+
expectedResources: []database.WorkspaceResource{{
1482+
Name: "something",
1483+
Type: "aws_instance",
1484+
ModulePath: sql.NullString{
1485+
String: "module.test1",
1486+
Valid: true,
1487+
},
1488+
}, {
1489+
Name: "something2",
1490+
Type: "aws_instance",
1491+
ModulePath: sql.NullString{
1492+
String: "",
1493+
Valid: true,
1494+
},
1495+
}},
1496+
expectedModules: []database.WorkspaceModule{{
1497+
Key: "test1",
1498+
Version: "1.0.0",
1499+
Source: "github.com/example/example",
1500+
}},
1501+
},
1502+
}
1503+
1504+
for _, c := range cases {
1505+
c := c
1506+
1507+
t.Run(c.name, func(t *testing.T) {
1508+
t.Parallel()
1509+
1510+
completedJob := c.job
1511+
completedJob.JobId = job.ID.String()
1512+
1513+
_, err = srv.CompleteJob(ctx, completedJob)
1514+
require.NoError(t, err)
1515+
1516+
resources, err := db.GetWorkspaceResourcesByJobID(ctx, job.ID)
1517+
require.NoError(t, err)
1518+
require.Len(t, resources, len(c.expectedResources))
1519+
1520+
for _, expectedResource := range c.expectedResources {
1521+
for i, resource := range resources {
1522+
if resource.Name == expectedResource.Name && resource.Type == expectedResource.Type && resource.ModulePath == expectedResource.ModulePath {
1523+
resources[i] = database.WorkspaceResource{Name: "matched"}
1524+
}
1525+
}
1526+
}
1527+
// all resources should be matched
1528+
for _, resource := range resources {
1529+
require.Equal(t, "matched", resource.Name)
1530+
}
1531+
1532+
modules, err := db.GetWorkspaceModulesByJobID(ctx, job.ID)
1533+
require.NoError(t, err)
1534+
require.Len(t, modules, len(c.expectedModules))
1535+
1536+
for _, expectedModule := range c.expectedModules {
1537+
for i, module := range modules {
1538+
if module.Key == expectedModule.Key && module.Version == expectedModule.Version && module.Source == expectedModule.Source {
1539+
modules[i] = database.WorkspaceModule{Key: "matched"}
1540+
}
1541+
}
1542+
}
1543+
for _, module := range modules {
1544+
require.Equal(t, "matched", module.Key)
1545+
}
1546+
})
1547+
}
1548+
})
14311549
}
14321550

14331551
func TestInsertWorkspaceResource(t *testing.T) {

0 commit comments

Comments
 (0)