xref: /netbsd-src/external/bsd/ntp/dist/tests/libntp/netof.c (revision 181254a7b1bdde6873432bffef2d2decc4b5c22f)
1 /*	$NetBSD: netof.c,v 1.2 2020/05/25 20:47:36 christos Exp $	*/
2 
3 #include "config.h"
4 
5 #include "ntp_stdlib.h"
6 #include "ntp_calendar.h"
7 
8 #include "unity.h"
9 
10 #include "sockaddrtest.h"
11 
12 
13 void setUp(void);
14 void test_ClassBAddress(void);
15 void test_ClassCAddress(void);
16 void test_ClassAAddress(void);
17 void test_IPv6Address(void);
18 
19 
20 void
21 setUp(void)
22 {
23 	init_lib();
24 
25 	return;
26 }
27 
28 
29 void
30 test_ClassBAddress(void)
31 {
32 	sockaddr_u input = CreateSockaddr4("172.16.2.1", NTP_PORT);
33 	sockaddr_u expected = CreateSockaddr4("172.16.0.0", NTP_PORT);
34 
35 	sockaddr_u* actual = netof(&input);
36 
37 	TEST_ASSERT_TRUE(actual != NULL);
38 	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
39 
40 	return;
41 }
42 
43 void
44 test_ClassCAddress(void)
45 {
46 	sockaddr_u input = CreateSockaddr4("192.0.2.255", NTP_PORT);
47 	sockaddr_u expected = CreateSockaddr4("192.0.2.0", NTP_PORT);
48 
49 	sockaddr_u* actual = netof(&input);
50 
51 	TEST_ASSERT_TRUE(actual != NULL);
52 	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
53 
54 	return;
55 }
56 
57 
58 void
59 test_ClassAAddress(void)
60 {
61 	/* Class A addresses are assumed to be classless,
62 	 * thus the same address should be returned.
63 	 */
64 	sockaddr_u input = CreateSockaddr4("10.20.30.40", NTP_PORT);
65 	sockaddr_u expected = CreateSockaddr4("10.20.30.40", NTP_PORT);
66 
67 	sockaddr_u* actual = netof(&input);
68 
69 	TEST_ASSERT_TRUE(actual != NULL);
70 	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
71 
72 	return;
73 }
74 
75 void
76 test_IPv6Address(void)
77 {
78 	/* IPv6 addresses are assumed to have 64-bit host- and 64-bit network parts. */
79 	const struct in6_addr input_address = { { {
80 		0x20, 0x01, 0x0d, 0xb8,
81 		0x85, 0xa3, 0x08, 0xd3,
82 		0x13, 0x19, 0x8a, 0x2e,
83 		0x03, 0x70, 0x73, 0x34
84 	} } }; // 2001:0db8:85a3:08d3:1319:8a2e:0370:7334
85 
86 	const struct in6_addr expected_address = { { {
87 		0x20, 0x01, 0x0d, 0xb8,
88 		0x85, 0xa3, 0x08, 0xd3,
89 		0x00, 0x00, 0x00, 0x00,
90 		0x00, 0x00, 0x00, 0x00
91 	} } }; // 2001:0db8:85a3:08d3:0000:0000:0000:0000
92 
93 	sockaddr_u input;
94 	input.sa6.sin6_family = AF_INET6;
95 	input.sa6.sin6_addr = input_address;
96 	SET_PORT(&input, 3000);
97 
98 	sockaddr_u expected;
99 	expected.sa6.sin6_family = AF_INET6;
100 	expected.sa6.sin6_addr = expected_address;
101 	SET_PORT(&expected, 3000);
102 
103 	sockaddr_u* actual = netof(&input);
104 
105 	TEST_ASSERT_TRUE(actual != NULL);
106 	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
107 
108 	return;
109 }
110