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

Commit9ef68dd

Browse files
committed
add tests for workspace creation
1 parent4304a06 commit9ef68dd

File tree

2 files changed

+98
-6
lines changed

2 files changed

+98
-6
lines changed

‎coderd/workspacebuilds_test.go‎

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,6 +1218,7 @@ func TestPostWorkspaceBuild(t *testing.T) {
12181218
Pubsub:ps,
12191219
IncludeProvisionerDaemon:true,
12201220
})
1221+
defercloseDaemon.Close()
12211222
// Given: a user, template, and workspace
12221223
user:=coderdtest.CreateFirstUser(t,client)
12231224
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
@@ -1244,9 +1245,10 @@ func TestPostWorkspaceBuild(t *testing.T) {
12441245
require.Equal(t,codersdk.ProvisionerJobPending,build.Job.Status)
12451246
// Then: the response should indicate no provisioners are available.
12461247
ifassert.NotNil(t,build.MatchedProvisioners) {
1247-
require.Zero(t,build.MatchedProvisioners.Count)
1248-
require.Zero(t,build.MatchedProvisioners.Available)
1249-
require.Zero(t,build.MatchedProvisioners.MostRecentlySeen.Time)
1248+
assert.Zero(t,build.MatchedProvisioners.Count)
1249+
assert.Zero(t,build.MatchedProvisioners.Available)
1250+
assert.Zero(t,build.MatchedProvisioners.MostRecentlySeen.Time)
1251+
assert.False(t,build.MatchedProvisioners.MostRecentlySeen.Valid)
12501252
}
12511253
})
12521254

@@ -1262,6 +1264,7 @@ func TestPostWorkspaceBuild(t *testing.T) {
12621264
Pubsub:ps,
12631265
IncludeProvisionerDaemon:true,
12641266
})
1267+
defercloseDaemon.Close()
12651268
// Given: a user, template, and workspace
12661269
user:=coderdtest.CreateFirstUser(t,client)
12671270
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
@@ -1292,9 +1295,10 @@ func TestPostWorkspaceBuild(t *testing.T) {
12921295
require.Equal(t,codersdk.ProvisionerJobPending,build.Job.Status)
12931296
// Then: the response should indicate no provisioners are available
12941297
ifassert.NotNil(t,build.MatchedProvisioners) {
1295-
require.Zero(t,build.MatchedProvisioners.Available)
1296-
require.Equal(t,1,build.MatchedProvisioners.Count)
1297-
require.Equal(t,newLastSeenAt.UTC(),build.MatchedProvisioners.MostRecentlySeen.Time.UTC())
1298+
assert.Zero(t,build.MatchedProvisioners.Available)
1299+
assert.Equal(t,1,build.MatchedProvisioners.Count)
1300+
assert.Equal(t,newLastSeenAt.UTC(),build.MatchedProvisioners.MostRecentlySeen.Time.UTC())
1301+
assert.True(t,build.MatchedProvisioners.MostRecentlySeen.Valid)
12981302
}
12991303
})
13001304
}

‎coderd/workspaces_test.go‎

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,94 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
766766
require.NoError(t,err)
767767
require.EqualValues(t,exp,*ws.TTLMillis)
768768
})
769+
770+
t.Run("NoProvisionersAvailable",func(t*testing.T) {
771+
t.Parallel()
772+
if!dbtestutil.WillUsePostgres() {
773+
t.Skip("this test requires postgres")
774+
}
775+
// Given: a coderd instance with a provisioner daemon
776+
store,ps,db:=dbtestutil.NewDBWithSQLDB(t)
777+
client,closeDaemon:=coderdtest.NewWithProvisionerCloser(t,&coderdtest.Options{
778+
Database:store,
779+
Pubsub:ps,
780+
IncludeProvisionerDaemon:true,
781+
})
782+
defercloseDaemon.Close()
783+
784+
// Given: a user, template, and workspace
785+
user:=coderdtest.CreateFirstUser(t,client)
786+
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
787+
coderdtest.AwaitTemplateVersionJobCompleted(t,client,version.ID)
788+
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID)
789+
790+
// Given: all the provisioner daemons disappear
791+
ctx:=testutil.Context(t,testutil.WaitLong)
792+
_,err:=db.ExecContext(ctx,`DELETE FROM provisioner_daemons;`)
793+
require.NoError(t,err)
794+
795+
// When: a new workspace is created
796+
ws,err:=client.CreateUserWorkspace(ctx,codersdk.Me, codersdk.CreateWorkspaceRequest{
797+
TemplateID:template.ID,
798+
Name:"testing",
799+
})
800+
// Then: the request succeeds
801+
require.NoError(t,err)
802+
// Then: the workspace build is pending
803+
require.Equal(t,codersdk.ProvisionerJobPending,ws.LatestBuild.Job.Status)
804+
// Then: the workspace build has no matched provisioners
805+
ifassert.NotNil(t,ws.LatestBuild.MatchedProvisioners) {
806+
assert.Zero(t,ws.LatestBuild.MatchedProvisioners.Count)
807+
assert.Zero(t,ws.LatestBuild.MatchedProvisioners.Available)
808+
assert.Zero(t,ws.LatestBuild.MatchedProvisioners.MostRecentlySeen.Time)
809+
assert.False(t,ws.LatestBuild.MatchedProvisioners.MostRecentlySeen.Valid)
810+
}
811+
})
812+
813+
t.Run("AllProvisionersStale",func(t*testing.T) {
814+
t.Parallel()
815+
if!dbtestutil.WillUsePostgres() {
816+
t.Skip("this test requires postgres")
817+
}
818+
819+
// Given: a coderd instance with a provisioner daemon
820+
store,ps,db:=dbtestutil.NewDBWithSQLDB(t)
821+
client,closeDaemon:=coderdtest.NewWithProvisionerCloser(t,&coderdtest.Options{
822+
Database:store,
823+
Pubsub:ps,
824+
IncludeProvisionerDaemon:true,
825+
})
826+
defercloseDaemon.Close()
827+
828+
// Given: a user, template, and workspace
829+
user:=coderdtest.CreateFirstUser(t,client)
830+
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
831+
coderdtest.AwaitTemplateVersionJobCompleted(t,client,version.ID)
832+
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID)
833+
834+
// Given: all the provisioner daemons have not been seen for a while
835+
ctx:=testutil.Context(t,testutil.WaitLong)
836+
newLastSeenAt:=dbtime.Now().Add(-time.Hour)
837+
_,err:=db.ExecContext(ctx,`UPDATE provisioner_daemons SET last_seen_at = $1;`,newLastSeenAt)
838+
require.NoError(t,err)
839+
840+
// When: a new workspace is created
841+
ws,err:=client.CreateUserWorkspace(ctx,codersdk.Me, codersdk.CreateWorkspaceRequest{
842+
TemplateID:template.ID,
843+
Name:"testing",
844+
})
845+
// Then: the request succeeds
846+
require.NoError(t,err)
847+
// Then: the workspace build is pending
848+
require.Equal(t,codersdk.ProvisionerJobPending,ws.LatestBuild.Job.Status)
849+
// Then: we can see that there are some provisioners that are stale
850+
ifassert.NotNil(t,ws.LatestBuild.MatchedProvisioners) {
851+
assert.Equal(t,1,ws.LatestBuild.MatchedProvisioners.Count)
852+
assert.Zero(t,ws.LatestBuild.MatchedProvisioners.Available)
853+
assert.Equal(t,newLastSeenAt.UTC(),ws.LatestBuild.MatchedProvisioners.MostRecentlySeen.Time.UTC())
854+
assert.True(t,ws.LatestBuild.MatchedProvisioners.MostRecentlySeen.Valid)
855+
}
856+
})
769857
}
770858

771859
funcTestWorkspaceByOwnerAndName(t*testing.T) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp