1# Big definition of tests to run 2 3our %TESTS = ( 4 'mkstr' => { 5 # Simple v4 6 '1.2.3.4' => [ 7 { 'res' => '1.2.3.4/32', }, 8 { 'args' => '-m', 'res' => '1.2.3.4/255.255.255.255', }, 9 { 'args' => '-mw', 'res' => '1.2.3.4/0.0.0.0', }, 10 { 'args' => '-6', 'res' => '::ffff:1.2.3.4/128', }, 11 { 'args' => '-6c', 'res' => '::1.2.3.4/128', }, 12 { 'args' => '-a', 'res' => '1.2.3.4', }, 13 { 'args' => '-p', 'res' => '32', }, 14 { 'args' => '-pm', 'res' => '255.255.255.255', }, 15 { 'args' => '-pmw', 'res' => '0.0.0.0', }, 16 { 'args' => '-r', 'res' => '4.3.2.1.in-addr.arpa', }, 17 ], 18 '0' => [ 19 { 'res' => '0.0.0.0/32', }, 20 ], 21 # Quick test of single-digit version in dec/oct/hex 22 '12' => [ 23 { 'res' => '0.0.0.12/32', }, 24 ], 25 '12' => [ 26 { 'res' => '0.0.0.12/32', }, 27 ], 28 '012' => [ 29 { 'res' => '0.0.0.10/32', }, 30 ], 31 '0x12' => [ 32 { 'res' => '0.0.0.18/32', }, 33 ], 34 35 36 # Simple v6 37 '0102:0304:0506:0708:0910:1112:1314:1516' => [ 38 { 'res' => '102:304:506:708:910:1112:1314:1516/128', }, 39 { 'args' => '-m', 40 'res' => '102:304:506:708:910:1112:1314:1516/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', }, 41 { 'args' => '-mw', 42 'res' => '102:304:506:708:910:1112:1314:1516/::', }, 43 { 'args' => '-mwe', 44 'res' => '102:304:506:708:910:1112:1314:1516/0:0:0:0:0:0:0:0', }, 45 { 'args' => '-mwev', 46 'res' => '0102:0304:0506:0708:0910:1112:1314:1516/0000:0000:0000:0000:0000:0000:0000:0000', }, 47 { 'args' => '-a', 48 'res' => '102:304:506:708:910:1112:1314:1516', }, 49 { 'args' => '-p', 'res' => '128', }, 50 { 'args' => '-pm', 51 'res' => 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', }, 52 { 'args' => '-pmw', 'res' => '::', }, 53 { 'args' => '-r', 54 'res' => '6.1.5.1.4.1.3.1.2.1.1.1.0.1.9.0.8.0.7.0.6.0.5.0.4.0.3.0.2.0.1.0.ip6.arpa', }, 55 ], 56 '::' => [ 57 { 'args' => '-e', 'res' => '0:0:0:0:0:0:0:0/128', }, 58 { 'args' => '-ev', 59 'res' => '0000:0000:0000:0000:0000:0000:0000:0000/128', }, 60 ], 61 62 # Various minimized v6 forms 63 '::fe12:ab13/ffff:ff00::' => [ 64 { 'res' => '::fe12:ab13/24', }, 65 { 'args' => '-e', 'res' => '0:0:0:0:0:0:fe12:ab13/24', }, 66 { 'args' => '-em', 67 'res' => '0:0:0:0:0:0:fe12:ab13/ffff:ff00:0:0:0:0:0:0', }, 68 ], 69 'fe12::ab13' => [ 70 { 'res' => 'fe12::ab13/128', }, 71 { 'args' => '-e', 'res' => 'fe12:0:0:0:0:0:0:ab13/128', }, 72 ], 73 'fe12::cd98:0:ab13' => [ 74 { 'res' => 'fe12::cd98:0:ab13/128', }, 75 { 'args' => '-e', 'res' => 'fe12:0:0:0:0:cd98:0:ab13/128', }, 76 ], 77 'fe12::cd98:e:0:0:0:ab13' => [ 78 { 'res' => 'fe12:0:cd98:e::ab13/128', }, 79 { 'args' => '-e', 'res' => 'fe12:0:cd98:e:0:0:0:ab13/128', }, 80 ], 81 'fe12::cd98:0:0:0:ab13' => [ 82 { 'res' => 'fe12:0:0:cd98::ab13/128', }, 83 { 'args' => '-e', 'res' => 'fe12:0:0:cd98:0:0:0:ab13/128', }, 84 ], 85 86 87 # Now test netmask/pflen parsing 88 '0/0' => [ 89 { 'res' => '0.0.0.0/0', }, 90 { 'args' => '-m', 'res' => '0.0.0.0/0.0.0.0', }, 91 ], 92 '0/24' => [ 93 { 'res' => '0.0.0.0/24', }, 94 { 'args' => '-m', 'res' => '0.0.0.0/255.255.255.0', }, 95 ], 96 '0/19' => [ 97 { 'res' => '0.0.0.0/19', }, 98 { 'args' => '-m', 'res' => '0.0.0.0/255.255.224.0', }, 99 ], 100 '0/255.192.0.0' => [ 101 { 'res' => '0.0.0.0/10', }, 102 { 'args' => '-m', 'res' => '0.0.0.0/255.192.0.0', }, 103 ], 104 '0.0.0.0/255.192.0.0' => [ 105 { 'res' => '0.0.0.0/10', }, 106 { 'args' => '-m', 'res' => '0.0.0.0/255.192.0.0', }, 107 ], 108 '::/::' => [ 109 { 'res' => '::/0', }, 110 { 'args' => '-m', 'res' => '::/::', }, 111 ], 112 113 # Arbitrary decision: Nothing after / is {32,128}, just as if no 114 # / where given at all. 115 '1.2.3.4/' => [ 116 { 'res' => '1.2.3.4/32', }, 117 ], 118 '12::34/' => [ 119 { 'res' => '12::34/128', }, 120 ], 121 122 # Multiple /'s should be removed 123 '1.2.3.4//' => [ 124 { 'res' => '1.2.3.4/32', }, 125 ], 126 '1.2.3.4/////' => [ 127 { 'res' => '1.2.3.4/32', }, 128 ], 129 '1.2.3.4//16' => [ 130 { 'res' => '1.2.3.4/16', }, 131 ], 132 '1.2.3.4///255.255.192.0' => [ 133 { 'res' => '1.2.3.4/18', }, 134 ], 135 '12::34//' => [ 136 { 'res' => '12::34/128', }, 137 ], 138 '12::34/////' => [ 139 { 'res' => '12::34/128', }, 140 ], 141 '12::34//64' => [ 142 { 'res' => '12::34/64', }, 143 ], 144 '12::34///ffff:ffe0::' => [ 145 { 'res' => '12::34/27', }, 146 ], 147 148 149 # Play with v4 mapped/compat 150 '192.168.27.49/24' => [ 151 { 'res' => '192.168.27.49/24', }, 152 { 'args' => '-f6', 'res' => '::ffff:c0a8:1b31/120', }, 153 { 'args' => '-mf6', 154 'res' => '::ffff:c0a8:1b31/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00', }, 155 { 'args' => '-6', 'res' => '::ffff:192.168.27.49/120', }, 156 { 'args' => '-6c', 'res' => '::192.168.27.49/120', }, 157 ], 158 '::ffff:192.168.27.49' => [ 159 { 'res' => '::ffff:c0a8:1b31/128', }, 160 { 'args' => '-f4', 'res' => '192.168.27.49/32', }, 161 ], 162 '::192.168.27.49' => [ 163 { 'res' => '::c0a8:1b31/128', }, 164 { 'args' => '-f4', 'res' => '192.168.27.49/32', }, 165 ], 166 'fe::4d3:9a99' => [ 167 { 'res' => 'fe::4d3:9a99/128', }, 168 { 'args' => '-f4', 'res' => '4.211.154.153/32', }, 169 { 'args' => '-6f4', 'res' => '::ffff:4.211.154.153/128', }, 170 { 'args' => '-6cf4', 'res' => '::4.211.154.153/128', }, 171 ], 172 'fe::4.211.154.153' => [ 173 { 'res' => 'fe::4d3:9a99/128', }, 174 { 'args' => '-f4', 'res' => '4.211.154.153/32', }, 175 ], 176 177 178 # Wacky v4 address format 179 '127.0347.0xfe8/0xff.0340.0' => [ 180 { 'res' => '127.231.15.232/11', }, 181 { 'args' => '-m', 'res' => '127.231.15.232/255.224.0.0', }, 182 ], 183 184 185 # PTR-record forms 186 '4.3.2.1.in-addr.arpa' => [ 187 { 'res' => '1.2.3.4/32', }, 188 ], 189 '3.2.1.in-addr.arpa' => [ 190 { 'res' => '1.2.3.0/24', }, 191 ], 192 '6.1.5.1.4.1.3.1.2.1.1.1.0.1.9.0.8.0.7.0.6.0.5.0.4.0.3.0.2.0.1.0.ip6.arpa' => [ 193 { 'res' => '102:304:506:708:910:1112:1314:1516/128', }, 194 ], 195 '5.1.4.1.3.1.2.1.1.1.0.1.9.0.8.0.7.0.6.0.5.0.4.0.3.0.2.0.1.0.ip6.arpa' => [ 196 { 'res' => '102:304:506:708:910:1112:1314:1500/120', }, 197 ], 198 '1.4.1.3.1.2.1.1.1.0.1.9.0.8.0.7.0.6.0.5.0.4.0.3.0.2.0.1.0.ip6.arpa' => [ 199 { 'res' => '102:304:506:708:910:1112:1314:1000/116', }, 200 ], 201 '6.1.5.1.4.1.3.1.2.1.1.1.0.1.9.0.8.0.7.0.6.0.5.0.4.0.3.0.2.0.1.0.ip6.int' => [ 202 { 'res' => '102:304:506:708:910:1112:1314:1516/128', }, 203 ], 204 205 206 # Stuff we expect to fail 207 # Too long/too big/etc 208 '27.226.49.7.11' => [ 209 { 'res' => 'FROMFAILED', }, 210 ], 211 'fe27::eeb97' => [ 212 { 'res' => 'FROMFAILED', }, 213 ], 214 '17.29.393.195' => [ 215 { 'res' => 'FROMFAILED', }, 216 ], 217 '17.29.195.393' => [ 218 { 'res' => 'FROMFAILED', }, 219 ], 220 '444.3.2.1.in-addr.arpa' => [ 221 { 'res' => 'FROMFAILED', }, 222 ], 223 '4.333.2.1.in-addr.arpa' => [ 224 { 'res' => 'FROMFAILED', }, 225 ], 226 '5.4.3.2.1.in-addr.arpa' => [ 227 { 'res' => 'FROMFAILED', }, 228 ], 229 '6.10.5.1.4.1.3.1.2.1.1.1.0.1.9.0.8.0.7.0.6.0.5.0.4.0.3.0.2.0.1.0.ip6.arpa' => [ 230 { 'res' => 'FROMFAILED', }, 231 ], 232 '16.1.5.1.4.1.3.1.2.1.1.1.0.1.9.0.8.0.7.0.6.0.5.0.4.0.3.0.2.0.1.0.ip6.arpa' => [ 233 { 'res' => 'FROMFAILED', }, 234 ], 235 '7.6.1.5.1.4.1.3.1.2.1.1.1.0.1.9.0.8.0.7.0.6.0.5.0.4.0.3.0.2.0.1.0.ip6.arpa' => [ 236 { 'res' => 'FROMFAILED', }, 237 ], 238 239 # Invalid masks 240 '1.2.3.4/255.255.255.17' => [ 241 { 'res' => 'FROMFAILED', }, 242 ], 243 '1.2.3.4/255.255.255.256' => [ 244 { 'res' => 'FROMFAILED', }, 245 ], 246 '1.2.3.4/255.255.0.255' => [ 247 { 'res' => 'FROMFAILED', }, 248 ], 249 '1.2.3.4/255.255.255' => [ 250 { 'res' => 'FROMFAILED', }, 251 ], 252 253 # Invalid characters 254 '1.2.b.4' => [ 255 { 'res' => 'FROMFAILED', }, 256 ], 257 '1.2.08.4' => [ 258 { 'res' => 'FROMFAILED', }, 259 ], 260 '1.2.0xg.4' => [ 261 { 'res' => 'FROMFAILED', }, 262 ], 263 '1.2:3.4' => [ 264 { 'res' => 'FROMFAILED', }, 265 ], 266 '1.2*3.4' => [ 267 { 'res' => 'FROMFAILED', }, 268 ], 269 'fe27::geb9' => [ 270 { 'res' => 'FROMFAILED', }, 271 ], 272 'ge27::1ab2' => [ 273 { 'res' => 'FROMFAILED', }, 274 ], 275 'e2g::1ab2' => [ 276 { 'res' => 'FROMFAILED', }, 277 ], 278 'fe27::geeb9' => [ 279 { 'res' => 'FROMFAILED', }, 280 ], 281 282 # Downright wrong formats 283 'fe38:::1234' => [ 284 { 'res' => 'FROMFAILED', }, 285 ], 286 'fe38::::1234' => [ 287 { 'res' => 'FROMFAILED', }, 288 ], 289 'amooseoncebitmysister' => [ 290 { 'res' => 'FROMFAILED', }, 291 ], 292 '/' => [ 293 { 'res' => 'FROMFAILED', }, 294 ], 295 '/27' => [ 296 { 'res' => 'FROMFAILED', }, 297 ], 298 '/255.255.255.0' => [ 299 { 'res' => 'FROMFAILED', }, 300 ], 301 '/ffff::' => [ 302 { 'res' => 'FROMFAILED', }, 303 ], 304 '/120::' => [ 305 { 'res' => 'FROMFAILED', }, 306 ], 307 308 }, 309); 310