Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Side by Side Diff: native_client_sdk/src/tests/nacl_io_test/socket_test.cc

Issue 139283003: [NaCl SDK] nacl_io: Fix inet_ntop to be consistent with glibc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 4
5 #include <arpa/inet.h> 5 #include <arpa/inet.h>
6 #include <errno.h> 6 #include <errno.h>
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <netinet/in.h> 8 #include <netinet/in.h>
9 #include <pthread.h> 9 #include <pthread.h>
10 #include <sys/types.h> 10 #include <sys/types.h>
11 #include <sys/socket.h> 11 #include <sys/socket.h>
12 #include <sys/stat.h> 12 #include <sys/stat.h>
13 13
14 #include <map> 14 #include <map>
15 #include <string> 15 #include <string>
16 16
17 #include "gmock/gmock.h" 17 #include "gmock/gmock.h"
18 #include "gtest/gtest.h" 18 #include "gtest/gtest.h"
19 19
20 #include "nacl_io/kernel_intercept.h" 20 #include "nacl_io/kernel_intercept.h"
21 #include "nacl_io/kernel_proxy.h" 21 #include "nacl_io/kernel_proxy.h"
22 #include "nacl_io/ossocket.h" 22 #include "nacl_io/ossocket.h"
23 #include "nacl_io/ostypes.h" 23 #include "nacl_io/ostypes.h"
24 24
25 #ifdef PROVIDES_SOCKET_API 25 #ifdef PROVIDES_SOCKET_API
26 26
27 // When devloping tests for host resolution function is can be usefull
binji 2014/01/27 19:57:18 When developing tests for host resolution it can b
Sam Clegg 2014/01/27 23:10:15 Hmm, this should not be part of this CL. Removed.
28 // to compare results with the host glibc version.
29 #if 0
30 #define ki_getaddrinfo getaddrinfo
31 #define ki_gethostbyname gethostbyname
32 #define ki_freeaddrinfo freeaddrinfo
33 #endif
34
27 using namespace nacl_io; 35 using namespace nacl_io;
28 using namespace sdk_util; 36 using namespace sdk_util;
29 37
30 namespace { 38 namespace {
31 class SocketTest : public ::testing::Test { 39 class SocketTest : public ::testing::Test {
32 public: 40 public:
33 SocketTest() {} 41 SocketTest() {}
34 42
35 void SetUp() { 43 void SetUp() {
36 ki_init(&kp_); 44 ki_init(&kp_);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 270
263 // These utility functions are only used for newlib (glibc provides its own 271 // These utility functions are only used for newlib (glibc provides its own
264 // implementations of these functions). 272 // implementations of these functions).
265 #if !defined(__GLIBC__) 273 #if !defined(__GLIBC__)
266 274
267 TEST(SocketUtilityFunctions, Hstrerror) { 275 TEST(SocketUtilityFunctions, Hstrerror) {
268 EXPECT_STREQ(hstrerror(2718), 276 EXPECT_STREQ(hstrerror(2718),
269 "Unknown error in gethostbyname: 2718."); 277 "Unknown error in gethostbyname: 2718.");
270 } 278 }
271 279
280 #endif // !defined(__GLIBC__)
281
272 TEST(SocketUtilityFunctions, Htonl) { 282 TEST(SocketUtilityFunctions, Htonl) {
273 uint32_t host_long = 0x44332211; 283 uint32_t host_long = 0x44332211;
274 uint32_t network_long = htonl(host_long); 284 uint32_t network_long = htonl(host_long);
275 uint8_t network_bytes[4]; 285 uint8_t network_bytes[4];
276 memcpy(network_bytes, &network_long, 4); 286 memcpy(network_bytes, &network_long, 4);
277 EXPECT_EQ(network_bytes[0], 0x44); 287 EXPECT_EQ(network_bytes[0], 0x44);
278 EXPECT_EQ(network_bytes[1], 0x33); 288 EXPECT_EQ(network_bytes[1], 0x33);
279 EXPECT_EQ(network_bytes[2], 0x22); 289 EXPECT_EQ(network_bytes[2], 0x22);
280 EXPECT_EQ(network_bytes[3], 0x11); 290 EXPECT_EQ(network_bytes[3], 0x11);
281 } 291 }
282 292
283 TEST(SocketUtilityFunctions, Htons) { 293 TEST(SocketUtilityFunctions, Htons) {
284 uint16_t host_short = 0x2211; 294 uint16_t host_short = 0x2211;
285 uint16_t network_short = htons(host_short); 295 uint16_t network_short = htons(host_short);
286 uint8_t network_bytes[2]; 296 uint8_t network_bytes[2];
287 memcpy(network_bytes, &network_short, 2); 297 memcpy(network_bytes, &network_short, 2);
288 EXPECT_EQ(network_bytes[0], 0x22); 298 EXPECT_EQ(network_bytes[0], 0x22);
289 EXPECT_EQ(network_bytes[1], 0x11); 299 EXPECT_EQ(network_bytes[1], 0x11);
290 } 300 }
291 301
292 static struct in_addr generate_ipv4_addr(int tuple1, int tuple2, 302 static struct in_addr generate_ipv4_addr(uint8_t* tuple) {
293 int tuple3, int tuple4) {
294 unsigned char addr[4]; 303 unsigned char addr[4];
295 addr[0] = static_cast<unsigned char>(tuple1); 304 addr[0] = static_cast<unsigned char>(tuple[0]);
296 addr[1] = static_cast<unsigned char>(tuple2); 305 addr[1] = static_cast<unsigned char>(tuple[1]);
297 addr[2] = static_cast<unsigned char>(tuple3); 306 addr[2] = static_cast<unsigned char>(tuple[2]);
298 addr[3] = static_cast<unsigned char>(tuple4); 307 addr[3] = static_cast<unsigned char>(tuple[3]);
299 struct in_addr real_addr; 308 struct in_addr real_addr;
300 memcpy(&real_addr, addr, 4); 309 memcpy(&real_addr, addr, 4);
301 return real_addr; 310 return real_addr;
302 } 311 }
303 312
304 static struct in6_addr generate_ipv6_addr(int* tuples) { 313 static struct in6_addr generate_ipv6_addr(uint16_t* tuple) {
305 unsigned char addr[16]; 314 unsigned char addr[16];
306 for (int i = 0; i < 8; i++) { 315 for (int i = 0; i < 8; i++) {
307 addr[2*i] = (tuples[i] >> 8) & 0xFF; 316 addr[2*i] = (tuple[i] >> 8) & 0xFF;
308 addr[2*i+1] = tuples[i] & 0xFF; 317 addr[2*i+1] = tuple[i] & 0xFF;
309 } 318 }
310 struct in6_addr real_addr; 319 struct in6_addr real_addr;
311 memcpy(&real_addr, addr, 16); 320 memcpy(&real_addr, addr, 16);
312 return real_addr; 321 return real_addr;
313 } 322 }
314 323
324 TEST(SocketUtilityFunctions, Inet_addr) {
325 // Fails for anything other than
binji 2014/01/27 19:57:18 other than...
Sam Clegg 2014/01/27 23:10:15 Done.
326 ASSERT_EQ(INADDR_NONE, inet_addr("foobar"));
327
328 // Fails if there are too many quads
329 ASSERT_EQ(INADDR_NONE, inet_addr("0.0.0.0.0"));
330
331 // Fails if a single element is > 256
binji 2014/01/27 19:57:18 >= 256
332 ASSERT_EQ(INADDR_NONE, inet_addr("999.0.0.0"));
333
334 // Fails if a single element is negative.
335 ASSERT_EQ(INADDR_NONE, inet_addr("-55.0.0.0"));
336
337 // Success cases
338 uint32_t expected_addr = ntohl(0x07060504);
339 ASSERT_EQ(expected_addr, inet_addr("7.6.5.4"));
340 expected_addr = ntohl(0xffffffff);
341 ASSERT_EQ(expected_addr, inet_addr("255.255.255.255"));
342 }
343
344 TEST(SocketUtilityFunctions, Inet_aton) {
345 struct in_addr addr;
346
347 // Failure cases
348 ASSERT_EQ(0, inet_aton("foobar", &addr));
349 ASSERT_EQ(0, inet_aton("0.0.0.0.0", &addr));
350 ASSERT_EQ(0, inet_aton("999.0.0.0", &addr));
351
352 // Success cases
353 uint32_t expected_addr = htonl(0xff020304);
354 ASSERT_NE(0, inet_aton("255.2.3.4", &addr));
355 ASSERT_EQ(expected_addr, addr.s_addr);
356
357 expected_addr = htonl(0x01000002);
358 ASSERT_NE(0, inet_aton("1.2", &addr));
359 ASSERT_EQ(expected_addr, addr.s_addr);
360
361 expected_addr = htonl(0x01020003);
362 ASSERT_NE(0, inet_aton("1.2.3", &addr));
363 ASSERT_EQ(expected_addr, addr.s_addr);
364
365 expected_addr = htonl(0x0000100);
366 ASSERT_NE(0, inet_aton("256", &addr));
binji 2014/01/27 19:57:18 test larger numbers here and above? The spec says
Sam Clegg 2014/01/27 23:10:15 Done.
367 ASSERT_EQ(expected_addr, addr.s_addr);
368 }
369
315 TEST(SocketUtilityFunctions, Inet_ntoa) { 370 TEST(SocketUtilityFunctions, Inet_ntoa) {
316 char* stringified_addr = inet_ntoa(generate_ipv4_addr(0,0,0,0)); 371 struct {
317 ASSERT_TRUE(NULL != stringified_addr); 372 unsigned char addr_tuple[4];
318 EXPECT_STREQ("0.0.0.0", stringified_addr); 373 const char* output;
374 } tests[] = {
375 { { 0, 0, 0, 0 }, "0.0.0.0" },
376 { { 127, 0, 0, 1 }, "127.0.0.1" },
377 { { 255, 255, 255, 255 }, "255.255.255.255" },
378 };
319 379
320 stringified_addr = inet_ntoa(generate_ipv4_addr(127,0,0,1)); 380 for (size_t i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i) {
321 ASSERT_TRUE(NULL != stringified_addr); 381 char* stringified_addr = inet_ntoa(generate_ipv4_addr(tests[i].addr_tuple));
322 EXPECT_STREQ("127.0.0.1", stringified_addr); 382 ASSERT_TRUE(NULL != stringified_addr);
323 383 EXPECT_STREQ(tests[i].output, stringified_addr);
324 stringified_addr = inet_ntoa(generate_ipv4_addr(255,255,255,255)); 384 }
325 ASSERT_TRUE(NULL != stringified_addr);
326 EXPECT_STREQ("255.255.255.255", stringified_addr);
327 } 385 }
328 386
329 TEST(SocketUtilityFunctions, Inet_ntop_ipv4) { 387 TEST(SocketUtilityFunctions, Inet_ntop_ipv4) {
330 char stringified_addr[INET_ADDRSTRLEN]; 388 struct {
389 unsigned char addr_tuple[4];
390 const char* output;
391 } tests[] = {
392 { { 0, 0, 0, 0 }, "0.0.0.0" },
393 { { 127, 0, 0, 1 }, "127.0.0.1" },
394 { { 255, 255, 255, 255 }, "255.255.255.255" },
395 };
331 396
332 struct in_addr real_addr = generate_ipv4_addr(0,0,0,0); 397 for (size_t i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i) {
333 EXPECT_TRUE(NULL != inet_ntop(AF_INET, &real_addr, 398 char stringified_addr[INET_ADDRSTRLEN];
334 stringified_addr, INET_ADDRSTRLEN)); 399 struct in_addr real_addr = generate_ipv4_addr(tests[i].addr_tuple);
335 EXPECT_STREQ("0.0.0.0", stringified_addr); 400 EXPECT_TRUE(NULL != inet_ntop(AF_INET, &real_addr,
336 401 stringified_addr, INET_ADDRSTRLEN));
337 real_addr = generate_ipv4_addr(127,0,0,1); 402 EXPECT_STREQ(tests[i].output, stringified_addr);
338 EXPECT_TRUE(NULL != inet_ntop(AF_INET, &real_addr, 403 }
339 stringified_addr, INET_ADDRSTRLEN));
340 EXPECT_STREQ("127.0.0.1", stringified_addr);
341
342 real_addr = generate_ipv4_addr(255,255,255,255);
343 EXPECT_TRUE(NULL != inet_ntop(AF_INET, &real_addr,
344 stringified_addr, INET_ADDRSTRLEN));
345 EXPECT_STREQ("255.255.255.255", stringified_addr);
346 } 404 }
347 405
348 TEST(SocketUtilityFunctions, Inet_ntop_ipv6) { 406 TEST(SocketUtilityFunctions, Inet_ntop_ipv6) {
349 char stringified_addr[INET6_ADDRSTRLEN]; 407 struct {
408 unsigned short addr_tuple[8];
409 const char* output;
410 } tests[] = {
411 { { 0, 0, 0, 0, 0, 0, 0, 0 }, "::" },
412 { { 1, 2, 3, 0, 0, 0, 0, 0 }, "1:2:3::" },
413 { { 0, 0, 0, 0, 0, 1, 2, 3 }, "::1:2:3" },
414 { { 0x1234, 0xa, 0x12, 0x0000, 0x5678, 0x9abc, 0xdef, 0xffff },
415 "1234:a:12:0:5678:9abc:def:ffff" },
416 { { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff },
417 "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" },
418 { { 0, 0, 0, 0, 0, 0xffff, 0x101, 0x101 }, "::ffff:1.1.1.1" },
419 { { 0, 0, 0, 0, 0, 0, 0x101, 0x101 }, "::1.1.1.1" },
420 };
350 421
351 { 422 for (size_t i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i) {
352 int addr_tuples[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; 423 char stringified_addr[INET6_ADDRSTRLEN];
353 struct in6_addr real_addr = generate_ipv6_addr(addr_tuples); 424 struct in6_addr real_addr = generate_ipv6_addr(tests[i].addr_tuple);
354 EXPECT_TRUE(NULL != inet_ntop(AF_INET6, &real_addr, 425 EXPECT_TRUE(NULL != inet_ntop(AF_INET6, &real_addr,
355 stringified_addr, INET6_ADDRSTRLEN)); 426 stringified_addr, INET6_ADDRSTRLEN));
356 EXPECT_STREQ("0:0:0:0:0:0:0:0", stringified_addr); 427 EXPECT_STREQ(tests[i].output, stringified_addr);
357 }
358
359 {
360 int addr_tuples[8] = { 0x1234, 0xa, 0x12, 0x0000,
361 0x5678, 0x9abc, 0xdef, 0xffff };
362 struct in6_addr real_addr = generate_ipv6_addr(addr_tuples);
363 EXPECT_TRUE(NULL != inet_ntop(AF_INET6, &real_addr,
364 stringified_addr, INET6_ADDRSTRLEN));
365 EXPECT_STREQ("1234:a:12:0:5678:9abc:def:ffff", stringified_addr);
366 }
367
368 {
369 int addr_tuples[8] = { 0xffff, 0xffff, 0xffff, 0xffff,
370 0xffff, 0xffff, 0xffff, 0xffff };
371 struct in6_addr real_addr = generate_ipv6_addr(addr_tuples);
372 EXPECT_TRUE(NULL != inet_ntop(AF_INET6, &real_addr,
373 stringified_addr, INET6_ADDRSTRLEN));
374 EXPECT_STREQ("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", stringified_addr);
375 } 428 }
376 } 429 }
377 430
378 TEST(SocketUtilityFunctions, Inet_ntop_failure) { 431 TEST(SocketUtilityFunctions, Inet_ntop_failure) {
379 char addr_name[INET6_ADDRSTRLEN]; 432 char addr_name[INET6_ADDRSTRLEN];
380 int addr_tuples[8] = { 0xffff, 0xffff, 0xffff, 0xffff, 433 uint16_t addr6_tuple[8] = { 0xffff, 0xffff, 0xffff, 0xffff,
381 0xffff, 0xffff, 0xffff, 0xffff }; 434 0xffff, 0xffff, 0xffff, 0xffff };
382 struct in6_addr ipv6_addr = generate_ipv6_addr(addr_tuples); 435 uint8_t addr_tuple[4] = { 255, 255, 255, 255 };
383 struct in_addr ipv4_addr = generate_ipv4_addr(255,255,255,255); 436 struct in6_addr ipv6_addr = generate_ipv6_addr(addr6_tuple);
437 struct in_addr ipv4_addr = generate_ipv4_addr(addr_tuple);
384 438
385 EXPECT_TRUE(NULL == inet_ntop(AF_UNIX, &ipv6_addr, 439 EXPECT_EQ(NULL, inet_ntop(AF_UNIX, &ipv6_addr,
386 addr_name, INET6_ADDRSTRLEN)); 440 addr_name, INET6_ADDRSTRLEN));
387 EXPECT_EQ(errno, EAFNOSUPPORT); 441 EXPECT_EQ(EAFNOSUPPORT, errno);
388 442
389 EXPECT_TRUE(NULL == inet_ntop(AF_INET, &ipv4_addr, 443 EXPECT_EQ(NULL, inet_ntop(AF_INET, &ipv4_addr,
390 addr_name, INET_ADDRSTRLEN - 1)); 444 addr_name, INET_ADDRSTRLEN - 1));
391 EXPECT_EQ(errno, ENOSPC); 445 EXPECT_EQ(ENOSPC, errno);
392 446
393 EXPECT_TRUE(NULL == inet_ntop(AF_INET6, &ipv6_addr, 447 EXPECT_EQ(NULL, inet_ntop(AF_INET6, &ipv6_addr,
394 addr_name, INET6_ADDRSTRLEN - 1)); 448 addr_name, INET6_ADDRSTRLEN / 2));
395 EXPECT_EQ(errno, ENOSPC); 449 EXPECT_EQ(ENOSPC, errno);
396 } 450 }
397 451
398 TEST(SocketUtilityFunctions, Inet_pton) { 452 TEST(SocketUtilityFunctions, Inet_pton) {
399 struct { 453 struct {
400 int family; 454 int family;
401 const char* input; 455 const char* input;
402 const char* output; 456 const char* output; // NULL means output should match input
403 } tests[] = { 457 } tests[] = {
404 { AF_INET, "127.127.12.0", NULL }, 458 { AF_INET, "127.127.12.0", NULL },
405 { AF_INET, "0.0.0.0", NULL }, 459 { AF_INET, "0.0.0.0", NULL },
406 460
407 { AF_INET6, "0:0:0:0:0:0:0:0", NULL }, 461 { AF_INET6, "0:0:0:0:0:0:0:0", "::" },
408 { AF_INET6, "1234:5678:9abc:def0:1234:5678:9abc:def0", NULL }, 462 { AF_INET6, "1234:5678:9abc:def0:1234:5678:9abc:def0", NULL },
409 { AF_INET6, "1:2:3:4:5:6:7:8", NULL }, 463 { AF_INET6, "1:2:3:4:5:6:7:8", NULL },
410 { AF_INET6, "a:b:c:d:e:f:1:2", NULL }, 464 { AF_INET6, "a:b:c:d:e:f:1:2", NULL },
411 { AF_INET6, "A:B:C:D:E:F:1:2", "a:b:c:d:e:f:1:2" }, 465 { AF_INET6, "A:B:C:D:E:F:1:2", "a:b:c:d:e:f:1:2" },
412 { AF_INET6, "::", "0:0:0:0:0:0:0:0" }, 466 { AF_INET6, "::", "::" },
413 { AF_INET6, "::12", "0:0:0:0:0:0:0:12" }, 467 { AF_INET6, "::12", "::12" },
414 { AF_INET6, "::1:2:3", "0:0:0:0:0:1:2:3" }, 468 { AF_INET6, "::1:2:3", "::1:2:3" },
415 { AF_INET6, "12::", "12:0:0:0:0:0:0:0" }, 469 { AF_INET6, "12::", "12::" },
416 { AF_INET6, "1:2::", "1:2:0:0:0:0:0:0" }, 470 { AF_INET6, "1:2::", "1:2::" },
417 { AF_INET6, "::12:0:0:0:0:0:0:0", "12:0:0:0:0:0:0:0" }, 471 { AF_INET6, "12:0:0:0:0:0:0:0", "12::" },
418 { AF_INET6, "1:2:3::4:5", "1:2:3:0:0:0:4:5" }, 472 { AF_INET6, "1:2:3::4:5", "1:2:3::4:5" },
419 { AF_INET6, "::1.1.1.1", "0:0:0:0:0:0:101:101" }, 473 { AF_INET6, "::ffff:1.1.1.1", "::ffff:1.1.1.1" },
420 { AF_INET6, "::ffff:1.1.1.1", "0:0:0:0:0:ffff:101:101" }, 474 { AF_INET6, "ffff::1.1.1.1", "ffff::101:101" },
421 { AF_INET6, "ffff::1.1.1.1", "ffff:0:0:0:0:0:101:101" }, 475 { AF_INET6, "::1.1.1.1", "::1.1.1.1" },
422 { AF_INET6, "::1.1.1.1", "0:0:0:0:0:0:101:101" },
423 }; 476 };
424 477
425 for (size_t i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i) { 478 for (size_t i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i) {
426 uint8_t addr[16]; 479 uint8_t addr[16];
427 EXPECT_TRUE(inet_pton(tests[i].family, tests[i].input, addr)); 480 ASSERT_TRUE(inet_pton(tests[i].family, tests[i].input, addr))
481 << "inet_pton failed for " << tests[i].input;
428 const char* expected = tests[i].output ? tests[i].output : tests[i].input; 482 const char* expected = tests[i].output ? tests[i].output : tests[i].input;
429 char out_buffer[256]; 483 char out_buffer[256];
430 EXPECT_TRUE( 484 ASSERT_EQ(out_buffer,
431 inet_ntop(tests[i].family, addr, out_buffer, sizeof(out_buffer))); 485 inet_ntop(tests[i].family, addr, out_buffer, sizeof(out_buffer)));
432 EXPECT_EQ(std::string(expected), std::string(out_buffer)); 486 ASSERT_STREQ(expected, out_buffer);
433 } 487 }
434 } 488 }
435 489
436 TEST(SocketUtilityFunctions, Inet_pton_failure) { 490 TEST(SocketUtilityFunctions, Inet_pton_failure) {
491 // All these are examples of strings that do not map
492 // to IP address. inet_pton returns 0 on failure.
437 uint8_t addr[16]; 493 uint8_t addr[16];
438 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.24312", &addr)); 494 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.24312", &addr));
439 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.24 ", &addr)); 495 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.24 ", &addr));
440 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.0.1", &addr)); 496 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.0.1", &addr));
441 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12. 0", &addr)); 497 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12. 0", &addr));
442 EXPECT_EQ(0, inet_pton(AF_INET, " 127.127.12.0", &addr)); 498 EXPECT_EQ(0, inet_pton(AF_INET, " 127.127.12.0", &addr));
443 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.0.", &addr)); 499 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.0.", &addr));
444 EXPECT_EQ(0, inet_pton(AF_INET, ".127.127.12.0", &addr)); 500 EXPECT_EQ(0, inet_pton(AF_INET, ".127.127.12.0", &addr));
445 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.0x0", &addr)); 501 EXPECT_EQ(0, inet_pton(AF_INET, "127.127.12.0x0", &addr));
446 502
447 EXPECT_EQ(0, inet_pton(AF_INET6, ":::", &addr)); 503 EXPECT_EQ(0, inet_pton(AF_INET6, ":::", &addr));
448 EXPECT_EQ(0, inet_pton(AF_INET6, "0:::0", &addr)); 504 EXPECT_EQ(0, inet_pton(AF_INET6, "0:::0", &addr));
449 EXPECT_EQ(0, inet_pton(AF_INET6, "0::0:0::1", &addr)); 505 EXPECT_EQ(0, inet_pton(AF_INET6, "0::0:0::1", &addr));
450 EXPECT_EQ(0, inet_pton(AF_INET6, "0:0:0:0:0:0:1: 2", &addr)); 506 EXPECT_EQ(0, inet_pton(AF_INET6, "0:0:0:0:0:0:1: 2", &addr));
451 EXPECT_EQ(0, inet_pton(AF_INET6, " 0:0:0:0:0:0:1:2", &addr)); 507 EXPECT_EQ(0, inet_pton(AF_INET6, " 0:0:0:0:0:0:1:2", &addr));
452 EXPECT_EQ(0, inet_pton(AF_INET6, "0:0:0:0:0:0:1:2 ", &addr)); 508 EXPECT_EQ(0, inet_pton(AF_INET6, "0:0:0:0:0:0:1:2 ", &addr));
453 EXPECT_EQ(0, inet_pton(AF_INET6, ":0:0:0:0:0:0:1:2", &addr)); 509 EXPECT_EQ(0, inet_pton(AF_INET6, ":0:0:0:0:0:0:1:2", &addr));
454 EXPECT_EQ(0, inet_pton(AF_INET6, "0:0:0:0:0:0:1:2:4", &addr)); 510 EXPECT_EQ(0, inet_pton(AF_INET6, "0:0:0:0:0:0:1:2:4", &addr));
455 EXPECT_EQ(0, inet_pton(AF_INET6, "0:0:0:0:0:0:1:0.0.0.0", &addr)); 511 EXPECT_EQ(0, inet_pton(AF_INET6, "0:0:0:0:0:0:1:0.0.0.0", &addr));
456 EXPECT_EQ(0, inet_pton(AF_INET6, "::0.0.0.0:1", &addr)); 512 EXPECT_EQ(0, inet_pton(AF_INET6, "::0.0.0.0:1", &addr));
457 EXPECT_EQ(0, inet_pton(AF_INET6, "::0.0.0.0.0", &addr)); 513 EXPECT_EQ(0, inet_pton(AF_INET6, "::0.0.0.0.0", &addr));
514 EXPECT_EQ(0, inet_pton(AF_INET6, "::1.2.3.4.5.6.7.8", &addr));
458 } 515 }
459 516
460 TEST(SocketUtilityFunctions, Ntohs) { 517 TEST(SocketUtilityFunctions, Ntohs) {
461 uint8_t network_bytes[2] = { 0x22, 0x11 }; 518 uint8_t network_bytes[2] = { 0x22, 0x11 };
462 uint16_t network_short; 519 uint16_t network_short;
463 memcpy(&network_short, network_bytes, 2); 520 memcpy(&network_short, network_bytes, 2);
464 uint16_t host_short = ntohs(network_short); 521 uint16_t host_short = ntohs(network_short);
465 EXPECT_EQ(host_short, 0x2211); 522 EXPECT_EQ(host_short, 0x2211);
466 } 523 }
467 524
468 TEST(SocketUtilityFunctions, Ntohl) { 525 TEST(SocketUtilityFunctions, Ntohl) {
469 uint8_t network_bytes[4] = { 0x44, 0x33, 0x22, 0x11 }; 526 uint8_t network_bytes[4] = { 0x44, 0x33, 0x22, 0x11 };
470 uint32_t network_long; 527 uint32_t network_long;
471 memcpy(&network_long, network_bytes, 4); 528 memcpy(&network_long, network_bytes, 4);
472 uint32_t host_long = ntohl(network_long); 529 uint32_t host_long = ntohl(network_long);
473 EXPECT_EQ(host_long, 0x44332211); 530 EXPECT_EQ(host_long, 0x44332211);
474 } 531 }
475 532
476 #endif // !defined(__GLIBC__)
477 #endif // PROVIDES_SOCKETPAIR_API 533 #endif // PROVIDES_SOCKETPAIR_API
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698