OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 #include <errno.h> | 4 #include <errno.h> |
5 #include <fcntl.h> | 5 #include <fcntl.h> |
6 #include <pthread.h> | 6 #include <pthread.h> |
7 #include <sys/stat.h> | 7 #include <sys/stat.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, NULL), 0); | 252 EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, NULL), 0); |
253 EXPECT_EQ(errno, EFAULT); | 253 EXPECT_EQ(errno, EFAULT); |
254 EXPECT_LT(ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv), 0); | 254 EXPECT_LT(ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv), 0); |
255 EXPECT_EQ(errno, EAFNOSUPPORT); | 255 EXPECT_EQ(errno, EAFNOSUPPORT); |
256 EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, sv), 0); | 256 EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, sv), 0); |
257 EXPECT_EQ(errno, EPROTONOSUPPORT); | 257 EXPECT_EQ(errno, EPROTONOSUPPORT); |
258 EXPECT_LT(ki_socketpair(AF_INET6, SOCK_STREAM, 0, sv), 0); | 258 EXPECT_LT(ki_socketpair(AF_INET6, SOCK_STREAM, 0, sv), 0); |
259 EXPECT_EQ(errno, EPROTONOSUPPORT); | 259 EXPECT_EQ(errno, EPROTONOSUPPORT); |
260 } | 260 } |
261 | 261 |
| 262 // These functions don't go through KernelProxy, so they don't require a test |
| 263 // fixture |
| 264 |
| 265 static struct in_addr generate_ipv4_addr(int tuple1, int tuple2, |
| 266 int tuple3, int tuple4) { |
| 267 unsigned char addr[4]; |
| 268 addr[0] = static_cast<unsigned char>(tuple1); |
| 269 addr[1] = static_cast<unsigned char>(tuple2); |
| 270 addr[2] = static_cast<unsigned char>(tuple3); |
| 271 addr[3] = static_cast<unsigned char>(tuple4); |
| 272 struct in_addr *real_addr = reinterpret_cast<struct in_addr*>(addr); |
| 273 return *real_addr; |
| 274 } |
| 275 |
| 276 static struct in6_addr generate_ipv6_addr(int *tuples) { |
| 277 unsigned char addr[16]; |
| 278 for (int i = 0; i < 8; i++) { |
| 279 addr[2*i] = (tuples[i] >> 8) & 0xFF; |
| 280 addr[2*i+1] = tuples[i] & 0xFF; |
| 281 } |
| 282 struct in6_addr *real_addr = reinterpret_cast<struct in6_addr*>(addr); |
| 283 return *real_addr; |
| 284 } |
| 285 |
| 286 TEST(SocketUtilityFunctions, Inet_ntoa) { |
| 287 char *stringified_addr = inet_ntoa(generate_ipv4_addr(0,0,0,0)); |
| 288 ASSERT_TRUE(NULL != stringified_addr); |
| 289 EXPECT_STREQ("0.0.0.0", stringified_addr); |
| 290 |
| 291 stringified_addr = inet_ntoa(generate_ipv4_addr(127,0,0,1)); |
| 292 ASSERT_TRUE(NULL != stringified_addr); |
| 293 EXPECT_STREQ("127.0.0.1", stringified_addr); |
| 294 |
| 295 stringified_addr = inet_ntoa(generate_ipv4_addr(255,255,255,255)); |
| 296 ASSERT_TRUE(NULL != stringified_addr); |
| 297 EXPECT_STREQ("255.255.255.255", stringified_addr); |
| 298 } |
| 299 |
| 300 TEST(SocketUtilityFunctions, Inet_ntop_ipv4) { |
| 301 char stringified_addr[INET_ADDRSTRLEN]; |
| 302 |
| 303 struct in_addr real_addr = generate_ipv4_addr(0,0,0,0); |
| 304 EXPECT_TRUE(NULL != inet_ntop(AF_INET, &real_addr, |
| 305 stringified_addr, INET_ADDRSTRLEN)); |
| 306 EXPECT_STREQ("0.0.0.0", stringified_addr); |
| 307 |
| 308 real_addr = generate_ipv4_addr(127,0,0,1); |
| 309 EXPECT_TRUE(NULL != inet_ntop(AF_INET, &real_addr, |
| 310 stringified_addr, INET_ADDRSTRLEN)); |
| 311 EXPECT_STREQ("127.0.0.1", stringified_addr); |
| 312 |
| 313 real_addr = generate_ipv4_addr(255,255,255,255); |
| 314 EXPECT_TRUE(NULL != inet_ntop(AF_INET, &real_addr, |
| 315 stringified_addr, INET_ADDRSTRLEN)); |
| 316 EXPECT_STREQ("255.255.255.255", stringified_addr); |
| 317 } |
| 318 |
| 319 TEST(SocketUtilityFunctions, Inet_ntop_ipv6) { |
| 320 char stringified_addr[INET6_ADDRSTRLEN]; |
| 321 |
| 322 { |
| 323 int addr_tuples[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; |
| 324 struct in6_addr real_addr = generate_ipv6_addr(addr_tuples); |
| 325 EXPECT_TRUE(NULL != inet_ntop(AF_INET6, &real_addr, |
| 326 stringified_addr, INET6_ADDRSTRLEN)); |
| 327 EXPECT_STREQ("0:0:0:0:0:0:0:0", stringified_addr); |
| 328 } |
| 329 |
| 330 { |
| 331 int addr_tuples[8] = { 0x1234, 0xa, 0x12, 0x0000, |
| 332 0x5678, 0x9abc, 0xdef, 0xffff }; |
| 333 struct in6_addr real_addr = generate_ipv6_addr(addr_tuples); |
| 334 EXPECT_TRUE(NULL != inet_ntop(AF_INET6, &real_addr, |
| 335 stringified_addr, INET6_ADDRSTRLEN)); |
| 336 EXPECT_STREQ("1234:a:12:0:5678:9abc:def:ffff", stringified_addr); |
| 337 } |
| 338 |
| 339 { |
| 340 int addr_tuples[8] = { 0xffff, 0xffff, 0xffff, 0xffff, |
| 341 0xffff, 0xffff, 0xffff, 0xffff }; |
| 342 struct in6_addr real_addr = generate_ipv6_addr(addr_tuples); |
| 343 EXPECT_TRUE(NULL != inet_ntop(AF_INET6, &real_addr, |
| 344 stringified_addr, INET6_ADDRSTRLEN)); |
| 345 EXPECT_STREQ("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", stringified_addr); |
| 346 } |
| 347 } |
| 348 |
| 349 TEST(SocketUtilityFunctions, Inet_ntop_failure) { |
| 350 char addr_name[INET6_ADDRSTRLEN]; |
| 351 int addr_tuples[8] = { 0xffff, 0xffff, 0xffff, 0xffff, |
| 352 0xffff, 0xffff, 0xffff, 0xffff }; |
| 353 struct in6_addr ipv6_addr = generate_ipv6_addr(addr_tuples); |
| 354 struct in_addr ipv4_addr = generate_ipv4_addr(255,255,255,255); |
| 355 |
| 356 EXPECT_TRUE(NULL == inet_ntop(AF_UNIX, &ipv6_addr, |
| 357 addr_name, INET6_ADDRSTRLEN)); |
| 358 EXPECT_EQ(errno, EAFNOSUPPORT); |
| 359 |
| 360 EXPECT_TRUE(NULL == inet_ntop(AF_INET, &ipv4_addr, |
| 361 addr_name, INET_ADDRSTRLEN - 1)); |
| 362 EXPECT_EQ(errno, ENOSPC); |
| 363 |
| 364 EXPECT_TRUE(NULL == inet_ntop(AF_INET6, &ipv6_addr, |
| 365 addr_name, INET6_ADDRSTRLEN - 1)); |
| 366 EXPECT_EQ(errno, ENOSPC); |
| 367 } |
| 368 |
262 #endif // PROVIDES_SOCKETPAIR_API | 369 #endif // PROVIDES_SOCKETPAIR_API |
OLD | NEW |