Merge branch '5.0' into 5.1

* 5.0:
  Connect to RedisCluster with password auth
  Fix PHPUnit 8.5 deprecations.
  Fix EmailHeaderSame to make use of decoded value
  Allow same middleware to be used multiple times with different arguments
This commit is contained in:
Nicolas Grekas 2020-07-23 12:04:31 +02:00
commit 62dbb9a39a
5 changed files with 38 additions and 11 deletions

View File

@ -228,7 +228,7 @@ trait RedisTrait
}
try {
$redis = new $class(null, $hosts, $params['timeout'], $params['read_timeout'], (bool) $params['persistent']);
$redis = new $class(null, $hosts, $params['timeout'], $params['read_timeout'], (bool) $params['persistent'], $params['auth'] ?? '');
} catch (\RedisClusterException $e) {
throw new InvalidArgumentException(sprintf('Redis connection "%s" failed: ', $dsn).$e->getMessage());
}

View File

@ -127,7 +127,7 @@ class SessionHandlerProxyTest extends TestCase
*/
public function testValidateId()
{
$mock = $this->getMockBuilder(['SessionHandlerInterface', 'SessionUpdateTimestampHandlerInterface'])->getMock();
$mock = $this->getMockBuilder(TestSessionHandler::class)->getMock();
$mock->expects($this->once())
->method('validateId');
@ -142,7 +142,7 @@ class SessionHandlerProxyTest extends TestCase
*/
public function testUpdateTimestamp()
{
$mock = $this->getMockBuilder(['SessionHandlerInterface', 'SessionUpdateTimestampHandlerInterface'])->getMock();
$mock = $this->getMockBuilder(TestSessionHandler::class)->getMock();
$mock->expects($this->once())
->method('updateTimestamp')
->willReturn(false);
@ -156,3 +156,7 @@ class SessionHandlerProxyTest extends TestCase
$this->proxy->updateTimestamp('id', 'data');
}
}
abstract class TestSessionHandler implements \SessionHandlerInterface, \SessionUpdateTimestampHandlerInterface
{
}

View File

@ -339,7 +339,7 @@ class MessengerPass implements CompilerPassInterface
if ($container->findDefinition($messengerMiddlewareId)->isAbstract()) {
$childDefinition = new ChildDefinition($messengerMiddlewareId);
$childDefinition->setArguments($arguments);
$container->setDefinition($messengerMiddlewareId = $busId.'.middleware.'.$id, $childDefinition);
$container->setDefinition($messengerMiddlewareId = $busId.'.middleware.'.$id.'.'.ContainerBuilder::hash($arguments), $childDefinition);
} elseif ($arguments) {
throw new RuntimeException(sprintf('Invalid middleware factory "%s": a middleware factory must be an abstract definition.', $id));
}

View File

@ -537,21 +537,35 @@ class MessengerPassTest extends TestCase
$container->setParameter($middlewareParameter = $fooBusId.'.middleware', [
['id' => UselessMiddleware::class],
['id' => 'middleware_with_factory', 'arguments' => ['index_0' => 'foo', 'bar']],
['id' => 'middleware_with_factory', 'arguments' => $factoryChildMiddlewareArgs1 = ['index_0' => 'foo', 'bar']],
['id' => 'middleware_with_factory', 'arguments' => $factoryChildMiddlewareArgs2 = ['index_0' => 'baz']],
['id' => 'middleware_with_factory_using_default'],
]);
(new MessengerPass())->process($container);
(new ResolveChildDefinitionsPass())->process($container);
$this->assertTrue($container->hasDefinition($factoryChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory'));
$this->assertTrue($container->hasDefinition(
$factoryChildMiddlewareArgs1Id = $fooBusId.'.middleware.middleware_with_factory.'.ContainerBuilder::hash($factoryChildMiddlewareArgs1)
));
$this->assertEquals(
['foo', 'bar'],
$container->getDefinition($factoryChildMiddlewareId)->getArguments(),
$container->getDefinition($factoryChildMiddlewareArgs1Id)->getArguments(),
'parent default argument is overridden, and next ones appended'
);
$this->assertTrue($container->hasDefinition($factoryWithDefaultChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_default'));
$this->assertTrue($container->hasDefinition(
$factoryChildMiddlewareArgs2Id = $fooBusId.'.middleware.middleware_with_factory.'.ContainerBuilder::hash($factoryChildMiddlewareArgs2)
));
$this->assertEquals(
['baz'],
$container->getDefinition($factoryChildMiddlewareArgs2Id)->getArguments(),
'parent default argument is overridden, and next ones appended'
);
$this->assertTrue($container->hasDefinition(
$factoryWithDefaultChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory_using_default.'.ContainerBuilder::hash([])
));
$this->assertEquals(
['some_default'],
$container->getDefinition($factoryWithDefaultChildMiddlewareId)->getArguments(),
@ -560,7 +574,8 @@ class MessengerPassTest extends TestCase
$this->assertEquals([
new Reference(UselessMiddleware::class),
new Reference($factoryChildMiddlewareId),
new Reference($factoryChildMiddlewareArgs1Id),
new Reference($factoryChildMiddlewareArgs2Id),
new Reference($factoryWithDefaultChildMiddlewareId),
], $container->getDefinition($fooBusId)->getArgument(0)->getValues());
$this->assertFalse($container->hasParameter($middlewareParameter));

View File

@ -12,6 +12,7 @@
namespace Symfony\Component\Mime\Test\Constraint;
use PHPUnit\Framework\Constraint\Constraint;
use Symfony\Component\Mime\Header\UnstructuredHeader;
use Symfony\Component\Mime\RawMessage;
final class EmailHeaderSame extends Constraint
@ -44,7 +45,7 @@ final class EmailHeaderSame extends Constraint
throw new \LogicException('Unable to test a message header on a RawMessage instance.');
}
return $this->expectedValue === $message->getHeaders()->get($this->headerName)->getBodyAsString();
return $this->expectedValue === $this->getHeaderValue($message);
}
/**
@ -54,6 +55,13 @@ final class EmailHeaderSame extends Constraint
*/
protected function failureDescription($message): string
{
return sprintf('the Email %s (value is %s)', $this->toString(), $message->getHeaders()->get($this->headerName)->getBodyAsString());
return sprintf('the Email %s (value is %s)', $this->toString(), $this->getHeaderValue($message));
}
private function getHeaderValue($message): string
{
$header = $message->getHeaders()->get($this->headerName);
return $header instanceof UnstructuredHeader ? $header->getValue() : $header->getBodyAsString();
}
}