diff --git a/DependencyInjection/Configuration/RedisDsn.php b/DependencyInjection/Configuration/RedisDsn.php index 1fa75752..37506a8f 100644 --- a/DependencyInjection/Configuration/RedisDsn.php +++ b/DependencyInjection/Configuration/RedisDsn.php @@ -11,10 +11,7 @@ namespace Snc\RedisBundle\DependencyInjection\Configuration; -/** - * RedisDsn - */ -class RedisDsn implements RedisDsnInterface +class RedisDsn { /** * @var string @@ -57,12 +54,17 @@ class RedisDsn implements RedisDsnInterface protected $alias; /** - * Constructor - * + * @var bool + */ + protected $isEnv; + + /** * @param string $dsn + * @param bool $isEnv */ - public function __construct($dsn) + public function __construct($dsn, $isEnv) { + $this->isEnv = $isEnv; $this->dsn = $dsn; $this->parseDsn($dsn); } @@ -135,11 +137,33 @@ public function getPersistentId() return md5($this->dsn); } + /** + * Return the env DSNĀ if one exists, null otherwise + * + * @return string|null + */ + public function getEnvDsn() + { + return $this->isEnv() ? $this->dsn : null; + } + + /** + * @return bool + */ + public function isEnv() + { + return $this->isEnv; + } + /** * @return bool */ public function isValid() { + if ($this->isEnv()) { + return true; + } + if (0 !== strpos($this->dsn, 'redis://')) { return false; } @@ -160,6 +184,10 @@ public function isValid() */ protected function parseDsn($dsn) { + if ($this->isEnv()) { + return; + } + $dsn = str_replace('redis://', '', $dsn); // remove "redis://" if (false !== $pos = strrpos($dsn, '@')) { // parse password diff --git a/DependencyInjection/Configuration/RedisDsnInterface.php b/DependencyInjection/Configuration/RedisDsnInterface.php deleted file mode 100644 index 06693e9f..00000000 --- a/DependencyInjection/Configuration/RedisDsnInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -dsn = $dsn; - } - - /** - * @return bool - */ - public function isValid() - { - return (bool)preg_match('#^(env_\w+_[0-9a-fA-F]{32}|%?env\(\w++\)%?)$#', $this->dsn); - } - - /** - * @return null - */ - public function getAlias() - { - return null; - } - - /** - * @return string - */ - public function getDsn() - { - return $this->dsn; - } -} diff --git a/DependencyInjection/SncRedisExtension.php b/DependencyInjection/SncRedisExtension.php index 470ae783..c2b34e2a 100644 --- a/DependencyInjection/SncRedisExtension.php +++ b/DependencyInjection/SncRedisExtension.php @@ -13,8 +13,6 @@ use Snc\RedisBundle\DependencyInjection\Configuration\Configuration; use Snc\RedisBundle\DependencyInjection\Configuration\RedisDsn; -use Snc\RedisBundle\DependencyInjection\Configuration\RedisDsnInterface; -use Snc\RedisBundle\DependencyInjection\Configuration\RedisEnvDsn; use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; @@ -23,9 +21,6 @@ use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Reference; -/** - * SncRedisExtension - */ class SncRedisExtension extends Extension { /** @@ -100,17 +95,13 @@ public function getXsdValidationBasePath() */ protected function loadClient(array $client, ContainerBuilder $container) { - $parameterBag = $container->getParameterBag(); - - $dsnResolver = function ($dsn) use ($parameterBag) { - $dsn = $parameterBag->resolveValue($dsn); - $parsedDsn = new RedisDsn($dsn); - - if ($parsedDsn->isValid()) { - return $parsedDsn; + $dsnResolver = function ($dsn) use ($container) { + $usedEnvs = null; + if (method_exists($container, 'resolveEnvPlaceholders')) { + $container->resolveEnvPlaceholders($dsn, null, $usedEnvs); } - $parsedDsn = new RedisEnvDsn($dsn); + $parsedDsn = new RedisDsn($dsn, !empty($usedEnvs)); if ($parsedDsn->isValid()) { return $parsedDsn; @@ -155,7 +146,8 @@ protected function loadPredisClient(array $client, ContainerBuilder $container) $connectionAliases = array(); $connectionCount = count($client['dsns']); - /** @var RedisDsnInterface $dsn */ + + /** @var RedisDsn $dsn */ foreach ($client['dsns'] as $i => $dsn) { if (!$connectionAlias = $dsn->getAlias()) { $connectionAlias = 1 === $connectionCount ? $client['alias'] : $client['alias'] . ($i + 1); @@ -166,7 +158,7 @@ protected function loadPredisClient(array $client, ContainerBuilder $container) $connection['logging'] = $client['logging']; $connection['alias'] = $connectionAlias; - if ($dsn instanceof RedisDsn) { + if (!$dsn->isEnv()) { if (null !== $dsn->getSocket()) { $connection['scheme'] = 'unix'; $connection['path'] = $dsn->getSocket(); @@ -183,16 +175,16 @@ protected function loadPredisClient(array $client, ContainerBuilder $container) } $connection['password'] = $dsn->getPassword(); $connection['weight'] = $dsn->getWeight(); - - $this->loadPredisConnectionParameters($client['alias'], $connection, $container); - } - if ($dsn instanceof RedisEnvDsn) { - $this->loadEnvPredisConnectionParameters($client['alias'], $connection, $dsn->getDsn(), $container); } + + $this->loadPredisConnectionParameters($client['alias'], $connection, $container, $dsn); } + $profile = $client['options']['profile']; // TODO can be shared between clients?! - $profile = self::tryResolveEnvPlaceholders($client['options']['profile'], $container); + if (method_exists($container, 'resolveEnvPlaceholders')) { + $profile = $container->resolveEnvPlaceholders($profile, true); + } $profile = !is_string($profile) ? sprintf('%.1F', $profile) : $profile; $profileId = sprintf('snc_redis.client.%s_profile', $client['alias']); $profileDef = new Definition(get_class(\Predis\Profile\Factory::get($profile))); // TODO get_class alternative? @@ -235,34 +227,23 @@ protected function loadPredisClient(array $client, ContainerBuilder $container) * @param string $clientAlias The client alias * @param array $connection A connection configuration * @param ContainerBuilder $container A ContainerBuilder instance + * @param string|null $envDsn Env DSN */ - protected function loadPredisConnectionParameters($clientAlias, array $connection, ContainerBuilder $container) - { - $parameterId = sprintf('snc_redis.connection.%s_parameters.%s', $connection['alias'], $clientAlias); - $parameterDef = new Definition($container->getParameter('snc_redis.connection_parameters.class')); - $parameterDef->setPublic(false); - $parameterDef->addArgument($connection); - $parameterDef->addTag('snc_redis.connection_parameters', array('clientAlias' => $clientAlias)); - $container->setDefinition($parameterId, $parameterDef); - } - - /** - * @param string $clientAlias The client alias - * @param array $connection A connection configuration - * @param string $dsn The DSN placeholder - * @param ContainerBuilder $container A ContainerBuilder instance - */ - protected function loadEnvPredisConnectionParameters($clientAlias, array $connection, $dsn, ContainerBuilder $container) + protected function loadPredisConnectionParameters($clientAlias, array $connection, ContainerBuilder $container, RedisDsn $dsn) { $parametersClass = $container->getParameter('snc_redis.connection_parameters.class'); $parameterId = sprintf('snc_redis.connection.%s_parameters.%s', $connection['alias'], $clientAlias); $parameterDef = new Definition($parametersClass); $parameterDef->setPublic(false); - $parameterDef->setFactory(array('Snc\RedisBundle\Factory\EnvParametersFactory', 'create')); $parameterDef->addArgument($connection); - $parameterDef->addArgument($parametersClass); - $parameterDef->addArgument($dsn); + + if ($dsn->isEnv()) { + $parameterDef->setFactory(array('Snc\RedisBundle\Factory\EnvParametersFactory', 'create')); + $parameterDef->addArgument($parametersClass); + $parameterDef->addArgument($dsn->getEnvDsn()); + } + $parameterDef->addTag('snc_redis.connection_parameters', array('clientAlias' => $clientAlias)); $container->setDefinition($parameterId, $parameterDef); } @@ -511,16 +492,4 @@ public function getConfiguration(array $config, ContainerBuilder $container) { return new Configuration($container->getParameter('kernel.debug')); } - - /** - * @internal - */ - public static function tryResolveEnvPlaceholders($value, ContainerBuilder $container) - { - if (!class_exists('Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag')) { - return $value; - } - - return $container->resolveEnvPlaceholders($value, true); - } } diff --git a/Tests/DependencyInjection/Configuration/RedisDsnTest.php b/Tests/DependencyInjection/Configuration/RedisDsnTest.php index e5f14f48..85e3e92d 100644 --- a/Tests/DependencyInjection/Configuration/RedisDsnTest.php +++ b/Tests/DependencyInjection/Configuration/RedisDsnTest.php @@ -14,17 +14,12 @@ use Snc\RedisBundle\DependencyInjection\Configuration\RedisDsn; use PHPUnit\Framework\TestCase; -/** - * RedisDsnTest - */ class RedisDsnTest extends TestCase { /** - * @static - * * @return array */ - public static function hostValues() + public function hostValues() { return array( array('redis://localhost', 'localhost'), @@ -67,11 +62,6 @@ public static function hostValues() array('redis://%redis_host%:%redis_port%', '%redis_host%'), array('redis://%redis_host%:%redis_port%/%redis_db%', '%redis_host%'), array('redis://%redis_pass%@%redis_host%:%redis_port%/%redis_db%', '%redis_host%'), - array('redis://env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed', 'env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed'), - array('redis://env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed/env_REDIS_DB_0d1da5bfb707f91e21a1f78cd11fcd0a', 'env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed'), - array('redis://env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed:env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21', 'env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed'), - array('redis://env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed:env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21/env_REDIS_DB_0d1da5bfb707f91e21a1f78cd11fcd0a', 'env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed'), - array('redis://env_REDIS_PW_e7406513a853fd4692343d101baecb7c@env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed:env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21/env_REDIS_DB_0d1da5bfb707f91e21a1f78cd11fcd0a', 'env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed'), ); } @@ -83,7 +73,7 @@ public static function hostValues() */ public function testHost($dsn, $host) { - $dsn = new RedisDsn($dsn); + $dsn = new RedisDsn($dsn, false); $this->assertSame($host, $dsn->getHost()); } @@ -116,7 +106,7 @@ public static function socketValues() */ public function testSocket($dsn, $socket) { - $dsn = new RedisDsn($dsn); + $dsn = new RedisDsn($dsn, false); $this->assertSame($socket, $dsn->getSocket()); } @@ -141,9 +131,6 @@ public static function portValues() array('redis://%redis_host%:%redis_port%', '%redis_port%'), array('redis://%redis_host%:%redis_port%/%redis_db%', '%redis_port%'), array('redis://%redis_pass%@%redis_host%:%redis_port%/%redis_db%', '%redis_port%'), - array('redis://env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed:env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21', 'env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21'), - array('redis://env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed:env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21/env_REDIS_DB_0d1da5bfb707f91e21a1f78cd11fcd0a', 'env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21'), - array('redis://env_REDIS_PW_e7406513a853fd4692343d101baecb7c@env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed:env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21/env_REDIS_DB_0d1da5bfb707f91e21a1f78cd11fcd0a', 'env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21'), array('redis:///redis.sock', null), array('redis:///redis.sock/1', null), array('redis:///redis.sock:63790', null), @@ -160,7 +147,7 @@ public static function portValues() */ public function testPort($dsn, $port) { - $dsn = new RedisDsn($dsn); + $dsn = new RedisDsn($dsn, false); $this->assertSame($port, $dsn->getPort()); } @@ -211,7 +198,7 @@ public static function databaseValues() */ public function testDatabase($dsn, $database) { - $dsn = new RedisDsn($dsn); + $dsn = new RedisDsn($dsn, false); $this->assertSame($database, $dsn->getDatabase()); } @@ -239,9 +226,6 @@ public static function passwordValues() array('redis://%redis_host%', null), array('redis://%redis_host%/%redis_db%', null), array('redis://%redis_pass%@%redis_host%:%redis_port%', '%redis_pass%'), - array('redis://env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed', null), - array('redis://env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed/env_REDIS_DB_0d1da5bfb707f91e21a1f78cd11fcd0a', null), - array('redis://env_REDIS_PW_e7406513a853fd4692343d101baecb7c@env_REDIS_HOST_1ef60d9ef7a55747f99d0a42206e58ed:env_REDIS_PORT_0458150d4bf631c8ac63b0fa4d257a21/env_REDIS_DB_0d1da5bfb707f91e21a1f78cd11fcd0a', 'env_REDIS_PW_e7406513a853fd4692343d101baecb7c'), array('redis:///redis.sock', null), array('redis:///redis.sock/1', null), array('redis://pw@/redis.sock/10', 'pw'), @@ -258,7 +242,7 @@ public static function passwordValues() */ public function testPassword($dsn, $password) { - $dsn = new RedisDsn($dsn); + $dsn = new RedisDsn($dsn, false); $this->assertSame($password, $dsn->getPassword()); } @@ -305,8 +289,23 @@ public static function isValidValues() */ public function testIsValid($dsn, $valid) { - $dsn = new RedisDsn($dsn); + $dsn = new RedisDsn($dsn, false); $this->assertSame($valid, $dsn->isValid()); + $this->assertFalse($dsn->isEnv()); + $this->assertNull($dsn->getEnvDsn()); + } + + /** + * @param string $dsn DSN + * + * @dataProvider isValidValues + */ + public function testIsValidEnvDsn($dsn) + { + $dsnObject = new RedisDsn($dsn, true); + $this->assertTrue($dsnObject->isValid()); + $this->assertTrue($dsnObject->isEnv()); + $this->assertSame($dsn, $dsnObject->getEnvDsn()); } /** @@ -340,7 +339,7 @@ public static function parameterValues() */ public function testParameterValues($dsn, $weight, $alias) { - $dsn = new RedisDsn($dsn); + $dsn = new RedisDsn($dsn, false); $this->assertSame($weight, $dsn->getWeight()); $this->assertSame($alias, $dsn->getAlias()); } diff --git a/Tests/DependencyInjection/Configuration/RedisEnvDsnTest.php b/Tests/DependencyInjection/Configuration/RedisEnvDsnTest.php deleted file mode 100644 index 19ed9228..00000000 --- a/Tests/DependencyInjection/Configuration/RedisEnvDsnTest.php +++ /dev/null @@ -1,79 +0,0 @@ -assertSame($valid, $dsn->isValid()); - } - - /** - * @param string $dsn DSN - * - * @dataProvider isValidValues - */ - public function testAliasIsNull($dsn) - { - $dsn = new RedisEnvDsn($dsn); - $this->assertNull($dsn->getAlias()); - } - - /** - * @param string $dsn DSN - * - * @dataProvider isValidValues - */ - public function testDsnIsUnmodified($providedDsn) - { - $dsn = new RedisEnvDsn($providedDsn); - $this->assertEquals($providedDsn, $dsn->getDsn()); - } -} diff --git a/Tests/DependencyInjection/Fixtures/config/invalid.xml b/Tests/DependencyInjection/Fixtures/config/xml/invalid.xml similarity index 100% rename from Tests/DependencyInjection/Fixtures/config/invalid.xml rename to Tests/DependencyInjection/Fixtures/config/xml/invalid.xml diff --git a/Tests/DependencyInjection/Fixtures/config/valid.xml b/Tests/DependencyInjection/Fixtures/config/xml/valid.xml similarity index 100% rename from Tests/DependencyInjection/Fixtures/config/valid.xml rename to Tests/DependencyInjection/Fixtures/config/xml/valid.xml diff --git a/Tests/DependencyInjection/Fixtures/config/yaml/env_cluster.yaml b/Tests/DependencyInjection/Fixtures/config/yaml/env_cluster.yaml new file mode 100644 index 00000000..bdffdd71 --- /dev/null +++ b/Tests/DependencyInjection/Fixtures/config/yaml/env_cluster.yaml @@ -0,0 +1,14 @@ +parameters: + env(REDIS_URL_1): redis://localhost + env(REDIS_URL_2): redis://localhost2 + +snc_redis: + clients: + default: + type: predis + alias: default + dsn: + - "%env(REDIS_URL_1)%" + - "%env(REDIS_URL_2)%" + options: + cluster: "redis" diff --git a/Tests/DependencyInjection/Fixtures/config/yaml/env_minimal.yaml b/Tests/DependencyInjection/Fixtures/config/yaml/env_minimal.yaml new file mode 100644 index 00000000..a5bc43cd --- /dev/null +++ b/Tests/DependencyInjection/Fixtures/config/yaml/env_minimal.yaml @@ -0,0 +1,9 @@ +parameters: + env(REDIS_URL): redis://localhost + +snc_redis: + clients: + default: + type: predis + alias: default + dsn: "%env(REDIS_URL)%" diff --git a/Tests/DependencyInjection/Fixtures/config/yaml/env_profile.yaml b/Tests/DependencyInjection/Fixtures/config/yaml/env_profile.yaml new file mode 100644 index 00000000..a21087eb --- /dev/null +++ b/Tests/DependencyInjection/Fixtures/config/yaml/env_profile.yaml @@ -0,0 +1,12 @@ +parameters: + env(REDIS_URL): redis://localhost + env(REDIS_PROFILE): 2.6 + +snc_redis: + clients: + default: + type: predis + alias: default + dsn: "%env(REDIS_URL)%" + options: + profile: "%env(REDIS_PROFILE)%" diff --git a/Tests/DependencyInjection/SncRedisExtensionEnvTest.php b/Tests/DependencyInjection/SncRedisExtensionEnvTest.php index 0a6035b0..8fdf0f6d 100644 --- a/Tests/DependencyInjection/SncRedisExtensionEnvTest.php +++ b/Tests/DependencyInjection/SncRedisExtensionEnvTest.php @@ -2,17 +2,13 @@ namespace Snc\RedisBundle\Tests\DependencyInjection; +use PHPUnit\Framework\TestCase; use Snc\RedisBundle\DependencyInjection\SncRedisExtension; -use Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass; +use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; +use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; use Symfony\Component\HttpKernel\Kernel; -use Symfony\Component\Yaml\Parser; -use PHPUnit\Framework\TestCase; -/** - * SncRedisExtensionTest - */ class SncRedisExtensionEnvTest extends TestCase { /** @@ -27,119 +23,27 @@ protected function setUp() } } - /** - * @static - * - * @return array - */ - public static function parameterValues() - { - return array( - array('snc_redis.client.class', 'Predis\Client'), - array('snc_redis.client_options.class', 'Predis\Configuration\Options'), - array('snc_redis.connection_parameters.class', 'Predis\Connection\Parameters'), - array('snc_redis.connection_factory.class', 'Snc\RedisBundle\Client\Predis\Connection\ConnectionFactory'), - array('snc_redis.connection_wrapper.class', 'Snc\RedisBundle\Client\Predis\Connection\ConnectionWrapper'), - array('snc_redis.logger.class', 'Snc\RedisBundle\Logger\RedisLogger'), - array('snc_redis.data_collector.class', 'Snc\RedisBundle\DataCollector\RedisDataCollector'), - array('snc_redis.doctrine_cache_phpredis.class', 'Doctrine\Common\Cache\RedisCache'), - array('snc_redis.doctrine_cache_predis.class', 'Doctrine\Common\Cache\PredisCache'), - array('snc_redis.monolog_handler.class', 'Monolog\Handler\RedisHandler'), - array('snc_redis.swiftmailer_spool.class', 'Snc\RedisBundle\SwiftMailer\RedisSpool'), - ); - } - - public function testEmptyConfigLoad() - { - $extension = new SncRedisExtension(); - $config = array(); - $extension->load(array($config), $this->getContainer()); - } - - /** - * @param string $name Name - * @param string $expected Expected value - * - * @dataProvider parameterValues - */ - public function testDefaultParameterConfigLoad($name, $expected) + public function testDefaultParameterConfigLoad() { - $container = $this->getConfiguredContainer($this->getMinimalYamlConfig()); + $container = $this->getConfiguredContainer('env_minimal'); - $this->assertEquals($expected, $container->getParameter($name)); - } - - /** - * @param string $name Name - * @param string $expected Expected value - * - * @dataProvider parameterValues - */ - public function testDefaultClientTaggedServicesConfigLoad($name, $expected) - { - $container = $this->getConfiguredContainer($this->getMinimalYamlConfig()); - - $this->assertInternalType('array', $container->findTaggedServiceIds('snc_redis.client')); - $this->assertCount(1, $container->findTaggedServiceIds('snc_redis.client'), 'Minimal Yaml should have tagged 1 client'); - } - - /** - * Test loading of minimal config - */ - public function testMinimalConfigLoad() - { - $container = $this->getConfiguredContainer($this->getMinimalYamlConfig()); - - $this->assertTrue($container->hasDefinition('snc_redis.logger')); - $this->assertTrue($container->hasDefinition('snc_redis.data_collector')); - - $this->assertTrue($container->hasDefinition('snc_redis.connection.default_parameters.default')); - $this->assertTrue($container->hasDefinition('snc_redis.client.default_profile')); - $this->assertTrue($container->hasDefinition('snc_redis.client.default_options')); - $this->assertTrue($container->hasDefinition('snc_redis.default')); - $this->assertTrue($container->hasAlias('snc_redis.default_client')); - $this->assertInternalType('array', $container->findTaggedServiceIds('snc_redis.client')); - $this->assertEquals(array('snc_redis.default' => array(array('alias' => 'default'))), $container->findTaggedServiceIds('snc_redis.client')); - - $connectionArguments = $container->getDefinition('snc_redis.connection.default_parameters.default')->getArguments(); - $this->assertCount(3, $connectionArguments); $this->assertSame( - array( - 'read_write_timeout' => null, - 'iterable_multibulk' => false, - 'serialization' => 'default', - 'profile' => 'default', - 'prefix' => null, - 'service' => null, - 'async_connect' => false, - 'timeout' => 5, - 'persistent' => false, - 'exceptions' => true, - 'logging' => false, - 'alias' => 'default', - ), - $connectionArguments[0] + ['Snc\RedisBundle\Factory\EnvParametersFactory', 'create'], + $container->findDefinition('snc_redis.connection.default_parameters.default')->getFactory() ); - $this->assertSame('Predis\Connection\Parameters', $connectionArguments[1]); } - /** - * Test profile option - */ public function testProfileOption() { - $container = $this->getConfiguredContainer($this->getProfileYamlConfig()); + $container = $this->getConfiguredContainer('env_profile'); $this->assertTrue($container->hasDefinition('snc_redis.client.default_profile')); $this->assertSame('Predis\Profile\RedisVersion260', $container->getDefinition('snc_redis.client.default_profile')->getClass()); } - /** - * Test valid config of the cluster option - */ public function testClusterOption() { - $container = $this->getConfiguredContainer($this->getClusterYamlConfig()); + $container = $this->getConfiguredContainer('env_cluster'); $options = $container->getDefinition('snc_redis.client.default_options')->getArgument(0); $this->assertEquals('redis', $options['cluster']); @@ -153,78 +57,24 @@ public function testClusterOption() $this->assertEquals(array('snc_redis.default' => array(array('alias' => 'default'))), $container->findTaggedServiceIds('snc_redis.client')); } - private function parseYaml($yaml) - { - $parser = new Parser(); - - return $parser->parse($yaml); - } - - private function getMinimalYamlConfig() - { - return <<<'EOF' -clients: - default: - type: predis - alias: default - dsn: "%env(REDIS_URL)%" -EOF; - } - - public function getClusterYamlConfig() - { - return <<<'EOF' -clients: - default: - type: predis - alias: default - dsn: - - "%env(REDIS_URL_1)%" - - "%env(REDIS_URL_2)%" - options: - cluster: "redis" -EOF; - } - - private function getProfileYamlConfig() + private function getConfiguredContainer($file) { - return <<<'EOF' -clients: - default: - type: predis - alias: default - dsn: "%env(REDIS_URL)%" - options: - profile: "%env(REDIS_PROFILE)%" -EOF; - } + $container = new ContainerBuilder(); - private function getContainer() - { - return new ContainerBuilder(new EnvPlaceholderParameterBag(array( - 'kernel.debug' => false, - 'kernel.bundles' => array(), - 'kernel.cache_dir' => sys_get_temp_dir(), - 'kernel.environment' => 'test', - 'kernel.root_dir' => __DIR__ . '/../../', - 'env(REDIS_URL)' => 'redis://localhost', - 'env(REDIS_URL_1)' => 'redis://localhost', - 'env(REDIS_URL_2)' => 'redis://localhost', - 'env(REDIS_PROFILE)' => '2.6', - ))); - } + $container->setParameter('kernel.debug', false); + $container->setParameter('kernel.bundles', array()); + $container->setParameter('kernel.cache_dir', sys_get_temp_dir()); + $container->setParameter('kernel.environment', 'test'); + $container->setParameter('kernel.root_dir', __DIR__ . '/../../'); - private function getConfiguredContainer($yaml) - { - $extension = new SncRedisExtension(); - $config = $this->parseYaml($yaml); + $container->registerExtension(new SncRedisExtension()); - $container = $this->getContainer(); + $locator = new FileLocator(__DIR__.'/Fixtures/config/yaml'); + $loader = new YamlFileLoader($container, $locator); + $loader->load($file.'.yaml'); - $container->registerExtension($extension); - $container->prependExtensionConfig($extension->getAlias(), $config); - $pass = new MergeExtensionConfigurationPass(); - $pass->process($container); + $container->getCompilerPassConfig()->setRemovingPasses(array()); + $container->compile(); return $container; } diff --git a/Tests/DependencyInjection/SncRedisExtensionTest.php b/Tests/DependencyInjection/SncRedisExtensionTest.php index d9b13ef2..d92e3518 100644 --- a/Tests/DependencyInjection/SncRedisExtensionTest.php +++ b/Tests/DependencyInjection/SncRedisExtensionTest.php @@ -259,7 +259,7 @@ public function testValidXmlConfig() { $container = $this->getContainer(); $container->registerExtension(new SncRedisExtension()); - $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/Fixtures/config')); + $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/Fixtures/config/xml')); $loader->load('valid.xml'); } @@ -270,7 +270,7 @@ public function testInvalidXmlConfig() { $container = $this->getContainer(); $container->registerExtension(new SncRedisExtension()); - $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/Fixtures/config')); + $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/Fixtures/config/xml')); $loader->load('invalid.xml'); }