Home | History | Annotate | Line # | Download | only in libntp
decodenetnum.c revision 1.1.1.2
      1  1.1.1.2  christos /*	$NetBSD: decodenetnum.c,v 1.1.1.2 2015/07/10 13:11:14 christos Exp $	*/
      2  1.1.1.2  christos 
      3      1.1  christos #include "config.h"
      4      1.1  christos #include "ntp_stdlib.h"
      5      1.1  christos #include "ntp_calendar.h"
      6      1.1  christos #include "unity.h"
      7      1.1  christos 
      8      1.1  christos #include "sockaddrtest.h"
      9      1.1  christos 
     10      1.1  christos 
     11      1.1  christos void test_IPv4AddressOnly(void) {
     12      1.1  christos 	const char *str = "192.0.2.1";
     13      1.1  christos 	sockaddr_u actual;
     14      1.1  christos 
     15      1.1  christos 	sockaddr_u expected;
     16      1.1  christos 	expected.sa4.sin_family = AF_INET;
     17      1.1  christos 	expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1");
     18      1.1  christos 	SET_PORT(&expected, NTP_PORT);
     19      1.1  christos 
     20      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
     21      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
     22      1.1  christos }
     23      1.1  christos 
     24      1.1  christos void test_IPv4AddressWithPort(void) {
     25      1.1  christos 	const char *str = "192.0.2.2:2000";
     26      1.1  christos 	sockaddr_u actual;
     27      1.1  christos 
     28      1.1  christos 	sockaddr_u expected;
     29      1.1  christos 	expected.sa4.sin_family = AF_INET;
     30      1.1  christos 	expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.2");
     31      1.1  christos 	SET_PORT(&expected, 2000);
     32      1.1  christos 
     33      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
     34      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
     35      1.1  christos }
     36      1.1  christos 
     37      1.1  christos void test_IPv6AddressOnly(void) {
     38      1.1  christos 	const struct in6_addr address = {
     39      1.1  christos 		0x20, 0x01, 0x0d, 0xb8,
     40      1.1  christos         0x85, 0xa3, 0x08, 0xd3,
     41      1.1  christos         0x13, 0x19, 0x8a, 0x2e,
     42      1.1  christos         0x03, 0x70, 0x73, 0x34
     43      1.1  christos 	};
     44      1.1  christos 
     45      1.1  christos 	const char *str = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
     46      1.1  christos 	sockaddr_u actual;
     47      1.1  christos 
     48      1.1  christos 	sockaddr_u expected;
     49      1.1  christos 	expected.sa6.sin6_family = AF_INET6;
     50      1.1  christos 	expected.sa6.sin6_addr = address;
     51      1.1  christos 	SET_PORT(&expected, NTP_PORT);
     52      1.1  christos 
     53      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
     54      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
     55      1.1  christos }
     56      1.1  christos 
     57      1.1  christos void test_IPv6AddressWithPort(void) {
     58      1.1  christos 	const struct in6_addr address = {
     59      1.1  christos 		0x20, 0x01, 0x0d, 0xb8,
     60      1.1  christos         0x85, 0xa3, 0x08, 0xd3,
     61      1.1  christos         0x13, 0x19, 0x8a, 0x2e,
     62      1.1  christos         0x03, 0x70, 0x73, 0x34
     63      1.1  christos 	};
     64      1.1  christos 
     65      1.1  christos 	const char *str = "[2001:0db8:85a3:08d3:1319:8a2e:0370:7334]:3000";
     66      1.1  christos 	sockaddr_u actual;
     67      1.1  christos 
     68      1.1  christos 	sockaddr_u expected;
     69      1.1  christos 	expected.sa6.sin6_family = AF_INET6;
     70      1.1  christos 	expected.sa6.sin6_addr = address;
     71      1.1  christos 	SET_PORT(&expected, 3000);
     72      1.1  christos 
     73      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
     74      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
     75      1.1  christos }
     76      1.1  christos 
     77      1.1  christos void test_IllegalAddress(void) {
     78      1.1  christos 	const char *str = "192.0.2.270:2000";
     79      1.1  christos 	sockaddr_u actual;
     80      1.1  christos 
     81      1.1  christos 	TEST_ASSERT_FALSE(decodenetnum(str, &actual));
     82      1.1  christos }
     83      1.1  christos 
     84      1.1  christos void test_IllegalCharInPort(void) {
     85      1.1  christos 	/* An illegal port does not make the decodenetnum fail, but instead
     86      1.1  christos 	 * makes it use the standard port.
     87      1.1  christos 	 */
     88      1.1  christos 	const char *str = "192.0.2.1:a700";
     89      1.1  christos 	sockaddr_u actual;
     90      1.1  christos 
     91      1.1  christos 	sockaddr_u expected;
     92      1.1  christos 	expected.sa4.sin_family = AF_INET;
     93      1.1  christos 	expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1");
     94      1.1  christos 	SET_PORT(&expected, NTP_PORT);
     95      1.1  christos 
     96      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
     97      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
     98      1.1  christos }
     99