Passed
Pull Request — master (#649)
by
unknown
06:53
created

testCollectorCanBeDisabled()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 4
rs 10
1
<?php
2
3
namespace OldSound\RabbitMqBundle\Tests\DependencyInjection;
4
5
use OldSound\RabbitMqBundle\DependencyInjection\OldSoundRabbitMqExtension;
6
use PHPUnit\Framework\TestCase;
7
use Symfony\Component\Config\FileLocator;
8
use Symfony\Component\DependencyInjection\ContainerBuilder;
9
use Symfony\Component\DependencyInjection\Definition;
10
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
11
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
12
use Symfony\Component\DependencyInjection\Reference;
13
14
class OldSoundRabbitMqExtensionTest extends TestCase
15
{
16
    public function testFooConnectionDefinition()
17
    {
18
        $container = $this->getContainer('test.yml');
19
20
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection.foo_connection'));
21
        $definition = $container->getDefinition('old_sound_rabbit_mq.connection.foo_connection');
22
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection_factory.foo_connection'));
23
        $factory = $container->getDefinition('old_sound_rabbit_mq.connection_factory.foo_connection');
24
        $this->assertEquals(array('old_sound_rabbit_mq.connection_factory.foo_connection', 'createConnection'), $definition->getFactory());
25
        $this->assertEquals(array(
26
            'host' => 'foo_host',
27
            'port' => 123,
28
            'user' => 'foo_user',
29
            'password' => 'foo_password',
30
            'vhost' => '/foo',
31
            'lazy' => false,
32
            'connection_timeout' => 3,
33
            'read_write_timeout' => 3,
34
            'ssl_context' => array(),
35
            'keepalive' => false,
36
            'heartbeat' => 0,
37
            'use_socket' => false,
38
            'url' => '',
39
            'hosts' => [],
40
        ), $factory->getArgument(1));
41
        $this->assertEquals('%old_sound_rabbit_mq.connection.class%', $definition->getClass());
42
    }
43
44
    public function testSslConnectionDefinition()
45
    {
46
        $container = $this->getContainer('test.yml');
47
48
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection.ssl_connection'));
49
        $definition = $container->getDefinition('old_sound_rabbit_mq.connection.ssl_connection');
50
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection_factory.ssl_connection'));
51
        $factory = $container->getDefinition('old_sound_rabbit_mq.connection_factory.ssl_connection');
52
        $this->assertEquals(array('old_sound_rabbit_mq.connection_factory.ssl_connection', 'createConnection'), $definition->getFactory());
53
        $this->assertEquals(array(
54
            'host' => 'ssl_host',
55
            'port' => 123,
56
            'user' => 'ssl_user',
57
            'password' => 'ssl_password',
58
            'vhost' => '/ssl',
59
            'lazy' => false,
60
            'connection_timeout' => 3,
61
            'read_write_timeout' => 3,
62
            'ssl_context' => array(
63
                'verify_peer' => false,
64
            ),
65
            'keepalive' => false,
66
            'heartbeat' => 0,
67
            'use_socket' => false,
68
            'url' => '',
69
            'hosts' => [],
70
        ), $factory->getArgument(1));
71
        $this->assertEquals('%old_sound_rabbit_mq.connection.class%', $definition->getClass());
72
    }
73
74
    public function testLazyConnectionDefinition()
75
    {
76
        $container = $this->getContainer('test.yml');
77
78
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection.lazy_connection'));
79
        $definition = $container->getDefinition('old_sound_rabbit_mq.connection.lazy_connection');
80
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection_factory.lazy_connection'));
81
        $factory = $container->getDefinition('old_sound_rabbit_mq.connection_factory.lazy_connection');
82
        $this->assertEquals(array('old_sound_rabbit_mq.connection_factory.lazy_connection', 'createConnection'), $definition->getFactory());
83
        $this->assertEquals(array(
84
            'host' => 'lazy_host',
85
            'port' => 456,
86
            'user' => 'lazy_user',
87
            'password' => 'lazy_password',
88
            'vhost' => '/lazy',
89
            'lazy' => true,
90
            'connection_timeout' => 3,
91
            'read_write_timeout' => 3,
92
            'ssl_context' => array(),
93
            'keepalive' => false,
94
            'heartbeat' => 0,
95
            'use_socket' => false,
96
            'url' => '',
97
            'hosts' => [],
98
        ), $factory->getArgument(1));
99
        $this->assertEquals('%old_sound_rabbit_mq.lazy.connection.class%', $definition->getClass());
100
    }
101
102
    public function testDefaultConnectionDefinition()
103
    {
104
        $container = $this->getContainer('test.yml');
105
106
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection.default'));
107
        $definition = $container->getDefinition('old_sound_rabbit_mq.connection.default');
108
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection_factory.default'));
109
        $factory = $container->getDefinition('old_sound_rabbit_mq.connection_factory.default');
110
        $this->assertEquals(array('old_sound_rabbit_mq.connection_factory.default', 'createConnection'), $definition->getFactory());
111
        $this->assertEquals(array(
112
            'host' => 'localhost',
113
            'port' => 5672,
114
            'user' => 'guest',
115
            'password' => 'guest',
116
            'vhost' => '/',
117
            'lazy' => false,
118
            'connection_timeout' => 3,
119
            'read_write_timeout' => 3,
120
            'ssl_context' => array(),
121
            'keepalive' => false,
122
            'heartbeat' => 0,
123
            'use_socket' => false,
124
            'url' => '',
125
            'hosts' => [],
126
        ), $factory->getArgument(1));
127
        $this->assertEquals('%old_sound_rabbit_mq.connection.class%', $definition->getClass());
128
    }
129
130
    public function testSocketConnectionDefinition()
131
    {
132
        $container = $this->getContainer('test.yml');
133
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection.socket_connection'));
134
        $definiton = $container->getDefinition('old_sound_rabbit_mq.connection.socket_connection');
135
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection_factory.socket_connection'));
136
        $this->assertEquals('%old_sound_rabbit_mq.socket_connection.class%', $definiton->getClass());
137
    }
138
139
    public function testLazySocketConnectionDefinition()
140
    {
141
        $container = $this->getContainer('test.yml');
142
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection.lazy_socket'));
143
        $definiton = $container->getDefinition('old_sound_rabbit_mq.connection.lazy_socket');
144
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection_factory.lazy_socket'));
145
        $this->assertEquals('%old_sound_rabbit_mq.lazy.socket_connection.class%', $definiton->getClass());
146
    }
147
148
    public function testClusterConnectionDefinition()
149
    {
150
        $container = $this->getContainer('test.yml');
151
152
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection.cluster_connection'));
153
        $definition = $container->getDefinition('old_sound_rabbit_mq.connection.cluster_connection');
154
        $this->assertTrue($container->has('old_sound_rabbit_mq.connection_factory.cluster_connection'));
155
        $factory = $container->getDefinition('old_sound_rabbit_mq.connection_factory.cluster_connection');
156
        $this->assertEquals(['old_sound_rabbit_mq.connection_factory.cluster_connection', 'createConnection'], $definition->getFactory());
157
        $this->assertEquals([
158
            'hosts' => [
159
                [
160
                    'host' => 'cluster_host',
161
                    'port' => 111,
162
                    'user' => 'cluster_user',
163
                    'password' => 'cluster_password',
164
                    'vhost' => '/cluster',
165
                    'url' => ''
166
                ],
167
                [
168
                    'host' => 'localhost',
169
                    'port' => 5672,
170
                    'user' => 'guest',
171
                    'password' => 'guest',
172
                    'vhost' => '/',
173
                    'url' => 'amqp://cluster_url_host:cluster_url_pass@host:10000/cluster_url_vhost'
174
                ]
175
            ],
176
            'host' => 'localhost',
177
            'port' => 5672,
178
            'user' => 'guest',
179
            'password' => 'guest',
180
            'vhost' => '/',
181
            'lazy' => false,
182
            'connection_timeout' => 3,
183
            'read_write_timeout' => 3,
184
            'ssl_context' => array(),
185
            'keepalive' => false,
186
            'heartbeat' => 0,
187
            'use_socket' => false,
188
            'url' => '',
189
        ], $factory->getArgument(1));
190
        $this->assertEquals('%old_sound_rabbit_mq.connection.class%', $definition->getClass());
191
    }
192
193
    public function testFooBinding()
194
    {
195
        $container = $this->getContainer('test.yml');
196
        $binding = array(
197
            'arguments'                 => null,
198
            'class'                     => '%old_sound_rabbit_mq.binding.class%',
199
            'connection'                => 'default',
200
            'exchange'                  => 'foo',
201
            'destination'               => 'bar',
202
            'destination_is_exchange'   => false,
203
            'nowait'                    => false,
204
            'routing_key'               => 'baz',
205
        );
206
        ksort($binding);
207
        $key = md5(json_encode($binding));
208
        $name = sprintf('old_sound_rabbit_mq.binding.%s', $key);
209
        $this->assertTrue($container->has($name));
210
        $definition = $container->getDefinition($name);
211
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
212
        $this->assertBindingMethodCalls($definition, $binding);
213
    }
214
215
    public function testMooBinding()
216
    {
217
        $container = $this->getContainer('test.yml');
218
        $binding = array(
219
            'arguments'                 => array('moo' => 'cow'),
220
            'class'                     => '%old_sound_rabbit_mq.binding.class%',
221
            'connection'                => 'default2',
222
            'exchange'                  => 'moo',
223
            'destination'               => 'cow',
224
            'destination_is_exchange'   => true,
225
            'nowait'                    => true,
226
            'routing_key'               => null,
227
        );
228
        ksort($binding);
229
        $key = md5(json_encode($binding));
230
        $name = sprintf('old_sound_rabbit_mq.binding.%s', $key);
231
        $this->assertTrue($container->has($name));
232
        $definition = $container->getDefinition($name);
233
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default2');
234
        $this->assertBindingMethodCalls($definition, $binding);
235
    }
236
237
    protected function assertBindingMethodCalls(Definition $definition, $binding)
238
    {
239
        $this->assertEquals(array(
240
            array(
241
                'setArguments',
242
                array(
243
                    $binding['arguments']
244
                )
245
            ),
246
            array(
247
                'setDestination',
248
                array(
249
                    $binding['destination']
250
                )
251
            ),
252
            array(
253
                'setDestinationIsExchange',
254
                array(
255
                    $binding['destination_is_exchange']
256
                )
257
            ),
258
            array(
259
                'setExchange',
260
                array(
261
                    $binding['exchange']
262
                )
263
            ),
264
            array(
265
                'isNowait',
266
                array(
267
                    $binding['nowait']
268
                )
269
            ),
270
            array(
271
                'setRoutingKey',
272
                array(
273
                    $binding['routing_key']
274
                )
275
            ),
276
        ),
277
            $definition->getMethodCalls()
278
        );
279
    }
280
    public function testFooProducerDefinition()
281
    {
282
        $container = $this->getContainer('test.yml');
283
284
        $this->assertTrue($container->has('old_sound_rabbit_mq.foo_producer_producer'));
285
        $definition = $container->getDefinition('old_sound_rabbit_mq.foo_producer_producer');
286
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.foo_connection');
287
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.foo_producer');
288
        $this->assertEquals(array(
289
                array(
290
                    'setExchangeOptions',
291
                    array(
292
                        array(
293
                            'name'        => 'foo_exchange',
294
                            'type'        => 'direct',
295
                            'passive'     => true,
296
                            'durable'     => false,
297
                            'auto_delete' => true,
298
                            'internal'    => true,
299
                            'nowait'      => true,
300
                            'arguments'   => null,
301
                            'ticket'      => null,
302
                            'declare'     => true,
303
                        )
304
                    )
305
                ),
306
                array(
307
                    'setQueueOptions',
308
                    array(
309
                        array(
310
                            'name'        => '',
311
                            'declare'     => false,
312
                        )
313
                    )
314
                )
315
            ),
316
            $definition->getMethodCalls()
317
        );
318
        $this->assertEquals('My\Foo\Producer', $definition->getClass());
319
    }
320
321
    public function testProducerArgumentAliases()
322
    {
323
        /** @var ContainerBuilder $container */
324
        $container = $this->getContainer('test.yml');
325
326
        if (!method_exists($container, 'registerAliasForArgument')) {
327
            // don't test if autowiring arguments functionality is not available
328
            return;
329
        }
330
331
        // test expected aliases
332
        $producerInterface = 'OldSound\RabbitMqBundle\RabbitMq\ProducerInterface';
333
        $expectedAliases = array(
334
            $producerInterface . ' $fooProducer' => 'old_sound_rabbit_mq.foo_producer_producer',
335
            'My\Foo\Producer $fooProducer' => 'old_sound_rabbit_mq.foo_producer_producer',
336
            $producerInterface . ' $fooProducerAliasedProducer' => 'old_sound_rabbit_mq.foo_producer_aliased_producer',
337
            'My\Foo\Producer $fooProducerAliasedProducer' => 'old_sound_rabbit_mq.foo_producer_aliased_producer',
338
            $producerInterface . ' $defaultProducer' => 'old_sound_rabbit_mq.default_producer_producer',
339
            '%old_sound_rabbit_mq.producer.class% $defaultProducer' => 'old_sound_rabbit_mq.default_producer_producer',
340
        );
341
342
        foreach($expectedAliases as $id => $target) {
343
            $this->assertTrue($container->hasAlias($id), sprintf('Container should have %s alias for autowiring support.', $id));
344
345
            $alias = $container->getAlias($id);
346
            $this->assertEquals($target, (string)$alias, sprintf('Autowiring for %s should use %s.', $id, $target));
347
            $this->assertFalse($alias->isPublic(), sprintf('Autowiring alias for %s should be private', $id));
348
        }
349
    }
350
351
    /**
352
     * @group alias
353
     */
354
    public function testAliasedFooProducerDefinition()
355
    {
356
        $container = $this->getContainer('test.yml');
357
358
        $this->assertTrue($container->has('old_sound_rabbit_mq.foo_producer_producer'));
359
        $this->assertTrue($container->has('foo_producer_alias'));
360
    }
361
362
    public function testDefaultProducerDefinition()
363
    {
364
        $container = $this->getContainer('test.yml');
365
366
        $this->assertTrue($container->has('old_sound_rabbit_mq.default_producer_producer'));
367
        $definition = $container->getDefinition('old_sound_rabbit_mq.default_producer_producer');
368
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
369
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.default_producer');
370
        $this->assertEquals(array(
371
                array(
372
                    'setExchangeOptions',
373
                    array(
374
                        array(
375
                            'name'        => 'default_exchange',
376
                            'type'        => 'direct',
377
                            'passive'     => false,
378
                            'durable'     => true,
379
                            'auto_delete' => false,
380
                            'internal'    => false,
381
                            'nowait'      => false,
382
                            'arguments'   => null,
383
                            'ticket'      => null,
384
                            'declare'     => true,
385
                        )
386
                    )
387
                ),
388
                array(
389
                    'setQueueOptions',
390
                    array(
391
                        array(
392
                            'name'        => '',
393
                            'declare'     => false,
394
                        )
395
                    )
396
                )
397
            ),
398
            $definition->getMethodCalls()
399
        );
400
        $this->assertEquals('%old_sound_rabbit_mq.producer.class%', $definition->getClass());
401
    }
402
403
    public function testFooConsumerDefinition()
404
    {
405
        $container = $this->getContainer('test.yml');
406
407
        $this->assertTrue($container->has('old_sound_rabbit_mq.foo_consumer_consumer'));
408
        $definition = $container->getDefinition('old_sound_rabbit_mq.foo_consumer_consumer');
409
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.foo_connection');
410
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.foo_consumer');
411
        $this->assertEquals(array(
412
                array(
413
                    'setExchangeOptions',
414
                    array(
415
                        array(
416
                            'name'        => 'foo_exchange',
417
                            'type'        => 'direct',
418
                            'passive'     => true,
419
                            'durable'     => false,
420
                            'auto_delete' => true,
421
                            'internal'    => true,
422
                            'nowait'      => true,
423
                            'arguments'   => null,
424
                            'ticket'      => null,
425
                            'declare'     => true,
426
                        )
427
                    )
428
                ),
429
                array(
430
                    'setQueueOptions',
431
                    array(
432
                        array(
433
                            'name'         => 'foo_queue',
434
                            'passive'      => true,
435
                            'durable'      => false,
436
                            'exclusive'    => true,
437
                            'auto_delete'  => true,
438
                            'nowait'       => true,
439
                            'arguments'    => null,
440
                            'ticket'       => null,
441
                            'routing_keys' => array('android.#.upload', 'iphone.upload'),
442
                            'declare'      => true,
443
                        )
444
                    )
445
                ),
446
                array(
447
                    'setCallback',
448
                    array(array(new Reference('foo.callback'), 'execute'))
449
                ),
450
                array(
451
                    'setTimeoutWait',
452
                    array(3)
453
                )
454
            ),
455
            $definition->getMethodCalls()
456
        );
457
        $this->assertEquals('%old_sound_rabbit_mq.consumer.class%', $definition->getClass());
458
    }
459
460
    public function testConsumerArgumentAliases()
461
    {
462
        /** @var ContainerBuilder $container */
463
        $container = $this->getContainer('test.yml');
464
465
        if (!method_exists($container, 'registerAliasForArgument')) {
466
            // don't test if autowiring arguments functionality is not available
467
            return;
468
        }
469
470
        $consumerInterface = 'OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface';
471
        $expectedAliases = array(
472
            $consumerInterface . ' $fooConsumer' => 'old_sound_rabbit_mq.foo_consumer_consumer',
473
            '%old_sound_rabbit_mq.consumer.class% $fooConsumer' => 'old_sound_rabbit_mq.foo_consumer_consumer',
474
            $consumerInterface . ' $defaultConsumer' => 'old_sound_rabbit_mq.default_consumer_consumer',
475
            '%old_sound_rabbit_mq.consumer.class% $defaultConsumer' => 'old_sound_rabbit_mq.default_consumer_consumer',
476
            $consumerInterface . ' $qosTestConsumer' => 'old_sound_rabbit_mq.qos_test_consumer_consumer',
477
            '%old_sound_rabbit_mq.consumer.class% $qosTestConsumer' => 'old_sound_rabbit_mq.qos_test_consumer_consumer'
478
        );
479
        foreach($expectedAliases as $id => $target) {
480
            $this->assertTrue($container->hasAlias($id), sprintf('Container should have %s alias for autowiring support.', $id));
481
482
            $alias = $container->getAlias($id);
483
            $this->assertEquals($target, (string)$alias, sprintf('Autowiring for %s should use %s.', $id, $target));
484
            $this->assertFalse($alias->isPublic(), sprintf('Autowiring alias for %s should be private', $id));
485
        }
486
    }
487
488
    public function testDefaultConsumerDefinition()
489
    {
490
        $container = $this->getContainer('test.yml');
491
492
        $this->assertTrue($container->has('old_sound_rabbit_mq.default_consumer_consumer'));
493
        $definition = $container->getDefinition('old_sound_rabbit_mq.default_consumer_consumer');
494
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
495
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.default_consumer');
496
        $this->assertEquals(array(
497
                array(
498
                    'setExchangeOptions',
499
                    array(
500
                        array(
501
                            'name'        => 'default_exchange',
502
                            'type'        => 'direct',
503
                            'passive'     => false,
504
                            'durable'     => true,
505
                            'auto_delete' => false,
506
                            'internal'    => false,
507
                            'nowait'      => false,
508
                            'arguments'   => null,
509
                            'ticket'      => null,
510
                            'declare'     => true,
511
                        )
512
                    )
513
                ),
514
                array(
515
                    'setQueueOptions',
516
                    array(
517
                        array(
518
                            'name'        => 'default_queue',
519
                            'passive'     => false,
520
                            'durable'     => true,
521
                            'exclusive'   => false,
522
                            'auto_delete' => false,
523
                            'nowait'      => false,
524
                            'arguments'   => null,
525
                            'ticket'      => null,
526
                            'routing_keys' => array(),
527
                            'declare'     => true,
528
                        )
529
                    )
530
                ),
531
                array(
532
                    'setCallback',
533
                    array(array(new Reference('default.callback'), 'execute'))
534
                )
535
            ),
536
            $definition->getMethodCalls()
537
        );
538
        $this->assertEquals('%old_sound_rabbit_mq.consumer.class%', $definition->getClass());
539
    }
540
541
    public function testConsumerWithQosOptions()
542
    {
543
        $container = $this->getContainer('test.yml');
544
545
        $this->assertTrue($container->has('old_sound_rabbit_mq.qos_test_consumer_consumer'));
546
        $definition = $container->getDefinition('old_sound_rabbit_mq.qos_test_consumer_consumer');
547
        $methodCalls = $definition->getMethodCalls();
548
549
        $setQosParameters = null;
550
        foreach ($methodCalls as $methodCall) {
551
            if ($methodCall[0] === 'setQosOptions') {
552
                $setQosParameters = $methodCall[1];
553
            }
554
        }
555
556
        $this->assertIsArray($setQosParameters);
557
        $this->assertEquals(
558
            array(
559
                1024,
560
                1,
561
                true
562
            ),
563
            $setQosParameters
564
        );
565
    }
566
567
    public function testMultipleConsumerDefinition()
568
    {
569
        $container = $this->getContainer('test.yml');
570
571
        $this->assertTrue($container->has('old_sound_rabbit_mq.multi_test_consumer_multiple'));
572
        $definition = $container->getDefinition('old_sound_rabbit_mq.multi_test_consumer_multiple');
573
        $this->assertEquals(array(
574
                array(
575
                    'setExchangeOptions',
576
                    array(
577
                        array(
578
                            'name'        => 'foo_multiple_exchange',
579
                            'type'        => 'direct',
580
                            'passive'     => false,
581
                            'durable'     => true,
582
                            'auto_delete' => false,
583
                            'internal'    => false,
584
                            'nowait'      => false,
585
                            'arguments'   => null,
586
                            'ticket'      => null,
587
                            'declare'     => true,
588
                        )
589
                    )
590
                ),
591
                array(
592
                    'setQueues',
593
                    array(
594
                        array(
595
                            'multi_test_1' => array(
596
                                'name'         => 'multi_test_1',
597
                                'passive'      => false,
598
                                'durable'      => true,
599
                                'exclusive'    => false,
600
                                'auto_delete'  => false,
601
                                'nowait'       => false,
602
                                'arguments'    => null,
603
                                'ticket'       => null,
604
                                'routing_keys' => array(),
605
                                'callback'     => array(new Reference('foo.multiple_test1.callback'), 'execute'),
606
                                'declare'      => true,
607
                            ),
608
                            'foo_bar_2' => array(
609
                                'name'         => 'foo_bar_2',
610
                                'passive'      => true,
611
                                'durable'      => false,
612
                                'exclusive'    => true,
613
                                'auto_delete'  => true,
614
                                'nowait'       => true,
615
                                'arguments'    => null,
616
                                'ticket'       => null,
617
                                'routing_keys' => array(
618
                                    'android.upload',
619
                                    'iphone.upload'
620
                                ),
621
                                'callback'     => array(new Reference('foo.multiple_test2.callback'), 'execute'),
622
                                'declare'      => true,
623
                            )
624
                        )
625
                    )
626
                ),
627
                array(
628
                    'setQueuesProvider',
629
                    array(
630
                        new Reference('foo.queues_provider')
631
                    )
632
                ),
633
                array(
634
                    'setTimeoutWait',
635
                    array(3)
636
                )
637
            ),
638
            $definition->getMethodCalls()
639
        );
640
    }
641
642
    public function testDynamicConsumerDefinition()
643
    {
644
        $container = $this->getContainer('test.yml');
645
646
        $this->assertTrue($container->has('old_sound_rabbit_mq.foo_dyn_consumer_dynamic'));
647
        $this->assertTrue($container->has('old_sound_rabbit_mq.bar_dyn_consumer_dynamic'));
648
649
        $definition = $container->getDefinition('old_sound_rabbit_mq.foo_dyn_consumer_dynamic');
650
        $this->assertEquals(array(
651
                array(
652
                    'setExchangeOptions',
653
                        array(
654
                            array(
655
                                'name' => 'foo_dynamic_exchange',
656
                                'type' => 'direct',
657
                                'passive' => false,
658
                                'durable' => true,
659
                                'auto_delete' => false,
660
                                'internal' => false,
661
                                'nowait' => false,
662
                                'declare' => true,
663
                                'arguments' => NULL,
664
                                'ticket' => NULL,
665
                            )
666
                        )
667
                ),
668
                array(
669
                    'setCallback',
670
                        array(
671
                            array(new Reference('foo.dynamic.callback'), 'execute')
672
                        )
673
                ),
674
                array(
675
                    'setQueueOptionsProvider',
676
                        array(
677
                            new Reference('foo.dynamic.provider')
678
                        )
679
                )
680
            ),
681
            $definition->getMethodCalls()
682
        );
683
    }
684
685
    public function testFooAnonConsumerDefinition()
686
    {
687
        $container = $this->getContainer('test.yml');
688
689
        $this->assertTrue($container->has('old_sound_rabbit_mq.foo_anon_consumer_anon'));
690
        $definition = $container->getDefinition('old_sound_rabbit_mq.foo_anon_consumer_anon');
691
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.foo_connection');
692
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.foo_anon_consumer');
693
        $this->assertEquals(array(
694
                array(
695
                    'setExchangeOptions',
696
                    array(
697
                        array(
698
                            'name'        => 'foo_anon_exchange',
699
                            'type'        => 'direct',
700
                            'passive'     => true,
701
                            'durable'     => false,
702
                            'auto_delete' => true,
703
                            'internal'    => true,
704
                            'nowait'      => true,
705
                            'arguments'   => null,
706
                            'ticket'      => null,
707
                            'declare'     => true,
708
                        )
709
                    )
710
                ),
711
                array(
712
                    'setCallback',
713
                    array(array(new Reference('foo_anon.callback'), 'execute'))
714
                )
715
            ),
716
            $definition->getMethodCalls()
717
        );
718
        $this->assertEquals('%old_sound_rabbit_mq.anon_consumer.class%', $definition->getClass());
719
    }
720
721
    public function testDefaultAnonConsumerDefinition()
722
    {
723
        $container = $this->getContainer('test.yml');
724
725
        $this->assertTrue($container->has('old_sound_rabbit_mq.default_anon_consumer_anon'));
726
        $definition = $container->getDefinition('old_sound_rabbit_mq.default_anon_consumer_anon');
727
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
728
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.default_anon_consumer');
729
        $this->assertEquals(array(
730
                array(
731
                    'setExchangeOptions',
732
                    array(
733
                        array(
734
                            'name'        => 'default_anon_exchange',
735
                            'type'        => 'direct',
736
                            'passive'     => false,
737
                            'durable'     => true,
738
                            'auto_delete' => false,
739
                            'internal'    => false,
740
                            'nowait'      => false,
741
                            'arguments'   => null,
742
                            'ticket'      => null,
743
                            'declare'     => true,
744
                        )
745
                    )
746
                ),
747
                array(
748
                    'setCallback',
749
                    array(array(new Reference('default_anon.callback'), 'execute'))
750
                )
751
            ),
752
            $definition->getMethodCalls()
753
        );
754
        $this->assertEquals('%old_sound_rabbit_mq.anon_consumer.class%', $definition->getClass());
755
    }
756
757
    public function testFooRpcClientDefinition()
758
    {
759
        $container = $this->getContainer('rpc-clients.yml');
760
761
        $this->assertTrue($container->has('old_sound_rabbit_mq.foo_client_rpc'));
762
        $definition = $container->getDefinition('old_sound_rabbit_mq.foo_client_rpc');
763
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.foo_connection');
764
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.foo_client');
765
        $this->assertEquals(
766
            array(
767
                array('initClient', array(true)),
768
                array('setUnserializer', array('json_decode')),
769
                array('setDirectReplyTo', array(true)),
770
            ),
771
            $definition->getMethodCalls()
772
        );
773
        $this->assertEquals('%old_sound_rabbit_mq.rpc_client.class%', $definition->getClass());
774
    }
775
776
    public function testDefaultRpcClientDefinition()
777
    {
778
        $container = $this->getContainer('rpc-clients.yml');
779
780
        $this->assertTrue($container->has('old_sound_rabbit_mq.default_client_rpc'));
781
        $definition = $container->getDefinition('old_sound_rabbit_mq.default_client_rpc');
782
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
783
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.default_client');
784
        $this->assertEquals(
785
            array(
786
                array('initClient', array(true)),
787
                array('setUnserializer', array('unserialize')),
788
                array('setDirectReplyTo', array(false)),
789
            ),
790
            $definition->getMethodCalls()
791
        );
792
        $this->assertFalse($definition->isLazy());
793
        $this->assertEquals('%old_sound_rabbit_mq.rpc_client.class%', $definition->getClass());
794
    }
795
796
    public function testLazyRpcClientDefinition()
797
    {
798
        $container = $this->getContainer('rpc-clients.yml');
799
800
        $this->assertTrue($container->has('old_sound_rabbit_mq.lazy_client_rpc'));
801
        $definition = $container->getDefinition('old_sound_rabbit_mq.lazy_client_rpc');
802
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
803
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.lazy_client');
804
        $this->assertEquals(
805
            array(
806
                array('initClient', array(true)),
807
                array('setUnserializer', array('unserialize')),
808
                array('setDirectReplyTo', array(false)),
809
            ),
810
            $definition->getMethodCalls()
811
        );
812
        $this->assertTrue($definition->isLazy());
813
        $this->assertEquals('%old_sound_rabbit_mq.rpc_client.class%', $definition->getClass());
814
    }
815
816
    public function testFooRpcServerDefinition()
817
    {
818
        $container = $this->getContainer('test.yml');
819
820
        $this->assertTrue($container->has('old_sound_rabbit_mq.foo_server_server'));
821
        $definition = $container->getDefinition('old_sound_rabbit_mq.foo_server_server');
822
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.foo_connection');
823
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.foo_server');
824
        $this->assertEquals(array(
825
                array('initServer', array('foo_server')),
826
                array('setCallback', array(array(new Reference('foo_server.callback'), 'execute'))),
827
                array('setSerializer', array('json_encode')),
828
            ),
829
            $definition->getMethodCalls()
830
        );
831
        $this->assertEquals('%old_sound_rabbit_mq.rpc_server.class%', $definition->getClass());
832
    }
833
834
    public function testDefaultRpcServerDefinition()
835
    {
836
        $container = $this->getContainer('test.yml');
837
838
        $this->assertTrue($container->has('old_sound_rabbit_mq.default_server_server'));
839
        $definition = $container->getDefinition('old_sound_rabbit_mq.default_server_server');
840
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
841
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.default_server');
842
        $this->assertEquals(array(
843
                array('initServer', array('default_server')),
844
                array('setCallback', array(array(new Reference('default_server.callback'), 'execute'))),
845
                array('setSerializer', array('serialize')),
846
            ),
847
            $definition->getMethodCalls()
848
        );
849
        $this->assertEquals('%old_sound_rabbit_mq.rpc_server.class%', $definition->getClass());
850
    }
851
852
    public function testRpcServerWithQueueOptionsDefinition()
853
    {
854
        $container = $this->getContainer('test.yml');
855
856
        $this->assertTrue($container->has('old_sound_rabbit_mq.server_with_queue_options_server'));
857
        $definition = $container->getDefinition('old_sound_rabbit_mq.server_with_queue_options_server');
858
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
859
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.server_with_queue_options');
860
        $this->assertEquals(array(
861
                array('initServer', array('server_with_queue_options')),
862
                array('setCallback', array(array(new Reference('server_with_queue_options.callback'), 'execute'))),
863
                array('setQueueOptions', array(array(
864
                    'name'         => 'server_with_queue_options-queue',
865
                    'passive'      => false,
866
                    'durable'      => true,
867
                    'exclusive'    => false,
868
                    'auto_delete'  => false,
869
                    'nowait'       => false,
870
                    'arguments'    => null,
871
                    'ticket'       => null,
872
                    'routing_keys' => array(),
873
                    'declare'      => true,
874
                ))),
875
                array('setSerializer', array('serialize')),
876
            ),
877
            $definition->getMethodCalls()
878
        );
879
        $this->assertEquals('%old_sound_rabbit_mq.rpc_server.class%', $definition->getClass());
880
    }
881
882
    public function testRpcServerWithExchangeOptionsDefinition()
883
    {
884
        $container = $this->getContainer('test.yml');
885
886
        $this->assertTrue($container->has('old_sound_rabbit_mq.server_with_exchange_options_server'));
887
        $definition = $container->getDefinition('old_sound_rabbit_mq.server_with_exchange_options_server');
888
        $this->assertEquals((string) $definition->getArgument(0), 'old_sound_rabbit_mq.connection.default');
889
        $this->assertEquals((string) $definition->getArgument(1), 'old_sound_rabbit_mq.channel.server_with_exchange_options');
890
        $this->assertEquals(array(
891
            array('initServer', array('server_with_exchange_options')),
892
            array('setCallback', array(array(new Reference('server_with_exchange_options.callback'), 'execute'))),
893
            array('setExchangeOptions', array(array(
894
                'name'         => 'exchange',
895
                'type'         => 'topic',
896
                'passive'      => false,
897
                'durable'      => true,
898
                'auto_delete'  => false,
899
                'internal'     => null,
900
                'nowait'       => false,
901
                'declare'      => true,
902
                'arguments'    => null,
903
                'ticket'       => null,
904
            ))),
905
            array('setSerializer', array('serialize')),
906
        ),
907
            $definition->getMethodCalls()
908
        );
909
        $this->assertEquals('%old_sound_rabbit_mq.rpc_server.class%', $definition->getClass());
910
    }
911
912
    public function testHasCollectorWhenChannelsExist()
913
    {
914
        $container = $this->getContainer('collector.yml');
915
916
        $this->assertTrue($container->has('old_sound_rabbit_mq.data_collector'));
917
        $definition = $container->getDefinition('old_sound_rabbit_mq.data_collector');
918
919
        $this->assertEquals(array(
920
                new Reference('old_sound_rabbit_mq.channel.default_producer'),
921
                new Reference('old_sound_rabbit_mq.channel.default_consumer'),
922
            ),
923
            $definition->getArgument(0)
924
        );
925
    }
926
927
    public function testHasNoCollectorWhenNoChannelsExist()
928
    {
929
        $container = $this->getContainer('no_collector.yml');
930
        $this->assertFalse($container->has('old_sound_rabbit_mq.data_collector'));
931
    }
932
933
    public function testCollectorCanBeDisabled()
934
    {
935
        $container = $this->getContainer('collector_disabled.yml');
936
        $this->assertFalse($container->has('old_sound_rabbit_mq.data_collector'));
937
    }
938
939
    public function testExchangeArgumentsAreArray()
940
    {
941
        $container = $this->getContainer('exchange_arguments.yml');
942
943
        $definition = $container->getDefinition('old_sound_rabbit_mq.producer_producer');
944
        $calls = $definition->getMethodCalls();
945
        $this->assertEquals('setExchangeOptions', $calls[0][0]);
946
        $options = $calls[0][1];
947
        $this->assertEquals(array('name' => 'bar'), $options[0]['arguments']);
948
949
        $definition = $container->getDefinition('old_sound_rabbit_mq.consumer_consumer');
950
        $calls = $definition->getMethodCalls();
951
        $this->assertEquals('setExchangeOptions', $calls[0][0]);
952
        $options = $calls[0][1];
953
        $this->assertEquals(array('name' => 'bar'), $options[0]['arguments']);
954
    }
955
956
    public function testProducerWithoutExplicitExchangeOptionsConnectsToAMQPDefault()
957
    {
958
        $container = $this->getContainer('no_exchange_options.yml');
959
960
        $definition = $container->getDefinition('old_sound_rabbit_mq.producer_producer');
961
        $calls = $definition->getMethodCalls();
962
        $this->assertEquals('setExchangeOptions', $calls[0][0]);
963
        $options = $calls[0][1];
964
965
        $this->assertEquals('', $options[0]['name']);
966
        $this->assertEquals('direct', $options[0]['type']);
967
        $this->assertEquals(false, $options[0]['declare']);
968
        $this->assertEquals(true, $options[0]['passive']);
969
    }
970
971
    public function testProducersWithLogger()
972
    {
973
        $container = $this->getContainer('config_with_enable_logger.yml');
974
        $definition = $container->getDefinition('old_sound_rabbit_mq.default_consumer_consumer');
975
        $this->assertTrue(
976
            $definition->hasTag('monolog.logger'), 'service should be marked for logger'
977
        );
978
    }
979
980
    private function getContainer($file, $debug = false)
981
    {
982
        $container = new ContainerBuilder(new ParameterBag(array('kernel.debug' => $debug)));
983
        $container->registerExtension(new OldSoundRabbitMqExtension());
984
985
        $locator = new FileLocator(__DIR__.'/Fixtures');
986
        $loader = new YamlFileLoader($container, $locator);
987
        $loader->load($file);
988
989
        $container->getCompilerPassConfig()->setOptimizationPasses(array());
990
        $container->getCompilerPassConfig()->setRemovingPasses(array());
991
        $container->compile();
992
993
        return $container;
994
    }
995
}
996