SubMuncherTest::testIPRangeToSubnetArray()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 48
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 48
rs 9.125
c 0
b 0
f 0
cc 1
eloc 27
nc 1
nop 0
1
<?php
2
3
namespace AndrewAndante\SubMuncher\Test;
4
5
use AndrewAndante\SubMuncher\SubMuncher;
6
7
class SubMuncherTest extends \PHPUnit_Framework_TestCase
8
{
9
    public function testIPRangeToSubnetArray()
10
    {
11
        $this->assertEquals(
12
            [
13
                '10.10.10.0/31'
14
            ],
15
            SubMuncher::ip_range_to_subnet_array(
16
                '10.10.10.0',
17
                '10.10.10.1'
18
            )
19
        );
20
21
        $this->assertEquals(
22
            [
23
                '10.10.10.0/24'
24
            ],
25
            SubMuncher::ip_range_to_subnet_array(
26
                '10.10.10.0',
27
                '10.10.10.255'
28
            )
29
        );
30
31
        $this->assertEquals(
32
            [
33
                '10.10.10.0/31',
34
                '10.10.10.2/32'
35
            ],
36
            SubMuncher::ip_range_to_subnet_array(
37
                '10.10.10.0',
38
                '10.10.10.2'
39
            )
40
        );
41
42
        $this->assertEquals(
43
            [
44
                '10.10.10.7/32',
45
                '10.10.10.8/29',
46
                '10.10.10.16/28',
47
                '10.10.10.32/27',
48
                '10.10.10.64/28',
49
                '10.10.10.80/31'
50
            ],
51
            SubMuncher::ip_range_to_subnet_array(
52
                '10.10.10.7',
53
                '10.10.10.81'
54
            )
55
        );
56
    }
57
58
    public function testConsolidate()
59
    {
60
        $this->assertEquals(['10.10.10.0/31'], SubMuncher::consolidate(['10.10.10.0', '10.10.10.1']));
61
        $this->assertEquals(
62
            ['10.10.10.0/31', '10.10.10.2/32'],
63
            SubMuncher::consolidate(['10.10.10.0', '10.10.10.1', '10.10.10.2'])
64
        );
65
        $this->assertEquals(
66
            ['10.10.10.0/31', '10.10.10.2/32', '100.10.10.0/30', '100.10.10.4/31'],
67
            SubMuncher::consolidate(
68
                [
69
                    '10.10.10.0',
70
                    '10.10.10.1',
71
                    '10.10.10.2',
72
                    '100.10.10.0',
73
                    '100.10.10.1',
74
                    '100.10.10.2',
75
                    '100.10.10.3',
76
                    '100.10.10.4',
77
                    '100.10.10.5'
78
                ]
79
            )
80
        );
81
    }
82
83
    public function testConsolidateWithMaxRules()
84
    {
85
        $this->assertEquals(['10.10.10.0/32', '10.10.10.3/32'], SubMuncher::consolidate(
86
            ['10.10.10.0', '10.10.10.3'],
87
            2
88
        ));
89
        $this->assertEquals(['10.10.10.0/30'], SubMuncher::consolidate(
90
            ['10.10.10.0', '10.10.10.3'],
91
            1
92
        ));
93
        $this->assertEquals(['0.0.0.0/1'], SubMuncher::consolidate(
94
            ['10.10.10.0', '100.100.100.30'],
95
            1
96
        ));
97
    }
98
99
    public function testConsolidateSubnets()
100
    {
101
        $this->assertEquals(['10.10.10.0/31'], SubMuncher::consolidate_subnets(['10.10.10.0/32', '10.10.10.1/32']));
102
        $this->assertEquals(['10.10.10.0/30'], SubMuncher::consolidate_subnets(['10.10.10.0/31', '10.10.10.2/31']));
103
        $this->assertEquals(
104
            ['10.10.10.0/31', '10.10.10.2/32', '100.10.10.0/30', '100.10.10.4/31'],
105
            SubMuncher::consolidate_subnets(
106
                [
107
                    '10.10.10.0/32',
108
                    '10.10.10.1/32',
109
                    '10.10.10.2/32',
110
                    '100.10.10.0/32',
111
                    '100.10.10.1/32',
112
                    '100.10.10.2/32',
113
                    '100.10.10.3/32',
114
                    '100.10.10.4/31',
115
                ]
116
            )
117
        );
118
    }
119
120
    public function testConsolidateSubnetsWithDuplicates()
121
    {
122
        $this->assertEquals(['10.10.10.0/31'], SubMuncher::consolidate_subnets(
123
            ['10.10.10.0/32', '10.10.10.1/32', '10.10.10.1/32']));
124
        $this->assertEquals(
125
            ['10.10.10.0/31', '10.10.10.2/32', '100.10.10.0/30', '100.10.10.4/31'],
126
            SubMuncher::consolidate_subnets(
127
                [
128
                    '10.10.10.0/32',
129
                    '10.10.10.0/32',
130
                    '10.10.10.1/32',
131
                    '10.10.10.2/32',
132
                    '100.10.10.0/32',
133
                    '100.10.10.1/32',
134
                    '100.10.10.2/32',
135
                    '100.10.10.3/32',
136
                    '100.10.10.4/31',
137
                ]
138
            )
139
        );
140
    }
141
142
    public function testConsolidateSubnetsWithMaxRules()
143
    {
144
        $this->assertEquals(
145
            ['10.10.10.0/31', '10.10.10.2/32', '100.10.10.0/30', '100.10.10.4/31'],
146
            SubMuncher::consolidate_subnets(
147
                [
148
                    '10.10.10.0/32',
149
                    '10.10.10.1/32',
150
                    '10.10.10.2/32',
151
                    '100.10.10.0/32',
152
                    '100.10.10.1/32',
153
                    '100.10.10.2/32',
154
                    '100.10.10.3/32',
155
                    '100.10.10.4/31',
156
                ],
157
                4
158
            )
159
        );
160
        $this->assertEquals(
161
            ['10.10.10.0/30', '100.10.10.0/30', '100.10.10.4/31'],
162
            SubMuncher::consolidate_subnets(
163
                [
164
                    '10.10.10.0/32',
165
                    '10.10.10.1/32',
166
                    '10.10.10.2/32',
167
                    '100.10.10.0/32',
168
                    '100.10.10.1/32',
169
                    '100.10.10.2/32',
170
                    '100.10.10.3/32',
171
                    '100.10.10.4/31',
172
                ],
173
                3
174
            )
175
        );
176
    }
177
}
178