23 #ifdef GRPC_HAVE_UNIX_SOCKET
27 #include <gtest/gtest.h>
42 grpc_sockaddr_in*
addr4 =
43 reinterpret_cast<grpc_sockaddr_in*
>(resolved_addr4.
addr);
44 memset(&resolved_addr4, 0,
sizeof(resolved_addr4));
45 addr4->sin_family = GRPC_AF_INET;
49 resolved_addr4.
len =
static_cast<socklen_t
>(
sizeof(grpc_sockaddr_in));
50 return resolved_addr4;
55 grpc_sockaddr_in6*
addr6 =
56 reinterpret_cast<grpc_sockaddr_in6*
>(resolved_addr6.
addr);
57 memset(&resolved_addr6, 0,
sizeof(resolved_addr6));
62 resolved_addr6.
len =
static_cast<socklen_t
>(
sizeof(grpc_sockaddr_in6));
63 return resolved_addr6;
67 grpc_sockaddr_in6*
addr6 =
reinterpret_cast<grpc_sockaddr_in6*
>(
addr->addr);
72 const uint8_t kMapped[] = {0, 0, 0, 0, 0, 0, 0, 0,
73 0, 0, 0xff, 0xff, 192, 0, 2, 1};
75 const uint8_t kNotQuiteMapped[] = {0, 0, 0, 0, 0, 0, 0, 0,
76 0, 0, 0xff, 0xfe, 192, 0, 2, 99};
77 const uint8_t kIPv4[] = {192, 0, 2, 1};
79 const uint8_t kIPv6[] = {0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0,
80 0, 0, 0, 0, 0, 0, 0, 1};
82 TEST(SockAddrUtilsTest, SockAddrIsV4Mapped) {
89 ASSERT_EQ(memcmp(&expect4, &output4,
sizeof(expect4)), 0);
92 input6 = MakeAddr6(kNotQuiteMapped,
sizeof(kNotQuiteMapped));
96 ASSERT_EQ(memcmp(&expect4, &output4,
sizeof(expect4)), 0);
103 TEST(SockAddrUtilsTest, SockAddrToV4Mapped) {
109 ASSERT_EQ(memcmp(&expect6, &output6,
sizeof(output6)), 0);
115 ASSERT_EQ(memcmp(&expect6, &output6,
sizeof(output6)), 0);
118 input6 = MakeAddr6(kMapped,
sizeof(kMapped));
122 TEST(SockAddrUtilsTest, SockAddrIsWildCard) {
134 grpc_sockaddr_in* wild4_addr =
135 reinterpret_cast<grpc_sockaddr_in*
>(&wild4.
addr);
136 memset(&wild4_addr->sin_addr.s_addr, 0xbd, 1);
143 grpc_sockaddr_in6* wild6_addr =
144 reinterpret_cast<grpc_sockaddr_in6*
>(&wild6.
addr);
145 memset(&wild6_addr->sin6_addr.s6_addr, 0xbd, 1);
152 grpc_sockaddr_in6* wild_mapped_addr =
153 reinterpret_cast<grpc_sockaddr_in6*
>(&wild_mapped.
addr);
154 memset(&wild_mapped_addr->sin6_addr.s6_addr, 0xbd, 1);
160 memset(&phony, 0,
sizeof(phony));
165 TEST(SockAddrUtilsTest, SockAddrToString) {
175 "[2001:db8::1]:12345");
177 "[2001:db8::1]:12345");
179 "ipv6:%5B2001:db8::1%5D:12345");
181 SetIPv6ScopeId(&input6, 2);
183 "[2001:db8::1%2]:12345");
185 "[2001:db8::1%2]:12345");
187 "ipv6:%5B2001:db8::1%252%5D:12345");
189 SetIPv6ScopeId(&input6, 101);
191 "[2001:db8::1%101]:12345");
193 "[2001:db8::1%101]:12345");
195 "ipv6:%5B2001:db8::1%25101%5D:12345");
199 "[::ffff:192.0.2.1]:12345");
204 MakeAddr6(kNotQuiteMapped,
sizeof(kNotQuiteMapped));
206 "[::fffe:c000:263]:12345");
208 "[::fffe:c000:263]:12345");
210 "ipv6:%5B::fffe:c000:263%5D:12345");
213 memset(&phony, 0,
sizeof(phony));
214 grpc_sockaddr* phony_addr =
reinterpret_cast<grpc_sockaddr*
>(phony.
addr);
215 phony_addr->sa_family = 123;
223 #ifdef GRPC_HAVE_UNIX_SOCKET
225 struct sockaddr_un* sock_un =
reinterpret_cast<struct sockaddr_un*
>(&inputun);
230 std::string max_filepath(
sizeof(sock_un->sun_path) - 1,
'x');
237 sock_un->sun_path[
sizeof(sockaddr_un::sun_path) - 1] =
'x';
246 std::string max_abspath(
sizeof(sock_un->sun_path) - 1,
'\0');
254 inputun.
len =
sizeof(sock_un->sun_family);
260 #ifdef GRPC_HAVE_UNIX_SOCKET
262 TEST(SockAddrUtilsTest, UnixSockAddrToUri) {
276 "unix-abstract:path_%00with_null");
281 TEST(SockAddrUtilsTest, SockAddrSetGetPort) {
293 memset(&phony, 0,
sizeof(phony));
294 grpc_sockaddr* phony_addr =
reinterpret_cast<grpc_sockaddr*
>(phony.
addr);
295 phony_addr->sa_family = 123;
300 void VerifySocketAddressMatch(
const std::string& ip_address,
313 <<
"IP=" << ip_address <<
" Subnet=" << subnet <<
" Mask=" << mask_bits;
316 void VerifySocketAddressMatchSuccess(
const std::string& ip_address,
322 VerifySocketAddressMatch(ip_address, subnet,
i,
true);
326 void VerifySocketAddressMatchFailure(
const std::string& ip_address,
331 for (
auto i = mask_bits;
i <= 128;
i++) {
332 VerifySocketAddressMatch(ip_address, subnet,
i,
false);
336 TEST(SockAddrUtilsTest, SockAddrMatchSubnet) {
338 VerifySocketAddressMatchSuccess(
"192.168.1.1",
"192.168.1.1", 32);
339 VerifySocketAddressMatchSuccess(
"255.255.255.255",
"255.255.255.255", 32);
340 VerifySocketAddressMatchFailure(
"192.168.1.1",
"192.168.1.2", 31);
341 VerifySocketAddressMatchFailure(
"192.168.1.1",
"191.0.0.0", 8);
342 VerifySocketAddressMatchFailure(
"192.168.1.1",
"0.0.0.0", 1);
344 VerifySocketAddressMatchSuccess(
"2001:db8::",
"2001::", 16);
345 VerifySocketAddressMatchSuccess(
"2001:db8:cfe:134:3ab:3456:78:9",
346 "2001:db8:cfe:134:3ab:3456:78:9", 128);
347 VerifySocketAddressMatchSuccess(
"FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF",
348 "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF",
350 VerifySocketAddressMatchFailure(
"2001:db8:cfe:134:3ab:3456:78:9",
351 "3001:2:3:4:5:6:7:8", 4);
352 VerifySocketAddressMatchFailure(
"FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF",
358 int main(
int argc,
char** argv) {