summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2020-05-13 11:16:32 +0000
committerNick Thomas <nick@gitlab.com>2020-05-13 11:16:32 +0000
commita38da6c11864f98950f7145ab5707bd461d16e39 (patch)
tree6bc24337a20a9e05fe39f5d5c979c1bc2024b925
parentbeb8bd54b7de608061592d4145c04b613bc94457 (diff)
parent0372634076cdfd7cda740cd040e16e629ea662e4 (diff)
downloadgitlab-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.go6
-rw-r--r--internal/command/receivepack/gitalycall_test.go1
-rw-r--r--internal/command/uploadarchive/gitalycall_test.go2
-rw-r--r--internal/testhelper/testhelper.go16
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
+}