From 1fb7b6e80a94f6267bd1248ac25d6d022deb60d3 Mon Sep 17 00:00:00 2001 From: Neil Twigg Date: Fri, 7 Feb 2025 17:11:29 +0000 Subject: [PATCH] De-flake `TestJetStreamClusterAPILimitAdvisory` This should hopefully de-flake this test by ensuring we send enough requests that we can't possibly interleave with a listening worker. Signed-off-by: Neil Twigg --- server/jetstream_cluster_4_test.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/server/jetstream_cluster_4_test.go b/server/jetstream_cluster_4_test.go index 22e859b4864..5c5f8de5008 100644 --- a/server/jetstream_cluster_4_test.go +++ b/server/jetstream_cluster_4_test.go @@ -3900,21 +3900,24 @@ func TestJetStreamClusterAPILimitAdvisory(t *testing.T) { sub, err := snc.SubscribeSync(JSAdvisoryAPILimitReached) require_NoError(t, err) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) - defer cancel() - - require_NoError(t, nc.PublishMsg(&nats.Msg{ - Subject: fmt.Sprintf(JSApiConsumerListT, "TEST"), - Reply: nc.NewInbox(), - })) + // There's a very slim chance that a worker could pick up a request between + // pushing to and draining the queue, so make sure we've sent enough of them + // to reliably trigger a drain and advisory. + inbox := nc.NewRespInbox() + for i := 0; i < runtime.GOMAXPROCS(-1)*2; i++ { + require_NoError(t, nc.PublishMsg(&nats.Msg{ + Subject: fmt.Sprintf(JSApiConsumerListT, "TEST"), + Reply: inbox, + })) + } // Wait for the advisory to come in. - msg, err := sub.NextMsgWithContext(ctx) + msg, err := sub.NextMsg(time.Second * 5) require_NoError(t, err) var advisory JSAPILimitReachedAdvisory require_NoError(t, json.Unmarshal(msg.Data, &advisory)) - require_Equal(t, advisory.Domain, _EMPTY_) // No JetStream domain was set. - require_Equal(t, advisory.Dropped, queueLimit) // Configured queue limit. + require_Equal(t, advisory.Domain, _EMPTY_) // No JetStream domain was set. + require_True(t, advisory.Dropped >= 1) // We dropped at least something. } func TestJetStreamClusterPendingRequestsInJsz(t *testing.T) {