Skip to content

Commit 031b782

Browse files
committed
changes in default transport factory
- set null transport if empty - throw exception in neither dsn nor alias are set.
1 parent ed492e7 commit 031b782

File tree

5 files changed

+31
-79
lines changed

5 files changed

+31
-79
lines changed

Diff for: pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php

-7
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,6 @@ public function addTransportFactory(TransportFactoryInterface $transportFactory)
5252
*/
5353
public function load(array $configs, ContainerBuilder $container)
5454
{
55-
// enable null transport by default.
56-
array_unshift($configs, [
57-
'transport' => [
58-
'default' => 'null://',
59-
],
60-
]);
61-
6255
$config = $this->processConfiguration(new Configuration($this->factories), $configs);
6356

6457
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));

Diff for: pkg/enqueue-bundle/Tests/Unit/DependencyInjection/EnqueueExtensionTest.php

+1-25
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
use Enqueue\Client\TraceableProducer;
1010
use Enqueue\Null\NullContext;
1111
use Enqueue\Null\Symfony\NullTransportFactory;
12-
use Enqueue\Symfony\TransportFactoryInterface;
1312
use Enqueue\Symfony\DefaultTransportFactory;
13+
use Enqueue\Symfony\TransportFactoryInterface;
1414
use Enqueue\Test\ClassExtensionTrait;
1515
use PHPUnit\Framework\TestCase;
1616
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -116,30 +116,6 @@ public function testShouldUseNullTransportAsDefaultWhenExplicitlyConfigured()
116116
);
117117
}
118118

119-
public function testShouldUseNullTransportAsDefaultConfiguredViaDSN()
120-
{
121-
$container = new ContainerBuilder();
122-
123-
$extension = new EnqueueExtension();
124-
$extension->addTransportFactory(new NullTransportFactory());
125-
$extension->addTransportFactory(new DefaultTransportFactory());
126-
127-
$extension->load([[
128-
'transport' => [
129-
'default' => 'null://',
130-
],
131-
]], $container);
132-
133-
self::assertEquals(
134-
'enqueue.transport.default.context',
135-
(string) $container->getAlias('enqueue.transport.context')
136-
);
137-
self::assertEquals(
138-
'enqueue.transport.default_null.context',
139-
(string) $container->getAlias('enqueue.transport.default.context')
140-
);
141-
}
142-
143119
public function testShouldConfigureFooTransport()
144120
{
145121
$container = new ContainerBuilder();

Diff for: pkg/enqueue/Symfony/DefaultTransportFactory.php

+22-15
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,40 @@ public function addConfiguration(ArrayNodeDefinition $builder)
3434
{
3535
$builder
3636
->beforeNormalization()
37-
->ifString()
38-
->then(function ($v) {
39-
if (false === strpos($v, '://')) {
40-
return ['alias' => $v];
37+
->always(function ($v) {
38+
if (is_array($v)) {
39+
if (empty($v['dsn']) && empty($v['alias'])) {
40+
throw new \LogicException('Either dsn or alias option must be set');
41+
}
42+
43+
return $v;
44+
}
45+
46+
if (empty($v)) {
47+
return ['dsn' => 'null://'];
4148
}
4249

43-
return ['dsn' => $v];
50+
if (is_string($v)) {
51+
return false !== strpos($v, '://') ?
52+
['dsn' => $v] :
53+
['alias' => $v];
54+
}
4455
})
4556
->end()
4657
->children()
4758
->scalarNode('alias')->cannotBeEmpty()->end()
4859
->scalarNode('dsn')->cannotBeEmpty()->end()
49-
;
60+
->end()
61+
->end()
62+
;
5063
}
5164

5265
public function createConnectionFactory(ContainerBuilder $container, array $config)
5366
{
5467
if (isset($config['alias'])) {
5568
$aliasId = sprintf('enqueue.transport.%s.connection_factory', $config['alias']);
56-
} elseif (isset($config['dsn'])) {
57-
$aliasId = $this->findFactory($config['dsn'])->createConnectionFactory($container, $config);
5869
} else {
59-
throw new \LogicException('Either dsn or alias option must be set.');
70+
$aliasId = $this->findFactory($config['dsn'])->createConnectionFactory($container, $config);
6071
}
6172

6273
$factoryId = sprintf('enqueue.transport.%s.connection_factory', $this->getName());
@@ -74,10 +85,8 @@ public function createContext(ContainerBuilder $container, array $config)
7485
{
7586
if (isset($config['alias'])) {
7687
$aliasId = sprintf('enqueue.transport.%s.context', $config['alias']);
77-
} elseif (isset($config['dsn'])) {
78-
$aliasId = $this->findFactory($config['dsn'])->createContext($container, $config);
7988
} else {
80-
throw new \LogicException('Either dsn or alias option must be set.');
89+
$aliasId = $this->findFactory($config['dsn'])->createContext($container, $config);
8190
}
8291

8392
$contextId = sprintf('enqueue.transport.%s.context', $this->getName());
@@ -95,10 +104,8 @@ public function createDriver(ContainerBuilder $container, array $config)
95104
{
96105
if (isset($config['alias'])) {
97106
$aliasId = sprintf('enqueue.client.%s.driver', $config['alias']);
98-
} elseif (isset($config['dsn'])) {
99-
$aliasId = $this->findFactory($config['dsn'])->createDriver($container, $config);
100107
} else {
101-
throw new \LogicException('Either dsn or alias option must be set.');
108+
$aliasId = $this->findFactory($config['dsn'])->createDriver($container, $config);
102109
}
103110

104111
$driverId = sprintf('enqueue.client.%s.driver', $this->getName());

Diff for: pkg/enqueue/Tests/Symfony/DefaultTransportFactoryTest.php

+7-31
Original file line numberDiff line numberDiff line change
@@ -72,58 +72,34 @@ public function testShouldAllowAddConfigurationAsDsn()
7272
$this->assertEquals(['dsn' => 'dsn://'], $config);
7373
}
7474

75-
public function testThrowIfNeitherDsnNorAliasConfiguredOnCreateConnectionFactory()
75+
public function testShouldSetNullTransportByDefault()
7676
{
7777
$transport = new DefaultTransportFactory();
7878
$tb = new TreeBuilder();
7979
$rootNode = $tb->root('foo');
8080

8181
$transport->addConfiguration($rootNode);
8282
$processor = new Processor();
83-
$config = $processor->process($tb->buildTree(), [[]]);
8483

85-
// guard
86-
$this->assertEquals([], $config);
84+
$config = $processor->process($tb->buildTree(), [null]);
85+
$this->assertEquals(['dsn' => 'null://'], $config);
8786

88-
$this->expectException(\LogicException::class);
89-
$this->expectExceptionMessage('Either dsn or alias option must be set');
90-
$transport->createConnectionFactory(new ContainerBuilder(), $config);
91-
}
92-
93-
public function testThrowIfNeitherDsnNorAliasConfiguredOnCreateContext()
94-
{
95-
$transport = new DefaultTransportFactory();
96-
$tb = new TreeBuilder();
97-
$rootNode = $tb->root('foo');
98-
99-
$transport->addConfiguration($rootNode);
100-
$processor = new Processor();
101-
$config = $processor->process($tb->buildTree(), [[]]);
102-
103-
// guard
104-
$this->assertEquals([], $config);
105-
106-
$this->expectException(\LogicException::class);
107-
$this->expectExceptionMessage('Either dsn or alias option must be set');
108-
$transport->createContext(new ContainerBuilder(), $config);
87+
$config = $processor->process($tb->buildTree(), ['']);
88+
$this->assertEquals(['dsn' => 'null://'], $config);
10989
}
11090

111-
public function testThrowIfNeitherDsnNorAliasConfiguredOnCreateDriver()
91+
public function testThrowIfNeitherDsnNorAliasConfigured()
11292
{
11393
$transport = new DefaultTransportFactory();
11494
$tb = new TreeBuilder();
11595
$rootNode = $tb->root('foo');
11696

11797
$transport->addConfiguration($rootNode);
11898
$processor = new Processor();
119-
$config = $processor->process($tb->buildTree(), [[]]);
120-
121-
// guard
122-
$this->assertEquals([], $config);
12399

124100
$this->expectException(\LogicException::class);
125101
$this->expectExceptionMessage('Either dsn or alias option must be set');
126-
$transport->createDriver(new ContainerBuilder(), $config);
102+
$processor->process($tb->buildTree(), [[]]);
127103
}
128104

129105
public function testShouldCreateConnectionFactoryFromAlias()

Diff for: pkg/enqueue/composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
"require": {
1414
"php": ">=5.6",
1515
"enqueue/psr-queue": "^0.4",
16+
"enqueue/null": "^0.4",
1617
"ramsey/uuid": "^2|^3.5"
1718
},
1819
"require-dev": {
1920
"phpunit/phpunit": "~5.5",
2021
"symfony/console": "^2.8|^3",
2122
"symfony/dependency-injection": "^2.8|^3",
2223
"symfony/config": "^2.8|^3",
23-
"enqueue/null": "^0.4",
2424
"enqueue/amqp-ext": "^0.4",
2525
"enqueue/fs": "^0.4",
2626
"enqueue/test": "^0.4",

0 commit comments

Comments
 (0)