(t *testing.T)
| 4215 | } |
| 4216 | |
| 4217 | func TestWorkspaceByOwnerAndName(t *testing.T) { |
| 4218 | t.Parallel() |
| 4219 | |
| 4220 | t.Run("Matching Provisioner", func(t *testing.T) { |
| 4221 | t.Parallel() |
| 4222 | |
| 4223 | ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) |
| 4224 | defer cancel() |
| 4225 | |
| 4226 | client, db, userResponse := coderdenttest.NewWithDatabase(t, &coderdenttest.Options{ |
| 4227 | LicenseOptions: &coderdenttest.LicenseOptions{ |
| 4228 | Features: license.Features{ |
| 4229 | codersdk.FeatureExternalProvisionerDaemons: 1, |
| 4230 | }, |
| 4231 | }, |
| 4232 | }) |
| 4233 | userSubject, _, err := httpmw.UserRBACSubject(ctx, db, userResponse.UserID, rbac.ExpandableScope(rbac.ScopeAll)) |
| 4234 | require.NoError(t, err) |
| 4235 | user, err := client.User(ctx, userSubject.ID) |
| 4236 | require.NoError(t, err) |
| 4237 | username := user.Username |
| 4238 | |
| 4239 | _ = coderdenttest.NewExternalProvisionerDaemon(t, client, userResponse.OrganizationID, map[string]string{ |
| 4240 | provisionersdk.TagScope: provisionersdk.ScopeOrganization, |
| 4241 | }) |
| 4242 | |
| 4243 | version := coderdtest.CreateTemplateVersion(t, client, userResponse.OrganizationID, nil) |
| 4244 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) |
| 4245 | template := coderdtest.CreateTemplate(t, client, userResponse.OrganizationID, version.ID) |
| 4246 | workspace := coderdtest.CreateWorkspace(t, client, template.ID) |
| 4247 | |
| 4248 | // Pending builds should show matching provisioners |
| 4249 | require.Equal(t, workspace.LatestBuild.Status, codersdk.WorkspaceStatusPending) |
| 4250 | require.Equal(t, workspace.LatestBuild.MatchedProvisioners.Count, 1) |
| 4251 | require.Equal(t, workspace.LatestBuild.MatchedProvisioners.Available, 1) |
| 4252 | |
| 4253 | // Completed builds should not show matching provisioners, because no provisioner daemon can |
| 4254 | // be eligible to process a job that is already completed. |
| 4255 | completedBuild := coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID) |
| 4256 | require.Equal(t, completedBuild.Status, codersdk.WorkspaceStatusRunning) |
| 4257 | require.Equal(t, completedBuild.MatchedProvisioners.Count, 0) |
| 4258 | require.Equal(t, completedBuild.MatchedProvisioners.Available, 0) |
| 4259 | |
| 4260 | ws, err := client.WorkspaceByOwnerAndName(ctx, username, workspace.Name, codersdk.WorkspaceOptions{}) |
| 4261 | require.NoError(t, err) |
| 4262 | |
| 4263 | // Verify the workspace details |
| 4264 | require.Equal(t, workspace.ID, ws.ID) |
| 4265 | require.Equal(t, workspace.Name, ws.Name) |
| 4266 | require.Equal(t, workspace.TemplateID, ws.TemplateID) |
| 4267 | require.Equal(t, completedBuild.Status, ws.LatestBuild.Status) |
| 4268 | require.Equal(t, ws.LatestBuild.MatchedProvisioners.Count, 0) |
| 4269 | require.Equal(t, ws.LatestBuild.MatchedProvisioners.Available, 0) |
| 4270 | |
| 4271 | // Verify that the provisioner daemon is registered in the database |
| 4272 | daemons, err := db.GetProvisionerDaemons(dbauthz.AsSystemRestricted(ctx)) |
| 4273 | require.NoError(t, err) |
| 4274 | require.Equal(t, 1, len(daemons)) |
nothing calls this directly
no test coverage detected