(t *testing.T)
| 4046 | } |
| 4047 | |
| 4048 | func TestWorkspaceLock(t *testing.T) { |
| 4049 | t.Parallel() |
| 4050 | |
| 4051 | t.Run("TemplateTimeTilDormantAutoDelete", func(t *testing.T) { |
| 4052 | t.Parallel() |
| 4053 | var ( |
| 4054 | client, user = coderdenttest.New(t, &coderdenttest.Options{ |
| 4055 | Options: &coderdtest.Options{ |
| 4056 | IncludeProvisionerDaemon: true, |
| 4057 | TemplateScheduleStore: &schedule.EnterpriseTemplateScheduleStore{Clock: quartz.NewReal()}, |
| 4058 | }, |
| 4059 | LicenseOptions: &coderdenttest.LicenseOptions{ |
| 4060 | Features: license.Features{ |
| 4061 | codersdk.FeatureAdvancedTemplateScheduling: 1, |
| 4062 | }, |
| 4063 | }, |
| 4064 | }) |
| 4065 | |
| 4066 | version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) |
| 4067 | _ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) |
| 4068 | dormantTTL = time.Minute |
| 4069 | ) |
| 4070 | |
| 4071 | template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) { |
| 4072 | ctr.TimeTilDormantAutoDeleteMillis = ptr.Ref[int64](dormantTTL.Milliseconds()) |
| 4073 | }) |
| 4074 | |
| 4075 | workspace := coderdtest.CreateWorkspace(t, client, template.ID) |
| 4076 | _ = coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID) |
| 4077 | |
| 4078 | ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) |
| 4079 | defer cancel() |
| 4080 | |
| 4081 | lastUsedAt := workspace.LastUsedAt |
| 4082 | err := client.UpdateWorkspaceDormancy(ctx, workspace.ID, codersdk.UpdateWorkspaceDormancy{ |
| 4083 | Dormant: true, |
| 4084 | }) |
| 4085 | require.NoError(t, err) |
| 4086 | |
| 4087 | workspace = coderdtest.MustWorkspace(t, client, workspace.ID) |
| 4088 | require.NoError(t, err, "fetch provisioned workspace") |
| 4089 | require.NotNil(t, workspace.DeletingAt) |
| 4090 | require.NotNil(t, workspace.DormantAt) |
| 4091 | require.Equal(t, workspace.DormantAt.Add(dormantTTL), *workspace.DeletingAt) |
| 4092 | require.WithinRange(t, *workspace.DormantAt, dbtime.Now().Add(-time.Second), dbtime.Now()) |
| 4093 | // Locking a workspace shouldn't update the last_used_at. |
| 4094 | require.Equal(t, lastUsedAt, workspace.LastUsedAt) |
| 4095 | |
| 4096 | workspace = coderdtest.MustWorkspace(t, client, workspace.ID) |
| 4097 | lastUsedAt = workspace.LastUsedAt |
| 4098 | err = client.UpdateWorkspaceDormancy(ctx, workspace.ID, codersdk.UpdateWorkspaceDormancy{ |
| 4099 | Dormant: false, |
| 4100 | }) |
| 4101 | require.NoError(t, err) |
| 4102 | |
| 4103 | workspace, err = client.Workspace(ctx, workspace.ID) |
| 4104 | require.NoError(t, err, "fetch provisioned workspace") |
| 4105 | require.Nil(t, workspace.DormantAt) |
nothing calls this directly
no test coverage detected