(t *testing.T)
| 1214 | } |
| 1215 | |
| 1216 | func TestWorkspaceBuildStatus(t *testing.T) { |
| 1217 | t.Parallel() |
| 1218 | |
| 1219 | auditor := audit.NewMock() |
| 1220 | numLogs := len(auditor.AuditLogs()) |
| 1221 | client, closeDaemon, api := coderdtest.NewWithAPI(t, &coderdtest.Options{IncludeProvisionerDaemon: true, Auditor: auditor}) |
| 1222 | user := coderdtest.CreateFirstUser(t, client) |
| 1223 | numLogs++ // add an audit log for login |
| 1224 | version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) |
| 1225 | numLogs++ // add an audit log for template version creation |
| 1226 | numLogs++ // add an audit log for template version update |
| 1227 | |
| 1228 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) |
| 1229 | closeDaemon.Close() |
| 1230 | template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) |
| 1231 | numLogs++ // add an audit log for template creation |
| 1232 | |
| 1233 | workspace := coderdtest.CreateWorkspace(t, client, template.ID) |
| 1234 | numLogs++ // add an audit log for workspace creation |
| 1235 | |
| 1236 | // initial returned state is "pending" |
| 1237 | require.EqualValues(t, codersdk.WorkspaceStatusPending, workspace.LatestBuild.Status) |
| 1238 | |
| 1239 | closeDaemon = coderdtest.NewProvisionerDaemon(t, api) |
| 1240 | // after successful build is "running" |
| 1241 | _ = coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID) |
| 1242 | |
| 1243 | ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) |
| 1244 | defer cancel() |
| 1245 | |
| 1246 | workspace, err := client.Workspace(ctx, workspace.ID) |
| 1247 | require.NoError(t, err) |
| 1248 | require.EqualValues(t, codersdk.WorkspaceStatusRunning, workspace.LatestBuild.Status) |
| 1249 | |
| 1250 | numLogs++ // add an audit log for workspace_build starting |
| 1251 | |
| 1252 | // after successful stop is "stopped" |
| 1253 | build := coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStop) |
| 1254 | _ = coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, build.ID) |
| 1255 | workspace, err = client.Workspace(ctx, workspace.ID) |
| 1256 | require.NoError(t, err) |
| 1257 | require.EqualValues(t, codersdk.WorkspaceStatusStopped, workspace.LatestBuild.Status) |
| 1258 | |
| 1259 | // assert an audit log has been created for workspace stopping |
| 1260 | numLogs++ // add an audit log for workspace_build stop |
| 1261 | require.Len(t, auditor.AuditLogs(), numLogs) |
| 1262 | require.Equal(t, database.AuditActionStop, auditor.AuditLogs()[numLogs-1].Action) |
| 1263 | |
| 1264 | _ = closeDaemon.Close() |
| 1265 | // after successful cancel is "canceled" |
| 1266 | build = coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStart) |
| 1267 | err = client.CancelWorkspaceBuild(ctx, build.ID, codersdk.CancelWorkspaceBuildParams{}) |
| 1268 | require.NoError(t, err) |
| 1269 | |
| 1270 | workspace, err = client.Workspace(ctx, workspace.ID) |
| 1271 | require.NoError(t, err) |
| 1272 | require.EqualValues(t, codersdk.WorkspaceStatusCanceled, workspace.LatestBuild.Status) |
| 1273 |
nothing calls this directly
no test coverage detected