(t *testing.T)
| 4740 | } |
| 4741 | |
| 4742 | func TestWorkspaceDormant(t *testing.T) { |
| 4743 | t.Parallel() |
| 4744 | |
| 4745 | t.Run("OK", func(t *testing.T) { |
| 4746 | t.Parallel() |
| 4747 | var ( |
| 4748 | auditRecorder = audit.NewMock() |
| 4749 | client = coderdtest.New(t, &coderdtest.Options{ |
| 4750 | IncludeProvisionerDaemon: true, |
| 4751 | Auditor: auditRecorder, |
| 4752 | }) |
| 4753 | user = coderdtest.CreateFirstUser(t, client) |
| 4754 | version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) |
| 4755 | _ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) |
| 4756 | timeTilDormantAutoDelete = time.Minute |
| 4757 | ) |
| 4758 | |
| 4759 | template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) { |
| 4760 | ctr.TimeTilDormantAutoDeleteMillis = ptr.Ref[int64](timeTilDormantAutoDelete.Milliseconds()) |
| 4761 | }) |
| 4762 | workspace := coderdtest.CreateWorkspace(t, client, template.ID) |
| 4763 | _ = coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID) |
| 4764 | |
| 4765 | ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) |
| 4766 | defer cancel() |
| 4767 | |
| 4768 | lastUsedAt := workspace.LastUsedAt |
| 4769 | auditRecorder.ResetLogs() |
| 4770 | err := client.UpdateWorkspaceDormancy(ctx, workspace.ID, codersdk.UpdateWorkspaceDormancy{ |
| 4771 | Dormant: true, |
| 4772 | }) |
| 4773 | require.NoError(t, err) |
| 4774 | require.True(t, auditRecorder.Contains(t, database.AuditLog{ |
| 4775 | Action: database.AuditActionWrite, |
| 4776 | ResourceType: database.ResourceTypeWorkspace, |
| 4777 | ResourceTarget: workspace.Name, |
| 4778 | })) |
| 4779 | |
| 4780 | workspace = coderdtest.MustWorkspace(t, client, workspace.ID) |
| 4781 | require.NoError(t, err, "fetch provisioned workspace") |
| 4782 | // The template doesn't have a time_til_dormant_autodelete set so this should be nil. |
| 4783 | require.Nil(t, workspace.DeletingAt) |
| 4784 | require.NotNil(t, workspace.DormantAt) |
| 4785 | require.WithinRange(t, *workspace.DormantAt, dbtime.Now().Add(-time.Second*10), dbtime.Now()) |
| 4786 | require.Equal(t, lastUsedAt, workspace.LastUsedAt) |
| 4787 | |
| 4788 | workspace = coderdtest.MustWorkspace(t, client, workspace.ID) |
| 4789 | lastUsedAt = workspace.LastUsedAt |
| 4790 | err = client.UpdateWorkspaceDormancy(ctx, workspace.ID, codersdk.UpdateWorkspaceDormancy{ |
| 4791 | Dormant: false, |
| 4792 | }) |
| 4793 | require.NoError(t, err) |
| 4794 | |
| 4795 | workspace, err = client.Workspace(ctx, workspace.ID) |
| 4796 | require.NoError(t, err, "fetch provisioned workspace") |
| 4797 | require.Nil(t, workspace.DormantAt) |
| 4798 | // The template doesn't have a time_til_dormant_autodelete set so this should be nil. |
| 4799 | require.Nil(t, workspace.DeletingAt) |
nothing calls this directly
no test coverage detected