Merge branch 'daemon-ext'
[libi2ncommon] / test / ip_range.cpp
CommitLineData
0e23f538
TJ
1/*
2The software in this package is distributed under the GNU General
3Public License version 2 (with a special exception described below).
4
5A copy of GNU General Public License (GPL) is included in this distribution,
6in the file COPYING.GPL.
7
8As a special exception, if other files instantiate templates or use macros
9or inline functions from this file, or you compile this file and link it
10with other works to produce a work based on this file, this file
11does not by itself cause the resulting work to be covered
12by the GNU General Public License.
13
14However the source code for this file must still be made available
15in accordance with section (3) of the GNU General Public License.
16
17This exception does not invalidate any other reasons why a work based
18on 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 36namespace std
a0105b80
GE
37{
38
9fe0853b
TJ
39template <class charT, class traits>
40inline 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
55template <class charT, class traits>
56inline 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 66using namespace std;
9fe0853b
TJ
67
68BOOST_AUTO_TEST_SUITE(ip_range)
69
70BOOST_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
76BOOST_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
82BOOST_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
88BOOST_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
94BOOST_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
100BOOST_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
106BOOST_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
112BOOST_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
118BOOST_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
126BOOST_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
134BOOST_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
142BOOST_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
150BOOST_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
158BOOST_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
166BOOST_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
174BOOST_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
182BOOST_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
190BOOST_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
198BOOST_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
206BOOST_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
214BOOST_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
222BOOST_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
230BOOST_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
238BOOST_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
246BOOST_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
254BOOST_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
262BOOST_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
270BOOST_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
278BOOST_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
286BOOST_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
294BOOST_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
302BOOST_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
310BOOST_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
318BOOST_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
326BOOST_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
334BOOST_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
342BOOST_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
350BOOST_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
359BOOST_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
368BOOST_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
374BOOST_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
382BOOST_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
389BOOST_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
396BOOST_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
403BOOST_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}
409BOOST_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
425BOOST_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
436BOOST_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
447BOOST_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
458BOOST_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}
468BOOST_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
480BOOST_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
552BOOST_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
567BOOST_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
581BOOST_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
598BOOST_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
612BOOST_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
627BOOST_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
641BOOST_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
658BOOST_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
677BOOST_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
693BOOST_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
707BOOST_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
721BOOST_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
734BOOST_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
747BOOST_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
760BOOST_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
775BOOST_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
783BOOST_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
791BOOST_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
799BOOST_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
808BOOST_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
817BOOST_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
826BOOST_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
836BOOST_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
846BOOST_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
856BOOST_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
864BOOST_AUTO_TEST_CASE(ResolveDNSIPv6)
865{
866 IP_RANGE test;
867 BOOST_CHECK_EQUAL("::1", test.resolve_ip("localhost", true));
868}
869*/
870
871BOOST_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 878BOOST_AUTO_TEST_SUITE_END()