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([