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