fix: fix TestWorkspaceAutobuild/InactiveTTLOK flake (#10965)

This commit is contained in:
Jon Ayers
2023-11-30 18:29:41 -06:00
committed by GitHub
parent d016f93de8
commit 12a4b114de

View File

@ -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()