|
14 | 14 | use PHPUnit\Framework\TestCase; |
15 | 15 | use Symfony\Component\Messenger\Bridge\Redis\Tests\Fixtures\DummyMessage; |
16 | 16 | use Symfony\Component\Messenger\Bridge\Redis\Transport\Connection; |
| 17 | +use Symfony\Component\Messenger\Bridge\Redis\Transport\RedisReceiver; |
| 18 | +use Symfony\Component\Messenger\Envelope; |
17 | 19 | use Symfony\Component\Messenger\Exception\TransportException; |
| 20 | +use Symfony\Component\Messenger\Transport\Serialization\Serializer; |
18 | 21 |
|
19 | 22 | /** |
20 | 23 | * @requires extension redis |
| 24 | + * |
21 | 25 | * @group time-sensitive |
22 | 26 | * @group integration |
23 | 27 | */ |
@@ -318,6 +322,30 @@ public function testGetAfterReject() |
318 | 322 | $redis->del('messenger-rejectthenget'); |
319 | 323 | } |
320 | 324 |
|
| 325 | + public function testItProperlyHandlesEmptyMessages() |
| 326 | + { |
| 327 | + $redisReceiver = new RedisReceiver($this->connection, new Serializer()); |
| 328 | + |
| 329 | + $this->connection->add('{"message": "Hi1"}', ['type' => DummyMessage::class]); |
| 330 | + $this->connection->add('{"message": "Hi2"}', ['type' => DummyMessage::class]); |
| 331 | + |
| 332 | + $redisReceiver->get(); |
| 333 | + $this->redis->xtrim('messages', 1); |
| 334 | + |
| 335 | + // The consumer died during handling a message while performing xtrim in parallel process |
| 336 | + $this->redis = new \Redis(); |
| 337 | + $this->connection = Connection::fromDsn(getenv('MESSENGER_REDIS_DSN'), ['delete_after_ack' => true], $this->redis); |
| 338 | + $redisReceiver = new RedisReceiver($this->connection, new Serializer()); |
| 339 | + |
| 340 | + /** @var Envelope[] $envelope */ |
| 341 | + $envelope = $redisReceiver->get(); |
| 342 | + $this->assertCount(1, $envelope); |
| 343 | + |
| 344 | + $message = $envelope[0]->getMessage(); |
| 345 | + $this->assertInstanceOf(DummyMessage::class, $message); |
| 346 | + $this->assertEquals('Hi2', $message->getMessage()); |
| 347 | + } |
| 348 | + |
321 | 349 | private function getConnectionGroup(Connection $connection): string |
322 | 350 | { |
323 | 351 | $property = (new \ReflectionClass(Connection::class))->getProperty('group'); |
|
0 commit comments