MediaWiki  REL1_24
IPSetTest.php
Go to the documentation of this file.
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 }