]>
Commit | Line | Data |
---|---|---|
bbc27441 | 1 | /* |
f70aedc4 | 2 | * Copyright (C) 1996-2021 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 | 17 | CPPUNIT_TEST_SUITE_REGISTRATION( testIcmp ); |
cc192b50 | 18 | |
cc192b50 | 19 | void |
b826ffb5 | 20 | testIcmp::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 | ||
74 | void | |
b826ffb5 | 75 | testIcmp::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 |