mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
fix: fix TestWorkspaceAutobuild/InactiveTTLOK flake (#10965)
This commit is contained in:
@ -239,7 +239,7 @@ func TestWorkspaceAutobuild(t *testing.T) {
|
|||||||
require.Len(t, stats.Transitions, 0)
|
require.Len(t, stats.Transitions, 0)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("InactiveTTLOK", func(t *testing.T) {
|
t.Run("DormancyThresholdOK", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -274,8 +274,8 @@ func TestWorkspaceAutobuild(t *testing.T) {
|
|||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
|
|
||||||
ws := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
|
ws := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
|
||||||
build := coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
|
|
||||||
require.Equal(t, codersdk.WorkspaceStatusRunning, build.Status)
|
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
|
||||||
|
|
||||||
// Reset the audit log so we can verify a log is generated.
|
// Reset the audit log so we can verify a log is generated.
|
||||||
auditRecorder.ResetLogs()
|
auditRecorder.ResetLogs()
|
||||||
@ -287,29 +287,43 @@ func TestWorkspaceAutobuild(t *testing.T) {
|
|||||||
// failure TTL.
|
// failure TTL.
|
||||||
require.Len(t, stats.Transitions, 1)
|
require.Len(t, stats.Transitions, 1)
|
||||||
require.Equal(t, stats.Transitions[ws.ID], database.WorkspaceTransitionStop)
|
require.Equal(t, stats.Transitions[ws.ID], database.WorkspaceTransitionStop)
|
||||||
require.Len(t, auditRecorder.AuditLogs(), 1)
|
|
||||||
|
|
||||||
auditLog := auditRecorder.AuditLogs()[0]
|
ws = coderdtest.MustWorkspace(t, client, ws.ID)
|
||||||
require.Equal(t, auditLog.Action, database.AuditActionWrite)
|
require.NotNil(t, ws.DormantAt)
|
||||||
|
|
||||||
|
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
|
||||||
|
// We should get 2 audit logs, one for stopping the workspace, and one for
|
||||||
|
// making it dormant.
|
||||||
|
alogs := auditRecorder.AuditLogs()
|
||||||
|
require.Len(t, alogs, 2)
|
||||||
|
|
||||||
|
for _, alog := range alogs {
|
||||||
|
require.Equal(t, int32(http.StatusOK), alog.StatusCode)
|
||||||
|
|
||||||
|
switch alog.Action {
|
||||||
|
case database.AuditActionWrite:
|
||||||
|
require.Equal(t, database.ResourceTypeWorkspace, alog.ResourceType)
|
||||||
|
case database.AuditActionStop:
|
||||||
var fields audit.AdditionalFields
|
var fields audit.AdditionalFields
|
||||||
err := json.Unmarshal(auditLog.AdditionalFields, &fields)
|
err := json.Unmarshal(alog.AdditionalFields, &fields)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ws.Name, fields.WorkspaceName)
|
require.Equal(t, ws.Name, fields.WorkspaceName)
|
||||||
require.Equal(t, database.BuildReasonAutolock, fields.BuildReason)
|
require.Equal(t, database.BuildReasonAutolock, fields.BuildReason)
|
||||||
|
|
||||||
// The workspace should be dormant.
|
default:
|
||||||
ws = coderdtest.MustWorkspace(t, client, ws.ID)
|
t.Fatalf("unexpected audit log (%+v)", alog)
|
||||||
require.NotNil(t, ws.DormantAt)
|
}
|
||||||
lastUsedAt := ws.LastUsedAt
|
}
|
||||||
|
|
||||||
err = client.UpdateWorkspaceDormancy(ctx, ws.ID, codersdk.UpdateWorkspaceDormancy{Dormant: false})
|
dormantLastUsedAt := ws.LastUsedAt
|
||||||
|
// nolint:gocritic // this test is not testing RBAC.
|
||||||
|
err := client.UpdateWorkspaceDormancy(ctx, ws.ID, codersdk.UpdateWorkspaceDormancy{Dormant: false})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Assert that we updated our last_used_at so that we don't immediately
|
// Assert that we updated our last_used_at so that we don't immediately
|
||||||
// retrigger another lock action.
|
// retrigger another lock action.
|
||||||
ws = coderdtest.MustWorkspace(t, client, ws.ID)
|
ws = coderdtest.MustWorkspace(t, client, ws.ID)
|
||||||
require.True(t, ws.LastUsedAt.After(lastUsedAt))
|
require.True(t, ws.LastUsedAt.After(dormantLastUsedAt))
|
||||||
})
|
})
|
||||||
|
|
||||||
// This test serves as a regression prevention for generating
|
// This test serves as a regression prevention for generating
|
||||||
@ -390,7 +404,7 @@ func TestWorkspaceAutobuild(t *testing.T) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("InactiveTTLTooEarly", func(t *testing.T) {
|
t.Run("DormancyThresholdTooEarly", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -473,7 +487,7 @@ func TestWorkspaceAutobuild(t *testing.T) {
|
|||||||
|
|
||||||
// Assert that a stopped workspace that breaches the inactivity threshold
|
// Assert that a stopped workspace that breaches the inactivity threshold
|
||||||
// does not trigger a build transition but is still placed in the
|
// does not trigger a build transition but is still placed in the
|
||||||
// lock state.
|
// dormant state.
|
||||||
t.Run("InactiveStoppedWorkspaceNoTransition", func(t *testing.T) {
|
t.Run("InactiveStoppedWorkspaceNoTransition", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user