]> git.ipfire.org Git - thirdparty/squid.git/blame - src/tests/testIcmp.cc
SourceFormat Enforcement
[thirdparty/squid.git] / src / tests / testIcmp.cc
CommitLineData
bbc27441 1/*
4ac4a490 2 * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
bbc27441
AJ
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
cc192b50 9#define SQUID_HELPER 1
ec94e362 10
582c2af2 11#include "squid.h"
37122e21
AJ
12#include "tests/testIcmp.h"
13#include "unitTestMain.h"
cc192b50 14
15#include <cppunit/TestAssert.h>
16
b826ffb5 17CPPUNIT_TEST_SUITE_REGISTRATION( testIcmp );
cc192b50 18
cc192b50 19void
b826ffb5 20testIcmp::testChecksum()
cc192b50 21{
37122e21 22#if USE_ICMP
b826ffb5 23 stubIcmp icmp;
f77d2de8
FC
24 uint16_t buf[10], tmpval;
25 for (tmpval=0; tmpval < 10; ++tmpval)
b4624c6c 26 buf[tmpval]=htons(1+tmpval);
cc192b50 27
28 // NULL data
4d6662d9 29 CPPUNIT_ASSERT_EQUAL((int)htons(0xffff), icmp.testChecksum(NULL,0));
cc192b50 30
31 // NULL data with length!!
4d6662d9 32 CPPUNIT_ASSERT_EQUAL((int)htons(0xffff), icmp.testChecksum(NULL,1));
cc192b50 33
34 // data with 0 length
4d6662d9 35 CPPUNIT_ASSERT_EQUAL((int)htons(0xffff), icmp.testChecksum(buf,0));
cc192b50 36
37 // data with invalid length (low)
4d6662d9 38 CPPUNIT_ASSERT_EQUAL((int)htons(0xffff), icmp.testChecksum(buf,1));
cc192b50 39
4d6662d9
AJ
40 CPPUNIT_ASSERT_EQUAL((int)htons(0xfffe), icmp.testChecksum(buf,2)); // 1
41 CPPUNIT_ASSERT_EQUAL((int)htons(0xfffe), icmp.testChecksum(buf,3));
b0ed693e 42
4d6662d9
AJ
43 CPPUNIT_ASSERT_EQUAL((int)htons(0xfffc), icmp.testChecksum(buf,4)); // 1+2
44 CPPUNIT_ASSERT_EQUAL((int)htons(0xfffc), icmp.testChecksum(buf,5));
cc192b50 45
4d6662d9 46 CPPUNIT_ASSERT_EQUAL((int)htons(0xfff9), icmp.testChecksum(buf,6)); // 1+2+3
b0ed693e 47 CPPUNIT_ASSERT_EQUAL((int)htons(0xfff9), icmp.testChecksum(buf,7));
cc192b50 48
4d6662d9 49 CPPUNIT_ASSERT_EQUAL((int)htons(0xfff5), icmp.testChecksum(buf,8)); // 1+2+3+4
b0ed693e 50 CPPUNIT_ASSERT_EQUAL((int)htons(0xfff5), icmp.testChecksum(buf,9));
4d6662d9
AJ
51
52 CPPUNIT_ASSERT_EQUAL((int)htons(0xfff0), icmp.testChecksum(buf,10)); // 1+2...+5
53 CPPUNIT_ASSERT_EQUAL((int)htons(0xfff0), icmp.testChecksum(buf,11));
54
55 CPPUNIT_ASSERT_EQUAL((int)htons(0xffea), icmp.testChecksum(buf,12)); // 1+2...+6
56 CPPUNIT_ASSERT_EQUAL((int)htons(0xffea), icmp.testChecksum(buf,13));
57
58 CPPUNIT_ASSERT_EQUAL((int)htons(0xffe3), icmp.testChecksum(buf,14)); // 1+2...+7
59 CPPUNIT_ASSERT_EQUAL((int)htons(0xffe3), icmp.testChecksum(buf,15));
60
61 CPPUNIT_ASSERT_EQUAL((int)htons(0xffdb), icmp.testChecksum(buf,16)); // 1+2...+8
62 CPPUNIT_ASSERT_EQUAL((int)htons(0xffdb), icmp.testChecksum(buf,17));
63
64 CPPUNIT_ASSERT_EQUAL((int)htons(0xffd2), icmp.testChecksum(buf,18)); // 1+2...+9
65 CPPUNIT_ASSERT_EQUAL((int)htons(0xffd2), icmp.testChecksum(buf,19));
66
b0ed693e 67 // data with accurate length
4d6662d9
AJ
68 CPPUNIT_ASSERT_EQUAL((int)htons(0xffc8), icmp.testChecksum(buf,20)); // 1+2...+10
69
70 // data with invalid length (overrun) ==> Garbage checksum...
37122e21 71#endif
cc192b50 72}
73
74void
b826ffb5 75testIcmp::testHops()
cc192b50 76{
37122e21 77#if USE_ICMP
b826ffb5 78 stubIcmp icmp;
cc192b50 79
80 /* test invalid -(under values) */
81 // negative : n > 33
82 CPPUNIT_ASSERT_EQUAL(34, icmp.testHops(-1));
83 // zero
84 CPPUNIT_ASSERT_EQUAL(33, icmp.testHops(0));
85
26ac0430 86 /* test each valid case boundary */
cc192b50 87 // n(1...32) : 32 >= n >= 1
88 CPPUNIT_ASSERT_EQUAL(32, icmp.testHops(1));
89 CPPUNIT_ASSERT_EQUAL(1, icmp.testHops(32));
90
91 // n(33...62) : 30 >= n >= 1
92 CPPUNIT_ASSERT_EQUAL(30, icmp.testHops(33));
93 CPPUNIT_ASSERT_EQUAL(1, icmp.testHops(62));
94
95 // n(63...64) : 2 >= n >= 1
96 CPPUNIT_ASSERT_EQUAL(2, icmp.testHops(63));
97 CPPUNIT_ASSERT_EQUAL(1, icmp.testHops(64));
98
99 // n(65...128) : 64 >= n >= 1
100 CPPUNIT_ASSERT_EQUAL(64, icmp.testHops(65));
101 CPPUNIT_ASSERT_EQUAL(1, icmp.testHops(128));
102
103 // n(129...192) : 64 >= n >= 1
104 CPPUNIT_ASSERT_EQUAL(64, icmp.testHops(129));
105 CPPUNIT_ASSERT_EQUAL(1, icmp.testHops(192));
106
107 // n(193...) : n < 63
108 CPPUNIT_ASSERT_EQUAL(63, icmp.testHops(193));
109 CPPUNIT_ASSERT_EQUAL(1, icmp.testHops(255));
110
26ac0430 111 /* test invalid (over values) */
cc192b50 112 // 256 - produces zero
113 CPPUNIT_ASSERT_EQUAL(0, icmp.testHops(256));
114 // 257 - produces negative hops
115 CPPUNIT_ASSERT_EQUAL(-1, icmp.testHops(257));
37122e21 116#endif
cc192b50 117}
118