Completed
Push — master ( 96cf96...956847 )
by Tobias
25:33
created

DsnTest::testIsValid()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 2
1
<?php
2
3
/*
4
 * This file is part of php-cache organization.
5
 *
6
 * (c) 2015-2015 Aaron Scherer <[email protected]>, Tobias Nyholm <[email protected]>
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
namespace Cache\AdapterBundle\Tests\Unit;
13
14
use Cache\AdapterBundle\DSN;
15
16
/**
17
 * DsnTest.
18
 */
19
class DsnTest extends \PHPUnit_Framework_TestCase
20
{
21
    /**
22
     * @static
23
     *
24
     * @return array
25
     */
26
    public static function hostValues()
27
    {
28
        return [
29
            ['redis://localhost', 'localhost'],
30
            ['redis://localhost/1', 'localhost'],
31
            ['redis://localhost:63790', 'localhost'],
32
            ['redis://localhost:63790/10', 'localhost'],
33
            ['redis://pw@localhost:63790/10', 'localhost'],
34
            ['redis://127.0.0.1', '127.0.0.1'],
35
            ['redis://127.0.0.1/1', '127.0.0.1'],
36
            ['redis://127.0.0.1:63790', '127.0.0.1'],
37
            ['redis://127.0.0.1:63790/10', '127.0.0.1'],
38
            ['redis://[email protected]:63790/10', '127.0.0.1'],
39
            ['mongodb://localhost', 'localhost'],
40
            ['mongodb://127.0.0.1', '127.0.0.1'],
41
            ['mongodb://dev:[email protected]', '127.0.0.1'],
42
            ['mongodb://dev:[email protected]:27371', '127.0.0.1'],
43
            ['mongodb://dev:[email protected]:27371/database', '127.0.0.1'],
44
            ['mongodb://dev:[email protected],192.168.1.1:27371/database', ['127.0.0.1', '192.168.1.1']],
45
        ];
46
    }
47
48
    /**
49
     * @param string $dsn  DSN
50
     * @param string $host Host
51
     *
52
     * @dataProvider hostValues
53
     */
54 View Code Duplication
    public function testHost($dsn, $host)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
55
    {
56
        $dsn = new DSN($dsn);
57
        if (is_array($host)) {
58
            foreach ($dsn->getHosts() as $index => $h) {
59
                $this->assertEquals($host[$index], $h['host']);
60
            }
61
        } else {
62
            $this->assertEquals($host, $dsn->getFirstHost());
63
        }
64
    }
65
66
    /**
67
     * @static
68
     *
69
     * @return array
70
     */
71
    public static function portValues()
72
    {
73
        return [
74
            ['redis://localhost', 6379],
75
            ['tcp://localhost', 6379],
76
            ['redis://localhost/1', 6379],
77
            ['redis://localhost:63790', 63790],
78
            ['redis://localhost:63790/10', 63790],
79
            ['redis://pw@localhost:63790/10', 63790],
80
            ['redis://127.0.0.1', 6379],
81
            ['redis://127.0.0.1/1', 6379],
82
            ['redis://127.0.0.1:63790', 63790],
83
            ['redis://127.0.0.1:63790/10', 63790],
84
            ['redis://[email protected]:63790/10', 63790],
85
            ['mongodb://localhost', 27017],
86
            ['mongodb://127.0.0.1', 27017],
87
            ['mongodb://dev:[email protected]', 27017],
88
            ['mongodb://dev:[email protected]:27371', 27371],
89
            ['mongodb://dev:[email protected]:27371/database', 27371],
90
            ['mongodb://dev:[email protected],192.168.1.1:27371/database', [27017, 27371]],
91
        ];
92
    }
93
94
    /**
95
     * @param string $dsn  DSN
96
     * @param int    $port Port
97
     *
98
     * @dataProvider portValues
99
     */
100 View Code Duplication
    public function testPort($dsn, $port)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
101
    {
102
        $dsn = new DSN($dsn);
103
        if (is_array($port)) {
104
            foreach ($dsn->getHosts() as $index => $host) {
105
                $this->assertEquals($port[$index], $host['port']);
106
            }
107
        } else {
108
            $this->assertEquals($port, $dsn->getFirstPort());
109
        }
110
    }
111
112
    /**
113
     * @static
114
     *
115
     * @return array
116
     */
117
    public static function databaseValues()
118
    {
119
        return [
120
            ['redis://localhost', null],
121
            ['redis://localhost/0', 0],
122
            ['redis://localhost/1', 1],
123
            ['redis://localhost:63790', null],
124
            ['redis://localhost:63790/10', 10],
125
            ['redis://pw@localhost:63790/10', 10],
126
            ['redis://127.0.0.1', null],
127
            ['redis://127.0.0.1/0', 0],
128
            ['redis://127.0.0.1/1', 1],
129
            ['redis://127.0.0.1:63790', null],
130
            ['redis://127.0.0.1:63790/10', 10],
131
            ['redis://[email protected]:63790/10', 10],
132
            ['mongodb://localhost', null],
133
            ['mongodb://127.0.0.1', null],
134
            ['mongodb://dev:[email protected]', null],
135
            ['mongodb://dev:[email protected]:27371', null],
136
            ['mongodb://dev:[email protected]:27371/database', 'database'],
137
            ['mongodb://dev:[email protected],192.168.1.1:27371/database', 'database'],
138
        ];
139
    }
140
141
    /**
142
     * @param string $dsn      DSN
143
     * @param int    $database Database
144
     *
145
     * @dataProvider databaseValues
146
     */
147
    public function testDatabase($dsn, $database)
148
    {
149
        $dsn = new DSN($dsn);
150
        $this->assertEquals($database, $dsn->getDatabase());
151
    }
152
153
    /**
154
     * @static
155
     *
156
     * @return array
157
     */
158
    public static function passwordValues()
159
    {
160
        return [
161
            ['redis://localhost', null],
162
            ['redis://localhost/1', null],
163
            ['redis://user:pass@localhost:63790/10', ['user', 'pass']],
164
            ['redis://pw@localhost:63790/10', 'pw'],
165
            ['redis://p\@w@localhost:63790/10', 'p@w'],
166
            ['redis://mB(.z9},6o?zl>v!LM76A]lCg77,;.@localhost:63790/10', 'mB(.z9},6o?zl>v!LM76A]lCg77,;.'],
167
            ['redis://127.0.0.1', null],
168
            ['redis://127.0.0.1/1', null],
169
            ['redis://[email protected]:63790/10', 'pw'],
170
            ['redis://p\@[email protected]:63790/10', 'p@w'],
171
            ['redis://mB(.z9},6o?zl>v!LM76A]lCg77,;[email protected]:63790/10', 'mB(.z9},6o?zl>v!LM76A]lCg77,;.'],
172
            ['mongodb://localhost', null],
173
            ['mongodb://127.0.0.1', null],
174
            ['mongodb://dev:[email protected]', ['dev', 'pass']],
175
            ['mongodb://dev:[email protected]:27371', ['dev', 'pass']],
176
            ['mongodb://dev:[email protected]:27371/database', ['dev', 'pass']],
177
            ['mongodb://dev:[email protected],192.168.1.1:27371/database', ['dev', 'pass']],
178
        ];
179
    }
180
181
    /**
182
     * @param string $dsn      DSN
183
     * @param string $password Password
184
     *
185
     * @dataProvider passwordValues
186
     */
187
    public function testPassword($dsn, $password)
188
    {
189
        $dsn = new DSN($dsn);
190
191
        if (is_array($password)) {
192
            $this->assertEquals($password[0], $dsn->getUsername());
193
            $this->assertEquals($password[1], $dsn->getPassword());
194
        } else {
195
            $this->assertEquals($password, $dsn->getPassword());
196
        }
197
    }
198
199
    /**
200
     * @static
201
     *
202
     * @return array
203
     */
204
    public static function isValidValues()
205
    {
206
        return [
207
            ['redis://localhost', true],
208
            ['redis://localhost/1', true],
209
            ['redis://pw@localhost:63790/10', true],
210
            ['redis://127.0.0.1', true],
211
            ['redis://127.0.0.1/1', true],
212
            ['redis://[email protected]:63790/10', true],
213
            ['mongodb://localhost', true],
214
            ['mongodb://127.0.0.1', true],
215
            ['mongodb://dev:[email protected]', true],
216
            ['mongodb://dev:[email protected]:27371', true],
217
            ['mongodb://dev:[email protected]:27371/database', true],
218
            ['mongodb://dev:[email protected],192.168.1.1:27371/database', true],
219
            ['mongo://localhost', false],
220
            ['localhost', false],
221
            ['localhost/1', false],
222
            ['pw@localhost:63790/10', false],
223
        ];
224
    }
225
226
    /**
227
     * @param string $dsn   DSN
228
     * @param bool   $valid Valid
229
     *
230
     * @dataProvider isValidValues
231
     */
232
    public function testIsValid($dsn, $valid)
233
    {
234
        $dsn = new DSN($dsn);
235
        $this->assertEquals($valid, $dsn->isValid(), 'Failed validating: '.$dsn->getDsn());
236
    }
237
238
    /**
239
     * @static
240
     *
241
     * @return array
242
     */
243
    public static function parameterValues()
244
    {
245
        return [
246
            ['redis://localhost', []],
247
            ['redis://localhost/1?weight=1&alias=master', ['weight' => 1, 'alias' => 'master']],
248
            ['redis://pw@localhost:63790/10?alias=master&weight=2', ['weight' => 2, 'alias' => 'master']],
249
            ['redis://127.0.0.1?weight=3', ['weight' => 3]],
250
            ['redis://127.0.0.1/1?alias=master&weight=4', ['weight' => 4, 'alias' => 'master']],
251
            ['redis://[email protected]:63790/10?weight=5&alias=master', ['weight' => 5, 'alias' => 'master']],
252
            ['redis://localhost?alias=master', ['alias' => 'master']],
253
            ['mongodb://dev:[email protected],192.168.1.1:27371/database?replicaSet=test', ['replicaSet' => 'test']],
254
            ['mongodb://dev:[email protected],192.168.1.1:27371/database?test', ['test' => null]],
255
        ];
256
    }
257
258
    /**
259
     * @param string $dsn
260
     * @param array  $parameters
261
     *
262
     * @dataProvider parameterValues
263
     */
264
    public function testParameterValues($dsn, $parameters)
265
    {
266
        $dsn = new DSN($dsn);
267
        foreach ($parameters as $key => $value) {
268
            $this->assertEquals($value, $dsn->getParameters()[$key]);
269
        }
270
    }
271
}
272