Home | History | Annotate | Line # | Download | only in libntp
decodenetnum.c revision 1.1.1.8
      1  1.1.1.8  christos /*	$NetBSD: decodenetnum.c,v 1.1.1.8 2020/05/25 20:40:16 christos Exp $	*/
      2  1.1.1.8  christos 
      3      1.1  christos #include "config.h"
      4      1.1  christos #include "ntp_stdlib.h"
      5  1.1.1.3  christos #include "sockaddrtest.h"
      6  1.1.1.3  christos 
      7      1.1  christos #include "unity.h"
      8      1.1  christos 
      9  1.1.1.4  christos void setUp(void);
     10  1.1.1.3  christos extern void test_IPv4AddressOnly(void);
     11  1.1.1.3  christos extern void test_IPv4AddressWithPort(void);
     12  1.1.1.3  christos extern void test_IPv6AddressOnly(void);
     13  1.1.1.3  christos extern void test_IPv6AddressWithPort(void);
     14  1.1.1.3  christos extern void test_IllegalAddress(void);
     15  1.1.1.3  christos extern void test_IllegalCharInPort(void);
     16      1.1  christos 
     17  1.1.1.6  christos /*
     18  1.1.1.6  christos  * NOTE: The IPv6 specific tests are reduced to stubs when IPv6 is
     19  1.1.1.6  christos  * disabled.
     20  1.1.1.6  christos  *
     21  1.1.1.6  christos  * ISC_PLATFORM_HAVEIPV6 checks if system has IPV6 capabilies. WANTIPV6
     22  1.1.1.6  christos  * ISC_PLATFORM_WANTIPV6 can be changed with build --disable-ipv6.
     23  1.1.1.6  christos  *
     24  1.1.1.6  christos  * If we want IPv6 but don't have it, the tests should fail, I think.
     25  1.1.1.6  christos  */
     26  1.1.1.3  christos void
     27  1.1.1.4  christos setUp(void)
     28  1.1.1.4  christos {
     29  1.1.1.4  christos 	init_lib();
     30  1.1.1.4  christos }
     31  1.1.1.4  christos 
     32  1.1.1.4  christos 
     33  1.1.1.4  christos void
     34  1.1.1.6  christos test_IPv4AddressOnly(void)
     35  1.1.1.6  christos {
     36      1.1  christos 	const char *str = "192.0.2.1";
     37      1.1  christos 	sockaddr_u actual;
     38      1.1  christos 
     39      1.1  christos 	sockaddr_u expected;
     40      1.1  christos 	expected.sa4.sin_family = AF_INET;
     41      1.1  christos 	expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1");
     42      1.1  christos 	SET_PORT(&expected, NTP_PORT);
     43      1.1  christos 
     44      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
     45      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
     46      1.1  christos }
     47      1.1  christos 
     48  1.1.1.3  christos void
     49  1.1.1.6  christos test_IPv4AddressWithPort(void)
     50  1.1.1.6  christos {
     51      1.1  christos 	const char *str = "192.0.2.2:2000";
     52      1.1  christos 	sockaddr_u actual;
     53      1.1  christos 
     54      1.1  christos 	sockaddr_u expected;
     55      1.1  christos 	expected.sa4.sin_family = AF_INET;
     56      1.1  christos 	expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.2");
     57      1.1  christos 	SET_PORT(&expected, 2000);
     58      1.1  christos 
     59      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
     60      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
     61      1.1  christos }
     62      1.1  christos 
     63  1.1.1.3  christos 
     64  1.1.1.3  christos void
     65  1.1.1.6  christos test_IPv6AddressOnly(void)
     66  1.1.1.6  christos {
     67  1.1.1.8  christos #if defined(ISC_PLATFORM_HAVEIPV6) && defined(WANT_IPV6)
     68  1.1.1.6  christos 
     69      1.1  christos 	const struct in6_addr address = {
     70      1.1  christos 		0x20, 0x01, 0x0d, 0xb8,
     71  1.1.1.6  christos 		0x85, 0xa3, 0x08, 0xd3,
     72  1.1.1.6  christos 		0x13, 0x19, 0x8a, 0x2e,
     73  1.1.1.6  christos 		0x03, 0x70, 0x73, 0x34
     74      1.1  christos 	};
     75      1.1  christos 
     76      1.1  christos 	const char *str = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
     77      1.1  christos 	sockaddr_u actual;
     78      1.1  christos 
     79      1.1  christos 	sockaddr_u expected;
     80      1.1  christos 	expected.sa6.sin6_family = AF_INET6;
     81      1.1  christos 	expected.sa6.sin6_addr = address;
     82      1.1  christos 	SET_PORT(&expected, NTP_PORT);
     83      1.1  christos 
     84      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
     85      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
     86  1.1.1.3  christos 
     87  1.1.1.3  christos #else
     88  1.1.1.6  christos 
     89  1.1.1.8  christos 	TEST_IGNORE_MESSAGE("IPV6 disabled in build");
     90  1.1.1.6  christos 
     91  1.1.1.8  christos #endif
     92      1.1  christos }
     93      1.1  christos 
     94  1.1.1.3  christos 
     95  1.1.1.3  christos void
     96  1.1.1.6  christos test_IPv6AddressWithPort(void)
     97  1.1.1.6  christos {
     98  1.1.1.8  christos #if defined(ISC_PLATFORM_HAVEIPV6) && defined(WANT_IPV6)
     99  1.1.1.3  christos 
    100      1.1  christos 	const struct in6_addr address = {
    101      1.1  christos 		0x20, 0x01, 0x0d, 0xb8,
    102  1.1.1.6  christos 		0x85, 0xa3, 0x08, 0xd3,
    103  1.1.1.6  christos 		0x13, 0x19, 0x8a, 0x2e,
    104  1.1.1.6  christos 		0x03, 0x70, 0x73, 0x34
    105      1.1  christos 	};
    106      1.1  christos 
    107      1.1  christos 	const char *str = "[2001:0db8:85a3:08d3:1319:8a2e:0370:7334]:3000";
    108      1.1  christos 	sockaddr_u actual;
    109      1.1  christos 
    110      1.1  christos 	sockaddr_u expected;
    111      1.1  christos 	expected.sa6.sin6_family = AF_INET6;
    112      1.1  christos 	expected.sa6.sin6_addr = address;
    113      1.1  christos 	SET_PORT(&expected, 3000);
    114      1.1  christos 
    115      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
    116      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
    117  1.1.1.3  christos 
    118  1.1.1.3  christos #else
    119  1.1.1.6  christos 
    120  1.1.1.8  christos 	TEST_IGNORE_MESSAGE("IPV6 disabled in build");
    121  1.1.1.6  christos 
    122  1.1.1.8  christos #endif
    123      1.1  christos }
    124      1.1  christos 
    125  1.1.1.3  christos 
    126  1.1.1.3  christos void
    127  1.1.1.6  christos test_IllegalAddress(void)
    128  1.1.1.6  christos {
    129      1.1  christos 	const char *str = "192.0.2.270:2000";
    130      1.1  christos 	sockaddr_u actual;
    131      1.1  christos 
    132      1.1  christos 	TEST_ASSERT_FALSE(decodenetnum(str, &actual));
    133      1.1  christos }
    134      1.1  christos 
    135  1.1.1.6  christos 
    136  1.1.1.3  christos void
    137  1.1.1.6  christos test_IllegalCharInPort(void)
    138  1.1.1.6  christos {
    139      1.1  christos 	/* An illegal port does not make the decodenetnum fail, but instead
    140      1.1  christos 	 * makes it use the standard port.
    141      1.1  christos 	 */
    142      1.1  christos 	const char *str = "192.0.2.1:a700";
    143      1.1  christos 	sockaddr_u actual;
    144      1.1  christos 
    145      1.1  christos 	sockaddr_u expected;
    146      1.1  christos 	expected.sa4.sin_family = AF_INET;
    147      1.1  christos 	expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1");
    148      1.1  christos 	SET_PORT(&expected, NTP_PORT);
    149      1.1  christos 
    150      1.1  christos 	TEST_ASSERT_TRUE(decodenetnum(str, &actual));
    151      1.1  christos 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
    152      1.1  christos }
    153