2 The software in this package is distributed under the GNU General
3 Public License version 2 (with a special exception described below).
5 A copy of GNU General Public License (GPL) is included in this distribution,
6 in the file COPYING.GPL.
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.
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.
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.
20 /***************************************************************************
21 * Copyright (C) 2004 by Intra2net AG *
23 ***************************************************************************/
30 #define BOOST_TEST_MAIN
31 #define BOOST_TEST_DYN_LINK
32 #include <boost/test/unit_test.hpp>
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)
44 for (std::vector<IP_RANGE>::const_iterator i=x.begin(); i!=x.end(); i++)
55 template <class charT, class traits>
56 inline std::basic_ostream<charT, traits>& operator<<(std::basic_ostream<charT, traits>& os,
68 BOOST_AUTO_TEST_SUITE(ip_range)
70 BOOST_AUTO_TEST_CASE(ConstructIP1)
72 IP_RANGE i("192.168.1.1");
73 BOOST_CHECK_EQUAL(string("192.168.1.1"),i.to_string());
76 BOOST_AUTO_TEST_CASE(ConstructIP2)
78 IP_RANGE i(ip_type::IP,"192.168.1.1");
79 BOOST_CHECK_EQUAL(string("192.168.1.1"),i.to_string());
82 BOOST_AUTO_TEST_CASE(ConstructNet1)
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());
88 BOOST_AUTO_TEST_CASE(ConstructNet2)
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());
94 BOOST_AUTO_TEST_CASE(ConstructNet3)
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());
100 BOOST_AUTO_TEST_CASE(ConstructRange1)
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());
106 BOOST_AUTO_TEST_CASE(ConstructRange2)
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());
112 BOOST_AUTO_TEST_CASE(ConstructRangeSwap)
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());
118 BOOST_AUTO_TEST_CASE(OverlapIP)
120 IP_RANGE a("192.168.1.5");
121 IP_RANGE b("192.168.1.5");
123 BOOST_CHECK_EQUAL(true,a.overlapping(b));
126 BOOST_AUTO_TEST_CASE(OverlapNet1)
128 IP_RANGE a("192.168.1.5/255.255.255.0");
129 IP_RANGE b("192.168.1.6");
131 BOOST_CHECK_EQUAL(true,a.overlapping(b));
134 BOOST_AUTO_TEST_CASE(OverlapNet2)
136 IP_RANGE a("192.168.1.5/255.255.255.0");
137 IP_RANGE b("192.168.1.44/255.255.255.248");
139 BOOST_CHECK_EQUAL(true,a.overlapping(b));
142 BOOST_AUTO_TEST_CASE(OverlapNet3)
144 IP_RANGE a("192.168.1.5/255.255.255.0");
145 IP_RANGE b("192.168.0.0/255.255.0.0");
147 BOOST_CHECK_EQUAL(true,a.overlapping(b));
150 BOOST_AUTO_TEST_CASE(OverlapNet4)
152 IP_RANGE a("192.169.1.5/255.255.255.0");
153 IP_RANGE b("192.168.0.0/255.255.0.0");
155 BOOST_CHECK_EQUAL(false,a.overlapping(b));
158 BOOST_AUTO_TEST_CASE(OverlapRange1)
160 IP_RANGE a("192.168.1.5-192.168.1.50");
161 IP_RANGE b("192.168.1.6");
163 BOOST_CHECK_EQUAL(true,a.overlapping(b));
166 BOOST_AUTO_TEST_CASE(OverlapRange2)
168 IP_RANGE a("192.168.1.5-192.168.1.50");
169 IP_RANGE b("192.168.1.0/255.255.255.128");
171 BOOST_CHECK_EQUAL(true,a.overlapping(b));
174 BOOST_AUTO_TEST_CASE(OverlapRange3)
176 IP_RANGE a("192.168.1.5-192.168.1.50");
177 IP_RANGE b("192.168.0.0/255.255.0.0");
179 BOOST_CHECK_EQUAL(true,a.overlapping(b));
182 BOOST_AUTO_TEST_CASE(OverlapRange4)
184 IP_RANGE a("192.168.1.5-192.168.1.50");
185 IP_RANGE b("192.168.1.1-192.168.1.5");
187 BOOST_CHECK_EQUAL(true,a.overlapping(b));
190 BOOST_AUTO_TEST_CASE(OverlapRange5)
192 IP_RANGE a("192.168.1.5-192.168.1.50");
193 IP_RANGE b("192.168.1.1-192.168.1.4");
195 BOOST_CHECK_EQUAL(false,a.overlapping(b));
198 BOOST_AUTO_TEST_CASE(OverlapRange6)
200 IP_RANGE a("192.168.1.5-192.168.1.50");
201 IP_RANGE b("192.168.1.1-192.168.2.4");
203 BOOST_CHECK_EQUAL(true,a.overlapping(b));
206 BOOST_AUTO_TEST_CASE(OverlapRange7)
208 IP_RANGE a("192.168.1.5-192.168.1.50");
209 IP_RANGE b("192.168.1.6-192.168.1.7");
211 BOOST_CHECK_EQUAL(true,a.overlapping(b));
214 BOOST_AUTO_TEST_CASE(WithinNet1)
216 IP_RANGE a("192.168.1.0/255.255.255.0");
217 IP_RANGE b("192.168.1.6");
219 BOOST_CHECK_EQUAL(false,a.is_within(b));
222 BOOST_AUTO_TEST_CASE(WithinNet2)
224 IP_RANGE a("192.168.1.6");
225 IP_RANGE b("192.168.1.0/255.255.255.0");
227 BOOST_CHECK_EQUAL(true,a.is_within(b));
230 BOOST_AUTO_TEST_CASE(WithinNet3)
232 IP_RANGE a("192.168.1.6/255.255.255.248");
233 IP_RANGE b("192.168.1.0/255.255.255.0");
235 BOOST_CHECK_EQUAL(true,a.is_within(b));
238 BOOST_AUTO_TEST_CASE(WithinNet4)
240 IP_RANGE a("192.168.0.0/255.255.0.0");
241 IP_RANGE b("192.168.1.0/255.255.255.0");
243 BOOST_CHECK_EQUAL(false,a.is_within(b));
246 BOOST_AUTO_TEST_CASE(WithinNet5)
248 IP_RANGE a("192.168.1.0/255.255.255.0");
249 IP_RANGE b("192.168.1.0/255.255.255.0");
251 BOOST_CHECK_EQUAL(true,a.is_within(b));
254 BOOST_AUTO_TEST_CASE(WithinNet6)
256 IP_RANGE a("192.168.1.0/255.255.255.0");
257 IP_RANGE b("192.168.1.0/255.255.255.128");
259 BOOST_CHECK_EQUAL(false,a.is_within(b));
262 BOOST_AUTO_TEST_CASE(WithinNet7)
264 IP_RANGE a("192.168.1.0/255.255.255.128");
265 IP_RANGE b("192.168.1.0/255.255.255.0");
267 BOOST_CHECK_EQUAL(true,a.is_within(b));
270 BOOST_AUTO_TEST_CASE(WithinRange1)
272 IP_RANGE a("192.168.1.0/255.255.255.0");
273 IP_RANGE b("192.168.1.0-192.168.1.255");
275 BOOST_CHECK_EQUAL(true,a.is_within(b));
278 BOOST_AUTO_TEST_CASE(WithinRange2)
280 IP_RANGE a("192.168.1.0");
281 IP_RANGE b("192.168.1.0-192.168.1.255");
283 BOOST_CHECK_EQUAL(true,a.is_within(b));
286 BOOST_AUTO_TEST_CASE(WithinRange3)
288 IP_RANGE a("192.168.1.1-192.168.1.1");
289 IP_RANGE b("192.168.1.0-192.168.1.255");
291 BOOST_CHECK_EQUAL(true,a.is_within(b));
294 BOOST_AUTO_TEST_CASE(WithinRange4)
296 IP_RANGE a("192.168.1.0-192.168.1.2");
297 IP_RANGE b("192.168.1.1-192.168.1.255");
299 BOOST_CHECK_EQUAL(false,a.is_within(b));
302 BOOST_AUTO_TEST_CASE(WithinRange5)
304 IP_RANGE a("192.168.1.199-192.168.1.202");
305 IP_RANGE b("192.168.1.1-192.168.1.200");
307 BOOST_CHECK_EQUAL(false,a.is_within(b));
310 BOOST_AUTO_TEST_CASE(WithinRange6)
312 IP_RANGE a("192.168.1.0-192.168.1.202");
313 IP_RANGE b("192.168.1.1-192.168.1.200");
315 BOOST_CHECK_EQUAL(false,a.is_within(b));
318 BOOST_AUTO_TEST_CASE(WithinRange7)
320 IP_RANGE a("192.168.1.0-192.168.1.202");
321 IP_RANGE b("192.168.1.0/255.255.255.0");
323 BOOST_CHECK_EQUAL(true,a.is_within(b));
326 BOOST_AUTO_TEST_CASE(WithinRange8)
328 IP_RANGE a("192.168.0.0-192.168.1.202");
329 IP_RANGE b("192.168.1.0/255.255.255.0");
331 BOOST_CHECK_EQUAL(false,a.is_within(b));
334 BOOST_AUTO_TEST_CASE(WithinRange9)
336 IP_RANGE a("192.168.0.0-192.168.2.202");
337 IP_RANGE b("192.168.1.0/255.255.255.0");
339 BOOST_CHECK_EQUAL(false,a.is_within(b));
342 BOOST_AUTO_TEST_CASE(WithinRange10)
344 IP_RANGE a("192.168.1.10-192.168.2.0");
345 IP_RANGE b("192.168.1.0/255.255.255.0");
347 BOOST_CHECK_EQUAL(false,a.is_within(b));
350 BOOST_AUTO_TEST_CASE(OperatorPlus1)
352 IP_RANGE a("192.168.2.0/255.255.255.0");
356 BOOST_CHECK_EQUAL(string("192.168.3.0/255.255.255.0"),a.to_string());
359 BOOST_AUTO_TEST_CASE(OperatorPlus2)
361 IP_RANGE a("192.168.2.0/255.255.255.0");
365 BOOST_CHECK_EQUAL(string("192.168.2.13-192.168.3.12"),a.to_string());
368 BOOST_AUTO_TEST_CASE(OperatorPlusOverflow)
370 IP_RANGE a("255.255.255.0/255.255.255.0");
371 BOOST_REQUIRE_THROW(a=a+1, std::range_error);
374 BOOST_AUTO_TEST_CASE(OperatorMinus)
376 IP_RANGE a("192.168.2.0/255.255.255.0");
377 IP_RANGE b("192.168.1.0/255.255.255.0");
379 BOOST_CHECK_EQUAL(256,a-b);
382 BOOST_AUTO_TEST_CASE(NetmaskToBits1)
384 IP_RANGE a("255.255.255.255");
385 int bits = a.calc_netmask_bits(a.get_base());
386 BOOST_CHECK_EQUAL(32,bits);
389 BOOST_AUTO_TEST_CASE(NetmaskToBits2)
391 IP_RANGE a("255.255.255.0");
392 int bits = a.calc_netmask_bits(a.get_base());
393 BOOST_CHECK_EQUAL(24,bits);
396 BOOST_AUTO_TEST_CASE(NetmaskToBits3)
398 IP_RANGE a("255.255.0.0");
399 int bits = a.calc_netmask_bits(a.get_base());
400 BOOST_CHECK_EQUAL(16,bits);
403 BOOST_AUTO_TEST_CASE(NetmaskToBits4)
405 IP_RANGE a("255.0.0.0");
406 int bits = a.calc_netmask_bits(a.get_base());
407 BOOST_CHECK_EQUAL(8,bits);
409 BOOST_AUTO_TEST_CASE(Range2Cidr1)
411 IP_RANGE range("192.168.1.100-192.168.1.227");
412 vector<IP_RANGE> cidrs = range.to_cidr();
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");
422 BOOST_CHECK_EQUAL(check_cidrs,cidrs);
425 BOOST_AUTO_TEST_CASE(Range2Cidr2)
427 IP_RANGE range("0.0.0.0-255.255.255.255");
428 vector<IP_RANGE> cidrs = range.to_cidr();
430 vector<IP_RANGE> check_cidrs;
431 check_cidrs.push_back("0.0.0.0/0");
433 BOOST_CHECK_EQUAL(check_cidrs,cidrs);
436 BOOST_AUTO_TEST_CASE(Range2Cidr3)
438 IP_RANGE range("192.168.1.3");
439 vector<IP_RANGE> cidrs = range.to_cidr();
441 vector<IP_RANGE> check_cidrs;
442 check_cidrs.push_back("192.168.1.3/32");
444 BOOST_CHECK_EQUAL(check_cidrs,cidrs);
447 BOOST_AUTO_TEST_CASE(Range2Cidr4)
449 IP_RANGE range("172.16.0.0/16");
450 vector<IP_RANGE> cidrs = range.to_cidr();
452 vector<IP_RANGE> check_cidrs;
453 check_cidrs.push_back("172.16.0.0/16");
455 BOOST_CHECK_EQUAL(check_cidrs,cidrs);
458 BOOST_AUTO_TEST_CASE(Range2Cidr5)
460 IP_RANGE range(ip_type::NETWORK, "172.16.0.0", "255.255.0.0");
461 vector<IP_RANGE> cidrs = range.to_cidr();
463 vector<IP_RANGE> check_cidrs;
464 check_cidrs.push_back("172.16.0.0/16");
466 BOOST_CHECK_EQUAL(check_cidrs,cidrs);
468 BOOST_AUTO_TEST_CASE(Range2Cidr6)
470 IP_RANGE range("192.168.1.0-192.168.2.0");
471 vector<IP_RANGE> cidrs = range.to_cidr();
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");
477 BOOST_CHECK_EQUAL(check_cidrs,cidrs);
480 BOOST_AUTO_TEST_CASE(Range2Cidr7)
482 IP_RANGE range("0.0.0.1-255.255.255.254");
483 vector<IP_RANGE> cidrs = range.to_cidr();
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");
549 BOOST_CHECK_EQUAL(check_cidrs,cidrs);
552 BOOST_AUTO_TEST_CASE(Substract1)
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"));
558 vector<IP_RANGE> new_range = range.substract(to_sub);
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");
564 BOOST_CHECK_EQUAL(check_range,new_range);
567 BOOST_AUTO_TEST_CASE(Substract2)
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"));
573 vector<IP_RANGE> new_range = range.substract(to_sub);
575 vector<IP_RANGE> check_range;
576 check_range.push_back("192.168.1.2-192.168.1.100");
578 BOOST_CHECK_EQUAL(check_range,new_range);
581 BOOST_AUTO_TEST_CASE(Substract3)
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"));
589 vector<IP_RANGE> new_range = range.substract(to_sub);
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");
595 BOOST_CHECK_EQUAL(check_range,new_range);
598 BOOST_AUTO_TEST_CASE(Substract4)
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"));
604 vector<IP_RANGE> new_range = range.substract(to_sub);
606 vector<IP_RANGE> check_range;
607 check_range.push_back("192.168.1.1-192.168.1.49");
609 BOOST_CHECK_EQUAL(check_range,new_range);
612 BOOST_AUTO_TEST_CASE(Substract5)
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"));
618 vector<IP_RANGE> new_range = range.substract(to_sub);
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");
624 BOOST_CHECK_EQUAL(check_range,new_range);
627 BOOST_AUTO_TEST_CASE(Substract6)
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"));
633 vector<IP_RANGE> new_range = range.substract(to_sub);
635 vector<IP_RANGE> check_range;
636 check_range.push_back("192.168.1.1");
638 BOOST_CHECK_EQUAL(check_range,new_range);
641 BOOST_AUTO_TEST_CASE(Substract7)
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"));
651 vector<IP_RANGE> new_range = range.substract(to_sub);
653 vector<IP_RANGE> check_range;
655 BOOST_CHECK_EQUAL(check_range,new_range);
658 BOOST_AUTO_TEST_CASE(Substract8)
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"));
668 vector<IP_RANGE> new_range = range.substract(to_sub);
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");
674 BOOST_CHECK_EQUAL(check_range,new_range);
677 BOOST_AUTO_TEST_CASE(Substract9)
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"));
684 vector<IP_RANGE> new_range = range.substract(to_sub);
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");
690 BOOST_CHECK_EQUAL(check_range,new_range);
693 BOOST_AUTO_TEST_CASE(Substract10)
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"));
699 vector<IP_RANGE> new_range = range.substract(to_sub);
701 vector<IP_RANGE> check_range;
702 check_range.push_back("192.168.1.2");
704 BOOST_CHECK_EQUAL(check_range,new_range);
707 BOOST_AUTO_TEST_CASE(Substract11)
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"));
713 vector<IP_RANGE> new_range = range.substract(to_sub);
715 vector<IP_RANGE> check_range;
716 check_range.push_back("192.168.1.1");
718 BOOST_CHECK_EQUAL(check_range,new_range);
721 BOOST_AUTO_TEST_CASE(Substract12)
723 IP_RANGE range("192.168.1.1");
724 set<IP_RANGE> to_sub;
725 to_sub.insert(IP_RANGE("192.168.1.1"));
727 vector<IP_RANGE> new_range = range.substract(to_sub);
729 vector<IP_RANGE> check_range;
731 BOOST_CHECK_EQUAL(check_range,new_range);
734 BOOST_AUTO_TEST_CASE(Substract13)
736 IP_RANGE range("192.168.1.1");
738 set<IP_RANGE> to_sub;
739 vector<IP_RANGE> new_range = range.substract(to_sub);
741 vector<IP_RANGE> check_range;
742 check_range.push_back("192.168.1.1");
744 BOOST_CHECK_EQUAL(check_range,new_range);
747 BOOST_AUTO_TEST_CASE(Substract14)
749 IP_RANGE range("192.168.1.1-192.168.1.100");
750 set<IP_RANGE> to_sub;
752 vector<IP_RANGE> new_range = range.substract(to_sub);
754 vector<IP_RANGE> check_range;
755 check_range.push_back("192.168.1.1-192.168.1.100");
757 BOOST_CHECK_EQUAL(check_range,new_range);
760 BOOST_AUTO_TEST_CASE(Substract15)
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"));
767 vector<IP_RANGE> new_range = range.substract(to_sub);
769 vector<IP_RANGE> check_range;
770 check_range.push_back("192.168.1.61");
772 BOOST_CHECK_EQUAL(check_range,new_range);
775 BOOST_AUTO_TEST_CASE(IpNumString1)
777 IP_RANGE myip("192.168.1.50");
778 string expected("192168001050");
780 BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
783 BOOST_AUTO_TEST_CASE(IpNumString2)
785 IP_RANGE myip("0.0.0.0");
786 string expected("000000000000");
788 BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
791 BOOST_AUTO_TEST_CASE(IpNumString3)
793 IP_RANGE myip("255.255.255.255");
794 string expected("255255255255");
796 BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
799 BOOST_AUTO_TEST_CASE(NetmapValidation1)
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");
805 BOOST_CHECK_EQUAL(false,myip.netmap(original,target));
808 BOOST_AUTO_TEST_CASE(NetmapValidation2)
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");
814 BOOST_CHECK_EQUAL(false,myip.netmap(original,target));
817 BOOST_AUTO_TEST_CASE(NetmapValidation3)
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");
823 BOOST_CHECK_EQUAL(false,myip.netmap(original,target));
826 BOOST_AUTO_TEST_CASE(Netmap1)
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");
832 BOOST_CHECK_EQUAL(true,myip.netmap(original,target));
833 BOOST_CHECK_EQUAL(IP_RANGE("192.168.2.11"),myip);
836 BOOST_AUTO_TEST_CASE(Netmap2)
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");
842 BOOST_CHECK_EQUAL(true,myip.netmap(original,target));
843 BOOST_CHECK_EQUAL(IP_RANGE("192.168.2.11-192.168.2.22"),myip);
846 BOOST_AUTO_TEST_CASE(Netmap3)
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");
852 BOOST_CHECK_EQUAL(true,myip.netmap(original,target));
853 BOOST_CHECK_EQUAL(IP_RANGE("192.168.2.0/255.255.255.0"),myip);
856 BOOST_AUTO_TEST_CASE(ResolveDNS)
859 BOOST_CHECK_EQUAL("127.0.0.1", test.resolve_ip("localhost"));
863 // Note: Disabled on the Intranator
864 BOOST_AUTO_TEST_CASE(ResolveDNSIPv6)
867 BOOST_CHECK_EQUAL("::1", test.resolve_ip("localhost", true));
871 BOOST_AUTO_TEST_CASE(ResolveExistingIP)
874 BOOST_CHECK_EQUAL("192.168.1.254", test.resolve_ip("192.168.1.254"));
878 BOOST_AUTO_TEST_SUITE_END()