| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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 "net/spdy/spdy_alt_svc_wire_format.h" | 5 #include "net/spdy/spdy_alt_svc_wire_format.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
| 9 #include "testing/platform_test.h" | 9 #include "testing/platform_test.h" |
| 10 | 10 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 SpdyAltSvcWireFormat::SkipWhiteSpace(c, end); | 23 SpdyAltSvcWireFormat::SkipWhiteSpace(c, end); |
| 24 } | 24 } |
| 25 static bool PercentDecode(StringPiece::const_iterator c, | 25 static bool PercentDecode(StringPiece::const_iterator c, |
| 26 StringPiece::const_iterator end, | 26 StringPiece::const_iterator end, |
| 27 std::string* output) { | 27 std::string* output) { |
| 28 return SpdyAltSvcWireFormat::PercentDecode(c, end, output); | 28 return SpdyAltSvcWireFormat::PercentDecode(c, end, output); |
| 29 } | 29 } |
| 30 static bool ParseAltAuthority(StringPiece::const_iterator c, | 30 static bool ParseAltAuthority(StringPiece::const_iterator c, |
| 31 StringPiece::const_iterator end, | 31 StringPiece::const_iterator end, |
| 32 std::string* host, | 32 std::string* host, |
| 33 uint16* port) { | 33 uint16_t* port) { |
| 34 return SpdyAltSvcWireFormat::ParseAltAuthority(c, end, host, port); | 34 return SpdyAltSvcWireFormat::ParseAltAuthority(c, end, host, port); |
| 35 } | 35 } |
| 36 static bool ParsePositiveInteger16(StringPiece::const_iterator c, | 36 static bool ParsePositiveInteger16(StringPiece::const_iterator c, |
| 37 StringPiece::const_iterator end, | 37 StringPiece::const_iterator end, |
| 38 uint16* max_age) { | 38 uint16_t* max_age) { |
| 39 return SpdyAltSvcWireFormat::ParsePositiveInteger16(c, end, max_age); | 39 return SpdyAltSvcWireFormat::ParsePositiveInteger16(c, end, max_age); |
| 40 } | 40 } |
| 41 static bool ParsePositiveInteger32(StringPiece::const_iterator c, | 41 static bool ParsePositiveInteger32(StringPiece::const_iterator c, |
| 42 StringPiece::const_iterator end, | 42 StringPiece::const_iterator end, |
| 43 uint32* max_age) { | 43 uint32_t* max_age) { |
| 44 return SpdyAltSvcWireFormat::ParsePositiveInteger32(c, end, max_age); | 44 return SpdyAltSvcWireFormat::ParsePositiveInteger32(c, end, max_age); |
| 45 } | 45 } |
| 46 static bool ParseProbability(StringPiece::const_iterator c, | 46 static bool ParseProbability(StringPiece::const_iterator c, |
| 47 StringPiece::const_iterator end, | 47 StringPiece::const_iterator end, |
| 48 double* probability) { | 48 double* probability) { |
| 49 return SpdyAltSvcWireFormat::ParseProbability(c, end, probability); | 49 return SpdyAltSvcWireFormat::ParseProbability(c, end, probability); |
| 50 } | 50 } |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 } // namespace test | 53 } // namespace test |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::PercentDecode( | 424 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::PercentDecode( |
| 425 input.begin(), input.end(), &output)) | 425 input.begin(), input.end(), &output)) |
| 426 << input; | 426 << input; |
| 427 } | 427 } |
| 428 } | 428 } |
| 429 | 429 |
| 430 // Test ParseAltAuthority() on valid input. | 430 // Test ParseAltAuthority() on valid input. |
| 431 TEST(SpdyAltSvcWireFormatTest, ParseAltAuthorityValid) { | 431 TEST(SpdyAltSvcWireFormatTest, ParseAltAuthorityValid) { |
| 432 StringPiece input(":42"); | 432 StringPiece input(":42"); |
| 433 std::string host; | 433 std::string host; |
| 434 uint16 port; | 434 uint16_t port; |
| 435 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParseAltAuthority( | 435 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParseAltAuthority( |
| 436 input.begin(), input.end(), &host, &port)); | 436 input.begin(), input.end(), &host, &port)); |
| 437 EXPECT_TRUE(host.empty()); | 437 EXPECT_TRUE(host.empty()); |
| 438 EXPECT_EQ(42, port); | 438 EXPECT_EQ(42, port); |
| 439 | 439 |
| 440 input = StringPiece("foo:137"); | 440 input = StringPiece("foo:137"); |
| 441 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParseAltAuthority( | 441 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParseAltAuthority( |
| 442 input.begin(), input.end(), &host, &port)); | 442 input.begin(), input.end(), &host, &port)); |
| 443 EXPECT_EQ("foo", host); | 443 EXPECT_EQ("foo", host); |
| 444 EXPECT_EQ(137, port); | 444 EXPECT_EQ(137, port); |
| 445 } | 445 } |
| 446 | 446 |
| 447 // Test ParseAltAuthority() on invalid input: empty string, no port, zero port, | 447 // Test ParseAltAuthority() on invalid input: empty string, no port, zero port, |
| 448 // non-digit characters following port. | 448 // non-digit characters following port. |
| 449 TEST(SpdyAltSvcWireFormatTest, ParseAltAuthorityInvalid) { | 449 TEST(SpdyAltSvcWireFormatTest, ParseAltAuthorityInvalid) { |
| 450 const char* invalid_input_array[] = {"", ":", "foo:", ":bar", ":0", "foo:0", | 450 const char* invalid_input_array[] = {"", ":", "foo:", ":bar", ":0", "foo:0", |
| 451 ":12bar", "foo:23bar", " ", ":12 ", "foo:12 "}; | 451 ":12bar", "foo:23bar", " ", ":12 ", "foo:12 "}; |
| 452 for (const char* invalid_input : invalid_input_array) { | 452 for (const char* invalid_input : invalid_input_array) { |
| 453 StringPiece input(invalid_input); | 453 StringPiece input(invalid_input); |
| 454 std::string host; | 454 std::string host; |
| 455 uint16 port; | 455 uint16_t port; |
| 456 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParseAltAuthority( | 456 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParseAltAuthority( |
| 457 input.begin(), input.end(), &host, &port)) | 457 input.begin(), input.end(), &host, &port)) |
| 458 << input; | 458 << input; |
| 459 } | 459 } |
| 460 } | 460 } |
| 461 | 461 |
| 462 // Test ParseInteger() on valid input. | 462 // Test ParseInteger() on valid input. |
| 463 TEST(SpdyAltSvcWireFormatTest, ParseIntegerValid) { | 463 TEST(SpdyAltSvcWireFormatTest, ParseIntegerValid) { |
| 464 StringPiece input("3"); | 464 StringPiece input("3"); |
| 465 uint16 value; | 465 uint16_t value; |
| 466 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( | 466 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( |
| 467 input.begin(), input.end(), &value)); | 467 input.begin(), input.end(), &value)); |
| 468 EXPECT_EQ(3, value); | 468 EXPECT_EQ(3, value); |
| 469 | 469 |
| 470 input = StringPiece("1337"); | 470 input = StringPiece("1337"); |
| 471 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( | 471 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( |
| 472 input.begin(), input.end(), &value)); | 472 input.begin(), input.end(), &value)); |
| 473 EXPECT_EQ(1337, value); | 473 EXPECT_EQ(1337, value); |
| 474 } | 474 } |
| 475 | 475 |
| 476 // Test ParseIntegerValid() on invalid input: empty, zero, non-numeric, trailing | 476 // Test ParseIntegerValid() on invalid input: empty, zero, non-numeric, trailing |
| 477 // non-numeric characters. | 477 // non-numeric characters. |
| 478 TEST(SpdyAltSvcWireFormatTest, ParseIntegerInvalid) { | 478 TEST(SpdyAltSvcWireFormatTest, ParseIntegerInvalid) { |
| 479 const char* invalid_input_array[] = {"", " ", "a", "0", "00", "1 ", "12b"}; | 479 const char* invalid_input_array[] = {"", " ", "a", "0", "00", "1 ", "12b"}; |
| 480 for (const char* invalid_input : invalid_input_array) { | 480 for (const char* invalid_input : invalid_input_array) { |
| 481 StringPiece input(invalid_input); | 481 StringPiece input(invalid_input); |
| 482 uint16 value; | 482 uint16_t value; |
| 483 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( | 483 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( |
| 484 input.begin(), input.end(), &value)) | 484 input.begin(), input.end(), &value)) |
| 485 << input; | 485 << input; |
| 486 } | 486 } |
| 487 } | 487 } |
| 488 | 488 |
| 489 // Test ParseIntegerValid() around overflow limit. | 489 // Test ParseIntegerValid() around overflow limit. |
| 490 TEST(SpdyAltSvcWireFormatTest, ParseIntegerOverflow) { | 490 TEST(SpdyAltSvcWireFormatTest, ParseIntegerOverflow) { |
| 491 // Largest possible uint16 value. | 491 // Largest possible uint16_t value. |
| 492 StringPiece input("65535"); | 492 StringPiece input("65535"); |
| 493 uint16 value16; | 493 uint16_t value16; |
| 494 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( | 494 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( |
| 495 input.begin(), input.end(), &value16)); | 495 input.begin(), input.end(), &value16)); |
| 496 EXPECT_EQ(65535, value16); | 496 EXPECT_EQ(65535, value16); |
| 497 | 497 |
| 498 // Overflow uint16, ParsePositiveInteger16() should return false. | 498 // Overflow uint16_t, ParsePositiveInteger16() should return false. |
| 499 input = StringPiece("65536"); | 499 input = StringPiece("65536"); |
| 500 ASSERT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( | 500 ASSERT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( |
| 501 input.begin(), input.end(), &value16)); | 501 input.begin(), input.end(), &value16)); |
| 502 | 502 |
| 503 // However, even if overflow is not checked for, 65536 overflows to 0, which | 503 // However, even if overflow is not checked for, 65536 overflows to 0, which |
| 504 // returns false anyway. Check for a larger number which overflows to 1. | 504 // returns false anyway. Check for a larger number which overflows to 1. |
| 505 input = StringPiece("65537"); | 505 input = StringPiece("65537"); |
| 506 ASSERT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( | 506 ASSERT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger16( |
| 507 input.begin(), input.end(), &value16)); | 507 input.begin(), input.end(), &value16)); |
| 508 | 508 |
| 509 // Largest possible uint32 value. | 509 // Largest possible uint32_t value. |
| 510 input = StringPiece("4294967295"); | 510 input = StringPiece("4294967295"); |
| 511 uint32 value32; | 511 uint32_t value32; |
| 512 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger32( | 512 ASSERT_TRUE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger32( |
| 513 input.begin(), input.end(), &value32)); | 513 input.begin(), input.end(), &value32)); |
| 514 EXPECT_EQ(4294967295, value32); | 514 EXPECT_EQ(4294967295, value32); |
| 515 | 515 |
| 516 // Overflow uint32, ParsePositiveInteger32() should return false. | 516 // Overflow uint32_t, ParsePositiveInteger32() should return false. |
| 517 input = StringPiece("4294967296"); | 517 input = StringPiece("4294967296"); |
| 518 ASSERT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger32( | 518 ASSERT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger32( |
| 519 input.begin(), input.end(), &value32)); | 519 input.begin(), input.end(), &value32)); |
| 520 | 520 |
| 521 // However, even if overflow is not checked for, 4294967296 overflows to 0, | 521 // However, even if overflow is not checked for, 4294967296 overflows to 0, |
| 522 // which returns false anyway. Check for a larger number which overflows to | 522 // which returns false anyway. Check for a larger number which overflows to |
| 523 // 1. | 523 // 1. |
| 524 input = StringPiece("4294967297"); | 524 input = StringPiece("4294967297"); |
| 525 ASSERT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger32( | 525 ASSERT_FALSE(test::SpdyAltSvcWireFormatPeer::ParsePositiveInteger32( |
| 526 input.begin(), input.end(), &value32)); | 526 input.begin(), input.end(), &value32)); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 StringPiece input(invalid_input); | 587 StringPiece input(invalid_input); |
| 588 double probability; | 588 double probability; |
| 589 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParseProbability( | 589 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParseProbability( |
| 590 input.begin(), input.end(), &probability)); | 590 input.begin(), input.end(), &probability)); |
| 591 } | 591 } |
| 592 } | 592 } |
| 593 | 593 |
| 594 } // namespace | 594 } // namespace |
| 595 | 595 |
| 596 } // namespace net | 596 } // namespace net |
| OLD | NEW |