Passed
Push — fix-8832 ( 2eb5fa )
by Sam
07:48
created

IPUtilsTest::testIPv4()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\Control\Tests;
4
5
/**
6
 * These helpful tests were lifted from the Symfony library
7
 * https://github.com/symfony/http-foundation/blob/master/LICENSE
8
 *
9
 * (c) Fabien Potencier <[email protected]>
10
 *
11
 * For the full copyright and license information, please view the LICENSE
12
 * file that was distributed with this source code.
13
 */
14
use SilverStripe\Dev\SapphireTest;
15
use SilverStripe\Control\Util\IPUtils;
16
17
class IPUtilsTest extends SapphireTest
18
{
19
    /**
20
     * @dataProvider ipv4Provider
21
     */
22
    public function testIPv4($matches, $remoteAddr, $cidr)
23
    {
24
        $this->assertSame($matches, IPUtils::checkIP($remoteAddr, $cidr));
25
    }
26
27
    public function ipv4Provider()
28
    {
29
        return array(
30
            array(true, '192.168.1.1', '192.168.1.1'),
31
            array(true, '192.168.1.1', '192.168.1.1/1'),
32
            array(true, '192.168.1.1', '192.168.1.0/24'),
33
            array(false, '192.168.1.1', '1.2.3.4/1'),
34
            array(false, '192.168.1.1', '192.168.1.1/33'), // invalid subnet
35
            array(true, '192.168.1.1', array('1.2.3.4/1', '192.168.1.0/24')),
36
            array(true, '192.168.1.1', array('192.168.1.0/24', '1.2.3.4/1')),
37
            array(false, '192.168.1.1', array('1.2.3.4/1', '4.3.2.1/1')),
38
            array(true, '1.2.3.4', '0.0.0.0/0'),
39
            array(true, '1.2.3.4', '192.168.1.0/0'),
40
            array(false, '1.2.3.4', '256.256.256/0'), // invalid CIDR notation
41
            array(false, 'an_invalid_ip', '192.168.1.0/24'),
42
        );
43
    }
44
45
    /**
46
     * @dataProvider ipv6Provider
47
     */
48
    public function testIPv6($matches, $remoteAddr, $cidr)
49
    {
50
        if (!defined('AF_INET6')) {
51
            $this->markTestSkipped('Only works when PHP is compiled without the option "disable-ipv6".');
52
        }
53
54
        $this->assertSame($matches, IPUtils::checkIP($remoteAddr, $cidr));
55
    }
56
57
    public function ipv6Provider()
58
    {
59
        return array(
60
            array(true, '2a01:198:603:0:396e:4789:8e99:890f', '2a01:198:603:0::/65'),
61
            array(false, '2a00:198:603:0:396e:4789:8e99:890f', '2a01:198:603:0::/65'),
62
            array(false, '2a01:198:603:0:396e:4789:8e99:890f', '::1'),
63
            array(true, '0:0:0:0:0:0:0:1', '::1'),
64
            array(false, '0:0:603:0:396e:4789:8e99:0001', '::1'),
65
            array(true, '2a01:198:603:0:396e:4789:8e99:890f', array('::1', '2a01:198:603:0::/65')),
66
            array(true, '2a01:198:603:0:396e:4789:8e99:890f', array('2a01:198:603:0::/65', '::1')),
67
            array(false, '2a01:198:603:0:396e:4789:8e99:890f', array('::1', '1a01:198:603:0::/65')),
68
            array(false, '}__test|O:21:&quot;JDatabaseDriverMysqli&quot;:3:{s:2', '::1'),
69
            array(false, '2a01:198:603:0:396e:4789:8e99:890f', 'unknown'),
70
        );
71
    }
72
73
    /**
74
     * @expectedException \RuntimeException
75
     * @requires extension sockets
76
     */
77
    public function testAnIPv6WithOptionDisabledIPv6()
78
    {
79
        if (defined('AF_INET6')) {
80
            $this->markTestSkipped('Only works when PHP is compiled with the option "disable-ipv6".');
81
        }
82
83
        IPUtils::checkIP('2a01:198:603:0:396e:4789:8e99:890f', '2a01:198:603:0::/65');
84
    }
85
}
86