diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/lock.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/lock.php
new file mode 100644
index 0000000000000..116e074dfa254
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/lock.php
@@ -0,0 +1,9 @@
+loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'lock' => null,
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/lock_named.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/lock_named.php
new file mode 100644
index 0000000000000..de8a8f49561fd
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/lock_named.php
@@ -0,0 +1,16 @@
+setParameter('env(REDIS_DSN)', 'redis://paas.com');
+
+$container->loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'lock' => [
+ 'foo' => 'semaphore',
+ 'bar' => 'flock',
+ 'baz' => ['semaphore', 'flock'],
+ 'qux' => '%env(REDIS_DSN)%',
+ ],
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/semaphore.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/semaphore.php
new file mode 100644
index 0000000000000..c2a1e3b6e07ac
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/semaphore.php
@@ -0,0 +1,9 @@
+loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'semaphore' => 'redis://localhost',
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/semaphore_named.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/semaphore_named.php
new file mode 100644
index 0000000000000..c42b559830b35
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/semaphore_named.php
@@ -0,0 +1,14 @@
+setParameter('env(REDIS_DSN)', 'redis://paas.com');
+
+$container->loadFromExtension('framework', [
+ 'annotations' => false,
+ 'http_method_override' => false,
+ 'handle_all_throwables' => true,
+ 'php_errors' => ['log' => true],
+ 'semaphore' => [
+ 'foo' => 'redis://paas.com',
+ 'qux' => '%env(REDIS_DSN)%',
+ ],
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock.xml
index 5ddb62f115a85..ab344ae0e3858 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock.xml
@@ -8,6 +8,8 @@
-
+
+ semaphore
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock_named.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock_named.xml
index 85cf3cb574e27..02659713e49bf 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock_named.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/lock_named.xml
@@ -5,7 +5,6 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
-
redis://paas.com
@@ -18,7 +17,7 @@
flock
semaphore
flock
- %env(REDIS_URL)%
+ %env(REDIS_DSN)%
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore.xml
index 7acbe2cedd54c..dcab8032652d9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore.xml
@@ -8,6 +8,8 @@
-
+
+ redis://localhost
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore_named.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore_named.xml
new file mode 100644
index 0000000000000..7e454c2fd962d
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/semaphore_named.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ redis://paas.com
+ %env(REDIS_DSN)%
+
+
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php
index 705ec5f3144e3..e6616a07db743 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php
@@ -2396,6 +2396,62 @@ public function testAssetMapperWithoutAssets()
$this->assertFalse($container->has('assets._default_package'));
}
+ public function testDefaultLock()
+ {
+ $container = $this->createContainerFromFile('lock');
+
+ self::assertTrue($container->hasDefinition('lock.default.factory'));
+ $storeDef = $container->getDefinition($container->getDefinition('lock.default.factory')->getArgument(0));
+ self::assertEquals(new Reference('semaphore'), $storeDef->getArgument(0));
+ }
+
+ public function testNamedLocks()
+ {
+ $container = $this->createContainerFromFile('lock_named');
+
+ self::assertTrue($container->hasDefinition('lock.foo.factory'));
+ $storeDef = $container->getDefinition($container->getDefinition('lock.foo.factory')->getArgument(0));
+ self::assertEquals(new Reference('semaphore'), $storeDef->getArgument(0));
+
+ self::assertTrue($container->hasDefinition('lock.bar.factory'));
+ $storeDef = $container->getDefinition($container->getDefinition('lock.bar.factory')->getArgument(0));
+ self::assertEquals(new Reference('flock'), $storeDef->getArgument(0));
+
+ self::assertTrue($container->hasDefinition('lock.baz.factory'));
+ $storeDef = $container->getDefinition($container->getDefinition('lock.baz.factory')->getArgument(0));
+ self::assertIsArray($storeDefArg = $storeDef->getArgument(0));
+ $storeDef1 = $container->getDefinition($storeDefArg[0]);
+ $storeDef2 = $container->getDefinition($storeDefArg[1]);
+ self::assertEquals(new Reference('semaphore'), $storeDef1->getArgument(0));
+ self::assertEquals(new Reference('flock'), $storeDef2->getArgument(0));
+
+ self::assertTrue($container->hasDefinition('lock.qux.factory'));
+ $storeDef = $container->getDefinition($container->getDefinition('lock.qux.factory')->getArgument(0));
+ self::assertStringContainsString('REDIS_DSN', $storeDef->getArgument(0));
+ }
+
+ public function testDefaultSemaphore()
+ {
+ $container = $this->createContainerFromFile('semaphore');
+
+ self::assertTrue($container->hasDefinition('semaphore.default.factory'));
+ $storeDef = $container->getDefinition($container->getDefinition('semaphore.default.factory')->getArgument(0));
+ self::assertSame('redis://localhost', $storeDef->getArgument(0));
+ }
+
+ public function testNamedSemaphores()
+ {
+ $container = $this->createContainerFromFile('semaphore_named');
+
+ self::assertTrue($container->hasDefinition('semaphore.foo.factory'));
+ $storeDef = $container->getDefinition($container->getDefinition('semaphore.foo.factory')->getArgument(0));
+ self::assertSame('redis://paas.com', $storeDef->getArgument(0));
+
+ self::assertTrue($container->hasDefinition('semaphore.qux.factory'));
+ $storeDef = $container->getDefinition($container->getDefinition('semaphore.qux.factory')->getArgument(0));
+ self::assertStringContainsString('REDIS_DSN', $storeDef->getArgument(0));
+ }
+
protected function createContainer(array $data = [])
{
return new ContainerBuilder(new EnvPlaceholderParameterBag(array_merge([