(t *testing.T)
| 2908 | } |
| 2909 | |
| 2910 | func TestPrebuildActivityBump(t *testing.T) { |
| 2911 | t.Parallel() |
| 2912 | |
| 2913 | clock := quartz.NewMock(t) |
| 2914 | clock.Set(dbtime.Now()) |
| 2915 | |
| 2916 | // Setup |
| 2917 | log := testutil.Logger(t) |
| 2918 | client, db, owner := coderdenttest.NewWithDatabase(t, &coderdenttest.Options{ |
| 2919 | Options: &coderdtest.Options{ |
| 2920 | IncludeProvisionerDaemon: true, |
| 2921 | Clock: clock, |
| 2922 | }, |
| 2923 | LicenseOptions: &coderdenttest.LicenseOptions{ |
| 2924 | Features: license.Features{ |
| 2925 | codersdk.FeatureWorkspacePrebuilds: 1, |
| 2926 | }, |
| 2927 | }, |
| 2928 | }) |
| 2929 | |
| 2930 | // Given: a template and a template version with preset and a prebuilt workspace |
| 2931 | presetID := uuid.New() |
| 2932 | version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil) |
| 2933 | _ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) |
| 2934 | // Configure activity bump on the template |
| 2935 | activityBump := time.Hour |
| 2936 | template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) { |
| 2937 | ctr.ActivityBumpMillis = ptr.Ref[int64](activityBump.Milliseconds()) |
| 2938 | }) |
| 2939 | dbgen.Preset(t, db, database.InsertPresetParams{ |
| 2940 | ID: presetID, |
| 2941 | TemplateVersionID: version.ID, |
| 2942 | DesiredInstances: sql.NullInt32{Int32: 1, Valid: true}, |
| 2943 | }) |
| 2944 | // Given: a prebuild with an expired Deadline |
| 2945 | deadline := clock.Now().Add(-30 * time.Minute) |
| 2946 | wb := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ |
| 2947 | OwnerID: database.PrebuildsSystemUserID, |
| 2948 | TemplateID: template.ID, |
| 2949 | }).Seed(database.WorkspaceBuild{ |
| 2950 | TemplateVersionID: version.ID, |
| 2951 | TemplateVersionPresetID: uuid.NullUUID{ |
| 2952 | UUID: presetID, |
| 2953 | Valid: true, |
| 2954 | }, |
| 2955 | Deadline: deadline, |
| 2956 | }).WithAgent(func(agent []*proto.Agent) []*proto.Agent { |
| 2957 | return agent |
| 2958 | }).Do() |
| 2959 | |
| 2960 | // Mark the prebuilt workspace's agent as ready so the prebuild can be claimed |
| 2961 | // nolint:gocritic |
| 2962 | ctx := dbauthz.AsSystemRestricted(testutil.Context(t, testutil.WaitLong)) |
| 2963 | agent, err := db.GetAuthenticatedWorkspaceAgentAndBuildByAuthToken(ctx, uuid.MustParse(wb.AgentToken)) |
| 2964 | require.NoError(t, err) |
| 2965 | err = db.UpdateWorkspaceAgentLifecycleStateByID(ctx, database.UpdateWorkspaceAgentLifecycleStateByIDParams{ |
| 2966 | ID: agent.WorkspaceAgent.ID, |
| 2967 | LifecycleState: database.WorkspaceAgentLifecycleStateReady, |
nothing calls this directly
no test coverage detected