Completed
Push — master ( c76232...ce4950 )
by Matthew
27:26 queued 01:28
created

DtcQueueExtensionTest::testPredis()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 25
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 17
nc 1
nop 0
1
<?php
2
3
namespace Dtc\QueueBundle\Tests\DependencyInjection;
4
5
use Dtc\QueueBundle\DependencyInjection\DtcQueueExtension;
6
use Dtc\QueueBundle\Manager\PriorityJobManager;
7
use PHPUnit\Framework\TestCase;
8
use Symfony\Component\DependencyInjection\ContainerBuilder;
9
10
class DtcQueueExtensionTest extends TestCase
11
{
12
    public function testDtcQueueExtension()
13
    {
14
        $dtcQueueExtension = new DtcQueueExtension();
15
        $configs = [];
16
        $containerBuilder = new ContainerBuilder();
17
        $dtcQueueExtension->load($configs, $containerBuilder);
18
19
        self::assertEquals('dtc_queue', $dtcQueueExtension->getAlias());
20
    }
21
22
    protected function tryBadConfigs(array $configs)
23
    {
24
        return $this->tryConfigs($configs, false);
25
    }
26
27
    public function testBeanstalkExtension()
28
    {
29
        $configs = ['config' => ['beanstalkd' => ['host' => null]]];
30
        $this->tryBadConfigs($configs);
31
        $configs = ['config' => ['beanstalkd' => ['tube' => null]]];
32
        $this->tryBadConfigs($configs);
33
34
        $configs = ['config' => ['beanstalkd' => ['host' => 'somehost']]];
35
        $containerBuilder = $this->tryConfigs($configs);
36
        self::assertEquals('somehost', $containerBuilder->getParameter('dtc_queue.beanstalkd.host'));
37
38
        $configs = ['config' => ['beanstalkd' => ['host' => 'somehost', 'tube' => 'something']]];
39
        $containerBuilder = $this->tryConfigs($configs);
40
41
        self::assertEquals('something', $containerBuilder->getParameter('dtc_queue.beanstalkd.tube'));
42
        self::assertEquals('somehost', $containerBuilder->getParameter('dtc_queue.beanstalkd.host'));
43
    }
44
45
    public function testPriority()
46
    {
47
        $configs = [];
48
        $containerBuilder = $this->tryConfigs($configs);
49
        self::assertEquals(255, $containerBuilder->getParameter('dtc_queue.priority.max'));
50
        self::assertEquals(PriorityJobManager::PRIORITY_DESC, $containerBuilder->getParameter('dtc_queue.priority.direction'));
51
        $configs = ['config' => ['priority' => ['max' => 200]]];
52
        $containerBuilder = $this->tryConfigs($configs);
53
        self::assertEquals(200, $containerBuilder->getParameter('dtc_queue.priority.max'));
54
        $configs = ['config' => ['priority' => ['max' => null]]];
55
        $this->tryBadConfigs($configs);
56
        $configs = ['config' => ['priority' => ['max' => 0]]];
57
        $this->tryBadConfigs($configs);
58
        $configs = ['config' => ['priority' => ['direction' => 'asdf']]];
59
        $this->tryBadConfigs($configs);
60
61
        $configs = ['config' => ['priority' => ['direction' => PriorityJobManager::PRIORITY_ASC]]];
62
        $containerBuilder = $this->tryConfigs($configs);
63
        self::assertEquals(PriorityJobManager::PRIORITY_ASC, $containerBuilder->getParameter('dtc_queue.priority.direction'));
64
    }
65
66
    protected function tryConfigs(array $configs, $good = true)
67
    {
68
        $dtcQueueExtension = new DtcQueueExtension();
69
        $containerBuilder = new ContainerBuilder();
70
71
        $failed = false;
72
        try {
73
            $dtcQueueExtension->load($configs, $containerBuilder);
74
            if (!$good) {
75
                $failed = true;
76
            }
77
        } catch (\Exception $exception) {
78
            if ($good) {
79
                self::fail($exception->getMessage());
80
            }
81
        }
82
        self::assertFalse($failed);
83
84
        return $containerBuilder;
85
    }
86
87
    public function testSncRedis()
88
    {
89
        $configs = ['config' => ['redis' => ['snc_redis' => ['type' => 'asdf']]]];
90
        $this->tryBadConfigs($configs);
91
92
        $configs = ['config' => ['redis' => ['snc_redis' => ['type' => 'predis']]]];
93
        $this->tryBadConfigs($configs);
94
95
        $configs = ['config' => ['redis' => ['snc_redis' => ['alias' => 'asdf']]]];
96
        $this->tryBadConfigs($configs);
97
98
        $configs = ['config' => ['redis' => ['snc_redis' => ['alias' => 'default', 'type' => 'predis']]]];
99
        $containerBuilder = $this->tryConfigs($configs);
100
        self::assertEquals('default', $containerBuilder->getParameter('dtc_queue.redis.snc_redis.alias'));
101
        self::assertEquals('predis', $containerBuilder->getParameter('dtc_queue.redis.snc_redis.type'));
102
    }
103
104
    public function testPredis()
105
    {
106
        $configs = ['config' => ['redis' => ['predis' => ['dsn' => 'redis://localhost']]]];
107
        $containerBuilder = $this->tryConfigs($configs);
108
        self::assertEquals('redis://localhost', $containerBuilder->getParameter('dtc_queue.redis.predis.dsn'));
109
        self::assertFalse($containerBuilder->hasParameter('dtc_queue.redis.snc_redis.alias'));
110
111
        $configs = [
112
            'config' => [
113
                'redis' => [
114
                    'predis' => [
115
                        'connection_parameters' => [
116
                            'host' => 'localhost',
117
                            'port' => 6379,
118
                        ],
119
                    ],
120
                ],
121
            ],
122
        ];
123
        $containerBuilder = $this->tryConfigs($configs);
124
        $this->arrayTest($containerBuilder, 'dtc_queue.redis.predis.connection_parameters', 'host', 'localhost');
125
        $this->arrayTest($containerBuilder, 'dtc_queue.redis.predis.connection_parameters', 'port', 6379);
126
        $this->arrayTest($containerBuilder, 'dtc_queue.redis.predis.connection_parameters', 'timeout', 5.0);
127
        $this->arrayTest($containerBuilder, 'dtc_queue.redis.predis.connection_parameters', 'scheme', 'tcp');
128
    }
129
130
    public function testPhpRedis()
131
    {
132
        $configs = ['config' => ['redis' => ['phpredis' => ['host' => 'localhost', 'port' => 6379]]]];
133
        $containerBuilder = $this->tryConfigs($configs);
134
        $this->assertEquals('localhost', $containerBuilder->getParameter('dtc_queue.redis.phpredis.host'));
135
        $this->assertEquals(6379, $containerBuilder->getParameter('dtc_queue.redis.phpredis.port'));
136
        $this->assertEquals(0, $containerBuilder->getParameter('dtc_queue.redis.phpredis.timeout'));
137
        $this->assertEquals(0, $containerBuilder->getParameter('dtc_queue.redis.phpredis.read_timeout'));
138
        $this->assertEquals(null, $containerBuilder->getParameter('dtc_queue.redis.phpredis.retry_interval'));
139
        $this->assertFalse($containerBuilder->hasParameter('dtc_queue.redis.phpredis.auth'));
140
141
        $configs = ['config' => ['redis' => ['phpredis' => ['host' => 'localhost', 'port' => 6379, 'read_timeout' => 12.32, 'timeout' => 1.3, 'retry_interval' => 1, 'auth' => 'asdf']]]];
142
        $containerBuilder = $this->tryConfigs($configs);
143
        $this->assertEquals('localhost', $containerBuilder->getParameter('dtc_queue.redis.phpredis.host'));
144
        $this->assertEquals(6379, $containerBuilder->getParameter('dtc_queue.redis.phpredis.port'));
145
        $this->assertEquals(1.3, $containerBuilder->getParameter('dtc_queue.redis.phpredis.timeout'));
146
        $this->assertEquals(12.32, $containerBuilder->getParameter('dtc_queue.redis.phpredis.read_timeout'));
147
        $this->assertEquals(1, $containerBuilder->getParameter('dtc_queue.redis.phpredis.retry_interval'));
148
        $this->assertEquals('asdf', $containerBuilder->getParameter('dtc_queue.redis.phpredis.auth'));
149
    }
150
151
    public function testRabbitMq()
152
    {
153
        $configs = ['config' => ['rabbit_mq' => []]];
154
        $this->tryBadConfigs($configs);
155
156
        $configs = ['config' => ['rabbit_mq' => ['host' => 'somehost', 'port' => 1234, 'user' => 'auser', 'password' => 'pass']]];
157
        $containerBuilder = $this->tryConfigs($configs);
158
        $this->arrayTest($containerBuilder, 'dtc_queue.rabbit_mq', 'host', 'somehost');
159
        $this->arrayTest($containerBuilder, 'dtc_queue.rabbit_mq', 'port', 1234);
160
        $this->arrayTest($containerBuilder, 'dtc_queue.rabbit_mq', 'user', 'auser');
161
        $this->arrayTest($containerBuilder, 'dtc_queue.rabbit_mq', 'password', 'pass');
162
163
        $configs = ['config' => ['rabbit_mq' => ['host' => 'somehost', 'port' => 1234, 'user' => 'auser', 'password' => 'pass', 'options' => ['insist' => true]]]];
164
        $containerBuilder = $this->tryConfigs($configs);
165
        $this->arrayTest($containerBuilder, 'dtc_queue.rabbit_mq', 'options', ['insist' => true]);
166
167
        $configs = ['config' => ['rabbit_mq' => ['host' => 'somehost', 'port' => 1234, 'user' => 'auser', 'ssl_options' => ['a' => true], 'password' => 'pass']]];
168
        $this->tryBadConfigs($configs);
169
170
        $configs = ['config' => ['rabbit_mq' => ['host' => 'somehost', 'port' => 1234, 'user' => 'auser', 'ssl' => true, 'ssl_options' => ['a' => true], 'password' => 'pass']]];
171
        $containerBuilder = $this->tryConfigs($configs);
172
        $this->arrayTest($containerBuilder, 'dtc_queue.rabbit_mq', 'ssl_options', ['a' => true]);
173
        $rabbitMq = $containerBuilder->getParameter('dtc_queue.rabbit_mq');
174
        self::assertFalse(isset($rabbitMq['options']));
175
176
        $configs = ['config' => ['rabbit_mq' => ['host' => 'somehost', 'port' => 1234, 'user' => 'auser', 'ssl' => true, 'ssl_options' => ['a' => ['something']], 'password' => 'pass']]];
177
        $this->tryBadConfigs($configs);
178
179
        $configs = ['config' => ['rabbit_mq' => ['host' => 'somehost', 'port' => 1234, 'user' => 'auser', 'ssl' => true, 'ssl_options' => ['peer_fingerprint' => ['something' => 'else']], 'password' => 'pass']]];
180
        $containerBuilder = $this->tryConfigs($configs);
181
        $this->arrayTest($containerBuilder, 'dtc_queue.rabbit_mq', 'ssl_options', ['peer_fingerprint' => ['something' => 'else']]);
182
    }
183
184
    public function testDeprecated()
185
    {
186
        $configs = ['config' => ['default_manager' => 'odm']];
187
        $containerBuilder = $this->tryConfigs($configs);
188
        self::assertEquals('odm', $containerBuilder->getParameter('dtc_queue.manager.job'));
189
190
        $configs = ['config' => ['document_manager' => 'something']];
191
        $containerBuilder = $this->tryConfigs($configs);
192
        self::assertEquals('something', $containerBuilder->getParameter('dtc_queue.odm.document_manager'));
193
194
        $configs = ['config' => ['entity_manager' => 'something']];
195
        $containerBuilder = $this->tryConfigs($configs);
196
        self::assertEquals('something', $containerBuilder->getParameter('dtc_queue.orm.entity_manager'));
197
198
        $configs = ['config' => ['run_manager' => 'orm']];
199
        $containerBuilder = $this->tryConfigs($configs);
200
        self::assertEquals('orm', $containerBuilder->getParameter('dtc_queue.manager.run'));
201
202
        $configs = ['config' => ['job_timing_manager' => 'orm']];
203
        $containerBuilder = $this->tryConfigs($configs);
204
        self::assertEquals('orm', $containerBuilder->getParameter('dtc_queue.manager.job_timing'));
205
206
        $configs = ['config' => ['record_timings' => true]];
207
        $containerBuilder = $this->tryConfigs($configs);
208
        self::assertTrue($containerBuilder->getParameter('dtc_queue.timings.record'));
209
210
        $configs = ['config' => ['record_timings_timezone_offset' => 4.5]];
211
        $containerBuilder = $this->tryConfigs($configs);
212
        self::assertEquals(4.5, $containerBuilder->getParameter('dtc_queue.timings.timezone_offset'));
213
214
        $configs = ['config' => ['class_job' => '\Dtc\QueueBundle\Model\RetryableJob']];
215
        $containerBuilder = $this->tryConfigs($configs);
216
        self::assertEquals('\Dtc\QueueBundle\Model\RetryableJob', $containerBuilder->getParameter('dtc_queue.class.job'));
217
218
        $configs = ['config' => ['class_job_archive' => '\Dtc\QueueBundle\Model\RetryableJob']];
219
        $containerBuilder = $this->tryConfigs($configs);
220
        self::assertEquals('\Dtc\QueueBundle\Model\RetryableJob', $containerBuilder->getParameter('dtc_queue.class.job_archive'));
221
222
        $configs = ['config' => ['class_run' => '\Dtc\QueueBundle\Document\RunArchive']];
223
        $containerBuilder = $this->tryConfigs($configs);
224
        self::assertEquals('\Dtc\QueueBundle\Document\RunArchive', $containerBuilder->getParameter('dtc_queue.class.run'));
225
226
        $configs = ['config' => ['class_run_archive' => '\Dtc\QueueBundle\Document\RunArchive']];
227
        $containerBuilder = $this->tryConfigs($configs);
228
        self::assertEquals('\Dtc\QueueBundle\Document\RunArchive', $containerBuilder->getParameter('dtc_queue.class.run_archive'));
229
230
        $configs = ['config' => ['class_job_timing' => '\Dtc\QueueBundle\Document\JobTiming']];
231
        $containerBuilder = $this->tryConfigs($configs);
232
        self::assertEquals('\Dtc\QueueBundle\Document\JobTiming', $containerBuilder->getParameter('dtc_queue.class.job_timing'));
233
234
        $configs = ['config' => ['priority_max' => 10002]];
235
        $containerBuilder = $this->tryConfigs($configs);
236
        self::assertEquals(10002, $containerBuilder->getParameter('dtc_queue.priority.max'));
237
238
        $configs = ['config' => ['priority_direction' => PriorityJobManager::PRIORITY_DESC]];
239
        $containerBuilder = $this->tryConfigs($configs);
240
        self::assertEquals(PriorityJobManager::PRIORITY_DESC, $containerBuilder->getParameter('dtc_queue.priority.direction'));
241
242
        $configs = ['config' => ['priority_direction' => PriorityJobManager::PRIORITY_ASC]];
243
        $containerBuilder = $this->tryConfigs($configs);
244
        self::assertEquals(PriorityJobManager::PRIORITY_ASC, $containerBuilder->getParameter('dtc_queue.priority.direction'));
245
    }
246
247
    /**
248
     * @param ContainerBuilder $containerBuilder
249
     * @param string           $parameter
250
     * @param string           $key
251
     * @param mixed            $result
252
     */
253
    protected function arrayTest(ContainerBuilder $containerBuilder, $parameter, $key, $result)
254
    {
255
        $arr = $containerBuilder->getParameter($parameter);
256
        self::assertArrayHasKey($key, $arr);
257
        self::assertEquals($result, $arr[$key]);
258
    }
259
}
260