@@ -19,17 +19,18 @@ import (
1919)
2020
2121type RetryDeliveryMQSuite struct {
22- ctx context.Context
23- mqConfig * mqs.QueueConfig
24- retryMaxCount int
25- retryBackoff backoff.Backoff
26- publisher deliverymq.Publisher
27- eventGetter deliverymq.EventGetter
28- logPublisher deliverymq.LogPublisher
29- destGetter deliverymq.DestinationGetter
30- alertMonitor deliverymq.AlertMonitor
31- deliveryMQ * deliverymq.DeliveryMQ
32- teardown func ()
22+ ctx context.Context
23+ mqConfig * mqs.QueueConfig
24+ retryMaxCount int
25+ retryBackoff backoff.Backoff
26+ schedulerPollBackoff time.Duration
27+ publisher deliverymq.Publisher
28+ eventGetter deliverymq.EventGetter
29+ logPublisher deliverymq.LogPublisher
30+ destGetter deliverymq.DestinationGetter
31+ alertMonitor deliverymq.AlertMonitor
32+ deliveryMQ * deliverymq.DeliveryMQ
33+ teardown func ()
3334}
3435
3536func (s * RetryDeliveryMQSuite ) SetupTest (t * testing.T ) {
@@ -47,7 +48,12 @@ func (s *RetryDeliveryMQSuite) SetupTest(t *testing.T) {
4748 require .NoError (t , err )
4849
4950 // Setup retry scheduler
50- retryScheduler , err := deliverymq .NewRetryScheduler (s .deliveryMQ , testutil .CreateTestRedisConfig (t ), "" , 100 * time .Millisecond , testutil .CreateTestLogger (t ))
51+ // Use provided poll backoff or default to 100ms
52+ pollBackoff := s .schedulerPollBackoff
53+ if pollBackoff == 0 {
54+ pollBackoff = 100 * time .Millisecond
55+ }
56+ retryScheduler , err := deliverymq .NewRetryScheduler (s .deliveryMQ , testutil .CreateTestRedisConfig (t ), "" , pollBackoff , testutil .CreateTestLogger (t ))
5157 require .NoError (t , err )
5258 require .NoError (t , retryScheduler .Init (s .ctx ))
5359 go retryScheduler .Monitor (s .ctx )
@@ -130,15 +136,16 @@ func TestDeliveryMQRetry_EligibleForRetryFalse(t *testing.T) {
130136 eventGetter .registerEvent (& event )
131137
132138 suite := & RetryDeliveryMQSuite {
133- ctx : ctx ,
134- mqConfig : & mqs.QueueConfig {InMemory : & mqs.InMemoryConfig {Name : testutil .RandomString (5 )}},
135- publisher : publisher ,
136- eventGetter : eventGetter ,
137- logPublisher : newMockLogPublisher (nil ),
138- destGetter : & mockDestinationGetter {dest : & destination },
139- alertMonitor : newMockAlertMonitor (),
140- retryMaxCount : 10 ,
141- retryBackoff : & backoff.ConstantBackoff {Interval : 50 * time .Millisecond },
139+ ctx : ctx ,
140+ mqConfig : & mqs.QueueConfig {InMemory : & mqs.InMemoryConfig {Name : testutil .RandomString (5 )}},
141+ publisher : publisher ,
142+ eventGetter : eventGetter ,
143+ logPublisher : newMockLogPublisher (nil ),
144+ destGetter : & mockDestinationGetter {dest : & destination },
145+ alertMonitor : newMockAlertMonitor (),
146+ retryMaxCount : 10 ,
147+ retryBackoff : & backoff.ConstantBackoff {Interval : 50 * time .Millisecond },
148+ schedulerPollBackoff : 10 * time .Millisecond ,
142149 }
143150 suite .SetupTest (t )
144151 defer suite .TeardownTest (t )
@@ -192,15 +199,16 @@ func TestDeliveryMQRetry_EligibleForRetryTrue(t *testing.T) {
192199 eventGetter .registerEvent (& event )
193200
194201 suite := & RetryDeliveryMQSuite {
195- ctx : ctx ,
196- mqConfig : & mqs.QueueConfig {InMemory : & mqs.InMemoryConfig {Name : testutil .RandomString (5 )}},
197- publisher : publisher ,
198- eventGetter : eventGetter ,
199- logPublisher : newMockLogPublisher (nil ),
200- destGetter : & mockDestinationGetter {dest : & destination },
201- alertMonitor : newMockAlertMonitor (),
202- retryMaxCount : 10 ,
203- retryBackoff : & backoff.ConstantBackoff {Interval : 50 * time .Millisecond },
202+ ctx : ctx ,
203+ mqConfig : & mqs.QueueConfig {InMemory : & mqs.InMemoryConfig {Name : testutil .RandomString (5 )}},
204+ publisher : publisher ,
205+ eventGetter : eventGetter ,
206+ logPublisher : newMockLogPublisher (nil ),
207+ destGetter : & mockDestinationGetter {dest : & destination },
208+ alertMonitor : newMockAlertMonitor (),
209+ retryMaxCount : 10 ,
210+ retryBackoff : & backoff.ConstantBackoff {Interval : 50 * time .Millisecond },
211+ schedulerPollBackoff : 10 * time .Millisecond ,
204212 }
205213 suite .SetupTest (t )
206214 defer suite .TeardownTest (t )
@@ -212,10 +220,11 @@ func TestDeliveryMQRetry_EligibleForRetryTrue(t *testing.T) {
212220 }
213221 require .NoError (t , suite .deliveryMQ .Publish (ctx , deliveryEvent ))
214222
215- // Wait for all attempts to complete (3 attempts with 50ms backoff = ~150ms)
223+ // Wait for all attempts to complete
224+ // Note: 50ms backoff + 10ms poll interval = fast, deterministic retries
216225 require .Eventually (t , func () bool {
217226 return publisher .Current () >= 3
218- }, 3 * time .Second , 10 * time .Millisecond , "should complete 3 attempts (2 failures + 1 success)" )
227+ }, 5 * time .Second , 10 * time .Millisecond , "should complete 3 attempts (2 failures + 1 success)" )
219228
220229 assert .Equal (t , 3 , publisher .Current (), "should retry until success (2 failures + 1 success)" )
221230}
@@ -248,15 +257,16 @@ func TestDeliveryMQRetry_SystemError(t *testing.T) {
248257 eventGetter .registerEvent (& event )
249258
250259 suite := & RetryDeliveryMQSuite {
251- ctx : ctx ,
252- mqConfig : & mqs.QueueConfig {InMemory : & mqs.InMemoryConfig {Name : testutil .RandomString (5 )}},
253- publisher : newMockPublisher (nil ), // publisher won't be called due to early error
254- eventGetter : eventGetter ,
255- logPublisher : newMockLogPublisher (nil ),
256- destGetter : destGetter ,
257- alertMonitor : newMockAlertMonitor (),
258- retryMaxCount : 10 ,
259- retryBackoff : & backoff.ConstantBackoff {Interval : 50 * time .Millisecond },
260+ ctx : ctx ,
261+ mqConfig : & mqs.QueueConfig {InMemory : & mqs.InMemoryConfig {Name : testutil .RandomString (5 )}},
262+ publisher : newMockPublisher (nil ), // publisher won't be called due to early error
263+ eventGetter : eventGetter ,
264+ logPublisher : newMockLogPublisher (nil ),
265+ destGetter : destGetter ,
266+ alertMonitor : newMockAlertMonitor (),
267+ retryMaxCount : 10 ,
268+ retryBackoff : & backoff.ConstantBackoff {Interval : 50 * time .Millisecond },
269+ schedulerPollBackoff : 10 * time .Millisecond ,
260270 }
261271 suite .SetupTest (t )
262272 defer suite .TeardownTest (t )
@@ -317,15 +327,16 @@ func TestDeliveryMQRetry_RetryMaxCount(t *testing.T) {
317327 eventGetter .registerEvent (& event )
318328
319329 suite := & RetryDeliveryMQSuite {
320- ctx : ctx ,
321- mqConfig : & mqs.QueueConfig {InMemory : & mqs.InMemoryConfig {Name : testutil .RandomString (5 )}},
322- publisher : publisher ,
323- eventGetter : eventGetter ,
324- logPublisher : newMockLogPublisher (nil ),
325- destGetter : & mockDestinationGetter {dest : & destination },
326- alertMonitor : newMockAlertMonitor (),
327- retryMaxCount : 2 , // 1 initial + 2 retries = 3 total attempts
328- retryBackoff : & backoff.ConstantBackoff {Interval : 50 * time .Millisecond }, // Fast backoff for testing
330+ ctx : ctx ,
331+ mqConfig : & mqs.QueueConfig {InMemory : & mqs.InMemoryConfig {Name : testutil .RandomString (5 )}},
332+ publisher : publisher ,
333+ eventGetter : eventGetter ,
334+ logPublisher : newMockLogPublisher (nil ),
335+ destGetter : & mockDestinationGetter {dest : & destination },
336+ alertMonitor : newMockAlertMonitor (),
337+ retryMaxCount : 2 , // 1 initial + 2 retries = 3 total attempts
338+ retryBackoff : & backoff.ConstantBackoff {Interval : 50 * time .Millisecond },
339+ schedulerPollBackoff : 10 * time .Millisecond ,
329340 }
330341 suite .SetupTest (t )
331342 defer suite .TeardownTest (t )
@@ -338,10 +349,10 @@ func TestDeliveryMQRetry_RetryMaxCount(t *testing.T) {
338349 require .NoError (t , suite .deliveryMQ .Publish (ctx , deliveryEvent ))
339350
340351 // Poll until we get 3 attempts or timeout
341- // With 50ms backoff: initial + 50ms + retry + 50ms + retry = ~150ms minimum
352+ // With 50ms backoff + 10ms poll : initial + 60ms + retry + 60ms + retry = ~150ms minimum
342353 require .Eventually (t , func () bool {
343354 return publisher .Current () >= 3
344- }, 3 * time .Second , 10 * time .Millisecond , "should complete 3 attempts (1 initial + 2 retries)" )
355+ }, 5 * time .Second , 10 * time .Millisecond , "should complete 3 attempts (1 initial + 2 retries)" )
345356
346357 assert .Equal (t , 3 , publisher .Current (), "should stop after max retries (1 initial + 2 retries = 3 total attempts)" )
347358}
0 commit comments