netof.c revision 290001
1290001Sglebius#include "config.h"
2290001Sglebius
3290001Sglebius#include "ntp_stdlib.h"
4290001Sglebius#include "ntp_calendar.h"
5290001Sglebius
6290001Sglebius#include "unity.h"
7290001Sglebius
8290001Sglebius#include "sockaddrtest.h"
9290001Sglebius
10290001Sglebius
11290001Sglebiusvoid test_ClassBAddress(void);
12290001Sglebiusvoid test_ClassCAddress(void);
13290001Sglebiusvoid test_ClassAAddress(void);
14290001Sglebiusvoid test_IPv6Address(void);
15290001Sglebius
16290001Sglebius
17290001Sglebius
18290001Sglebiusvoid test_ClassBAddress(void) {
19290001Sglebius	sockaddr_u input = CreateSockaddr4("172.16.2.1", NTP_PORT);
20290001Sglebius	sockaddr_u expected = CreateSockaddr4("172.16.0.0", NTP_PORT);
21290001Sglebius
22290001Sglebius	sockaddr_u* actual = netof(&input);
23290001Sglebius
24290001Sglebius	TEST_ASSERT_TRUE(actual != NULL);
25290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
26290001Sglebius}
27290001Sglebius
28290001Sglebiusvoid test_ClassCAddress(void) {
29290001Sglebius	sockaddr_u input = CreateSockaddr4("192.0.2.255", NTP_PORT);
30290001Sglebius	sockaddr_u expected = CreateSockaddr4("192.0.2.0", NTP_PORT);
31290001Sglebius
32290001Sglebius	sockaddr_u* actual = netof(&input);
33290001Sglebius
34290001Sglebius	TEST_ASSERT_TRUE(actual != NULL);
35290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
36290001Sglebius}
37290001Sglebius
38290001Sglebiusvoid  test_ClassAAddress(void) {
39290001Sglebius	/* Class A addresses are assumed to be classless,
40290001Sglebius	 * thus the same address should be returned.
41290001Sglebius	 */
42290001Sglebius	sockaddr_u input = CreateSockaddr4("10.20.30.40", NTP_PORT);
43290001Sglebius	sockaddr_u expected = CreateSockaddr4("10.20.30.40", NTP_PORT);
44290001Sglebius
45290001Sglebius	sockaddr_u* actual = netof(&input);
46290001Sglebius
47290001Sglebius	TEST_ASSERT_TRUE(actual != NULL);
48290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
49290001Sglebius}
50290001Sglebius
51290001Sglebiusvoid  test_IPv6Address(void) {
52290001Sglebius	/* IPv6 addresses are assumed to have 64-bit host- and 64-bit network parts. */
53290001Sglebius	const struct in6_addr input_address = {
54290001Sglebius		0x20, 0x01, 0x0d, 0xb8,
55290001Sglebius        0x85, 0xa3, 0x08, 0xd3,
56290001Sglebius        0x13, 0x19, 0x8a, 0x2e,
57290001Sglebius        0x03, 0x70, 0x73, 0x34
58290001Sglebius	}; // 2001:0db8:85a3:08d3:1319:8a2e:0370:7334
59290001Sglebius
60290001Sglebius	const struct in6_addr expected_address = {
61290001Sglebius		0x20, 0x01, 0x0d, 0xb8,
62290001Sglebius        0x85, 0xa3, 0x08, 0xd3,
63290001Sglebius        0x00, 0x00, 0x00, 0x00,
64290001Sglebius        0x00, 0x00, 0x00, 0x00
65290001Sglebius	}; // 2001:0db8:85a3:08d3:0000:0000:0000:0000
66290001Sglebius
67290001Sglebius	sockaddr_u input;
68290001Sglebius	input.sa6.sin6_family = AF_INET6;
69290001Sglebius	input.sa6.sin6_addr = input_address;
70290001Sglebius	SET_PORT(&input, 3000);
71290001Sglebius
72290001Sglebius	sockaddr_u expected;
73290001Sglebius	expected.sa6.sin6_family = AF_INET6;
74290001Sglebius	expected.sa6.sin6_addr = expected_address;
75290001Sglebius	SET_PORT(&expected, 3000);
76290001Sglebius
77290001Sglebius	sockaddr_u* actual = netof(&input);
78290001Sglebius
79290001Sglebius	TEST_ASSERT_TRUE(actual != NULL);
80290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, *actual));
81290001Sglebius}
82290001Sglebius
83