Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 583d1a3

Browse files
committed
fix: coderd workspace tests
1 parent 74d5e9f commit 583d1a3

File tree

1 file changed

+187
-185
lines changed

1 file changed

+187
-185
lines changed

coderd/workspacebuilds_test.go

+187-185
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323
"github.com/coder/coder/v2/coderd/coderdtest/oidctest"
2424
"github.com/coder/coder/v2/coderd/database"
2525
"github.com/coder/coder/v2/coderd/database/dbauthz"
26+
"github.com/coder/coder/v2/coderd/database/dbgen"
27+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
2628
"github.com/coder/coder/v2/coderd/database/dbtime"
2729
"github.com/coder/coder/v2/coderd/externalauth"
2830
"github.com/coder/coder/v2/coderd/rbac"
@@ -1181,188 +1183,188 @@ func TestPostWorkspaceBuild(t *testing.T) {
11811183
})
11821184
}
11831185

1184-
// func TestWorkspaceBuildTimings(t *testing.T) {
1185-
// // t.Parallel()
1186-
1187-
// // Setup the test environment with a template and version
1188-
// db, pubsub := dbtestutil.NewDB(t)
1189-
// client := coderdtest.New(t, &coderdtest.Options{
1190-
// Database: db,
1191-
// Pubsub: pubsub,
1192-
// })
1193-
// owner := coderdtest.CreateFirstUser(t, client)
1194-
// file := dbgen.File(t, db, database.File{
1195-
// CreatedBy: owner.UserID,
1196-
// })
1197-
// versionJob := dbgen.ProvisionerJob(t, db, pubsub, database.ProvisionerJob{
1198-
// OrganizationID: owner.OrganizationID,
1199-
// InitiatorID: owner.UserID,
1200-
// FileID: file.ID,
1201-
// Tags: database.StringMap{
1202-
// "custom": "true",
1203-
// },
1204-
// })
1205-
// version := dbgen.TemplateVersion(t, db, database.TemplateVersion{
1206-
// OrganizationID: owner.OrganizationID,
1207-
// JobID: versionJob.ID,
1208-
// CreatedBy: owner.UserID,
1209-
// })
1210-
// template := dbgen.Template(t, db, database.Template{
1211-
// OrganizationID: owner.OrganizationID,
1212-
// ActiveVersionID: version.ID,
1213-
// CreatedBy: owner.UserID,
1214-
// })
1215-
// ws := dbgen.Workspace(t, db, database.Workspace{
1216-
// OwnerID: owner.UserID,
1217-
// OrganizationID: owner.OrganizationID,
1218-
// TemplateID: template.ID,
1219-
// })
1220-
1221-
// // Create a build to attach timings
1222-
// var buildNumber int32
1223-
// makeBuild := func() database.WorkspaceBuild {
1224-
// buildNumber++
1225-
// jobID := uuid.New()
1226-
// job := dbgen.ProvisionerJob(t, db, pubsub, database.ProvisionerJob{
1227-
// ID: jobID,
1228-
// OrganizationID: owner.OrganizationID,
1229-
// Tags: database.StringMap{jobID.String(): "true"},
1230-
// })
1231-
// return dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{
1232-
// WorkspaceID: ws.ID,
1233-
// TemplateVersionID: version.ID,
1234-
// InitiatorID: owner.UserID,
1235-
// JobID: job.ID,
1236-
// BuildNumber: buildNumber,
1237-
// })
1238-
// }
1239-
1240-
// t.Run("NonExistentBuild", func(t *testing.T) {
1241-
// t.Parallel()
1242-
1243-
// // When: fetching an inexistent build
1244-
// buildID := uuid.New()
1245-
// ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1246-
// t.Cleanup(cancel)
1247-
// _, err := client.WorkspaceBuildTimings(ctx, buildID)
1248-
1249-
// // Then: expect a not found error
1250-
// require.Error(t, err)
1251-
// require.Contains(t, err.Error(), "not found")
1252-
// })
1253-
1254-
// t.Run("EmptyTimings", func(t *testing.T) {
1255-
// t.Parallel()
1256-
1257-
// // When: fetching timings for a build with no timings
1258-
// build := makeBuild()
1259-
// ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1260-
// t.Cleanup(cancel)
1261-
// res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1262-
1263-
// // Then: return a response with empty timings
1264-
// require.NoError(t, err)
1265-
// require.Empty(t, res.ProvisionerTimings)
1266-
// require.Empty(t, res.AgentScriptTimings)
1267-
// })
1268-
1269-
// t.Run("ProvisionerTimings", func(t *testing.T) {
1270-
// t.Parallel()
1271-
1272-
// // When: fetching timings for a build with provisioner timings
1273-
// build := makeBuild()
1274-
// provisionerTimings := dbgen.ProvisionerJobTimings(t, db, build, 5)
1275-
1276-
// // Then: return a response with the expected timings
1277-
// ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1278-
// t.Cleanup(cancel)
1279-
// res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1280-
// require.NoError(t, err)
1281-
// require.Len(t, res.ProvisionerTimings, 5)
1282-
1283-
// for i := range res.ProvisionerTimings {
1284-
// timingRes := res.ProvisionerTimings[i]
1285-
// genTiming := provisionerTimings[i]
1286-
// require.Equal(t, genTiming.Resource, timingRes.Resource)
1287-
// require.Equal(t, genTiming.Action, timingRes.Action)
1288-
// require.Equal(t, string(genTiming.Stage), timingRes.Stage)
1289-
// require.Equal(t, genTiming.JobID.String(), timingRes.JobID.String())
1290-
// require.Equal(t, genTiming.Source, timingRes.Source)
1291-
// require.Equal(t, genTiming.StartedAt.UnixMilli(), timingRes.StartedAt.UnixMilli())
1292-
// require.Equal(t, genTiming.EndedAt.UnixMilli(), timingRes.EndedAt.UnixMilli())
1293-
// }
1294-
// })
1295-
1296-
// t.Run("AgentScriptTimings", func(t *testing.T) {
1297-
// t.Parallel()
1298-
1299-
// // When: fetching timings for a build with agent script timings
1300-
// build := makeBuild()
1301-
// resource := dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
1302-
// JobID: build.JobID,
1303-
// })
1304-
// agent := dbgen.WorkspaceAgent(t, db, database.WorkspaceAgent{
1305-
// ResourceID: resource.ID,
1306-
// })
1307-
// script := dbgen.WorkspaceAgentScript(t, db, database.WorkspaceAgentScript{
1308-
// WorkspaceAgentID: agent.ID,
1309-
// })
1310-
// agentScriptTimings := dbgen.WorkspaceAgentScriptTimings(t, db, script, 5)
1311-
1312-
// // Then: return a response with the expected timings
1313-
// ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1314-
// t.Cleanup(cancel)
1315-
// res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1316-
// require.NoError(t, err)
1317-
// require.Len(t, res.AgentScriptTimings, 5)
1318-
1319-
// for i := range res.AgentScriptTimings {
1320-
// timingRes := res.AgentScriptTimings[i]
1321-
// genTiming := agentScriptTimings[i]
1322-
// require.Equal(t, genTiming.ExitCode, timingRes.ExitCode)
1323-
// require.Equal(t, string(genTiming.Status), timingRes.Status)
1324-
// require.Equal(t, string(genTiming.Stage), timingRes.Stage)
1325-
// require.Equal(t, genTiming.StartedAt.UnixMilli(), timingRes.StartedAt.UnixMilli())
1326-
// require.Equal(t, genTiming.EndedAt.UnixMilli(), timingRes.EndedAt.UnixMilli())
1327-
// }
1328-
// })
1329-
1330-
// t.Run("NoAgentScripts", func(t *testing.T) {
1331-
// t.Parallel()
1332-
1333-
// // When: fetching timings for a build with no agent scripts
1334-
// build := makeBuild()
1335-
// resource := dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
1336-
// JobID: build.JobID,
1337-
// })
1338-
// dbgen.WorkspaceAgent(t, db, database.WorkspaceAgent{
1339-
// ResourceID: resource.ID,
1340-
// })
1341-
1342-
// // Then: return a response with empty agent script timings
1343-
// ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1344-
// t.Cleanup(cancel)
1345-
// res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1346-
// require.NoError(t, err)
1347-
// require.Empty(t, res.AgentScriptTimings)
1348-
// })
1349-
1350-
// // Some workspaces might not have agents. It is improbable, but possible.
1351-
// t.Run("NoAgents", func(t *testing.T) {
1352-
// t.Parallel()
1353-
1354-
// // When: fetching timings for a build with no agents
1355-
// build := makeBuild()
1356-
// dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
1357-
// JobID: build.JobID,
1358-
// })
1359-
1360-
// // Then: return a response with empty agent script timings
1361-
// // trigger build
1362-
// ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1363-
// t.Cleanup(cancel)
1364-
// res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1365-
// require.NoError(t, err)
1366-
// require.Empty(t, res.AgentScriptTimings)
1367-
// })
1368-
// }
1186+
func TestWorkspaceBuildTimings(t *testing.T) {
1187+
// t.Parallel()
1188+
1189+
// Setup the test environment with a template and version
1190+
db, pubsub := dbtestutil.NewDB(t)
1191+
client := coderdtest.New(t, &coderdtest.Options{
1192+
Database: db,
1193+
Pubsub: pubsub,
1194+
})
1195+
owner := coderdtest.CreateFirstUser(t, client)
1196+
file := dbgen.File(t, db, database.File{
1197+
CreatedBy: owner.UserID,
1198+
})
1199+
versionJob := dbgen.ProvisionerJob(t, db, pubsub, database.ProvisionerJob{
1200+
OrganizationID: owner.OrganizationID,
1201+
InitiatorID: owner.UserID,
1202+
FileID: file.ID,
1203+
Tags: database.StringMap{
1204+
"custom": "true",
1205+
},
1206+
})
1207+
version := dbgen.TemplateVersion(t, db, database.TemplateVersion{
1208+
OrganizationID: owner.OrganizationID,
1209+
JobID: versionJob.ID,
1210+
CreatedBy: owner.UserID,
1211+
})
1212+
template := dbgen.Template(t, db, database.Template{
1213+
OrganizationID: owner.OrganizationID,
1214+
ActiveVersionID: version.ID,
1215+
CreatedBy: owner.UserID,
1216+
})
1217+
ws := dbgen.Workspace(t, db, database.Workspace{
1218+
OwnerID: owner.UserID,
1219+
OrganizationID: owner.OrganizationID,
1220+
TemplateID: template.ID,
1221+
})
1222+
1223+
// Create a build to attach timings
1224+
var buildNumber int32
1225+
makeBuild := func() database.WorkspaceBuild {
1226+
buildNumber++
1227+
jobID := uuid.New()
1228+
job := dbgen.ProvisionerJob(t, db, pubsub, database.ProvisionerJob{
1229+
ID: jobID,
1230+
OrganizationID: owner.OrganizationID,
1231+
Tags: database.StringMap{jobID.String(): "true"},
1232+
})
1233+
return dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{
1234+
WorkspaceID: ws.ID,
1235+
TemplateVersionID: version.ID,
1236+
InitiatorID: owner.UserID,
1237+
JobID: job.ID,
1238+
BuildNumber: buildNumber,
1239+
})
1240+
}
1241+
1242+
t.Run("NonExistentBuild", func(t *testing.T) {
1243+
// t.Parallel()
1244+
1245+
// When: fetching an inexistent build
1246+
buildID := uuid.New()
1247+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1248+
t.Cleanup(cancel)
1249+
_, err := client.WorkspaceBuildTimings(ctx, buildID)
1250+
1251+
// Then: expect a not found error
1252+
require.Error(t, err)
1253+
require.Contains(t, err.Error(), "not found")
1254+
})
1255+
1256+
t.Run("EmptyTimings", func(t *testing.T) {
1257+
// t.Parallel()
1258+
1259+
// When: fetching timings for a build with no timings
1260+
build := makeBuild()
1261+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1262+
t.Cleanup(cancel)
1263+
res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1264+
1265+
// Then: return a response with empty timings
1266+
require.NoError(t, err)
1267+
require.Empty(t, res.ProvisionerTimings)
1268+
require.Empty(t, res.AgentScriptTimings)
1269+
})
1270+
1271+
t.Run("ProvisionerTimings", func(t *testing.T) {
1272+
// t.Parallel()
1273+
1274+
// When: fetching timings for a build with provisioner timings
1275+
build := makeBuild()
1276+
provisionerTimings := dbgen.ProvisionerJobTimings(t, db, build, 5)
1277+
1278+
// Then: return a response with the expected timings
1279+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1280+
t.Cleanup(cancel)
1281+
res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1282+
require.NoError(t, err)
1283+
require.Len(t, res.ProvisionerTimings, 5)
1284+
1285+
for i := range res.ProvisionerTimings {
1286+
timingRes := res.ProvisionerTimings[i]
1287+
genTiming := provisionerTimings[i]
1288+
require.Equal(t, genTiming.Resource, timingRes.Resource)
1289+
require.Equal(t, genTiming.Action, timingRes.Action)
1290+
require.Equal(t, string(genTiming.Stage), timingRes.Stage)
1291+
require.Equal(t, genTiming.JobID.String(), timingRes.JobID.String())
1292+
require.Equal(t, genTiming.Source, timingRes.Source)
1293+
require.Equal(t, genTiming.StartedAt.UnixMilli(), timingRes.StartedAt.UnixMilli())
1294+
require.Equal(t, genTiming.EndedAt.UnixMilli(), timingRes.EndedAt.UnixMilli())
1295+
}
1296+
})
1297+
1298+
t.Run("AgentScriptTimings", func(t *testing.T) {
1299+
// t.Parallel()
1300+
1301+
// When: fetching timings for a build with agent script timings
1302+
build := makeBuild()
1303+
resource := dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
1304+
JobID: build.JobID,
1305+
})
1306+
agent := dbgen.WorkspaceAgent(t, db, database.WorkspaceAgent{
1307+
ResourceID: resource.ID,
1308+
})
1309+
script := dbgen.WorkspaceAgentScript(t, db, database.WorkspaceAgentScript{
1310+
WorkspaceAgentID: agent.ID,
1311+
})
1312+
agentScriptTimings := dbgen.WorkspaceAgentScriptTimings(t, db, script, 5)
1313+
1314+
// Then: return a response with the expected timings
1315+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1316+
t.Cleanup(cancel)
1317+
res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1318+
require.NoError(t, err)
1319+
require.Len(t, res.AgentScriptTimings, 5)
1320+
1321+
for i := range res.AgentScriptTimings {
1322+
timingRes := res.AgentScriptTimings[i]
1323+
genTiming := agentScriptTimings[i]
1324+
require.Equal(t, genTiming.ExitCode, timingRes.ExitCode)
1325+
require.Equal(t, string(genTiming.Status), timingRes.Status)
1326+
require.Equal(t, string(genTiming.Stage), timingRes.Stage)
1327+
require.Equal(t, genTiming.StartedAt.UnixMilli(), timingRes.StartedAt.UnixMilli())
1328+
require.Equal(t, genTiming.EndedAt.UnixMilli(), timingRes.EndedAt.UnixMilli())
1329+
}
1330+
})
1331+
1332+
t.Run("NoAgentScripts", func(t *testing.T) {
1333+
// t.Parallel()
1334+
1335+
// When: fetching timings for a build with no agent scripts
1336+
build := makeBuild()
1337+
resource := dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
1338+
JobID: build.JobID,
1339+
})
1340+
dbgen.WorkspaceAgent(t, db, database.WorkspaceAgent{
1341+
ResourceID: resource.ID,
1342+
})
1343+
1344+
// Then: return a response with empty agent script timings
1345+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1346+
t.Cleanup(cancel)
1347+
res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1348+
require.NoError(t, err)
1349+
require.Empty(t, res.AgentScriptTimings)
1350+
})
1351+
1352+
// Some workspaces might not have agents. It is improbable, but possible.
1353+
t.Run("NoAgents", func(t *testing.T) {
1354+
// t.Parallel()
1355+
1356+
// When: fetching timings for a build with no agents
1357+
build := makeBuild()
1358+
dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
1359+
JobID: build.JobID,
1360+
})
1361+
1362+
// Then: return a response with empty agent script timings
1363+
// trigger build
1364+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1365+
t.Cleanup(cancel)
1366+
res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1367+
require.NoError(t, err)
1368+
require.Empty(t, res.AgentScriptTimings)
1369+
})
1370+
}

0 commit comments

Comments
 (0)