1 #ifndef TESTS_SOCKADDRTEST_H
2 #define TESTS_SOCKADDRTEST_H
4 #include "g_libntptest.h"
10 class sockaddrtest : public libntptest {
12 ::testing::AssertionResult IsEqual(const sockaddr_u &expected, const sockaddr_u &actual) {
13 if (expected.sa.sa_family != actual.sa.sa_family) {
14 return ::testing::AssertionFailure()
15 << "Expected sa_family: " << expected.sa.sa_family
16 << " but got: " << actual.sa.sa_family;
19 if (actual.sa.sa_family == AF_INET) { // IPv4
20 if (expected.sa4.sin_port == actual.sa4.sin_port &&
21 memcmp(&expected.sa4.sin_addr, &actual.sa4.sin_addr,
22 sizeof(in_addr)) == 0) {
23 return ::testing::AssertionSuccess();
25 return ::testing::AssertionFailure()
26 << "IPv4 comparision failed, expected: "
27 << expected.sa4.sin_addr.s_addr
28 << "(" << socktoa(&expected) << ")"
30 << actual.sa4.sin_addr.s_addr
31 << "(" << socktoa(&actual) << ")";
33 } else if (actual.sa.sa_family == AF_INET6) { //IPv6
34 if (expected.sa6.sin6_port == actual.sa6.sin6_port &&
35 memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr,
36 sizeof(in6_addr)) == 0) {
37 return ::testing::AssertionSuccess();
39 return ::testing::AssertionFailure()
40 << "IPv6 comparision failed";
42 } else { // Unknown family
43 return ::testing::AssertionFailure()
44 << "Unknown sa_family: " << actual.sa.sa_family;
48 sockaddr_u CreateSockaddr4(const char* address, unsigned int port) {
50 s.sa4.sin_family = AF_INET;
51 s.sa4.sin_addr.s_addr = inet_addr(address);
58 #endif // TESTS_SOCKADDRTEST_H