1 /* $NetBSD: sockaddrtest.h,v 1.1.1.1 2013/12/27 23:31:38 christos Exp $ */ 2 3 #ifndef TESTS_SOCKADDRTEST_H 4 #define TESTS_SOCKADDRTEST_H 5 6 #include "libntptest.h" 7 8 extern "C" { 9 #include "ntp.h" 10 }; 11 12 class sockaddrtest : public libntptest { 13 protected: 14 ::testing::AssertionResult IsEqual(const sockaddr_u &expected, const sockaddr_u &actual) { 15 if (expected.sa.sa_family != actual.sa.sa_family) { 16 return ::testing::AssertionFailure() 17 << "Expected sa_family: " << expected.sa.sa_family 18 << " but got: " << actual.sa.sa_family; 19 } 20 21 if (actual.sa.sa_family == AF_INET) { // IPv4 22 if (expected.sa4.sin_port == actual.sa4.sin_port && 23 memcmp(&expected.sa4.sin_addr, &actual.sa4.sin_addr, 24 sizeof(in_addr)) == 0) { 25 return ::testing::AssertionSuccess(); 26 } else { 27 return ::testing::AssertionFailure() 28 << "IPv4 comparision failed, expected: " 29 << expected.sa4.sin_addr.s_addr 30 << "(" << socktoa(&expected) << ")" 31 << " but was: " 32 << actual.sa4.sin_addr.s_addr 33 << "(" << socktoa(&actual) << ")"; 34 } 35 } else if (actual.sa.sa_family == AF_INET6) { //IPv6 36 if (expected.sa6.sin6_port == actual.sa6.sin6_port && 37 memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr, 38 sizeof(in6_addr)) == 0) { 39 return ::testing::AssertionSuccess(); 40 } else { 41 return ::testing::AssertionFailure() 42 << "IPv6 comparision failed"; 43 } 44 } else { // Unknown family 45 return ::testing::AssertionFailure() 46 << "Unknown sa_family: " << actual.sa.sa_family; 47 } 48 } 49 50 sockaddr_u CreateSockaddr4(const char* address, unsigned int port) { 51 sockaddr_u s; 52 s.sa4.sin_family = AF_INET; 53 s.sa4.sin_addr.s_addr = inet_addr(address); 54 SET_PORT(&s, port); 55 56 return s; 57 } 58 }; 59 60 #endif // TESTS_SOCKADDRTEST_H 61