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