MCPcopy Index your code
hub / github.com/coder/coder / TestWorkspaceExtend

Function TestWorkspaceExtend

coderd/workspaces_test.go:3687–3752  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

3685}
3686
3687func TestWorkspaceExtend(t *testing.T) {
3688 t.Parallel()
3689 var (
3690 ttl = 8 * time.Hour
3691 newDeadline = time.Now().Add(ttl + time.Hour).UTC()
3692 client = coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
3693 user = coderdtest.CreateFirstUser(t, client)
3694 version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
3695 _ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
3696 template = coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
3697 workspace = coderdtest.CreateWorkspace(t, client, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
3698 cwr.TTLMillis = ptr.Ref(ttl.Milliseconds())
3699 })
3700 _ = coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
3701 )
3702
3703 ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
3704 defer cancel()
3705
3706 workspace, err := client.Workspace(ctx, workspace.ID)
3707 require.NoError(t, err, "fetch provisioned workspace")
3708 oldDeadline := workspace.LatestBuild.Deadline.Time
3709
3710 // Updating the deadline should succeed
3711 req := codersdk.PutExtendWorkspaceRequest{
3712 Deadline: newDeadline,
3713 }
3714 err = client.PutExtendWorkspace(ctx, workspace.ID, req)
3715 require.NoError(t, err, "failed to extend workspace")
3716
3717 // Ensure deadline set correctly
3718 updated, err := client.Workspace(ctx, workspace.ID)
3719 require.NoError(t, err, "failed to fetch updated workspace")
3720 require.WithinDuration(t, newDeadline, updated.LatestBuild.Deadline.Time, time.Minute)
3721
3722 // Zero time should fail
3723 err = client.PutExtendWorkspace(ctx, workspace.ID, codersdk.PutExtendWorkspaceRequest{
3724 Deadline: time.Time{},
3725 })
3726 require.ErrorContains(t, err, "deadline: Validation failed for tag \"required\" with value: \"0001-01-01 00:00:00 +0000 UTC\"", "setting an empty deadline on a workspace should fail")
3727
3728 // Updating with a deadline less than 30 minutes in the future should fail
3729 deadlineTooSoon := time.Now().Add(15 * time.Minute) // XXX: time.Now
3730 err = client.PutExtendWorkspace(ctx, workspace.ID, codersdk.PutExtendWorkspaceRequest{
3731 Deadline: deadlineTooSoon,
3732 })
3733 require.ErrorContains(t, err, "unexpected status code 400: Cannot extend workspace: new deadline must be at least 30 minutes in the future", "setting a deadline less than 30 minutes in the future should fail")
3734
3735 // Updating with a deadline 30 minutes in the future should succeed
3736 deadlineJustSoonEnough := time.Now().Add(30 * time.Minute)
3737 err = client.PutExtendWorkspace(ctx, workspace.ID, codersdk.PutExtendWorkspaceRequest{
3738 Deadline: deadlineJustSoonEnough,
3739 })
3740 require.NoError(t, err, "setting a deadline at least 30 minutes in the future should succeed")
3741
3742 // Updating with a deadline an hour before the previous deadline should succeed
3743 err = client.PutExtendWorkspace(ctx, workspace.ID, codersdk.PutExtendWorkspaceRequest{
3744 Deadline: oldDeadline.Add(-time.Hour),

Callers

nothing calls this directly

Calls 11

NewFunction · 0.92
CreateFirstUserFunction · 0.92
CreateTemplateVersionFunction · 0.92
CreateTemplateFunction · 0.92
CreateWorkspaceFunction · 0.92
RefFunction · 0.92
WorkspaceMethod · 0.80
PutExtendWorkspaceMethod · 0.80
AddMethod · 0.65

Tested by

no test coverage detected