1290001Sglebius#include "config.h" 2290001Sglebius#include "ntp_stdlib.h" 3290001Sglebius#include "sockaddrtest.h" 4290001Sglebius 5290001Sglebius#include "unity.h" 6290001Sglebius 7293896Sglebiusvoid setUp(void); 8290001Sglebiusextern void test_IPv4AddressOnly(void); 9290001Sglebiusextern void test_IPv4AddressWithPort(void); 10290001Sglebiusextern void test_IPv6AddressOnly(void); 11290001Sglebiusextern void test_IPv6AddressWithPort(void); 12290001Sglebiusextern void test_IllegalAddress(void); 13290001Sglebiusextern void test_IllegalCharInPort(void); 14290001Sglebius 15294905Sdelphij/* 16294905Sdelphij * NOTE: The IPv6 specific tests are reduced to stubs when IPv6 is 17294905Sdelphij * disabled. 18294905Sdelphij * 19294905Sdelphij * ISC_PLATFORM_HAVEIPV6 checks if system has IPV6 capabilies. WANTIPV6 20294905Sdelphij * ISC_PLATFORM_WANTIPV6 can be changed with build --disable-ipv6. 21294905Sdelphij * 22294905Sdelphij * If we want IPv6 but don't have it, the tests should fail, I think. 23294905Sdelphij */ 24290001Sglebiusvoid 25293896SglebiussetUp(void) 26293896Sglebius{ 27293896Sglebius init_lib(); 28293896Sglebius} 29293896Sglebius 30293896Sglebius 31293896Sglebiusvoid 32294905Sdelphijtest_IPv4AddressOnly(void) 33294905Sdelphij{ 34290001Sglebius const char *str = "192.0.2.1"; 35290001Sglebius sockaddr_u actual; 36290001Sglebius 37290001Sglebius sockaddr_u expected; 38290001Sglebius expected.sa4.sin_family = AF_INET; 39290001Sglebius expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1"); 40290001Sglebius SET_PORT(&expected, NTP_PORT); 41290001Sglebius 42290001Sglebius TEST_ASSERT_TRUE(decodenetnum(str, &actual)); 43290001Sglebius TEST_ASSERT_TRUE(IsEqual(expected, actual)); 44290001Sglebius} 45290001Sglebius 46290001Sglebiusvoid 47294905Sdelphijtest_IPv4AddressWithPort(void) 48294905Sdelphij{ 49290001Sglebius const char *str = "192.0.2.2:2000"; 50290001Sglebius sockaddr_u actual; 51290001Sglebius 52290001Sglebius sockaddr_u expected; 53290001Sglebius expected.sa4.sin_family = AF_INET; 54290001Sglebius expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.2"); 55290001Sglebius SET_PORT(&expected, 2000); 56290001Sglebius 57290001Sglebius TEST_ASSERT_TRUE(decodenetnum(str, &actual)); 58290001Sglebius TEST_ASSERT_TRUE(IsEqual(expected, actual)); 59290001Sglebius} 60290001Sglebius 61290001Sglebius 62290001Sglebiusvoid 63294905Sdelphijtest_IPv6AddressOnly(void) 64294905Sdelphij{ 65294905Sdelphij#ifdef ISC_PLATFORM_WANTIPV6 66290001Sglebius 67290001Sglebius const struct in6_addr address = { 68290001Sglebius 0x20, 0x01, 0x0d, 0xb8, 69294905Sdelphij 0x85, 0xa3, 0x08, 0xd3, 70294905Sdelphij 0x13, 0x19, 0x8a, 0x2e, 71294905Sdelphij 0x03, 0x70, 0x73, 0x34 72290001Sglebius }; 73290001Sglebius 74290001Sglebius const char *str = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334"; 75290001Sglebius sockaddr_u actual; 76290001Sglebius 77290001Sglebius sockaddr_u expected; 78290001Sglebius expected.sa6.sin6_family = AF_INET6; 79290001Sglebius expected.sa6.sin6_addr = address; 80290001Sglebius SET_PORT(&expected, NTP_PORT); 81290001Sglebius 82290001Sglebius TEST_ASSERT_TRUE(decodenetnum(str, &actual)); 83290001Sglebius TEST_ASSERT_TRUE(IsEqual(expected, actual)); 84290001Sglebius 85290001Sglebius#else 86294905Sdelphij 87290001Sglebius TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping."); 88294905Sdelphij 89290001Sglebius#endif /* ISC_PLATFORM_HAVEIPV6 */ 90290001Sglebius} 91290001Sglebius 92290001Sglebius 93290001Sglebiusvoid 94294905Sdelphijtest_IPv6AddressWithPort(void) 95294905Sdelphij{ 96290001Sglebius#ifdef ISC_PLATFORM_WANTIPV6 97290001Sglebius 98290001Sglebius const struct in6_addr address = { 99290001Sglebius 0x20, 0x01, 0x0d, 0xb8, 100294905Sdelphij 0x85, 0xa3, 0x08, 0xd3, 101294905Sdelphij 0x13, 0x19, 0x8a, 0x2e, 102294905Sdelphij 0x03, 0x70, 0x73, 0x34 103290001Sglebius }; 104290001Sglebius 105290001Sglebius const char *str = "[2001:0db8:85a3:08d3:1319:8a2e:0370:7334]:3000"; 106290001Sglebius sockaddr_u actual; 107290001Sglebius 108290001Sglebius sockaddr_u expected; 109290001Sglebius expected.sa6.sin6_family = AF_INET6; 110290001Sglebius expected.sa6.sin6_addr = address; 111290001Sglebius SET_PORT(&expected, 3000); 112290001Sglebius 113290001Sglebius TEST_ASSERT_TRUE(decodenetnum(str, &actual)); 114290001Sglebius TEST_ASSERT_TRUE(IsEqual(expected, actual)); 115290001Sglebius 116290001Sglebius#else 117294905Sdelphij 118290001Sglebius TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping."); 119294905Sdelphij 120290001Sglebius#endif /* ISC_PLATFORM_HAVEIPV6 */ 121290001Sglebius} 122290001Sglebius 123290001Sglebius 124290001Sglebiusvoid 125294905Sdelphijtest_IllegalAddress(void) 126294905Sdelphij{ 127290001Sglebius const char *str = "192.0.2.270:2000"; 128290001Sglebius sockaddr_u actual; 129290001Sglebius 130290001Sglebius TEST_ASSERT_FALSE(decodenetnum(str, &actual)); 131290001Sglebius} 132290001Sglebius 133294905Sdelphij 134290001Sglebiusvoid 135294905Sdelphijtest_IllegalCharInPort(void) 136294905Sdelphij{ 137290001Sglebius /* An illegal port does not make the decodenetnum fail, but instead 138290001Sglebius * makes it use the standard port. 139290001Sglebius */ 140290001Sglebius const char *str = "192.0.2.1:a700"; 141290001Sglebius sockaddr_u actual; 142290001Sglebius 143290001Sglebius sockaddr_u expected; 144290001Sglebius expected.sa4.sin_family = AF_INET; 145290001Sglebius expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1"); 146290001Sglebius SET_PORT(&expected, NTP_PORT); 147290001Sglebius 148290001Sglebius TEST_ASSERT_TRUE(decodenetnum(str, &actual)); 149290001Sglebius TEST_ASSERT_TRUE(IsEqual(expected, actual)); 150290001Sglebius} 151