decodenetnum.c revision 1.1.1.3.2.2 1 /* $NetBSD: decodenetnum.c,v 1.1.1.3.2.2 2015/11/07 22:26:46 snj Exp $ */
2
3 #include "config.h"
4 #include "ntp_stdlib.h"
5 #include "sockaddrtest.h"
6
7 #include "unity.h"
8
9 extern void test_IPv4AddressOnly(void);
10 extern void test_IPv4AddressWithPort(void);
11 //#ifdef ISC_PLATFORM_HAVEIPV6
12 extern void test_IPv6AddressOnly(void);
13 extern void test_IPv6AddressWithPort(void);
14 //#endif /* ISC_PLATFORM_HAVEIPV6 */
15 extern void test_IllegalAddress(void);
16 extern void test_IllegalCharInPort(void);
17
18
19 void
20 test_IPv4AddressOnly(void) {
21 const char *str = "192.0.2.1";
22 sockaddr_u actual;
23
24 sockaddr_u expected;
25 expected.sa4.sin_family = AF_INET;
26 expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1");
27 SET_PORT(&expected, NTP_PORT);
28
29 TEST_ASSERT_TRUE(decodenetnum(str, &actual));
30 TEST_ASSERT_TRUE(IsEqual(expected, actual));
31 }
32
33 void
34 test_IPv4AddressWithPort(void) {
35 const char *str = "192.0.2.2:2000";
36 sockaddr_u actual;
37
38 sockaddr_u expected;
39 expected.sa4.sin_family = AF_INET;
40 expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.2");
41 SET_PORT(&expected, 2000);
42
43 TEST_ASSERT_TRUE(decodenetnum(str, &actual));
44 TEST_ASSERT_TRUE(IsEqual(expected, actual));
45 }
46
47
48 void
49 test_IPv6AddressOnly(void) {
50
51 //#ifdef ISC_PLATFORM_HAVEIPV6 //looks like HAVEIPV6 checks if system has IPV6 capabilies. WANTIPV6 can be changed with build --disable-ipv6
52 #ifdef ISC_PLATFORM_WANTIPV6
53 const struct in6_addr address = {
54 0x20, 0x01, 0x0d, 0xb8,
55 0x85, 0xa3, 0x08, 0xd3,
56 0x13, 0x19, 0x8a, 0x2e,
57 0x03, 0x70, 0x73, 0x34
58 };
59
60 const char *str = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
61 sockaddr_u actual;
62
63 sockaddr_u expected;
64 expected.sa6.sin6_family = AF_INET6;
65 expected.sa6.sin6_addr = address;
66 SET_PORT(&expected, NTP_PORT);
67
68 TEST_ASSERT_TRUE(decodenetnum(str, &actual));
69 TEST_ASSERT_TRUE(IsEqual(expected, actual));
70
71 #else
72 TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping.");
73 #endif /* ISC_PLATFORM_HAVEIPV6 */
74
75
76 }
77
78
79
80 void
81 test_IPv6AddressWithPort(void) {
82
83 #ifdef ISC_PLATFORM_WANTIPV6
84
85 const struct in6_addr address = {
86 0x20, 0x01, 0x0d, 0xb8,
87 0x85, 0xa3, 0x08, 0xd3,
88 0x13, 0x19, 0x8a, 0x2e,
89 0x03, 0x70, 0x73, 0x34
90 };
91
92 const char *str = "[2001:0db8:85a3:08d3:1319:8a2e:0370:7334]:3000";
93 sockaddr_u actual;
94
95 sockaddr_u expected;
96 expected.sa6.sin6_family = AF_INET6;
97 expected.sa6.sin6_addr = address;
98 SET_PORT(&expected, 3000);
99
100 TEST_ASSERT_TRUE(decodenetnum(str, &actual));
101 TEST_ASSERT_TRUE(IsEqual(expected, actual));
102
103 #else
104 TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping.");
105 #endif /* ISC_PLATFORM_HAVEIPV6 */
106 }
107
108
109 void
110 test_IllegalAddress(void) {
111 const char *str = "192.0.2.270:2000";
112 sockaddr_u actual;
113
114 TEST_ASSERT_FALSE(decodenetnum(str, &actual));
115 }
116
117 void
118 test_IllegalCharInPort(void) {
119 /* An illegal port does not make the decodenetnum fail, but instead
120 * makes it use the standard port.
121 */
122 const char *str = "192.0.2.1:a700";
123 sockaddr_u actual;
124
125 sockaddr_u expected;
126 expected.sa4.sin_family = AF_INET;
127 expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1");
128 SET_PORT(&expected, NTP_PORT);
129
130 TEST_ASSERT_TRUE(decodenetnum(str, &actual));
131 TEST_ASSERT_TRUE(IsEqual(expected, actual));
132 }
133