MediaWiki
REL1_24
|
00001 <?php 00002 00006 class IPSetTest extends MediaWikiTestCase { 00015 public static function provideIPSets() { 00016 return array( 00017 array( 00018 'old_list_subset', 00019 array( 00020 '208.80.152.162', 00021 '10.64.0.123', 00022 '10.64.0.124', 00023 '10.64.0.125', 00024 '10.64.0.126', 00025 '10.64.0.127', 00026 '10.64.0.128', 00027 '10.64.0.129', 00028 '10.64.32.104', 00029 '10.64.32.105', 00030 '10.64.32.106', 00031 '10.64.32.107', 00032 '91.198.174.45', 00033 '91.198.174.46', 00034 '91.198.174.47', 00035 '91.198.174.57', 00036 '2620:0:862:1:A6BA:DBFF:FE30:CFB3', 00037 '91.198.174.58', 00038 '2620:0:862:1:A6BA:DBFF:FE38:FFDA', 00039 '208.80.152.16', 00040 '208.80.152.17', 00041 '208.80.152.18', 00042 '208.80.152.19', 00043 '91.198.174.102', 00044 '91.198.174.103', 00045 '91.198.174.104', 00046 '91.198.174.105', 00047 '91.198.174.106', 00048 '91.198.174.107', 00049 '91.198.174.81', 00050 '2620:0:862:1:26B6:FDFF:FEF5:B2D4', 00051 '91.198.174.82', 00052 '2620:0:862:1:26B6:FDFF:FEF5:ABB4', 00053 '10.20.0.113', 00054 '2620:0:862:102:26B6:FDFF:FEF5:AD9C', 00055 '10.20.0.114', 00056 '2620:0:862:102:26B6:FDFF:FEF5:7C38', 00057 ), 00058 array( 00059 '0.0.0.0' => false, 00060 '255.255.255.255' => false, 00061 '10.64.0.122' => false, 00062 '10.64.0.123' => true, 00063 '10.64.0.124' => true, 00064 '10.64.0.129' => true, 00065 '10.64.0.130' => false, 00066 '91.198.174.81' => true, 00067 '91.198.174.80' => false, 00068 '0::0' => false, 00069 'ffff:ffff:ffff:ffff:FFFF:FFFF:FFFF:FFFF' => false, 00070 '2001:db8::1234' => false, 00071 '2620:0:862:1:26b6:fdff:fef5:abb3' => false, 00072 '2620:0:862:1:26b6:fdff:fef5:abb4' => true, 00073 '2620:0:862:1:26b6:fdff:fef5:abb5' => false, 00074 ), 00075 ), 00076 array( 00077 'new_cidr_set', 00078 array( 00079 '208.80.154.0/26', 00080 '2620:0:861:1::/64', 00081 '208.80.154.128/26', 00082 '2620:0:861:2::/64', 00083 '208.80.154.64/26', 00084 '2620:0:861:3::/64', 00085 '208.80.155.96/27', 00086 '2620:0:861:4::/64', 00087 '10.64.0.0/22', 00088 '2620:0:861:101::/64', 00089 '10.64.16.0/22', 00090 '2620:0:861:102::/64', 00091 '10.64.32.0/22', 00092 '2620:0:861:103::/64', 00093 '10.64.48.0/22', 00094 '2620:0:861:107::/64', 00095 '91.198.174.0/25', 00096 '2620:0:862:1::/64', 00097 '10.20.0.0/24', 00098 '2620:0:862:102::/64', 00099 '10.128.0.0/24', 00100 '2620:0:863:101::/64', 00101 '10.2.4.26', 00102 ), 00103 array( 00104 '0.0.0.0' => false, 00105 '255.255.255.255' => false, 00106 '10.2.4.25' => false, 00107 '10.2.4.26' => true, 00108 '10.2.4.27' => false, 00109 '10.20.0.255' => true, 00110 '10.128.0.0' => true, 00111 '10.64.17.55' => true, 00112 '10.64.20.0' => false, 00113 '10.64.27.207' => false, 00114 '10.64.31.255' => false, 00115 '0::0' => false, 00116 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => false, 00117 '2001:DB8::1' => false, 00118 '2620:0:861:106::45' => false, 00119 '2620:0:862:103::' => false, 00120 '2620:0:862:102:10:20:0:113' => true, 00121 ), 00122 ), 00123 array( 00124 'empty_set', 00125 array(), 00126 array( 00127 '0.0.0.0' => false, 00128 '255.255.255.255' => false, 00129 '10.2.4.25' => false, 00130 '10.2.4.26' => false, 00131 '10.2.4.27' => false, 00132 '10.20.0.255' => false, 00133 '10.128.0.0' => false, 00134 '10.64.17.55' => false, 00135 '10.64.20.0' => false, 00136 '10.64.27.207' => false, 00137 '10.64.31.255' => false, 00138 '0::0' => false, 00139 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => false, 00140 '2001:DB8::1' => false, 00141 '2620:0:861:106::45' => false, 00142 '2620:0:862:103::' => false, 00143 '2620:0:862:102:10:20:0:113' => false, 00144 ), 00145 ), 00146 array( 00147 'edge_cases', 00148 array( 00149 '0.0.0.0', 00150 '255.255.255.255', 00151 '::', 00152 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 00153 '10.10.10.10/25', // host bits intentional 00154 ), 00155 array( 00156 '0.0.0.0' => true, 00157 '255.255.255.255' => true, 00158 '10.2.4.25' => false, 00159 '10.2.4.26' => false, 00160 '10.2.4.27' => false, 00161 '10.20.0.255' => false, 00162 '10.128.0.0' => false, 00163 '10.64.17.55' => false, 00164 '10.64.20.0' => false, 00165 '10.64.27.207' => false, 00166 '10.64.31.255' => false, 00167 '0::0' => true, 00168 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => true, 00169 '2001:DB8::1' => false, 00170 '2620:0:861:106::45' => false, 00171 '2620:0:862:103::' => false, 00172 '2620:0:862:102:10:20:0:113' => false, 00173 '10.10.9.255' => false, 00174 '10.10.10.0' => true, 00175 '10.10.10.1' => true, 00176 '10.10.10.10' => true, 00177 '10.10.10.126' => true, 00178 '10.10.10.127' => true, 00179 '10.10.10.128' => false, 00180 '10.10.10.177' => false, 00181 '10.10.10.255' => false, 00182 '10.10.11.0' => false, 00183 ), 00184 ), 00185 array( 00186 'exercise_optimizer', 00187 array( 00188 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0/112', 00189 'ffff:ffff:ffff:ffff:ffff:ffff:fffe:0/112', 00190 'ffff:ffff:ffff:ffff:ffff:ffff:fffd:0/112', 00191 'ffff:ffff:ffff:ffff:ffff:ffff:fffc:0/112', 00192 'ffff:ffff:ffff:ffff:ffff:ffff:fffb:0/112', 00193 'ffff:ffff:ffff:ffff:ffff:ffff:fffa:0/112', 00194 'ffff:ffff:ffff:ffff:ffff:ffff:fff9:8000/113', 00195 'ffff:ffff:ffff:ffff:ffff:ffff:fff9:0/113', 00196 'ffff:ffff:ffff:ffff:ffff:ffff:fff8:0/112', 00197 'ffff:ffff:ffff:ffff:ffff:ffff:fff7:0/112', 00198 'ffff:ffff:ffff:ffff:ffff:ffff:fff6:0/112', 00199 'ffff:ffff:ffff:ffff:ffff:ffff:fff5:0/112', 00200 'ffff:ffff:ffff:ffff:ffff:ffff:fff4:0/112', 00201 'ffff:ffff:ffff:ffff:ffff:ffff:fff3:0/112', 00202 'ffff:ffff:ffff:ffff:ffff:ffff:fff2:0/112', 00203 'ffff:ffff:ffff:ffff:ffff:ffff:fff1:0/112', 00204 'ffff:ffff:ffff:ffff:ffff:ffff:fff0:0/112', 00205 'ffff:ffff:ffff:ffff:ffff:ffff:ffef:0/112', 00206 'ffff:ffff:ffff:ffff:ffff:ffff:ffee:0/112', 00207 'ffff:ffff:ffff:ffff:ffff:ffff:ffec:0/111', 00208 'ffff:ffff:ffff:ffff:ffff:ffff:ffeb:0/112', 00209 'ffff:ffff:ffff:ffff:ffff:ffff:ffea:0/112', 00210 'ffff:ffff:ffff:ffff:ffff:ffff:ffe9:0/112', 00211 'ffff:ffff:ffff:ffff:ffff:ffff:ffe8:0/112', 00212 'ffff:ffff:ffff:ffff:ffff:ffff:ffe7:0/112', 00213 'ffff:ffff:ffff:ffff:ffff:ffff:ffe6:0/112', 00214 'ffff:ffff:ffff:ffff:ffff:ffff:ffe5:0/112', 00215 'ffff:ffff:ffff:ffff:ffff:ffff:ffe4:0/112', 00216 'ffff:ffff:ffff:ffff:ffff:ffff:ffe3:0/112', 00217 'ffff:ffff:ffff:ffff:ffff:ffff:ffe2:0/112', 00218 'ffff:ffff:ffff:ffff:ffff:ffff:ffe1:0/112', 00219 'ffff:ffff:ffff:ffff:ffff:ffff:ffe0:0/110', 00220 'ffff:ffff:ffff:ffff:ffff:ffff:ffc0:0/107', 00221 'ffff:ffff:ffff:ffff:ffff:ffff:ffa0:0/107', 00222 ), 00223 array( 00224 '0.0.0.0' => false, 00225 '255.255.255.255' => false, 00226 '::' => false, 00227 'ffff:ffff:ffff:ffff:ffff:ffff:ff9f:ffff' => false, 00228 'ffff:ffff:ffff:ffff:ffff:ffff:ffa0:0' => true, 00229 'ffff:ffff:ffff:ffff:ffff:ffff:ffc0:1234' => true, 00230 'ffff:ffff:ffff:ffff:ffff:ffff:ffed:ffff' => true, 00231 'ffff:ffff:ffff:ffff:ffff:ffff:fff4:4444' => true, 00232 'ffff:ffff:ffff:ffff:ffff:ffff:fff9:8080' => true, 00233 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => true, 00234 ), 00235 ), 00236 ); 00237 } 00238 00245 public function testIPSet( $desc, array $cfg, array $tests ) { 00246 $ipset = new IPSet( $cfg ); 00247 foreach ( $tests as $ip => $expected ) { 00248 $result = $ipset->match( $ip ); 00249 $this->assertEquals( $expected, $result, "Incorrect match() result for $ip in dataset $desc" ); 00250 } 00251 } 00252 }