diff --git a/Tests/Transport/RedisExt/ConnectionTest.php b/Tests/Transport/RedisExt/ConnectionTest.php index 0be034dd..e278cfb0 100644 --- a/Tests/Transport/RedisExt/ConnectionTest.php +++ b/Tests/Transport/RedisExt/ConnectionTest.php @@ -62,6 +62,14 @@ public function testFromDsnWithOptions() ); } + public function testFromDsnWithOptionsAndTrailingSlash() + { + $this->assertEquals( + Connection::fromDsn('redis://localhost/', ['stream' => 'queue', 'group' => 'group1', 'consumer' => 'consumer1', 'auto_setup' => false, 'serializer' => 2]), + Connection::fromDsn('redis://localhost/queue/group1/consumer1?serializer=2&auto_setup=0') + ); + } + public function testFromDsnWithQueryOptions() { $this->assertEquals( diff --git a/Tests/Transport/Serialization/PhpSerializerTest.php b/Tests/Transport/Serialization/PhpSerializerTest.php index 6439873f..5076577b 100644 --- a/Tests/Transport/Serialization/PhpSerializerTest.php +++ b/Tests/Transport/Serialization/PhpSerializerTest.php @@ -44,7 +44,7 @@ public function testDecodingFailsWithMissingBodyKey() public function testDecodingFailsWithBadFormat() { $this->expectException(MessageDecodingFailedException::class); - $this->expectExceptionMessageRegExp('/Could not decode/'); + $this->expectExceptionMessageMatches('/Could not decode/'); $serializer = new PhpSerializer(); @@ -56,7 +56,7 @@ public function testDecodingFailsWithBadFormat() public function testDecodingFailsWithBadClass() { $this->expectException(MessageDecodingFailedException::class); - $this->expectExceptionMessageRegExp('/class "ReceivedSt0mp" not found/'); + $this->expectExceptionMessageMatches('/class "ReceivedSt0mp" not found/'); $serializer = new PhpSerializer(); diff --git a/Transport/RedisExt/Connection.php b/Transport/RedisExt/Connection.php index 856c5f73..bb818512 100644 --- a/Transport/RedisExt/Connection.php +++ b/Transport/RedisExt/Connection.php @@ -63,6 +63,12 @@ public function __construct(array $configuration, array $connectionCredentials = throw new InvalidArgumentException('Redis connection failed: '.$redis->getLastError()); } + foreach (['stream', 'group', 'consumer'] as $key) { + if (isset($configuration[$key]) && '' === $configuration[$key]) { + throw new InvalidArgumentException(sprintf('"%s" should be configured, got an empty string.', $key)); + } + } + $this->stream = $configuration['stream'] ?? self::DEFAULT_OPTIONS['stream']; $this->group = $configuration['group'] ?? self::DEFAULT_OPTIONS['group']; $this->consumer = $configuration['consumer'] ?? self::DEFAULT_OPTIONS['consumer']; @@ -77,7 +83,7 @@ public static function fromDsn(string $dsn, array $redisOptions = [], \Redis $re throw new InvalidArgumentException(sprintf('The given Redis DSN "%s" is invalid.', $dsn)); } - $pathParts = explode('/', $parsedUrl['path'] ?? ''); + $pathParts = explode('/', rtrim($parsedUrl['path'] ?? '', '/')); $stream = $pathParts[1] ?? $redisOptions['stream'] ?? null; $group = $pathParts[2] ?? $redisOptions['group'] ?? null;