From f9b32609fceaefbefb7d1b5297dbab9850d6de43 Mon Sep 17 00:00:00 2001 From: Michael Sheakoski Date: Sat, 3 Mar 2018 17:03:17 -0500 Subject: [PATCH] Convert between Message::$expire and DbalMessage::$timeToLive Fixes a condition which results in the "enqueue" table having a null value for "time_to_live" even though it was set on the Message object prior to sending the event/command. --- pkg/dbal/Client/DbalDriver.php | 3 +++ pkg/dbal/Tests/Client/DbalDriverTest.php | 24 ++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkg/dbal/Client/DbalDriver.php b/pkg/dbal/Client/DbalDriver.php index d5fd9a5a2..2f98b2978 100644 --- a/pkg/dbal/Client/DbalDriver.php +++ b/pkg/dbal/Client/DbalDriver.php @@ -72,6 +72,7 @@ public function createTransportMessage(Message $message) $transportMessage->setMessageId($message->getMessageId()); $transportMessage->setTimestamp($message->getTimestamp()); $transportMessage->setDeliveryDelay($message->getDelay()); + $transportMessage->setTimeToLive($message->getExpire()); $transportMessage->setReplyTo($message->getReplyTo()); $transportMessage->setCorrelationId($message->getCorrelationId()); if (array_key_exists($message->getPriority(), self::$priorityMap)) { @@ -97,6 +98,8 @@ public function createClientMessage(PsrMessage $message) $clientMessage->setContentType($message->getHeader('content_type')); $clientMessage->setMessageId($message->getMessageId()); $clientMessage->setTimestamp($message->getTimestamp()); + $timeToLive = $message->getTimeToLive(); + $clientMessage->setExpire((null === $timeToLive) ? null : (int) round($timeToLive)); $clientMessage->setDelay($message->getDeliveryDelay()); $clientMessage->setReplyTo($message->getReplyTo()); $clientMessage->setCorrelationId($message->getCorrelationId()); diff --git a/pkg/dbal/Tests/Client/DbalDriverTest.php b/pkg/dbal/Tests/Client/DbalDriverTest.php index 6c8de2016..dbdcaa2d8 100644 --- a/pkg/dbal/Tests/Client/DbalDriverTest.php +++ b/pkg/dbal/Tests/Client/DbalDriverTest.php @@ -94,6 +94,7 @@ public function testShouldConvertTransportMessageToClientMessage() $transportMessage->setTimestamp(1000); $transportMessage->setPriority(2); $transportMessage->setDeliveryDelay(12345); + $transportMessage->setTimeToLive(67890); $driver = new DbalDriver( $this->createPsrContextMock(), @@ -118,11 +119,29 @@ public function testShouldConvertTransportMessageToClientMessage() $this->assertSame('ContentType', $clientMessage->getContentType()); $this->assertSame(1000, $clientMessage->getTimestamp()); $this->assertSame(12345, $clientMessage->getDelay()); - - $this->assertNull($clientMessage->getExpire()); + $this->assertSame(67890, $clientMessage->getExpire()); $this->assertSame(MessagePriority::NORMAL, $clientMessage->getPriority()); } + public function testShouldRoundTransportMessageTimeToLiveToNearestIntegerWhenConvertingToClientMessage() + { + $driver = new DbalDriver( + $this->createPsrContextMock(), + $this->createDummyConfig(), + $this->createDummyQueueMetaRegistry() + ); + + $transportMessage = new DbalMessage(); + + $transportMessage->setTimeToLive(1.4); + $clientMessage = $driver->createClientMessage($transportMessage); + $this->assertSame(1, $clientMessage->getExpire()); + + $transportMessage->setTimeToLive(1.5); + $clientMessage = $driver->createClientMessage($transportMessage); + $this->assertSame(2, $clientMessage->getExpire()); + } + public function testShouldConvertClientMessageToTransportMessage() { $clientMessage = new Message(); @@ -163,6 +182,7 @@ public function testShouldConvertClientMessageToTransportMessage() $this->assertSame([ 'key' => 'val', ], $transportMessage->getProperties()); + $this->assertSame(123, $transportMessage->getTimeToLive()); $this->assertSame('MessageId', $transportMessage->getMessageId()); $this->assertSame(1000, $transportMessage->getTimestamp()); }