ServerFunctionsTest   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 152
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 53
dl 0
loc 152
rs 10
c 0
b 0
f 0
wmc 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A ipv6Provider() 0 19 1
A testIpv4InCidr() 0 3 1
A ipv4Provider() 0 18 1
A testIpv4ToIpv6WithInvalidIP() 0 3 1
A testIpv4ToIpv6() 0 3 1
A ipProvider() 0 17 1
A testIpv4ToIpv6WithIpv6() 0 3 1
A testIpv6InCidr() 0 3 1
A testIpInCidr() 0 3 1
A ipv4ToIpv6Provider() 0 7 1
1
<?php
2
3
namespace Jasny\Tests;
4
5
use PHPStan\Testing\TestCase;
6
7
use function Jasny\ipv4_to_ipv6;
8
use function Jasny\ipv4_in_cidr;
9
use function Jasny\ipv6_in_cidr;
10
use function Jasny\ip_in_cidr;
11
12
/**
13
 * Test server functions
14
 * @coversNothing
15
 */
16
class ServerFunctionsTest extends TestCase
17
{
18
    public function ipv4ToIpv6Provider()
19
    {
20
        return [
21
            ['127.0.0.1', '0:0:0:0:0:ffff:7f00:0001'],
22
            ['192.168.0.1', '0:0:0:0:0:ffff:c0a8:0001'],
23
            ['192.168.0.0/24', '0:0:0:0:0:ffff:c0a8:0000/120'],
24
            ['0.0.0.0/0', '::']
25
        ];
26
    }
27
    
28
    /**
29
     * @covers Jasny\ipv4_to_ipv6
30
     * @dataProvider ipv4ToIpv6Provider
31
     * 
32
     * @param string $ip
33
     * @param string $expect
34
     */
35
    public function testIpv4ToIpv6($ip, $expect)
36
    {
37
        $this->assertEquals($expect, ipv4_to_ipv6($ip));
38
    }
39
    
40
    /**
41
     * @covers Jasny\ipv4_to_ipv6
42
     * @expectedException \InvalidArgumentException
43
     * @expectedExceptionMessage 'foo' is not a valid IPv4 address or cidr
44
     */
45
    public function testIpv4ToIpv6WithInvalidIP()
46
    {
47
        ipv4_to_ipv6('foo');
48
    }
49
    
50
    /**
51
     * @covers Jasny\ipv4_to_ipv6
52
     * @expectedException \InvalidArgumentException
53
     * @expectedExceptionMessage '21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A' is not a valid IPv4 address or cidr
54
     */
55
    public function testIpv4ToIpv6WithIpv6()
56
    {
57
        ipv4_to_ipv6("21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A");
58
    }
59
    
60
    public function ipv4Provider()
61
    {
62
        return [
63
            ['192.168.0.1', '192.168.0.1/32', true],
64
            ['192.168.0.1', '192.168.0.1', true],
65
            ['192.168.0.1', '192.168.0.0/24', true],
66
            ['192.168.0.1', '192.168.0.10/24', true],
67
            ['192.168.0.1', '192.128.0.0/9', true],
68
            ['192.168.0.1', '0.0.0.0/0', true],
69
70
            ['192.168.0.1', '192.168.0.10/32', false],
71
            ['192.168.0.1', '192.168.0.0', false],
72
            ['192.168.0.1', '192.168.1.0/24', false],
73
            ['192.168.0.1', '192.64.0.0/9', false],
74
            
75
            ['192.168.0.1', 'foo', false],
76
            ['foo', '192.64.0.0/9', false],
77
            ['foo', 'foo', false]
78
        ];
79
    }
80
    
81
    /**
82
     * @covers Jasny\ipv4_in_cidr
83
     * @dataProvider ipv4Provider
84
     * 
85
     * @param string  $address
86
     * @param string  $cidr
87
     * @param boolean $expect
88
     */
89
    public function testIpv4InCidr($address, $cidr, $expect)
90
    {
91
        $this->assertEquals($expect, ipv4_in_cidr($address, $cidr), "$address in $cidr");
92
    }
93
    
94
    public function ipv6Provider()
95
    {
96
        return [
97
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A/128', true],
98
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C00/120', true],
99
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:0001', '21DA:00D3:0000:2F3B:02AC:00FF:FE28:0000/120', true],
100
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '21DA:00D3:0000:2F3B::/64', true],
101
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '21DA:00D3:0000:2F3B:0000:0000:0000:0000/64', true],
102
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '21DA:00D3:0000:2F3B:0200::/72', true],
103
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '21DA:00D3:0000:2F3B::', true],
104
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '::', true],
105
            ['0:0:0:0:0:FFFF:C0A8:0001', '0:0:0:0:0:FFFF:C0A8:0000/112', true],
106
107
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '21DA:00D3:0000:2000::/64', false],
108
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '21DA:00D3:0000:2F3B:9900::/72', false],
109
            
110
            ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', 'foo', false],
111
            ['foo', '21DA:00D3:0000:2F3B:0000:0000:0000:0000/64', false],
112
            ['foo', 'foo', false]
113
        ];
114
    }
115
116
    /**
117
     * @covers Jasny\ipv6_in_cidr
118
     * @covers Jasny\inet_to_bits
119
     * 
120
     * @dataProvider ipv6Provider
121
     * 
122
     * @param string  $address
123
     * @param string  $cidr
124
     * @param boolean $expect
125
     */    
126
    public function testIpv6InCidr($address, $cidr, $expect)
127
    {
128
        $this->assertEquals($expect, ipv6_in_cidr($address, $cidr), "$address in $cidr");
129
    }
130
    
131
    
132
    public function ipProvider()
133
    {
134
        return array_merge(
135
            $this->ipv4Provider(),
136
            $this->ipv6Provider(),
137
            [
138
                ['192.168.0.1', '::', true],
139
                ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '0.0.0.0/0', true],
140
                ['192.168.0.1', '0:0:0:0:0:FFFF:C0A8:0000/24', true],
141
                ['192.168.0.1', '0:0:0:0:0:FFFF:C0A8::', true],
142
                ['0:0:0:0:0:FFFF:C0A8:0001', '192.168.0.1/32', true],
143
                ['0:0:0:0:0:FFFF:C0A8:0001', '192.168.0.0/24', true],
144
                
145
                ['192.168.0.1', '0:0:0:0:0:FFFF:C0A8:0002/128', false],
146
                ['0:0:0:0:0:FFFF:C0A8:0001', '192.168.0.2/32', false],
147
                ['192.168.0.1', '21DA:00D3:0000:2F3B::/64', false],
148
                ['21DA:00D3:0000:2F3B:02AC:00FF:FE28:9C5A', '192.168.0.10/32', false]
149
            ]
150
        );
151
    }
152
    
153
    /**
154
     * @covers Jasny\ip_in_cidr
155
     *
156
     * @dataProvider ipProvider
157
     * 
158
     * @depends testIpv4InCidr
159
     * @depends testIpv6InCidr
160
     * 
161
     * @param string  $address
162
     * @param string  $cidr
163
     * @param boolean $expect
164
     */
165
    public function testIpInCidr($address, $cidr, $expect)
166
    {
167
        $this->assertEquals($expect, ip_in_cidr($address, $cidr), "$address in $cidr");
168
    }
169
}
170