From 262809ed8109aaae8fcb4eada3d5f55c4435eb09 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Fri, 29 Sep 2023 12:35:04 +0200 Subject: [PATCH 1/2] fix: flaky TestCreateValidateRichParameters/ValidateString --- cli/create_test.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cli/create_test.go b/cli/create_test.go index bdd229775ec68..7ad774edcc7cb 100644 --- a/cli/create_test.go +++ b/cli/create_test.go @@ -446,7 +446,9 @@ func TestCreateValidateRichParameters(t *testing.T) { match := matches[i] value := matches[i+1] pty.ExpectMatch(match) - pty.WriteLine(value) + if value != "" { + pty.WriteLine(value) + } } <-doneChan }) @@ -481,7 +483,6 @@ func TestCreateValidateRichParameters(t *testing.T) { match := matches[i] value := matches[i+1] pty.ExpectMatch(match) - if value != "" { pty.WriteLine(value) } @@ -519,7 +520,9 @@ func TestCreateValidateRichParameters(t *testing.T) { match := matches[i] value := matches[i+1] pty.ExpectMatch(match) - pty.WriteLine(value) + if value != "" { + pty.WriteLine(value) + } } <-doneChan }) From 5ff1c96d91b3c5a1476d2bece652e9add227bb3e Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Fri, 29 Sep 2023 14:51:30 +0200 Subject: [PATCH 2/2] test: fix flaky verifyAuditWorkspaceCreated/Create --- coderd/workspaces_test.go | 41 +++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index f629ad773aa32..171ebb2a0dfd7 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -473,7 +473,7 @@ func TestPostWorkspacesByOrganization(t *testing.T) { require.Equal(t, http.StatusConflict, apiErr.StatusCode()) }) - t.Run("Create", func(t *testing.T) { + t.Run("CreateWithAuditLogs", func(t *testing.T) { t.Parallel() auditor := audit.NewMock() client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true, Auditor: auditor}) @@ -483,16 +483,10 @@ func TestPostWorkspacesByOrganization(t *testing.T) { coderdtest.AwaitTemplateVersionJob(t, client, version.ID) workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID) coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) - - require.Eventually(t, func() bool { - if len(auditor.AuditLogs()) < 6 { - return false - } - return auditor.AuditLogs()[4].Action == database.AuditActionCreate - }, testutil.WaitMedium, testutil.IntervalFast) + verifyAuditWorkspaceCreated(t, auditor, workspace.Name) }) - t.Run("CreateFromVersion", func(t *testing.T) { + t.Run("CreateFromVersionWithAuditLogs", func(t *testing.T) { t.Parallel() auditor := audit.NewMock() client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true, Auditor: auditor}) @@ -513,12 +507,7 @@ func TestPostWorkspacesByOrganization(t *testing.T) { require.Equal(t, testWorkspaceBuild.TemplateVersionID, versionTest.ID) require.Equal(t, defaultWorkspaceBuild.TemplateVersionID, versionDefault.ID) - require.Eventually(t, func() bool { - if len(auditor.AuditLogs()) < 6 { - return false - } - return auditor.AuditLogs()[4].Action == database.AuditActionCreate - }, testutil.WaitMedium, testutil.IntervalFast) + verifyAuditWorkspaceCreated(t, auditor, defaultWorkspace.Name) }) t.Run("InvalidCombinationOfTemplateAndTemplateVersion", func(t *testing.T) { @@ -2919,3 +2908,25 @@ func TestWorkspaceDormant(t *testing.T) { coderdtest.MustTransitionWorkspace(t, client, workspace.ID, database.WorkspaceTransitionStop, database.WorkspaceTransitionStart) }) } + +func verifyAuditWorkspaceCreated(t *testing.T, auditor *audit.MockAuditor, workspaceName string) { + var auditLogs []database.AuditLog + ok := assert.Eventually(t, func() bool { + auditLogs = auditor.AuditLogs() + + for _, auditLog := range auditLogs { + if auditLog.Action == database.AuditActionCreate && + auditLog.ResourceType == database.ResourceTypeWorkspace && + auditLog.ResourceTarget == workspaceName { + return true + } + } + return false + }, testutil.WaitMedium, testutil.IntervalFast) + + if !ok { + for i, auditLog := range auditLogs { + t.Logf("%d. Audit: ID=%s action=%s resourceID=%s resourceType=%s resourceTarget=%s", i+1, auditLog.ID, auditLog.Action, auditLog.ResourceID, auditLog.ResourceType, auditLog.ResourceTarget) + } + } +}