14
14
use PHPUnit \Framework \TestCase ;
15
15
use Psr \EventDispatcher \EventDispatcherInterface ;
16
16
use Psr \Log \LoggerInterface ;
17
+ use Symfony \Component \Clock \MockClock ;
17
18
use Symfony \Component \EventDispatcher \EventDispatcher ;
18
19
use Symfony \Component \HttpKernel \DependencyInjection \ServicesResetter ;
19
20
use Symfony \Component \Messenger \Envelope ;
@@ -88,7 +89,7 @@ public function dispatch(object $event): object
88
89
}
89
90
};
90
91
91
- $ worker = new Worker (['transport ' => $ receiver ], $ bus , $ dispatcher );
92
+ $ worker = new Worker (['transport ' => $ receiver ], $ bus , $ dispatcher, clock: new MockClock () );
92
93
$ worker ->run ();
93
94
94
95
$ this ->assertSame ($ apiMessage , $ envelopes [0 ]->getMessage ());
@@ -112,7 +113,7 @@ public function testHandlingErrorCausesReject()
112
113
$ dispatcher = new EventDispatcher ();
113
114
$ dispatcher ->addSubscriber (new StopWorkerOnMessageLimitListener (1 ));
114
115
115
- $ worker = new Worker (['transport1 ' => $ receiver ], $ bus , $ dispatcher );
116
+ $ worker = new Worker (['transport1 ' => $ receiver ], $ bus , $ dispatcher, clock: new MockClock () );
116
117
$ worker ->run ();
117
118
118
119
$ this ->assertSame (1 , $ receiver ->getRejectCount ());
@@ -127,7 +128,7 @@ public function testWorkerResetsConnectionIfReceiverIsResettable()
127
128
$ dispatcher ->addSubscriber (new ResetServicesListener (new ServicesResetter (new \ArrayIterator ([$ resettableReceiver ]), ['reset ' ])));
128
129
129
130
$ bus = $ this ->createMock (MessageBusInterface::class);
130
- $ worker = new Worker ([$ resettableReceiver ], $ bus , $ dispatcher );
131
+ $ worker = new Worker ([$ resettableReceiver ], $ bus , $ dispatcher, clock: new MockClock () );
131
132
$ worker ->stop ();
132
133
$ worker ->run ();
133
134
$ this ->assertTrue ($ resettableReceiver ->hasBeenReset ());
@@ -145,7 +146,7 @@ public function testWorkerResetsTransportsIfResetServicesListenerIsCalled()
145
146
});
146
147
147
148
$ bus = $ this ->createMock (MessageBusInterface::class);
148
- $ worker = new Worker ([$ resettableReceiver ], $ bus , $ dispatcher );
149
+ $ worker = new Worker ([$ resettableReceiver ], $ bus , $ dispatcher, clock: new MockClock () );
149
150
$ worker ->run ();
150
151
$ this ->assertTrue ($ resettableReceiver ->hasBeenReset ());
151
152
}
@@ -162,7 +163,7 @@ public function testWorkerDoesNotResetTransportsIfResetServicesListenerIsNotCall
162
163
$ event ->getWorker ()->stop ();
163
164
});
164
165
165
- $ worker = new Worker ([$ resettableReceiver ], $ bus , $ dispatcher );
166
+ $ worker = new Worker ([$ resettableReceiver ], $ bus , $ dispatcher, clock: new MockClock () );
166
167
$ worker ->run ();
167
168
$ this ->assertFalse ($ resettableReceiver ->hasBeenReset ());
168
169
}
@@ -181,7 +182,7 @@ public function testWorkerDoesNotSendNullMessagesToTheBus()
181
182
$ event ->getWorker ()->stop ();
182
183
});
183
184
184
- $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher );
185
+ $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher, clock: new MockClock () );
185
186
$ worker ->run ();
186
187
}
187
188
@@ -215,7 +216,7 @@ public function testWorkerDispatchesEventsOnSuccess()
215
216
return $ event ;
216
217
});
217
218
218
- $ worker = new Worker ([$ receiver ], $ bus , $ eventDispatcher );
219
+ $ worker = new Worker ([$ receiver ], $ bus , $ eventDispatcher, clock: new MockClock () );
219
220
$ worker ->run ();
220
221
}
221
222
@@ -225,7 +226,7 @@ public function testWorkerWithoutDispatcher()
225
226
$ receiver = new DummyReceiver ([[$ envelope ]]);
226
227
227
228
$ bus = $ this ->createMock (MessageBusInterface::class);
228
- $ worker = new Worker ([$ receiver ], $ bus );
229
+ $ worker = new Worker ([$ receiver ], $ bus, clock: new MockClock () );
229
230
230
231
$ bus ->expects ($ this ->once ())
231
232
->method ('dispatch ' )
@@ -269,7 +270,7 @@ public function testWorkerDispatchesEventsOnError()
269
270
return $ event ;
270
271
});
271
272
272
- $ worker = new Worker ([$ receiver ], $ bus , $ eventDispatcher );
273
+ $ worker = new Worker ([$ receiver ], $ bus , $ eventDispatcher, clock: new MockClock () );
273
274
$ worker ->run ();
274
275
}
275
276
@@ -286,7 +287,7 @@ public function testWorkerContainsMetadata()
286
287
$ event ->getWorker ()->stop ();
287
288
});
288
289
289
- $ worker = new Worker (['dummyReceiver ' => $ receiver ], $ bus , $ dispatcher );
290
+ $ worker = new Worker (['dummyReceiver ' => $ receiver ], $ bus , $ dispatcher, clock: new MockClock () );
290
291
$ worker ->run (['queues ' => ['queue1 ' , 'queue2 ' ]]);
291
292
292
293
$ workerMetadata = $ worker ->getMetadata ();
@@ -313,16 +314,10 @@ public function testTimeoutIsConfigurable()
313
314
$ dispatcher = new EventDispatcher ();
314
315
$ dispatcher ->addSubscriber (new StopWorkerOnMessageLimitListener (5 ));
315
316
316
- $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher );
317
- $ startTime = microtime (true );
318
- // sleep .1 after each idle
319
- $ worker ->run (['sleep ' => 100000 ]);
320
-
321
- $ duration = microtime (true ) - $ startTime ;
322
- // wait time should be .3 seconds
323
- // use .29 & .31 for timing "wiggle room"
324
- $ this ->assertGreaterThanOrEqual (.29 , $ duration );
325
- $ this ->assertLessThan (.31 , $ duration );
317
+ $ clock = new MockClock ('2023-03-19 14:00:00 ' );
318
+ $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher , clock: $ clock );
319
+ $ worker ->run (['sleep ' => 1000000 ]);
320
+ $ this ->assertEquals (new \DateTimeImmutable ('2023-03-19 14:00:03 ' ), $ clock ->now ());
326
321
}
327
322
328
323
public function testWorkerWithMultipleReceivers ()
@@ -368,7 +363,7 @@ public function testWorkerWithMultipleReceivers()
368
363
$ dispatcher ->addListener (WorkerMessageReceivedEvent::class, function (WorkerMessageReceivedEvent $ event ) use (&$ processedEnvelopes ) {
369
364
$ processedEnvelopes [] = $ event ->getEnvelope ();
370
365
});
371
- $ worker = new Worker ([$ receiver1 , $ receiver2 , $ receiver3 ], $ bus , $ dispatcher );
366
+ $ worker = new Worker ([$ receiver1 , $ receiver2 , $ receiver3 ], $ bus , $ dispatcher, clock: new MockClock () );
372
367
$ worker ->run ();
373
368
374
369
// make sure they were processed in the correct order
@@ -393,7 +388,7 @@ public function testWorkerLimitQueues()
393
388
$ dispatcher = new EventDispatcher ();
394
389
$ dispatcher ->addSubscriber (new StopWorkerOnMessageLimitListener (1 ));
395
390
396
- $ worker = new Worker (['transport ' => $ receiver ], $ bus , $ dispatcher );
391
+ $ worker = new Worker (['transport ' => $ receiver ], $ bus , $ dispatcher, clock: new MockClock () );
397
392
$ worker ->run (['queues ' => ['foo ' ]]);
398
393
}
399
394
@@ -404,7 +399,7 @@ public function testWorkerLimitQueuesUnsupported()
404
399
405
400
$ bus = $ this ->getMockBuilder (MessageBusInterface::class)->getMock ();
406
401
407
- $ worker = new Worker (['transport1 ' => $ receiver1 , 'transport2 ' => $ receiver2 ], $ bus );
402
+ $ worker = new Worker (['transport1 ' => $ receiver1 , 'transport2 ' => $ receiver2 ], $ bus, clock: new MockClock () );
408
403
$ this ->expectException (RuntimeException::class);
409
404
$ this ->expectExceptionMessage (sprintf ('Receiver for "transport2" does not implement "%s". ' , QueueReceiverInterface::class));
410
405
$ worker ->run (['queues ' => ['foo ' ]]);
@@ -429,7 +424,7 @@ public function testWorkerMessageReceivedEventMutability()
429
424
430
425
$ eventDispatcher ->addListener (WorkerMessageReceivedEvent::class, $ listener );
431
426
432
- $ worker = new Worker ([$ receiver ], $ bus , $ eventDispatcher );
427
+ $ worker = new Worker ([$ receiver ], $ bus , $ eventDispatcher, clock: new MockClock () );
433
428
$ worker ->run ();
434
429
435
430
$ envelope = current ($ receiver ->getAcknowledgedEnvelopes ());
@@ -464,7 +459,7 @@ public function testWorkerRateLimitMessages()
464
459
'interval ' => '1 minute ' ,
465
460
], new InMemoryStorage ());
466
461
467
- $ worker = new Worker (['bus ' => $ receiver ], $ bus , $ eventDispatcher , null , ['bus ' => $ rateLimitFactory ]);
462
+ $ worker = new Worker (['bus ' => $ receiver ], $ bus , $ eventDispatcher , null , ['bus ' => $ rateLimitFactory ], new MockClock () );
468
463
$ worker ->run ();
469
464
470
465
$ this ->assertCount (2 , $ receiver ->getAcknowledgedEnvelopes ());
@@ -476,7 +471,7 @@ public function testWorkerShouldLogOnStop()
476
471
$ bus = $ this ->createMock (MessageBusInterface::class);
477
472
$ logger = $ this ->createMock (LoggerInterface::class);
478
473
$ logger ->expects ($ this ->once ())->method ('info ' )->with ('Stopping worker. ' );
479
- $ worker = new Worker ([], $ bus , new EventDispatcher (), $ logger );
474
+ $ worker = new Worker ([], $ bus , new EventDispatcher (), $ logger, clock: new MockClock () );
480
475
481
476
$ worker ->stop ();
482
477
}
@@ -512,7 +507,7 @@ public function testBatchProcessing()
512
507
}
513
508
});
514
509
515
- $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher );
510
+ $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher, clock: new MockClock () );
516
511
$ worker ->run ();
517
512
518
513
$ this ->assertSame ($ expectedMessages , $ handler ->processedMessages );
@@ -548,7 +543,7 @@ public function testFlushBatchOnIdle()
548
543
}
549
544
});
550
545
551
- $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher );
546
+ $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher, clock: new MockClock () );
552
547
$ worker ->run ();
553
548
554
549
$ this ->assertSame ($ expectedMessages , $ handler ->processedMessages );
@@ -578,7 +573,7 @@ public function testFlushBatchOnStop()
578
573
$ this ->assertSame (0 , $ receiver ->getAcknowledgeCount ());
579
574
});
580
575
581
- $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher );
576
+ $ worker = new Worker ([$ receiver ], $ bus , $ dispatcher, clock: new MockClock () );
582
577
$ worker ->run ();
583
578
584
579
$ this ->assertSame ($ expectedMessages , $ handler ->processedMessages );
0 commit comments