diff --git a/server/datastore/redis/redis_external_test.go b/server/datastore/redis/redis_external_test.go index ce9649d7c6..a2535cf59f 100644 --- a/server/datastore/redis/redis_external_test.go +++ b/server/datastore/redis/redis_external_test.go @@ -168,20 +168,37 @@ func TestPublishHasListeners(t *testing.T) { psc := redigo.PubSubConn{Conn: sconn} require.NoError(t, psc.Subscribe(prefix+"a")) + start := time.Now() + var loopOk bool + loop1: + for time.Since(start) < 2*time.Second { + msg := psc.Receive() + switch msg := msg.(type) { + case redigo.Subscription: + require.Equal(t, msg.Count, 1) + loopOk = true + break loop1 + } + } + require.True(t, loopOk, "timed out") + ok, err = redis.PublishHasListeners(pool, pconn, prefix+"a", "B") require.NoError(t, err) require.True(t, ok) - start := time.Now() - loop: + start = time.Now() + loopOk = false + loop2: for time.Since(start) < 2*time.Second { msg := psc.Receive() switch msg := msg.(type) { case redigo.Message: require.Equal(t, "B", string(msg.Data)) - break loop + loopOk = true + break loop2 } } + require.True(t, loopOk, "timed out") }) t.Run("cluster", func(t *testing.T) { @@ -213,6 +230,7 @@ func TestPublishHasListeners(t *testing.T) { start := time.Now() want := "B" + var loopOk bool loop: for time.Since(start) < 2*time.Second { msg := psc.Receive() @@ -220,11 +238,13 @@ func TestPublishHasListeners(t *testing.T) { case redigo.Message: require.Equal(t, want, string(msg.Data)) if want == "C" { + loopOk = true break loop } want = "C" } } + require.True(t, loopOk, "timed out") }) }