Commit | Line | Data |
---|---|---|
0e23f538 TJ |
1 | /* |
2 | The software in this package is distributed under the GNU General | |
3 | Public License version 2 (with a special exception described below). | |
4 | ||
5 | A copy of GNU General Public License (GPL) is included in this distribution, | |
6 | in the file COPYING.GPL. | |
7 | ||
8 | As a special exception, if other files instantiate templates or use macros | |
9 | or inline functions from this file, or you compile this file and link it | |
10 | with other works to produce a work based on this file, this file | |
11 | does not by itself cause the resulting work to be covered | |
12 | by the GNU General Public License. | |
13 | ||
14 | However the source code for this file must still be made available | |
15 | in accordance with section (3) of the GNU General Public License. | |
16 | ||
17 | This exception does not invalidate any other reasons why a work based | |
18 | on this file might be covered by the GNU General Public License. | |
19 | */ | |
ab59d4f3 GE |
20 | /*************************************************************************** |
21 | * Copyright (C) 2004 by Intra2net AG * | |
ab59d4f3 GE |
22 | * * |
23 | ***************************************************************************/ | |
24 | ||
25 | #include <iostream> | |
26 | #include <string> | |
27 | #include <sstream> | |
28 | #include <stdexcept> | |
29 | ||
9fe0853b TJ |
30 | #define BOOST_TEST_MAIN |
31 | #define BOOST_TEST_DYN_LINK | |
32 | #include <boost/test/unit_test.hpp> | |
ab59d4f3 GE |
33 | |
34 | #include <ipfunc.hxx> | |
35 | ||
9fe0853b | 36 | namespace std |
a0105b80 GE |
37 | { |
38 | ||
9fe0853b TJ |
39 | template <class charT, class traits> |
40 | inline std::basic_ostream<charT, traits>& operator<<(std::basic_ostream<charT, traits>& os, | |
41 | const std::vector<IP_RANGE>& x) | |
a0105b80 | 42 | { |
9fe0853b TJ |
43 | bool is_first = true; |
44 | for (std::vector<IP_RANGE>::const_iterator i=x.begin(); i!=x.end(); i++) | |
a0105b80 | 45 | { |
9fe0853b TJ |
46 | if (!is_first) |
47 | os << ", "; | |
48 | os << i->to_string(); | |
49 | is_first = false; | |
a0105b80 | 50 | } |
a0105b80 | 51 | |
9fe0853b | 52 | return os; |
a0105b80 | 53 | } |
9141afbd GE |
54 | |
55 | template <class charT, class traits> | |
56 | inline std::basic_ostream<charT, traits>& operator<<(std::basic_ostream<charT, traits>& os, | |
57 | const IP_RANGE& x) | |
58 | { | |
59 | os << x.to_string(); | |
60 | return os; | |
61 | } | |
62 | ||
9fe0853b TJ |
63 | } // eo namespace std |
64 | ||
a0105b80 | 65 | |
ab59d4f3 | 66 | using namespace std; |
9fe0853b TJ |
67 | |
68 | BOOST_AUTO_TEST_SUITE(ip_range) | |
69 | ||
70 | BOOST_AUTO_TEST_CASE(ConstructIP1) | |
71 | { | |
72 | IP_RANGE i("192.168.1.1"); | |
73 | BOOST_CHECK_EQUAL(string("192.168.1.1"),i.to_string()); | |
74 | } | |
75 | ||
76 | BOOST_AUTO_TEST_CASE(ConstructIP2) | |
77 | { | |
78 | IP_RANGE i(ip_type::IP,"192.168.1.1"); | |
79 | BOOST_CHECK_EQUAL(string("192.168.1.1"),i.to_string()); | |
80 | } | |
81 | ||
82 | BOOST_AUTO_TEST_CASE(ConstructNet1) | |
83 | { | |
84 | IP_RANGE i("192.168.1.1/255.255.255.0"); | |
85 | BOOST_CHECK_EQUAL(string("192.168.1.0/255.255.255.0"),i.to_string()); | |
86 | } | |
87 | ||
88 | BOOST_AUTO_TEST_CASE(ConstructNet2) | |
89 | { | |
90 | IP_RANGE i(ip_type::NETWORK,"192.168.1.1","255.255.255.0"); | |
91 | BOOST_CHECK_EQUAL(string("192.168.1.0/255.255.255.0"),i.to_string()); | |
92 | } | |
93 | ||
94 | BOOST_AUTO_TEST_CASE(ConstructNet3) | |
95 | { | |
96 | IP_RANGE i("172.16.0.0/16"); | |
97 | BOOST_CHECK_EQUAL(string("172.16.0.0/255.255.0.0"),i.to_string()); | |
98 | } | |
99 | ||
100 | BOOST_AUTO_TEST_CASE(ConstructRange1) | |
101 | { | |
102 | IP_RANGE i("192.168.1.5-192.168.3.1"); | |
103 | BOOST_CHECK_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string()); | |
104 | } | |
105 | ||
106 | BOOST_AUTO_TEST_CASE(ConstructRange2) | |
107 | { | |
108 | IP_RANGE i(ip_type::RANGE,"192.168.1.5","192.168.3.1"); | |
109 | BOOST_CHECK_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string()); | |
110 | } | |
111 | ||
112 | BOOST_AUTO_TEST_CASE(ConstructRangeSwap) | |
113 | { | |
114 | IP_RANGE i(ip_type::RANGE,"192.168.3.1","192.168.1.5"); | |
115 | BOOST_CHECK_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string()); | |
116 | } | |
117 | ||
118 | BOOST_AUTO_TEST_CASE(OverlapIP) | |
119 | { | |
120 | IP_RANGE a("192.168.1.5"); | |
121 | IP_RANGE b("192.168.1.5"); | |
122 | ||
123 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
124 | } | |
125 | ||
126 | BOOST_AUTO_TEST_CASE(OverlapNet1) | |
127 | { | |
128 | IP_RANGE a("192.168.1.5/255.255.255.0"); | |
129 | IP_RANGE b("192.168.1.6"); | |
130 | ||
131 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
132 | } | |
133 | ||
134 | BOOST_AUTO_TEST_CASE(OverlapNet2) | |
135 | { | |
136 | IP_RANGE a("192.168.1.5/255.255.255.0"); | |
137 | IP_RANGE b("192.168.1.44/255.255.255.248"); | |
138 | ||
139 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
140 | } | |
141 | ||
142 | BOOST_AUTO_TEST_CASE(OverlapNet3) | |
143 | { | |
144 | IP_RANGE a("192.168.1.5/255.255.255.0"); | |
145 | IP_RANGE b("192.168.0.0/255.255.0.0"); | |
146 | ||
147 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
148 | } | |
149 | ||
150 | BOOST_AUTO_TEST_CASE(OverlapNet4) | |
151 | { | |
152 | IP_RANGE a("192.169.1.5/255.255.255.0"); | |
153 | IP_RANGE b("192.168.0.0/255.255.0.0"); | |
154 | ||
155 | BOOST_CHECK_EQUAL(false,a.overlapping(b)); | |
156 | } | |
157 | ||
158 | BOOST_AUTO_TEST_CASE(OverlapRange1) | |
159 | { | |
160 | IP_RANGE a("192.168.1.5-192.168.1.50"); | |
161 | IP_RANGE b("192.168.1.6"); | |
162 | ||
163 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
164 | } | |
165 | ||
166 | BOOST_AUTO_TEST_CASE(OverlapRange2) | |
167 | { | |
168 | IP_RANGE a("192.168.1.5-192.168.1.50"); | |
169 | IP_RANGE b("192.168.1.0/255.255.255.128"); | |
170 | ||
171 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
172 | } | |
173 | ||
174 | BOOST_AUTO_TEST_CASE(OverlapRange3) | |
175 | { | |
176 | IP_RANGE a("192.168.1.5-192.168.1.50"); | |
177 | IP_RANGE b("192.168.0.0/255.255.0.0"); | |
178 | ||
179 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
180 | } | |
181 | ||
182 | BOOST_AUTO_TEST_CASE(OverlapRange4) | |
183 | { | |
184 | IP_RANGE a("192.168.1.5-192.168.1.50"); | |
185 | IP_RANGE b("192.168.1.1-192.168.1.5"); | |
186 | ||
187 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
188 | } | |
189 | ||
190 | BOOST_AUTO_TEST_CASE(OverlapRange5) | |
191 | { | |
192 | IP_RANGE a("192.168.1.5-192.168.1.50"); | |
193 | IP_RANGE b("192.168.1.1-192.168.1.4"); | |
194 | ||
195 | BOOST_CHECK_EQUAL(false,a.overlapping(b)); | |
196 | } | |
197 | ||
198 | BOOST_AUTO_TEST_CASE(OverlapRange6) | |
199 | { | |
200 | IP_RANGE a("192.168.1.5-192.168.1.50"); | |
201 | IP_RANGE b("192.168.1.1-192.168.2.4"); | |
202 | ||
203 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
204 | } | |
205 | ||
206 | BOOST_AUTO_TEST_CASE(OverlapRange7) | |
207 | { | |
208 | IP_RANGE a("192.168.1.5-192.168.1.50"); | |
209 | IP_RANGE b("192.168.1.6-192.168.1.7"); | |
210 | ||
211 | BOOST_CHECK_EQUAL(true,a.overlapping(b)); | |
212 | } | |
213 | ||
214 | BOOST_AUTO_TEST_CASE(WithinNet1) | |
215 | { | |
216 | IP_RANGE a("192.168.1.0/255.255.255.0"); | |
217 | IP_RANGE b("192.168.1.6"); | |
218 | ||
219 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
220 | } | |
221 | ||
222 | BOOST_AUTO_TEST_CASE(WithinNet2) | |
223 | { | |
224 | IP_RANGE a("192.168.1.6"); | |
225 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
226 | ||
227 | BOOST_CHECK_EQUAL(true,a.is_within(b)); | |
228 | } | |
229 | ||
230 | BOOST_AUTO_TEST_CASE(WithinNet3) | |
231 | { | |
232 | IP_RANGE a("192.168.1.6/255.255.255.248"); | |
233 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
234 | ||
235 | BOOST_CHECK_EQUAL(true,a.is_within(b)); | |
236 | } | |
237 | ||
238 | BOOST_AUTO_TEST_CASE(WithinNet4) | |
239 | { | |
240 | IP_RANGE a("192.168.0.0/255.255.0.0"); | |
241 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
242 | ||
243 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
244 | } | |
245 | ||
246 | BOOST_AUTO_TEST_CASE(WithinNet5) | |
247 | { | |
248 | IP_RANGE a("192.168.1.0/255.255.255.0"); | |
249 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
250 | ||
251 | BOOST_CHECK_EQUAL(true,a.is_within(b)); | |
252 | } | |
253 | ||
254 | BOOST_AUTO_TEST_CASE(WithinNet6) | |
255 | { | |
256 | IP_RANGE a("192.168.1.0/255.255.255.0"); | |
257 | IP_RANGE b("192.168.1.0/255.255.255.128"); | |
258 | ||
259 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
260 | } | |
261 | ||
262 | BOOST_AUTO_TEST_CASE(WithinNet7) | |
263 | { | |
264 | IP_RANGE a("192.168.1.0/255.255.255.128"); | |
265 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
266 | ||
267 | BOOST_CHECK_EQUAL(true,a.is_within(b)); | |
268 | } | |
269 | ||
270 | BOOST_AUTO_TEST_CASE(WithinRange1) | |
271 | { | |
272 | IP_RANGE a("192.168.1.0/255.255.255.0"); | |
273 | IP_RANGE b("192.168.1.0-192.168.1.255"); | |
274 | ||
275 | BOOST_CHECK_EQUAL(true,a.is_within(b)); | |
276 | } | |
277 | ||
278 | BOOST_AUTO_TEST_CASE(WithinRange2) | |
279 | { | |
280 | IP_RANGE a("192.168.1.0"); | |
281 | IP_RANGE b("192.168.1.0-192.168.1.255"); | |
282 | ||
283 | BOOST_CHECK_EQUAL(true,a.is_within(b)); | |
284 | } | |
285 | ||
286 | BOOST_AUTO_TEST_CASE(WithinRange3) | |
287 | { | |
288 | IP_RANGE a("192.168.1.1-192.168.1.1"); | |
289 | IP_RANGE b("192.168.1.0-192.168.1.255"); | |
290 | ||
291 | BOOST_CHECK_EQUAL(true,a.is_within(b)); | |
292 | } | |
293 | ||
294 | BOOST_AUTO_TEST_CASE(WithinRange4) | |
295 | { | |
296 | IP_RANGE a("192.168.1.0-192.168.1.2"); | |
297 | IP_RANGE b("192.168.1.1-192.168.1.255"); | |
298 | ||
299 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
300 | } | |
301 | ||
302 | BOOST_AUTO_TEST_CASE(WithinRange5) | |
303 | { | |
304 | IP_RANGE a("192.168.1.199-192.168.1.202"); | |
305 | IP_RANGE b("192.168.1.1-192.168.1.200"); | |
306 | ||
307 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
308 | } | |
309 | ||
310 | BOOST_AUTO_TEST_CASE(WithinRange6) | |
311 | { | |
312 | IP_RANGE a("192.168.1.0-192.168.1.202"); | |
313 | IP_RANGE b("192.168.1.1-192.168.1.200"); | |
314 | ||
315 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
316 | } | |
317 | ||
318 | BOOST_AUTO_TEST_CASE(WithinRange7) | |
319 | { | |
320 | IP_RANGE a("192.168.1.0-192.168.1.202"); | |
321 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
322 | ||
323 | BOOST_CHECK_EQUAL(true,a.is_within(b)); | |
324 | } | |
325 | ||
326 | BOOST_AUTO_TEST_CASE(WithinRange8) | |
327 | { | |
328 | IP_RANGE a("192.168.0.0-192.168.1.202"); | |
329 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
330 | ||
331 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
332 | } | |
333 | ||
334 | BOOST_AUTO_TEST_CASE(WithinRange9) | |
335 | { | |
336 | IP_RANGE a("192.168.0.0-192.168.2.202"); | |
337 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
338 | ||
339 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
340 | } | |
341 | ||
342 | BOOST_AUTO_TEST_CASE(WithinRange10) | |
343 | { | |
344 | IP_RANGE a("192.168.1.10-192.168.2.0"); | |
345 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
346 | ||
347 | BOOST_CHECK_EQUAL(false,a.is_within(b)); | |
348 | } | |
349 | ||
350 | BOOST_AUTO_TEST_CASE(OperatorPlus1) | |
351 | { | |
352 | IP_RANGE a("192.168.2.0/255.255.255.0"); | |
353 | ||
354 | a=a+256; | |
355 | ||
356 | BOOST_CHECK_EQUAL(string("192.168.3.0/255.255.255.0"),a.to_string()); | |
357 | } | |
358 | ||
359 | BOOST_AUTO_TEST_CASE(OperatorPlus2) | |
360 | { | |
361 | IP_RANGE a("192.168.2.0/255.255.255.0"); | |
362 | ||
363 | a=a+13; | |
364 | ||
365 | BOOST_CHECK_EQUAL(string("192.168.2.13-192.168.3.12"),a.to_string()); | |
366 | } | |
367 | ||
368 | BOOST_AUTO_TEST_CASE(OperatorPlusOverflow) | |
369 | { | |
370 | IP_RANGE a("255.255.255.0/255.255.255.0"); | |
371 | BOOST_REQUIRE_THROW(a=a+1, std::range_error); | |
372 | } | |
373 | ||
374 | BOOST_AUTO_TEST_CASE(OperatorMinus) | |
375 | { | |
376 | IP_RANGE a("192.168.2.0/255.255.255.0"); | |
377 | IP_RANGE b("192.168.1.0/255.255.255.0"); | |
378 | ||
379 | BOOST_CHECK_EQUAL(256,a-b); | |
380 | } | |
381 | ||
382 | BOOST_AUTO_TEST_CASE(NetmaskToBits1) | |
383 | { | |
384 | IP_RANGE a("255.255.255.255"); | |
385 | int bits = a.calc_netmask_bits(a.get_base()); | |
386 | BOOST_CHECK_EQUAL(32,bits); | |
387 | } | |
388 | ||
389 | BOOST_AUTO_TEST_CASE(NetmaskToBits2) | |
390 | { | |
391 | IP_RANGE a("255.255.255.0"); | |
392 | int bits = a.calc_netmask_bits(a.get_base()); | |
393 | BOOST_CHECK_EQUAL(24,bits); | |
394 | } | |
395 | ||
396 | BOOST_AUTO_TEST_CASE(NetmaskToBits3) | |
397 | { | |
398 | IP_RANGE a("255.255.0.0"); | |
399 | int bits = a.calc_netmask_bits(a.get_base()); | |
400 | BOOST_CHECK_EQUAL(16,bits); | |
401 | } | |
402 | ||
403 | BOOST_AUTO_TEST_CASE(NetmaskToBits4) | |
404 | { | |
405 | IP_RANGE a("255.0.0.0"); | |
406 | int bits = a.calc_netmask_bits(a.get_base()); | |
407 | BOOST_CHECK_EQUAL(8,bits); | |
408 | } | |
409 | BOOST_AUTO_TEST_CASE(Range2Cidr1) | |
410 | { | |
411 | IP_RANGE range("192.168.1.100-192.168.1.227"); | |
412 | vector<IP_RANGE> cidrs = range.to_cidr(); | |
413 | ||
414 | vector<IP_RANGE> check_cidrs; | |
415 | check_cidrs.push_back("192.168.1.100/30"); | |
416 | check_cidrs.push_back("192.168.1.104/29"); | |
417 | check_cidrs.push_back("192.168.1.112/28"); | |
418 | check_cidrs.push_back("192.168.1.128/26"); | |
419 | check_cidrs.push_back("192.168.1.192/27"); | |
420 | check_cidrs.push_back("192.168.1.224/30"); | |
421 | ||
422 | BOOST_CHECK_EQUAL(check_cidrs,cidrs); | |
423 | } | |
424 | ||
425 | BOOST_AUTO_TEST_CASE(Range2Cidr2) | |
426 | { | |
427 | IP_RANGE range("0.0.0.0-255.255.255.255"); | |
428 | vector<IP_RANGE> cidrs = range.to_cidr(); | |
429 | ||
430 | vector<IP_RANGE> check_cidrs; | |
431 | check_cidrs.push_back("0.0.0.0/0"); | |
432 | ||
433 | BOOST_CHECK_EQUAL(check_cidrs,cidrs); | |
434 | } | |
435 | ||
436 | BOOST_AUTO_TEST_CASE(Range2Cidr3) | |
437 | { | |
438 | IP_RANGE range("192.168.1.3"); | |
439 | vector<IP_RANGE> cidrs = range.to_cidr(); | |
440 | ||
441 | vector<IP_RANGE> check_cidrs; | |
442 | check_cidrs.push_back("192.168.1.3/32"); | |
443 | ||
444 | BOOST_CHECK_EQUAL(check_cidrs,cidrs); | |
445 | } | |
446 | ||
447 | BOOST_AUTO_TEST_CASE(Range2Cidr4) | |
448 | { | |
449 | IP_RANGE range("172.16.0.0/16"); | |
450 | vector<IP_RANGE> cidrs = range.to_cidr(); | |
451 | ||
452 | vector<IP_RANGE> check_cidrs; | |
453 | check_cidrs.push_back("172.16.0.0/16"); | |
454 | ||
455 | BOOST_CHECK_EQUAL(check_cidrs,cidrs); | |
456 | } | |
457 | ||
458 | BOOST_AUTO_TEST_CASE(Range2Cidr5) | |
459 | { | |
460 | IP_RANGE range(ip_type::NETWORK, "172.16.0.0", "255.255.0.0"); | |
461 | vector<IP_RANGE> cidrs = range.to_cidr(); | |
462 | ||
463 | vector<IP_RANGE> check_cidrs; | |
464 | check_cidrs.push_back("172.16.0.0/16"); | |
465 | ||
466 | BOOST_CHECK_EQUAL(check_cidrs,cidrs); | |
467 | } | |
468 | BOOST_AUTO_TEST_CASE(Range2Cidr6) | |
469 | { | |
470 | IP_RANGE range("192.168.1.0-192.168.2.0"); | |
471 | vector<IP_RANGE> cidrs = range.to_cidr(); | |
472 | ||
473 | vector<IP_RANGE> check_cidrs; | |
474 | check_cidrs.push_back("192.168.1.0/24"); | |
475 | check_cidrs.push_back("192.168.2.0/32"); | |
476 | ||
477 | BOOST_CHECK_EQUAL(check_cidrs,cidrs); | |
478 | } | |
479 | ||
480 | BOOST_AUTO_TEST_CASE(Range2Cidr7) | |
481 | { | |
482 | IP_RANGE range("0.0.0.1-255.255.255.254"); | |
483 | vector<IP_RANGE> cidrs = range.to_cidr(); | |
484 | ||
485 | vector<IP_RANGE> check_cidrs; | |
486 | check_cidrs.push_back("0.0.0.1/32"); | |
487 | check_cidrs.push_back("0.0.0.2/31"); | |
488 | check_cidrs.push_back("0.0.0.4/30"); | |
489 | check_cidrs.push_back("0.0.0.8/29"); | |
490 | check_cidrs.push_back("0.0.0.16/28"); | |
491 | check_cidrs.push_back("0.0.0.32/27"); | |
492 | check_cidrs.push_back("0.0.0.64/26"); | |
493 | check_cidrs.push_back("0.0.0.128/25"); | |
494 | check_cidrs.push_back("0.0.1.0/24"); | |
495 | check_cidrs.push_back("0.0.2.0/23"); | |
496 | check_cidrs.push_back("0.0.4.0/22"); | |
497 | check_cidrs.push_back("0.0.8.0/21"); | |
498 | check_cidrs.push_back("0.0.16.0/20"); | |
499 | check_cidrs.push_back("0.0.32.0/19"); | |
500 | check_cidrs.push_back("0.0.64.0/18"); | |
501 | check_cidrs.push_back("0.0.128.0/17"); | |
502 | check_cidrs.push_back("0.1.0.0/16"); | |
503 | check_cidrs.push_back("0.2.0.0/15"); | |
504 | check_cidrs.push_back("0.4.0.0/14"); | |
505 | check_cidrs.push_back("0.8.0.0/13"); | |
506 | check_cidrs.push_back("0.16.0.0/12"); | |
507 | check_cidrs.push_back("0.32.0.0/11"); | |
508 | check_cidrs.push_back("0.64.0.0/10"); | |
509 | check_cidrs.push_back("0.128.0.0/9"); | |
510 | check_cidrs.push_back("1.0.0.0/8"); | |
511 | check_cidrs.push_back("2.0.0.0/7"); | |
512 | check_cidrs.push_back("4.0.0.0/6"); | |
513 | check_cidrs.push_back("8.0.0.0/5"); | |
514 | check_cidrs.push_back("16.0.0.0/4"); | |
515 | check_cidrs.push_back("32.0.0.0/3"); | |
516 | check_cidrs.push_back("64.0.0.0/2"); | |
517 | check_cidrs.push_back("128.0.0.0/2"); | |
518 | check_cidrs.push_back("192.0.0.0/3"); | |
519 | check_cidrs.push_back("224.0.0.0/4"); | |
520 | check_cidrs.push_back("240.0.0.0/5"); | |
521 | check_cidrs.push_back("248.0.0.0/6"); | |
522 | check_cidrs.push_back("252.0.0.0/7"); | |
523 | check_cidrs.push_back("254.0.0.0/8"); | |
524 | check_cidrs.push_back("255.0.0.0/9"); | |
525 | check_cidrs.push_back("255.128.0.0/10"); | |
526 | check_cidrs.push_back("255.192.0.0/11"); | |
527 | check_cidrs.push_back("255.224.0.0/12"); | |
528 | check_cidrs.push_back("255.240.0.0/13"); | |
529 | check_cidrs.push_back("255.248.0.0/14"); | |
530 | check_cidrs.push_back("255.252.0.0/15"); | |
531 | check_cidrs.push_back("255.254.0.0/16"); | |
532 | check_cidrs.push_back("255.255.0.0/17"); | |
533 | check_cidrs.push_back("255.255.128.0/18"); | |
534 | check_cidrs.push_back("255.255.192.0/19"); | |
535 | check_cidrs.push_back("255.255.224.0/20"); | |
536 | check_cidrs.push_back("255.255.240.0/21"); | |
537 | check_cidrs.push_back("255.255.248.0/22"); | |
538 | check_cidrs.push_back("255.255.252.0/23"); | |
539 | check_cidrs.push_back("255.255.254.0/24"); | |
540 | check_cidrs.push_back("255.255.255.0/25"); | |
541 | check_cidrs.push_back("255.255.255.128/26"); | |
542 | check_cidrs.push_back("255.255.255.192/27"); | |
543 | check_cidrs.push_back("255.255.255.224/28"); | |
544 | check_cidrs.push_back("255.255.255.240/29"); | |
545 | check_cidrs.push_back("255.255.255.248/30"); | |
546 | check_cidrs.push_back("255.255.255.252/31"); | |
547 | check_cidrs.push_back("255.255.255.254/32"); | |
548 | ||
549 | BOOST_CHECK_EQUAL(check_cidrs,cidrs); | |
550 | } | |
551 | ||
552 | BOOST_AUTO_TEST_CASE(Substract1) | |
553 | { | |
554 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
555 | set<IP_RANGE> to_sub; | |
556 | to_sub.insert(IP_RANGE("192.168.1.3")); | |
557 | ||
558 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
559 | ||
560 | vector<IP_RANGE> check_range; | |
561 | check_range.push_back("192.168.1.1-192.168.1.2"); | |
562 | check_range.push_back("192.168.1.4-192.168.1.100"); | |
563 | ||
564 | BOOST_CHECK_EQUAL(check_range,new_range); | |
565 | } | |
566 | ||
567 | BOOST_AUTO_TEST_CASE(Substract2) | |
568 | { | |
569 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
570 | set<IP_RANGE> to_sub; | |
571 | to_sub.insert(IP_RANGE("192.168.1.1")); | |
572 | ||
573 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
574 | ||
575 | vector<IP_RANGE> check_range; | |
576 | check_range.push_back("192.168.1.2-192.168.1.100"); | |
577 | ||
578 | BOOST_CHECK_EQUAL(check_range,new_range); | |
579 | } | |
580 | ||
581 | BOOST_AUTO_TEST_CASE(Substract3) | |
582 | { | |
583 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
584 | set<IP_RANGE> to_sub; | |
585 | to_sub.insert(IP_RANGE("192.168.1.1")); | |
586 | to_sub.insert(IP_RANGE("192.168.1.61")); | |
587 | to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.60")); | |
588 | ||
589 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
590 | ||
591 | vector<IP_RANGE> check_range; | |
592 | check_range.push_back("192.168.1.2-192.168.1.49"); | |
593 | check_range.push_back("192.168.1.62-192.168.1.100"); | |
594 | ||
595 | BOOST_CHECK_EQUAL(check_range,new_range); | |
596 | } | |
597 | ||
598 | BOOST_AUTO_TEST_CASE(Substract4) | |
599 | { | |
600 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
601 | set<IP_RANGE> to_sub; | |
602 | to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.100")); | |
603 | ||
604 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
605 | ||
606 | vector<IP_RANGE> check_range; | |
607 | check_range.push_back("192.168.1.1-192.168.1.49"); | |
608 | ||
609 | BOOST_CHECK_EQUAL(check_range,new_range); | |
610 | } | |
611 | ||
612 | BOOST_AUTO_TEST_CASE(Substract5) | |
613 | { | |
614 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
615 | set<IP_RANGE> to_sub; | |
616 | to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.99")); | |
617 | ||
618 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
619 | ||
620 | vector<IP_RANGE> check_range; | |
621 | check_range.push_back("192.168.1.1-192.168.1.49"); | |
622 | check_range.push_back("192.168.1.100-192.168.1.100"); | |
623 | ||
624 | BOOST_CHECK_EQUAL(check_range,new_range); | |
625 | } | |
626 | ||
627 | BOOST_AUTO_TEST_CASE(Substract6) | |
628 | { | |
629 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
630 | set<IP_RANGE> to_sub; | |
631 | to_sub.insert(IP_RANGE("192.168.1.2-192.168.1.100")); | |
632 | ||
633 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
634 | ||
635 | vector<IP_RANGE> check_range; | |
636 | check_range.push_back("192.168.1.1"); | |
637 | ||
638 | BOOST_CHECK_EQUAL(check_range,new_range); | |
639 | } | |
640 | ||
641 | BOOST_AUTO_TEST_CASE(Substract7) | |
642 | { | |
643 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
644 | set<IP_RANGE> to_sub; | |
645 | to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.100")); | |
646 | to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.61")); | |
647 | to_sub.insert(IP_RANGE("192.168.1.61")); | |
648 | to_sub.insert(IP_RANGE("192.168.1.62")); | |
649 | to_sub.insert(IP_RANGE("192.168.1.63")); | |
650 | ||
651 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
652 | ||
653 | vector<IP_RANGE> check_range; | |
654 | ||
655 | BOOST_CHECK_EQUAL(check_range,new_range); | |
656 | } | |
657 | ||
658 | BOOST_AUTO_TEST_CASE(Substract8) | |
659 | { | |
660 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
661 | set<IP_RANGE> to_sub; | |
662 | to_sub.insert(IP_RANGE("192.168.1.10-192.168.1.20")); | |
663 | to_sub.insert(IP_RANGE("192.168.1.11-192.168.1.30")); | |
664 | to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.3")); | |
665 | to_sub.insert(IP_RANGE("192.168.1.8")); | |
666 | to_sub.insert(IP_RANGE("192.168.1.9")); | |
667 | ||
668 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
669 | ||
670 | vector<IP_RANGE> check_range; | |
671 | check_range.push_back("192.168.1.4-192.168.1.7"); | |
672 | check_range.push_back("192.168.1.31-192.168.1.100"); | |
673 | ||
674 | BOOST_CHECK_EQUAL(check_range,new_range); | |
675 | } | |
676 | ||
677 | BOOST_AUTO_TEST_CASE(Substract9) | |
678 | { | |
679 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
680 | set<IP_RANGE> to_sub; | |
681 | to_sub.insert(IP_RANGE("192.168.1.9-192.168.1.15")); | |
682 | to_sub.insert(IP_RANGE("192.168.1.10-192.168.1.20")); | |
683 | ||
684 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
685 | ||
686 | vector<IP_RANGE> check_range; | |
687 | check_range.push_back("192.168.1.1-192.168.1.8"); | |
688 | check_range.push_back("192.168.1.21-192.168.1.100"); | |
689 | ||
690 | BOOST_CHECK_EQUAL(check_range,new_range); | |
691 | } | |
692 | ||
693 | BOOST_AUTO_TEST_CASE(Substract10) | |
694 | { | |
695 | IP_RANGE range("192.168.1.1-192.168.1.2"); | |
696 | set<IP_RANGE> to_sub; | |
697 | to_sub.insert(IP_RANGE("192.168.1.1")); | |
698 | ||
699 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
700 | ||
701 | vector<IP_RANGE> check_range; | |
702 | check_range.push_back("192.168.1.2"); | |
703 | ||
704 | BOOST_CHECK_EQUAL(check_range,new_range); | |
705 | } | |
706 | ||
707 | BOOST_AUTO_TEST_CASE(Substract11) | |
708 | { | |
709 | IP_RANGE range("192.168.1.1-192.168.1.2"); | |
710 | set<IP_RANGE> to_sub; | |
711 | to_sub.insert(IP_RANGE("192.168.1.2")); | |
712 | ||
713 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
714 | ||
715 | vector<IP_RANGE> check_range; | |
716 | check_range.push_back("192.168.1.1"); | |
717 | ||
718 | BOOST_CHECK_EQUAL(check_range,new_range); | |
719 | } | |
720 | ||
721 | BOOST_AUTO_TEST_CASE(Substract12) | |
722 | { | |
723 | IP_RANGE range("192.168.1.1"); | |
724 | set<IP_RANGE> to_sub; | |
725 | to_sub.insert(IP_RANGE("192.168.1.1")); | |
726 | ||
727 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
728 | ||
729 | vector<IP_RANGE> check_range; | |
730 | ||
731 | BOOST_CHECK_EQUAL(check_range,new_range); | |
732 | } | |
733 | ||
734 | BOOST_AUTO_TEST_CASE(Substract13) | |
735 | { | |
736 | IP_RANGE range("192.168.1.1"); | |
737 | ||
738 | set<IP_RANGE> to_sub; | |
739 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
740 | ||
741 | vector<IP_RANGE> check_range; | |
742 | check_range.push_back("192.168.1.1"); | |
743 | ||
744 | BOOST_CHECK_EQUAL(check_range,new_range); | |
745 | } | |
746 | ||
747 | BOOST_AUTO_TEST_CASE(Substract14) | |
748 | { | |
749 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
750 | set<IP_RANGE> to_sub; | |
751 | ||
752 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
753 | ||
754 | vector<IP_RANGE> check_range; | |
755 | check_range.push_back("192.168.1.1-192.168.1.100"); | |
756 | ||
757 | BOOST_CHECK_EQUAL(check_range,new_range); | |
758 | } | |
759 | ||
760 | BOOST_AUTO_TEST_CASE(Substract15) | |
761 | { | |
762 | IP_RANGE range("192.168.1.1-192.168.1.100"); | |
763 | set<IP_RANGE> to_sub; | |
764 | to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.60")); | |
765 | to_sub.insert(IP_RANGE("192.168.1.62-192.168.1.100")); | |
766 | ||
767 | vector<IP_RANGE> new_range = range.substract(to_sub); | |
768 | ||
769 | vector<IP_RANGE> check_range; | |
770 | check_range.push_back("192.168.1.61"); | |
771 | ||
772 | BOOST_CHECK_EQUAL(check_range,new_range); | |
773 | } | |
774 | ||
775 | BOOST_AUTO_TEST_CASE(IpNumString1) | |
776 | { | |
777 | IP_RANGE myip("192.168.1.50"); | |
778 | string expected("192168001050"); | |
779 | ||
780 | BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base())); | |
781 | } | |
782 | ||
783 | BOOST_AUTO_TEST_CASE(IpNumString2) | |
784 | { | |
785 | IP_RANGE myip("0.0.0.0"); | |
786 | string expected("000000000000"); | |
787 | ||
788 | BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base())); | |
789 | } | |
790 | ||
791 | BOOST_AUTO_TEST_CASE(IpNumString3) | |
792 | { | |
793 | IP_RANGE myip("255.255.255.255"); | |
794 | string expected("255255255255"); | |
795 | ||
796 | BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base())); | |
797 | } | |
798 | ||
9141afbd GE |
799 | BOOST_AUTO_TEST_CASE(NetmapValidation1) |
800 | { | |
801 | IP_RANGE myip("192.168.1.11"); | |
802 | IP_RANGE original("192.168.1.0/255.255.255.0"); | |
803 | IP_RANGE target("192.168.2.0/255.255.0.0"); | |
804 | ||
805 | BOOST_CHECK_EQUAL(false,myip.netmap(original,target)); | |
806 | } | |
807 | ||
808 | BOOST_AUTO_TEST_CASE(NetmapValidation2) | |
809 | { | |
810 | IP_RANGE myip("192.168.3.11"); | |
811 | IP_RANGE original("192.168.1.0/255.255.255.0"); | |
812 | IP_RANGE target("192.168.2.0/255.255.255.0"); | |
813 | ||
814 | BOOST_CHECK_EQUAL(false,myip.netmap(original,target)); | |
815 | } | |
816 | ||
817 | BOOST_AUTO_TEST_CASE(NetmapValidation3) | |
818 | { | |
819 | IP_RANGE myip("192.168.1.70-192.168.2.20"); | |
820 | IP_RANGE original("192.168.1.0/255.255.255.0"); | |
821 | IP_RANGE target("192.168.2.0/255.255.255.0"); | |
822 | ||
823 | BOOST_CHECK_EQUAL(false,myip.netmap(original,target)); | |
824 | } | |
825 | ||
826 | BOOST_AUTO_TEST_CASE(Netmap1) | |
827 | { | |
828 | IP_RANGE myip("192.168.1.11"); | |
829 | IP_RANGE original("192.168.1.0/255.255.255.0"); | |
830 | IP_RANGE target("192.168.2.0/255.255.255.0"); | |
831 | ||
832 | BOOST_CHECK_EQUAL(true,myip.netmap(original,target)); | |
833 | BOOST_CHECK_EQUAL(IP_RANGE("192.168.2.11"),myip); | |
834 | } | |
835 | ||
836 | BOOST_AUTO_TEST_CASE(Netmap2) | |
837 | { | |
838 | IP_RANGE myip("192.168.1.11-192.168.1.22"); | |
839 | IP_RANGE original("192.168.1.0/255.255.255.0"); | |
840 | IP_RANGE target("192.168.2.0/255.255.255.0"); | |
841 | ||
842 | BOOST_CHECK_EQUAL(true,myip.netmap(original,target)); | |
843 | BOOST_CHECK_EQUAL(IP_RANGE("192.168.2.11-192.168.2.22"),myip); | |
844 | } | |
845 | ||
846 | BOOST_AUTO_TEST_CASE(Netmap3) | |
847 | { | |
848 | IP_RANGE myip("192.168.1.0/255.255.255.0"); | |
849 | IP_RANGE original("192.168.1.0/255.255.255.0"); | |
850 | IP_RANGE target("192.168.2.0/255.255.255.0"); | |
851 | ||
852 | BOOST_CHECK_EQUAL(true,myip.netmap(original,target)); | |
853 | BOOST_CHECK_EQUAL(IP_RANGE("192.168.2.0/255.255.255.0"),myip); | |
854 | } | |
855 | ||
7050bac5 TJ |
856 | BOOST_AUTO_TEST_CASE(ResolveDNS) |
857 | { | |
858 | IP_RANGE test; | |
859 | BOOST_CHECK_EQUAL("127.0.0.1", test.resolve_ip("localhost")); | |
860 | } | |
861 | ||
862 | /* | |
863 | // Note: Disabled on the Intranator | |
864 | BOOST_AUTO_TEST_CASE(ResolveDNSIPv6) | |
865 | { | |
866 | IP_RANGE test; | |
867 | BOOST_CHECK_EQUAL("::1", test.resolve_ip("localhost", true)); | |
868 | } | |
869 | */ | |
870 | ||
871 | BOOST_AUTO_TEST_CASE(ResolveExistingIP) | |
872 | { | |
873 | IP_RANGE test; | |
874 | BOOST_CHECK_EQUAL("192.168.1.254", test.resolve_ip("192.168.1.254")); | |
875 | } | |
876 | ||
877 | ||
9fe0853b | 878 | BOOST_AUTO_TEST_SUITE_END() |