diff options
author | Nick Thomas <nick@gitlab.com> | 2020-05-13 11:16:32 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2020-05-13 11:16:32 +0000 |
commit | a38da6c11864f98950f7145ab5707bd461d16e39 (patch) | |
tree | 6bc24337a20a9e05fe39f5d5c979c1bc2024b925 | |
parent | beb8bd54b7de608061592d4145c04b613bc94457 (diff) | |
parent | 0372634076cdfd7cda740cd040e16e629ea662e4 (diff) | |
download | gitlab-shell-a38da6c11864f98950f7145ab5707bd461d16e39.tar.gz |
Merge branch 'sh-fix-logrus-race' into 'master'
Fix race conditions with logrus testing
Closes #450
See merge request gitlab-org/gitlab-shell!385
-rw-r--r-- | client/client_test.go | 6 | ||||
-rw-r--r-- | internal/command/receivepack/gitalycall_test.go | 1 | ||||
-rw-r--r-- | internal/command/uploadarchive/gitalycall_test.go | 2 | ||||
-rw-r--r-- | internal/testhelper/testhelper.go | 16 |
4 files changed, 25 insertions, 0 deletions
diff --git a/client/client_test.go b/client/client_test.go index 5e852dc..5c5fda8 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -123,6 +123,7 @@ func testSuccessfulGet(t *testing.T, client *GitlabNetClient) { assert.NoError(t, err) assert.Equal(t, string(responseBody), "Hello") + require.True(t, testhelper.WaitForLogEvent(hook)) entries := hook.AllEntries() assert.Equal(t, 1, len(entries)) assert.Equal(t, logrus.InfoLevel, entries[0].Level) @@ -147,6 +148,7 @@ func testSuccessfulPost(t *testing.T, client *GitlabNetClient) { assert.NoError(t, err) assert.Equal(t, "Echo: {\"key\":\"value\"}", string(responseBody)) + require.True(t, testhelper.WaitForLogEvent(hook)) entries := hook.AllEntries() assert.Equal(t, 1, len(entries)) assert.Equal(t, logrus.InfoLevel, entries[0].Level) @@ -163,6 +165,7 @@ func testMissing(t *testing.T, client *GitlabNetClient) { assert.EqualError(t, err, "Internal API error (404)") assert.Nil(t, response) + require.True(t, testhelper.WaitForLogEvent(hook)) entries := hook.AllEntries() assert.Equal(t, 1, len(entries)) assert.Equal(t, logrus.InfoLevel, entries[0].Level) @@ -177,6 +180,7 @@ func testMissing(t *testing.T, client *GitlabNetClient) { assert.EqualError(t, err, "Internal API error (404)") assert.Nil(t, response) + require.True(t, testhelper.WaitForLogEvent(hook)) entries := hook.AllEntries() assert.Equal(t, 1, len(entries)) assert.Equal(t, logrus.InfoLevel, entries[0].Level) @@ -208,6 +212,7 @@ func testBrokenRequest(t *testing.T, client *GitlabNetClient) { assert.EqualError(t, err, "Internal API unreachable") assert.Nil(t, response) + require.True(t, testhelper.WaitForLogEvent(hook)) entries := hook.AllEntries() assert.Equal(t, 1, len(entries)) assert.Equal(t, logrus.InfoLevel, entries[0].Level) @@ -223,6 +228,7 @@ func testBrokenRequest(t *testing.T, client *GitlabNetClient) { assert.EqualError(t, err, "Internal API unreachable") assert.Nil(t, response) + require.True(t, testhelper.WaitForLogEvent(hook)) entries := hook.AllEntries() assert.Equal(t, 1, len(entries)) assert.Equal(t, logrus.InfoLevel, entries[0].Level) diff --git a/internal/command/receivepack/gitalycall_test.go b/internal/command/receivepack/gitalycall_test.go index fd062b2..0cfbf5c 100644 --- a/internal/command/receivepack/gitalycall_test.go +++ b/internal/command/receivepack/gitalycall_test.go @@ -43,6 +43,7 @@ func TestReceivePack(t *testing.T) { require.Equal(t, "ReceivePack: "+userId+" "+repo, output.String()) + require.True(t, testhelper.WaitForLogEvent(hook)) entries := hook.AllEntries() require.Equal(t, 2, len(entries)) require.Equal(t, logrus.InfoLevel, entries[1].Level) diff --git a/internal/command/uploadarchive/gitalycall_test.go b/internal/command/uploadarchive/gitalycall_test.go index 8b60e11..488c390 100644 --- a/internal/command/uploadarchive/gitalycall_test.go +++ b/internal/command/uploadarchive/gitalycall_test.go @@ -42,6 +42,8 @@ func TestUploadPack(t *testing.T) { require.NoError(t, err) require.Equal(t, "UploadArchive: "+repo, output.String()) + + require.True(t, testhelper.WaitForLogEvent(hook)) entries := hook.AllEntries() require.Equal(t, 2, len(entries)) require.Equal(t, logrus.InfoLevel, entries[1].Level) diff --git a/internal/testhelper/testhelper.go b/internal/testhelper/testhelper.go index da781ce..5e98c1c 100644 --- a/internal/testhelper/testhelper.go +++ b/internal/testhelper/testhelper.go @@ -6,6 +6,7 @@ import ( "os" "path" "runtime" + "time" "github.com/otiai10/copy" "github.com/sirupsen/logrus" @@ -100,3 +101,18 @@ func SetupLogger() *test.Hook { return hook } + +// logrus fires a Goroutine to write the output log, but there's no way to +// flush all outstanding hooks to fire. We just wait up to a second +// for an event to appear. +func WaitForLogEvent(hook *test.Hook) bool { + for i := 0; i < 10; i++ { + if entry := hook.LastEntry(); entry != nil { + return true + } + + time.Sleep(100*time.Millisecond) + } + + return false +} |