xref: /netbsd-src/external/bsd/ntp/dist/tests/libntp/netof.c (revision a6f3f22f245acb8ee3bbf6871d7dce989204fa97)
1 /*	$NetBSD: netof.c,v 1.1.1.3 2015/10/23 17:47:45 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 test_ClassBAddress(void);
14 void test_ClassCAddress(void);
15 void test_ClassAAddress(void);
16 void test_IPv6Address(void);
17 
18 
19 
20 void test_ClassBAddress(void) {
21 	sockaddr_u input = CreateSockaddr4("172.16.2.1", NTP_PORT);
22 	sockaddr_u expected = CreateSockaddr4("172.16.0.0", NTP_PORT);
23 
24 	sockaddr_u* actual = netof(&input);
25 
26 	TEST_ASSERT_TRUE(actual != NULL);
27 	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
28 }
29 
30 void test_ClassCAddress(void) {
31 	sockaddr_u input = CreateSockaddr4("192.0.2.255", NTP_PORT);
32 	sockaddr_u expected = CreateSockaddr4("192.0.2.0", NTP_PORT);
33 
34 	sockaddr_u* actual = netof(&input);
35 
36 	TEST_ASSERT_TRUE(actual != NULL);
37 	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
38 }
39 
40 void  test_ClassAAddress(void) {
41 	/* Class A addresses are assumed to be classless,
42 	 * thus the same address should be returned.
43 	 */
44 	sockaddr_u input = CreateSockaddr4("10.20.30.40", NTP_PORT);
45 	sockaddr_u expected = CreateSockaddr4("10.20.30.40", NTP_PORT);
46 
47 	sockaddr_u* actual = netof(&input);
48 
49 	TEST_ASSERT_TRUE(actual != NULL);
50 	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
51 }
52 
53 void  test_IPv6Address(void) {
54 	/* IPv6 addresses are assumed to have 64-bit host- and 64-bit network parts. */
55 	const struct in6_addr input_address = {
56 		0x20, 0x01, 0x0d, 0xb8,
57         0x85, 0xa3, 0x08, 0xd3,
58         0x13, 0x19, 0x8a, 0x2e,
59         0x03, 0x70, 0x73, 0x34
60 	}; // 2001:0db8:85a3:08d3:1319:8a2e:0370:7334
61 
62 	const struct in6_addr expected_address = {
63 		0x20, 0x01, 0x0d, 0xb8,
64         0x85, 0xa3, 0x08, 0xd3,
65         0x00, 0x00, 0x00, 0x00,
66         0x00, 0x00, 0x00, 0x00
67 	}; // 2001:0db8:85a3:08d3:0000:0000:0000:0000
68 
69 	sockaddr_u input;
70 	input.sa6.sin6_family = AF_INET6;
71 	input.sa6.sin6_addr = input_address;
72 	SET_PORT(&input, 3000);
73 
74 	sockaddr_u expected;
75 	expected.sa6.sin6_family = AF_INET6;
76 	expected.sa6.sin6_addr = expected_address;
77 	SET_PORT(&expected, 3000);
78 
79 	sockaddr_u* actual = netof(&input);
80 
81 	TEST_ASSERT_TRUE(actual != NULL);
82 	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
83 }
84 
85