2018-03-15 11:20:27 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Symfony\Component\DependencyInjection\Tests;
|
|
|
|
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
use Symfony\Component\DependencyInjection\Container;
|
|
|
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
|
|
use Symfony\Component\DependencyInjection\EnvVarProcessor;
|
|
|
|
|
|
|
|
class EnvVarProcessorTest extends TestCase
|
|
|
|
{
|
|
|
|
const TEST_CONST = 'test';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validStrings
|
|
|
|
*/
|
|
|
|
public function testGetEnvString($value, $processed)
|
|
|
|
{
|
|
|
|
$container = new ContainerBuilder();
|
|
|
|
$container->setParameter('env(foo)', $value);
|
|
|
|
$container->compile();
|
|
|
|
|
|
|
|
$processor = new EnvVarProcessor($container);
|
|
|
|
|
|
|
|
$result = $processor->getEnv('string', 'foo', function () {
|
|
|
|
$this->fail('Should not be called');
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->assertSame($processed, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validStrings()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['hello', 'hello'],
|
|
|
|
['true', 'true'],
|
|
|
|
['false', 'false'],
|
|
|
|
['null', 'null'],
|
|
|
|
['1', '1'],
|
|
|
|
['0', '0'],
|
|
|
|
['1.1', '1.1'],
|
|
|
|
['1e1', '1e1'],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validBools
|
|
|
|
*/
|
|
|
|
public function testGetEnvBool($value, $processed)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$result = $processor->getEnv('bool', 'foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->assertSame($processed, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validBools()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['true', true],
|
|
|
|
['false', false],
|
|
|
|
['null', false],
|
|
|
|
['1', true],
|
|
|
|
['0', false],
|
|
|
|
['1.1', true],
|
|
|
|
['1e1', true],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validInts
|
|
|
|
*/
|
|
|
|
public function testGetEnvInt($value, $processed)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$result = $processor->getEnv('int', 'foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->assertSame($processed, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validInts()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['1', 1],
|
|
|
|
['1.1', 1],
|
|
|
|
['1e1', 10],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
|
|
|
* @expectedExceptionMessage Non-numeric env var
|
|
|
|
* @dataProvider invalidInts
|
|
|
|
*/
|
|
|
|
public function testGetEnvIntInvalid($value)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('int', 'foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public function invalidInts()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['foo'],
|
|
|
|
['true'],
|
|
|
|
['null'],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validFloats
|
|
|
|
*/
|
|
|
|
public function testGetEnvFloat($value, $processed)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$result = $processor->getEnv('float', 'foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->assertSame($processed, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validFloats()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['1', 1.0],
|
|
|
|
['1.1', 1.1],
|
|
|
|
['1e1', 10.0],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
|
|
|
* @expectedExceptionMessage Non-numeric env var
|
|
|
|
* @dataProvider invalidFloats
|
|
|
|
*/
|
|
|
|
public function testGetEnvFloatInvalid($value)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('float', 'foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public function invalidFloats()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['foo'],
|
|
|
|
['true'],
|
|
|
|
['null'],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validConsts
|
|
|
|
*/
|
|
|
|
public function testGetEnvConst($value, $processed)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$result = $processor->getEnv('const', 'foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->assertSame($processed, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validConsts()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::TEST_CONST', self::TEST_CONST],
|
|
|
|
['E_ERROR', E_ERROR],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
|
|
|
* @expectedExceptionMessage undefined constant
|
|
|
|
* @dataProvider invalidConsts
|
|
|
|
*/
|
|
|
|
public function testGetEnvConstInvalid($value)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('const', 'foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public function invalidConsts()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['Symfony\Component\DependencyInjection\Tests\EnvVarProcessorTest::UNDEFINED_CONST'],
|
|
|
|
['UNDEFINED_CONST'],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testGetEnvBase64()
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$result = $processor->getEnv('base64', 'foo', function ($name) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return base64_encode('hello');
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->assertSame('hello', $result);
|
|
|
|
}
|
|
|
|
|
2019-01-04 17:50:27 +00:00
|
|
|
public function testGetEnvTrim()
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$result = $processor->getEnv('trim', 'foo', function ($name) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return " hello\n";
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->assertSame('hello', $result);
|
|
|
|
}
|
|
|
|
|
2018-03-12 17:35:41 +00:00
|
|
|
/**
|
|
|
|
* @dataProvider validJson
|
|
|
|
*/
|
|
|
|
public function testGetEnvJson($value, $processed)
|
2018-03-15 11:20:27 +00:00
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
2018-03-12 17:35:41 +00:00
|
|
|
$result = $processor->getEnv('json', 'foo', function ($name) use ($value) {
|
2018-03-15 11:20:27 +00:00
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
2018-03-12 17:35:41 +00:00
|
|
|
return $value;
|
2018-03-15 11:20:27 +00:00
|
|
|
});
|
|
|
|
|
2018-03-12 17:35:41 +00:00
|
|
|
$this->assertSame($processed, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validJson()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
['[1]', [1]],
|
|
|
|
['{"key": "value"}', ['key' => 'value']],
|
|
|
|
[null, null],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
|
|
|
* @expectedExceptionMessage Syntax error
|
|
|
|
*/
|
|
|
|
public function testGetEnvInvalidJson()
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('json', 'foo', function ($name) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return 'invalid_json';
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
|
|
|
* @expectedExceptionMessage Invalid JSON env var
|
|
|
|
* @dataProvider otherJsonValues
|
|
|
|
*/
|
|
|
|
public function testGetEnvJsonOther($value)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('json', 'foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return json_encode($value);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public function otherJsonValues()
|
|
|
|
{
|
2019-01-16 18:24:45 +00:00
|
|
|
return [
|
|
|
|
[1],
|
|
|
|
[1.1],
|
|
|
|
[true],
|
|
|
|
[false],
|
|
|
|
['foo'],
|
|
|
|
];
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
|
|
|
* @expectedExceptionMessage Unsupported env var prefix
|
|
|
|
*/
|
|
|
|
public function testGetEnvUnknown()
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('unknown', 'foo', function ($name) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return 'foo';
|
|
|
|
});
|
|
|
|
}
|
2018-05-04 17:10:27 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
2018-10-25 08:05:21 +01:00
|
|
|
* @expectedExceptionMessage Invalid env "key:foo": a key specifier should be provided.
|
2018-05-04 17:10:27 +01:00
|
|
|
*/
|
|
|
|
public function testGetEnvKeyInvalidKey()
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('key', 'foo', function ($name) {
|
|
|
|
$this->fail('Should not get here');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
|
|
|
* @expectedExceptionMessage Resolved value of "foo" did not result in an array value.
|
|
|
|
* @dataProvider noArrayValues
|
|
|
|
*/
|
|
|
|
public function testGetEnvKeyNoArrayResult($value)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('key', 'index:foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public function noArrayValues()
|
|
|
|
{
|
2019-01-16 20:35:37 +00:00
|
|
|
return [
|
|
|
|
[null],
|
|
|
|
['string'],
|
|
|
|
[1],
|
|
|
|
[true],
|
|
|
|
];
|
2018-05-04 17:10:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-10-25 08:05:21 +01:00
|
|
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\EnvNotFoundException
|
2018-05-04 17:10:27 +01:00
|
|
|
* @expectedExceptionMessage Key "index" not found in
|
|
|
|
* @dataProvider invalidArrayValues
|
|
|
|
*/
|
|
|
|
public function testGetEnvKeyArrayKeyNotFound($value)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$processor->getEnv('key', 'index:foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public function invalidArrayValues()
|
|
|
|
{
|
2019-01-16 20:35:37 +00:00
|
|
|
return [
|
|
|
|
[[]],
|
|
|
|
[['index2' => 'value']],
|
|
|
|
[['index', 'index2']],
|
|
|
|
];
|
2018-05-04 17:10:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider arrayValues
|
|
|
|
*/
|
|
|
|
public function testGetEnvKey($value)
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$this->assertSame($value['index'], $processor->getEnv('key', 'index:foo', function ($name) use ($value) {
|
|
|
|
$this->assertSame('foo', $name);
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function arrayValues()
|
|
|
|
{
|
2019-01-16 20:35:37 +00:00
|
|
|
return [
|
|
|
|
[['index' => 'password']],
|
|
|
|
[['index' => 'true']],
|
|
|
|
[['index' => false]],
|
|
|
|
[['index' => '1']],
|
|
|
|
[['index' => 1]],
|
|
|
|
[['index' => '1.1']],
|
|
|
|
[['index' => 1.1]],
|
|
|
|
[['index' => []]],
|
|
|
|
[['index' => ['val1', 'val2']]],
|
|
|
|
];
|
2018-05-04 17:10:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testGetEnvKeyChained()
|
|
|
|
{
|
|
|
|
$processor = new EnvVarProcessor(new Container());
|
|
|
|
|
|
|
|
$this->assertSame('password', $processor->getEnv('key', 'index:file:foo', function ($name) {
|
|
|
|
$this->assertSame('file:foo', $name);
|
|
|
|
|
2019-01-16 20:35:37 +00:00
|
|
|
return [
|
2018-05-04 17:10:27 +01:00
|
|
|
'index' => 'password',
|
2019-01-16 20:35:37 +00:00
|
|
|
];
|
2018-05-04 17:10:27 +01:00
|
|
|
}));
|
|
|
|
}
|
2018-03-15 11:20:27 +00:00
|
|
|
}
|