xref: /netbsd-src/external/bsd/ntp/dist/tests/libntp/sockaddrtest.h (revision 6a493d6bc668897c91594964a732d38505b70cbb)
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