[Messenger] Doctrine Transport: Support setting auto_setup from DSN
This commit is contained in:
parent
4ef1f2fa8d
commit
213dfd1492
@ -157,62 +157,88 @@ class ConnectionTest extends TestCase
|
||||
/**
|
||||
* @dataProvider buildConfigurationProvider
|
||||
*/
|
||||
public function testBuildConfiguration($dsn, $options, $expectedManager, $expectedTableName, $expectedRedeliverTimeout, $expectedQueue)
|
||||
public function testBuildConfiguration($dsn, $options, $expectedConnection, $expectedTableName, $expectedRedeliverTimeout, $expectedQueue, $expectedAutoSetup)
|
||||
{
|
||||
$config = Connection::buildConfiguration($dsn, $options);
|
||||
$this->assertEquals($expectedManager, $config['connection']);
|
||||
$this->assertEquals($expectedConnection, $config['connection']);
|
||||
$this->assertEquals($expectedTableName, $config['table_name']);
|
||||
$this->assertEquals($expectedRedeliverTimeout, $config['redeliver_timeout']);
|
||||
$this->assertEquals($expectedQueue, $config['queue_name']);
|
||||
$this->assertEquals($expectedAutoSetup, $config['auto_setup']);
|
||||
}
|
||||
|
||||
public function buildConfigurationProvider()
|
||||
{
|
||||
return [
|
||||
[
|
||||
'dsn' => 'doctrine://default',
|
||||
'options' => [],
|
||||
'expectedManager' => 'default',
|
||||
'expectedTableName' => 'messenger_messages',
|
||||
'expectedRedeliverTimeout' => 3600,
|
||||
'expectedQueue' => 'default',
|
||||
],
|
||||
// test options from options array
|
||||
[
|
||||
'dsn' => 'doctrine://default',
|
||||
'options' => [
|
||||
'table_name' => 'name_from_options',
|
||||
'redeliver_timeout' => 1800,
|
||||
'queue_name' => 'important',
|
||||
],
|
||||
'expectedManager' => 'default',
|
||||
'expectedTableName' => 'name_from_options',
|
||||
'expectedRedeliverTimeout' => 1800,
|
||||
'expectedQueue' => 'important',
|
||||
],
|
||||
// tests options from dsn
|
||||
[
|
||||
'dsn' => 'doctrine://default?table_name=name_from_dsn&redeliver_timeout=1200&queue_name=normal',
|
||||
'options' => [],
|
||||
'expectedManager' => 'default',
|
||||
'expectedTableName' => 'name_from_dsn',
|
||||
'expectedRedeliverTimeout' => 1200,
|
||||
'expectedQueue' => 'normal',
|
||||
],
|
||||
// test options from options array wins over options from dsn
|
||||
[
|
||||
'dsn' => 'doctrine://default?table_name=name_from_dsn&redeliver_timeout=1200&queue_name=normal',
|
||||
'options' => [
|
||||
'table_name' => 'name_from_options',
|
||||
'redeliver_timeout' => 1800,
|
||||
'queue_name' => 'important',
|
||||
],
|
||||
'expectedManager' => 'default',
|
||||
'expectedTableName' => 'name_from_options',
|
||||
'expectedRedeliverTimeout' => 1800,
|
||||
'expectedQueue' => 'important',
|
||||
],
|
||||
yield 'no options' => [
|
||||
'dsn' => 'doctrine://default',
|
||||
'options' => [],
|
||||
'expectedConnection' => 'default',
|
||||
'expectedTableName' => 'messenger_messages',
|
||||
'expectedRedeliverTimeout' => 3600,
|
||||
'expectedQueue' => 'default',
|
||||
'expectedAutoSetup' => true,
|
||||
];
|
||||
|
||||
yield 'test options array' => [
|
||||
'dsn' => 'doctrine://default',
|
||||
'options' => [
|
||||
'table_name' => 'name_from_options',
|
||||
'redeliver_timeout' => 1800,
|
||||
'queue_name' => 'important',
|
||||
'auto_setup' => false,
|
||||
],
|
||||
'expectedConnection' => 'default',
|
||||
'expectedTableName' => 'name_from_options',
|
||||
'expectedRedeliverTimeout' => 1800,
|
||||
'expectedQueue' => 'important',
|
||||
'expectedAutoSetup' => false,
|
||||
];
|
||||
|
||||
yield 'options from dsn' => [
|
||||
'dsn' => 'doctrine://default?table_name=name_from_dsn&redeliver_timeout=1200&queue_name=normal&auto_setup=false',
|
||||
'options' => [],
|
||||
'expectedConnection' => 'default',
|
||||
'expectedTableName' => 'name_from_dsn',
|
||||
'expectedRedeliverTimeout' => 1200,
|
||||
'expectedQueue' => 'normal',
|
||||
'expectedAutoSetup' => false,
|
||||
];
|
||||
|
||||
yield 'options from options array wins over options from dsn' => [
|
||||
'dsn' => 'doctrine://default?table_name=name_from_dsn&redeliver_timeout=1200&queue_name=normal&auto_setup=true',
|
||||
'options' => [
|
||||
'table_name' => 'name_from_options',
|
||||
'redeliver_timeout' => 1800,
|
||||
'queue_name' => 'important',
|
||||
'auto_setup' => false,
|
||||
],
|
||||
'expectedConnection' => 'default',
|
||||
'expectedTableName' => 'name_from_options',
|
||||
'expectedRedeliverTimeout' => 1800,
|
||||
'expectedQueue' => 'important',
|
||||
'expectedAutoSetup' => false,
|
||||
];
|
||||
|
||||
yield 'options from dsn with falsey boolean' => [
|
||||
'dsn' => 'doctrine://default?auto_setup=0',
|
||||
'options' => [],
|
||||
'expectedConnection' => 'default',
|
||||
'expectedTableName' => 'messenger_messages',
|
||||
'expectedRedeliverTimeout' => 3600,
|
||||
'expectedQueue' => 'default',
|
||||
'expectedAutoSetup' => false,
|
||||
];
|
||||
|
||||
yield 'options from dsn with thruthy boolean' => [
|
||||
'dsn' => 'doctrine://default?auto_setup=1',
|
||||
'options' => [],
|
||||
'expectedConnection' => 'default',
|
||||
'expectedTableName' => 'messenger_messages',
|
||||
'expectedRedeliverTimeout' => 3600,
|
||||
'expectedQueue' => 'default',
|
||||
'expectedAutoSetup' => true,
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -76,22 +76,19 @@ class Connection
|
||||
parse_str($components['query'], $query);
|
||||
}
|
||||
|
||||
$configuration = [
|
||||
'connection' => $components['host'],
|
||||
'table_name' => $options['table_name'] ?? ($query['table_name'] ?? self::DEFAULT_OPTIONS['table_name']),
|
||||
'queue_name' => $options['queue_name'] ?? ($query['queue_name'] ?? self::DEFAULT_OPTIONS['queue_name']),
|
||||
'redeliver_timeout' => $options['redeliver_timeout'] ?? ($query['redeliver_timeout'] ?? self::DEFAULT_OPTIONS['redeliver_timeout']),
|
||||
'auto_setup' => $options['auto_setup'] ?? ($query['auto_setup'] ?? self::DEFAULT_OPTIONS['auto_setup']),
|
||||
];
|
||||
$configuration = ['connection' => $components['host']];
|
||||
$configuration += $options + $query + self::DEFAULT_OPTIONS;
|
||||
|
||||
$configuration['auto_setup'] = filter_var($configuration['auto_setup'], FILTER_VALIDATE_BOOLEAN);
|
||||
|
||||
// check for extra keys in options
|
||||
$optionsExtraKeys = array_diff(array_keys($options), array_keys($configuration));
|
||||
$optionsExtraKeys = array_diff(array_keys($options), array_keys(self::DEFAULT_OPTIONS));
|
||||
if (0 < \count($optionsExtraKeys)) {
|
||||
throw new InvalidArgumentException(sprintf('Unknown option found : [%s]. Allowed options are [%s]', implode(', ', $optionsExtraKeys), implode(', ', self::DEFAULT_OPTIONS)));
|
||||
}
|
||||
|
||||
// check for extra keys in options
|
||||
$queryExtraKeys = array_diff(array_keys($query), array_keys($configuration));
|
||||
$queryExtraKeys = array_diff(array_keys($query), array_keys(self::DEFAULT_OPTIONS));
|
||||
if (0 < \count($queryExtraKeys)) {
|
||||
throw new InvalidArgumentException(sprintf('Unknown option found in DSN: [%s]. Allowed options are [%s]', implode(', ', $queryExtraKeys), implode(', ', self::DEFAULT_OPTIONS)));
|
||||
}
|
||||
|
Reference in New Issue
Block a user