Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit16be03b

Browse files
committed
add test coverage for matched provisioners with workspace build creation
1 parent47036e8 commit16be03b

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

‎coderd/workspacebuilds_test.go‎

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,6 +1097,12 @@ func TestPostWorkspaceBuild(t *testing.T) {
10971097
Transition:codersdk.WorkspaceTransitionStart,
10981098
})
10991099
require.NoError(t,err)
1100+
ifassert.NotNil(t,build.MatchedProvisioners) {
1101+
require.Equal(t,1,build.MatchedProvisioners.Count)
1102+
require.Equal(t,1,build.MatchedProvisioners.Available)
1103+
require.NotZero(t,build.MatchedProvisioners.MostRecentlySeen.Time)
1104+
}
1105+
11001106
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,build.ID)
11011107

11021108
require.Eventually(t,func()bool {
@@ -1124,6 +1130,12 @@ func TestPostWorkspaceBuild(t *testing.T) {
11241130
Transition:codersdk.WorkspaceTransitionStart,
11251131
})
11261132
require.NoError(t,err)
1133+
ifassert.NotNil(t,build.MatchedProvisioners) {
1134+
require.Equal(t,1,build.MatchedProvisioners.Count)
1135+
require.Equal(t,1,build.MatchedProvisioners.Available)
1136+
require.NotZero(t,build.MatchedProvisioners.MostRecentlySeen.Time)
1137+
}
1138+
11271139
require.Equal(t,workspace.LatestBuild.BuildNumber+1,build.BuildNumber)
11281140
})
11291141

@@ -1150,6 +1162,12 @@ func TestPostWorkspaceBuild(t *testing.T) {
11501162
ProvisionerState:wantState,
11511163
})
11521164
require.NoError(t,err)
1165+
ifassert.NotNil(t,build.MatchedProvisioners) {
1166+
require.Equal(t,1,build.MatchedProvisioners.Count)
1167+
require.Equal(t,1,build.MatchedProvisioners.Available)
1168+
require.NotZero(t,build.MatchedProvisioners.MostRecentlySeen.Time)
1169+
}
1170+
11531171
gotState,err:=client.WorkspaceBuildState(ctx,build.ID)
11541172
require.NoError(t,err)
11551173
require.Equal(t,wantState,gotState)
@@ -1173,6 +1191,12 @@ func TestPostWorkspaceBuild(t *testing.T) {
11731191
})
11741192
require.NoError(t,err)
11751193
require.Equal(t,workspace.LatestBuild.BuildNumber+1,build.BuildNumber)
1194+
ifassert.NotNil(t,build.MatchedProvisioners) {
1195+
require.Equal(t,1,build.MatchedProvisioners.Count)
1196+
require.Equal(t,1,build.MatchedProvisioners.Available)
1197+
require.NotZero(t,build.MatchedProvisioners.MostRecentlySeen.Time)
1198+
}
1199+
11761200
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,build.ID)
11771201

11781202
res,err:=client.Workspaces(ctx, codersdk.WorkspaceFilter{
@@ -1181,6 +1205,92 @@ func TestPostWorkspaceBuild(t *testing.T) {
11811205
require.NoError(t,err)
11821206
require.Len(t,res.Workspaces,0)
11831207
})
1208+
1209+
t.Run("NoProvisionersAvailable",func(t*testing.T) {
1210+
t.Parallel()
1211+
// Given: a coderd instance with a provisioner daemon
1212+
store,ps,db:=dbtestutil.NewDBWithSQLDB(t)
1213+
client,closeDaemon:=coderdtest.NewWithProvisionerCloser(t,&coderdtest.Options{
1214+
Database:store,
1215+
Pubsub:ps,
1216+
IncludeProvisionerDaemon:true,
1217+
})
1218+
// Given: a user, template, and workspace
1219+
user:=coderdtest.CreateFirstUser(t,client)
1220+
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
1221+
coderdtest.AwaitTemplateVersionJobCompleted(t,client,version.ID)
1222+
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID)
1223+
workspace:=coderdtest.CreateWorkspace(t,client,template.ID)
1224+
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,workspace.LatestBuild.ID)
1225+
1226+
// Stop the provisioner daemon.
1227+
require.NoError(t,closeDaemon.Close())
1228+
ctx:=testutil.Context(t,testutil.WaitLong)
1229+
// Given: no provisioner daemons exist.
1230+
_,err:=db.ExecContext(ctx,`DELETE FROM provisioner_daemons;`)
1231+
require.NoError(t,err)
1232+
1233+
// When: a new workspace build is created
1234+
build,err:=client.CreateWorkspaceBuild(ctx,workspace.ID, codersdk.CreateWorkspaceBuildRequest{
1235+
TemplateVersionID:template.ActiveVersionID,
1236+
Transition:codersdk.WorkspaceTransitionStart,
1237+
})
1238+
// Then: the request should succeed.
1239+
require.NoError(t,err)
1240+
// Then: the provisioner job should remain pending.
1241+
require.Equal(t,codersdk.ProvisionerJobPending,build.Job.Status)
1242+
// Then: the response should indicate no provisioners are available.
1243+
ifassert.NotNil(t,build.MatchedProvisioners) {
1244+
require.Zero(t,build.MatchedProvisioners.Count)
1245+
require.Zero(t,build.MatchedProvisioners.Available)
1246+
require.Zero(t,build.MatchedProvisioners.MostRecentlySeen.Time)
1247+
}
1248+
})
1249+
1250+
t.Run("AllProvisionersStale",func(t*testing.T) {
1251+
t.Parallel()
1252+
// Given: a coderd instance with a provisioner daemon
1253+
store,ps,db:=dbtestutil.NewDBWithSQLDB(t)
1254+
client,closeDaemon:=coderdtest.NewWithProvisionerCloser(t,&coderdtest.Options{
1255+
Database:store,
1256+
Pubsub:ps,
1257+
IncludeProvisionerDaemon:true,
1258+
})
1259+
// Given: a user, template, and workspace
1260+
user:=coderdtest.CreateFirstUser(t,client)
1261+
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
1262+
coderdtest.AwaitTemplateVersionJobCompleted(t,client,version.ID)
1263+
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID)
1264+
workspace:=coderdtest.CreateWorkspace(t,client,template.ID)
1265+
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,workspace.LatestBuild.ID)
1266+
1267+
ctx:=testutil.Context(t,testutil.WaitLong)
1268+
// Given: all provisioner daemons are stale
1269+
// First stop the provisioner
1270+
require.NoError(t,closeDaemon.Close())
1271+
newLastSeenAt:=dbtime.Now().Add(-time.Hour)
1272+
// Update the last seen at for all provisioner daemons. We have to use the
1273+
// SQL db directly because store.UpdateProvisionerDaemonLastSeenAt has a
1274+
// built-in check to prevent updating the last seen at to a time in the past.
1275+
_,err:=db.ExecContext(ctx,`UPDATE provisioner_daemons SET last_seen_at = $1;`,newLastSeenAt)
1276+
require.NoError(t,err)
1277+
1278+
// When: a new workspace build is created
1279+
build,err:=client.CreateWorkspaceBuild(ctx,workspace.ID, codersdk.CreateWorkspaceBuildRequest{
1280+
TemplateVersionID:template.ActiveVersionID,
1281+
Transition:codersdk.WorkspaceTransitionStart,
1282+
})
1283+
// Then: the request should succeed
1284+
require.NoError(t,err)
1285+
// Then: the provisioner job should remain pending
1286+
require.Equal(t,codersdk.ProvisionerJobPending,build.Job.Status)
1287+
// Then: the response should indicate no provisioners are available
1288+
ifassert.NotNil(t,build.MatchedProvisioners) {
1289+
require.Zero(t,build.MatchedProvisioners.Available)
1290+
require.Equal(t,1,build.MatchedProvisioners.Count)
1291+
require.Equal(t,newLastSeenAt.UTC(),build.MatchedProvisioners.MostRecentlySeen.Time.UTC())
1292+
}
1293+
})
11841294
}
11851295

11861296
funcTestWorkspaceBuildTimings(t*testing.T) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp