| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <iostream> | 6 #include <iostream> |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 serialized_headers.size() - 2, | 685 serialized_headers.size() - 2, |
| 686 &new_headers)); | 686 &new_headers)); |
| 687 } | 687 } |
| 688 | 688 |
| 689 TEST_P(SpdyFramerTest, OutOfOrderHeaders) { | 689 TEST_P(SpdyFramerTest, OutOfOrderHeaders) { |
| 690 SpdyFramer framer(spdy_version_); | 690 SpdyFramer framer(spdy_version_); |
| 691 framer.set_enable_compression(false); | 691 framer.set_enable_compression(false); |
| 692 | 692 |
| 693 // Frame builder with plentiful buffer size. | 693 // Frame builder with plentiful buffer size. |
| 694 SpdyFrameBuilder frame(1024); | 694 SpdyFrameBuilder frame(1024); |
| 695 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); | 695 if (spdy_version_ < 4) { |
| 696 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); |
| 697 frame.WriteUInt32(3); // stream_id |
| 698 } else { |
| 699 frame.WriteFramePrefix(framer, SYN_STREAM, CONTROL_FLAG_NONE, 3); |
| 700 } |
| 696 | 701 |
| 697 frame.WriteUInt32(3); // stream_id | |
| 698 frame.WriteUInt32(0); // Associated stream id | 702 frame.WriteUInt32(0); // Associated stream id |
| 699 frame.WriteUInt16(0); // Priority. | 703 frame.WriteUInt16(0); // Priority. |
| 700 | 704 |
| 701 if (IsSpdy2()) { | 705 if (IsSpdy2()) { |
| 702 frame.WriteUInt16(2); // Number of headers. | 706 frame.WriteUInt16(2); // Number of headers. |
| 703 frame.WriteString("gamma"); | 707 frame.WriteString("gamma"); |
| 704 frame.WriteString("gamma"); | 708 frame.WriteString("gamma"); |
| 705 frame.WriteString("alpha"); | 709 frame.WriteString("alpha"); |
| 706 frame.WriteString("alpha"); | 710 frame.WriteString("alpha"); |
| 707 } else { | 711 } else { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 't', 0x00, 0x00, 0x00, | 743 't', 0x00, 0x00, 0x00, |
| 740 0x0C, 'a', 'n', 'o', | 744 0x0C, 'a', 'n', 'o', |
| 741 't', 'h', 'e', 'r', | 745 't', 'h', 'e', 'r', |
| 742 ' ', 'c', 'e', 'r', | 746 ' ', 'c', 'e', 'r', |
| 743 't', 0x00, 0x00, 0x00, | 747 't', 0x00, 0x00, 0x00, |
| 744 0x0A, 'f', 'i', 'n', | 748 0x0A, 'f', 'i', 'n', |
| 745 'a', 'l', ' ', 'c', | 749 'a', 'l', ' ', 'c', |
| 746 'e', 'r', 't', | 750 'e', 'r', 't', |
| 747 }; | 751 }; |
| 748 const unsigned char kV4FrameData[] = { | 752 const unsigned char kV4FrameData[] = { |
| 749 0x00, 0x37, 0x0A, 0x00, | 753 0x00, 0x3b, 0x0A, 0x00, |
| 754 0x00, 0x00, 0x00, 0x00, |
| 750 0x00, 0x03, 0x00, 0x00, | 755 0x00, 0x03, 0x00, 0x00, |
| 751 0x00, 0x05, 'p', 'r', | 756 0x00, 0x05, 'p', 'r', |
| 752 'o', 'o', 'f', 0x00, | 757 'o', 'o', 'f', 0x00, |
| 753 0x00, 0x00, 0x06, 'a', | 758 0x00, 0x00, 0x06, 'a', |
| 754 ' ', 'c', 'e', 'r', | 759 ' ', 'c', 'e', 'r', |
| 755 't', 0x00, 0x00, 0x00, | 760 't', 0x00, 0x00, 0x00, |
| 756 0x0C, 'a', 'n', 'o', | 761 0x0C, 'a', 'n', 'o', |
| 757 't', 'h', 'e', 'r', | 762 't', 'h', 'e', 'r', |
| 758 ' ', 'c', 'e', 'r', | 763 ' ', 'c', 'e', 'r', |
| 759 't', 0x00, 0x00, 0x00, | 764 't', 0x00, 0x00, 0x00, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 792 0x0C, 'a', 'n', 'o', | 797 0x0C, 'a', 'n', 'o', |
| 793 't', 'h', 'e', 'r', | 798 't', 'h', 'e', 'r', |
| 794 ' ', 'c', 'e', 'r', | 799 ' ', 'c', 'e', 'r', |
| 795 't', 0x00, 0x00, 0x00, | 800 't', 0x00, 0x00, 0x00, |
| 796 0x0A, 'f', 'i', 'n', | 801 0x0A, 'f', 'i', 'n', |
| 797 'a', 'l', ' ', 'c', | 802 'a', 'l', ' ', 'c', |
| 798 'e', 'r', 't', | 803 'e', 'r', 't', |
| 799 }; | 804 }; |
| 800 const unsigned char kV4FrameData[] = { | 805 const unsigned char kV4FrameData[] = { |
| 801 0x00, 0x37, 0x0A, 0x00, | 806 0x00, 0x37, 0x0A, 0x00, |
| 807 0x00, 0x00, 0x00, 0x00, |
| 802 0x00, 0x03, 0x00, 0x00, | 808 0x00, 0x03, 0x00, 0x00, |
| 803 0x00, 0x05, 'p', 'r', | 809 0x00, 0x05, 'p', 'r', |
| 804 'o', 'o', 'f', 0x00, | 810 'o', 'o', 'f', 0x00, |
| 805 0x00, 0x00, 0x06, 'a', | 811 0x00, 0x00, 0x06, 'a', |
| 806 ' ', 'c', 'e', 'r', | 812 ' ', 'c', 'e', 'r', |
| 807 't', 0x00, 0x00, 0x00, | 813 't', 0x00, 0x00, 0x00, |
| 808 0x0C, 'a', 'n', 'o', | 814 0x0C, 'a', 'n', 'o', |
| 809 't', 'h', 'e', 'r', | 815 't', 'h', 'e', 'r', |
| 810 ' ', 'c', 'e', 'r', | 816 ' ', 'c', 'e', 'r', |
| 811 't', 0x00, 0x00, 0x00, | 817 't', 0x00, 0x00, 0x00, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 837 EXPECT_EQ("final cert", credential.certs.front()); | 843 EXPECT_EQ("final cert", credential.certs.front()); |
| 838 credential.certs.erase(credential.certs.begin()); | 844 credential.certs.erase(credential.certs.begin()); |
| 839 EXPECT_TRUE(credential.certs.empty()); | 845 EXPECT_TRUE(credential.certs.empty()); |
| 840 } | 846 } |
| 841 } | 847 } |
| 842 | 848 |
| 843 TEST_P(SpdyFramerTest, DuplicateHeader) { | 849 TEST_P(SpdyFramerTest, DuplicateHeader) { |
| 844 SpdyFramer framer(spdy_version_); | 850 SpdyFramer framer(spdy_version_); |
| 845 // Frame builder with plentiful buffer size. | 851 // Frame builder with plentiful buffer size. |
| 846 SpdyFrameBuilder frame(1024); | 852 SpdyFrameBuilder frame(1024); |
| 847 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); | 853 if (spdy_version_ < 4) { |
| 854 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); |
| 855 frame.WriteUInt32(3); // stream_id |
| 856 } else { |
| 857 frame.WriteFramePrefix(framer, SYN_STREAM, CONTROL_FLAG_NONE, 3); |
| 858 } |
| 848 | 859 |
| 849 frame.WriteUInt32(3); // stream_id | |
| 850 frame.WriteUInt32(0); // associated stream id | 860 frame.WriteUInt32(0); // associated stream id |
| 851 frame.WriteUInt16(0); // Priority. | 861 frame.WriteUInt16(0); // Priority. |
| 852 | 862 |
| 853 if (IsSpdy2()) { | 863 if (IsSpdy2()) { |
| 854 frame.WriteUInt16(2); // Number of headers. | 864 frame.WriteUInt16(2); // Number of headers. |
| 855 frame.WriteString("name"); | 865 frame.WriteString("name"); |
| 856 frame.WriteString("value1"); | 866 frame.WriteString("value1"); |
| 857 frame.WriteString("name"); | 867 frame.WriteString("name"); |
| 858 frame.WriteString("value2"); | 868 frame.WriteString("value2"); |
| 859 } else { | 869 } else { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 874 // This should fail because duplicate headers are verboten by the spec. | 884 // This should fail because duplicate headers are verboten by the spec. |
| 875 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(), | 885 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(), |
| 876 serialized_headers.size(), | 886 serialized_headers.size(), |
| 877 &new_headers)); | 887 &new_headers)); |
| 878 } | 888 } |
| 879 | 889 |
| 880 TEST_P(SpdyFramerTest, MultiValueHeader) { | 890 TEST_P(SpdyFramerTest, MultiValueHeader) { |
| 881 SpdyFramer framer(spdy_version_); | 891 SpdyFramer framer(spdy_version_); |
| 882 // Frame builder with plentiful buffer size. | 892 // Frame builder with plentiful buffer size. |
| 883 SpdyFrameBuilder frame(1024); | 893 SpdyFrameBuilder frame(1024); |
| 884 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); | 894 if (spdy_version_ < 4) { |
| 895 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); |
| 896 frame.WriteUInt32(3); // stream_id |
| 897 } else { |
| 898 frame.WriteFramePrefix(framer, SYN_STREAM, CONTROL_FLAG_NONE, 3); |
| 899 } |
| 885 | 900 |
| 886 frame.WriteUInt32(3); // stream_id | |
| 887 frame.WriteUInt32(0); // associated stream id | 901 frame.WriteUInt32(0); // associated stream id |
| 888 frame.WriteUInt16(0); // Priority. | 902 frame.WriteUInt16(0); // Priority. |
| 889 | 903 |
| 890 string value("value1\0value2"); | 904 string value("value1\0value2"); |
| 891 if (IsSpdy2()) { | 905 if (IsSpdy2()) { |
| 892 frame.WriteUInt16(1); // Number of headers. | 906 frame.WriteUInt16(1); // Number of headers. |
| 893 frame.WriteString("name"); | 907 frame.WriteString("name"); |
| 894 frame.WriteString(value); | 908 frame.WriteString(value); |
| 895 } else { | 909 } else { |
| 896 frame.WriteUInt32(1); // Number of headers. | 910 frame.WriteUInt32(1); // Number of headers. |
| (...skipping 1486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2383 0x0a, 0x0b, 0x0c, 0x0d, | 2397 0x0a, 0x0b, 0x0c, 0x0d, |
| 2384 }; | 2398 }; |
| 2385 const unsigned char kV3FrameData[] = { | 2399 const unsigned char kV3FrameData[] = { |
| 2386 0x80, spdy_version_, 0x00, 0x04, | 2400 0x80, spdy_version_, 0x00, 0x04, |
| 2387 0x00, 0x00, 0x00, 0x0c, | 2401 0x00, 0x00, 0x00, 0x0c, |
| 2388 0x00, 0x00, 0x00, 0x01, | 2402 0x00, 0x00, 0x00, 0x01, |
| 2389 0x01, 0x02, 0x03, 0x04, | 2403 0x01, 0x02, 0x03, 0x04, |
| 2390 0x0a, 0x0b, 0x0c, 0x0d, | 2404 0x0a, 0x0b, 0x0c, 0x0d, |
| 2391 }; | 2405 }; |
| 2392 const unsigned char kV4FrameData[] = { | 2406 const unsigned char kV4FrameData[] = { |
| 2393 0x00, 0x10, 0x04, 0x00, | 2407 0x00, 0x14, 0x04, 0x00, |
| 2408 0x00, 0x00, 0x00, 0x00, |
| 2394 0x00, 0x00, 0x00, 0x01, | 2409 0x00, 0x00, 0x00, 0x01, |
| 2395 0x01, 0x02, 0x03, 0x04, | 2410 0x01, 0x02, 0x03, 0x04, |
| 2396 0x0a, 0x0b, 0x0c, 0x0d, | 2411 0x0a, 0x0b, 0x0c, 0x0d, |
| 2397 }; | 2412 }; |
| 2398 | 2413 |
| 2399 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); | 2414 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); |
| 2400 if (IsSpdy2()) { | 2415 if (IsSpdy2()) { |
| 2401 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 2416 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
| 2402 } else if (IsSpdy3()) { | 2417 } else if (IsSpdy3()) { |
| 2403 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 2418 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2426 0x00, 0x00, 0x00, 0x00, // 1st Setting | 2441 0x00, 0x00, 0x00, 0x00, // 1st Setting |
| 2427 0x00, 0x00, 0x00, 0x01, | 2442 0x00, 0x00, 0x00, 0x01, |
| 2428 0x01, 0x00, 0x00, 0x01, // 2nd Setting | 2443 0x01, 0x00, 0x00, 0x01, // 2nd Setting |
| 2429 0x00, 0x00, 0x00, 0x02, | 2444 0x00, 0x00, 0x00, 0x02, |
| 2430 0x02, 0x00, 0x00, 0x02, // 3rd Setting | 2445 0x02, 0x00, 0x00, 0x02, // 3rd Setting |
| 2431 0x00, 0x00, 0x00, 0x03, | 2446 0x00, 0x00, 0x00, 0x03, |
| 2432 0x03, 0x00, 0x00, 0x03, // 4th Setting | 2447 0x03, 0x00, 0x00, 0x03, // 4th Setting |
| 2433 0xff, 0x00, 0x00, 0x04, | 2448 0xff, 0x00, 0x00, 0x04, |
| 2434 }; | 2449 }; |
| 2435 const unsigned char kV4FrameData[] = { | 2450 const unsigned char kV4FrameData[] = { |
| 2436 0x00, 0x28, 0x04, 0x00, | 2451 0x00, 0x2c, 0x04, 0x00, |
| 2452 0x00, 0x00, 0x00, 0x00, |
| 2437 0x00, 0x00, 0x00, 0x04, | 2453 0x00, 0x00, 0x00, 0x04, |
| 2438 0x00, 0x00, 0x00, 0x00, // 1st Setting | 2454 0x00, 0x00, 0x00, 0x00, // 1st Setting |
| 2439 0x00, 0x00, 0x00, 0x01, | 2455 0x00, 0x00, 0x00, 0x01, |
| 2440 0x01, 0x00, 0x00, 0x01, // 2nd Setting | 2456 0x01, 0x00, 0x00, 0x01, // 2nd Setting |
| 2441 0x00, 0x00, 0x00, 0x02, | 2457 0x00, 0x00, 0x00, 0x02, |
| 2442 0x02, 0x00, 0x00, 0x02, // 3rd Setting | 2458 0x02, 0x00, 0x00, 0x02, // 3rd Setting |
| 2443 0x00, 0x00, 0x00, 0x03, | 2459 0x00, 0x00, 0x00, 0x03, |
| 2444 0x03, 0x00, 0x00, 0x03, // 4th Setting | 2460 0x03, 0x00, 0x00, 0x03, // 4th Setting |
| 2445 0xff, 0x00, 0x00, 0x04, | 2461 0xff, 0x00, 0x00, 0x04, |
| 2446 }; | 2462 }; |
| 2447 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); | 2463 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); |
| 2448 if (IsSpdy4()) { | 2464 if (IsSpdy4()) { |
| 2449 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); | 2465 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); |
| 2450 } else { | 2466 } else { |
| 2451 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 2467 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
| 2452 } | 2468 } |
| 2453 } | 2469 } |
| 2454 | 2470 |
| 2455 { | 2471 { |
| 2456 const char kDescription[] = "Empty SETTINGS frame"; | 2472 const char kDescription[] = "Empty SETTINGS frame"; |
| 2457 | 2473 |
| 2458 SettingsMap settings; | 2474 SettingsMap settings; |
| 2459 | 2475 |
| 2460 const unsigned char kV3FrameData[] = { // Also applies for V2. | 2476 const unsigned char kV3FrameData[] = { // Also applies for V2. |
| 2461 0x80, spdy_version_, 0x00, 0x04, | 2477 0x80, spdy_version_, 0x00, 0x04, |
| 2462 0x00, 0x00, 0x00, 0x04, | 2478 0x00, 0x00, 0x00, 0x04, |
| 2463 0x00, 0x00, 0x00, 0x00, | 2479 0x00, 0x00, 0x00, 0x00, |
| 2464 }; | 2480 }; |
| 2465 const unsigned char kV4FrameData[] = { | 2481 const unsigned char kV4FrameData[] = { |
| 2466 0x00, 0x08, 0x04, 0x00, | 2482 0x00, 0x0c, 0x04, 0x00, |
| 2483 0x00, 0x00, 0x00, 0x00, |
| 2467 0x00, 0x00, 0x00, 0x00, | 2484 0x00, 0x00, 0x00, 0x00, |
| 2468 }; | 2485 }; |
| 2469 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); | 2486 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); |
| 2470 if (IsSpdy4()) { | 2487 if (IsSpdy4()) { |
| 2471 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); | 2488 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); |
| 2472 } else { | 2489 } else { |
| 2473 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 2490 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
| 2474 } | 2491 } |
| 2475 } | 2492 } |
| 2476 } | 2493 } |
| 2477 | 2494 |
| 2478 TEST_P(SpdyFramerTest, CreatePingFrame) { | 2495 TEST_P(SpdyFramerTest, CreatePingFrame) { |
| 2479 SpdyFramer framer(spdy_version_); | 2496 SpdyFramer framer(spdy_version_); |
| 2480 | 2497 |
| 2481 { | 2498 { |
| 2482 const char kDescription[] = "PING frame"; | 2499 const char kDescription[] = "PING frame"; |
| 2483 const unsigned char kV3FrameData[] = { // Also applies for V2. | 2500 const unsigned char kV3FrameData[] = { // Also applies for V2. |
| 2484 0x80, spdy_version_, 0x00, 0x06, | 2501 0x80, spdy_version_, 0x00, 0x06, |
| 2485 0x00, 0x00, 0x00, 0x04, | 2502 0x00, 0x00, 0x00, 0x04, |
| 2486 0x12, 0x34, 0x56, 0x78, | 2503 0x12, 0x34, 0x56, 0x78, |
| 2487 }; | 2504 }; |
| 2488 const unsigned char kV4FrameData[] = { | 2505 const unsigned char kV4FrameData[] = { |
| 2489 0x00, 0x08, 0x06, 0x00, | 2506 0x00, 0x0c, 0x06, 0x00, |
| 2507 0x00, 0x00, 0x00, 0x00, |
| 2490 0x12, 0x34, 0x56, 0x78, | 2508 0x12, 0x34, 0x56, 0x78, |
| 2491 }; | 2509 }; |
| 2492 scoped_ptr<SpdyFrame> frame(framer.CreatePingFrame(0x12345678u)); | 2510 scoped_ptr<SpdyFrame> frame(framer.CreatePingFrame(0x12345678u)); |
| 2493 if (IsSpdy4()) { | 2511 if (IsSpdy4()) { |
| 2494 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); | 2512 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); |
| 2495 } else { | 2513 } else { |
| 2496 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 2514 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
| 2497 } | 2515 } |
| 2498 } | 2516 } |
| 2499 } | 2517 } |
| 2500 | 2518 |
| 2501 TEST_P(SpdyFramerTest, CreateGoAway) { | 2519 TEST_P(SpdyFramerTest, CreateGoAway) { |
| 2502 SpdyFramer framer(spdy_version_); | 2520 SpdyFramer framer(spdy_version_); |
| 2503 | 2521 |
| 2504 { | 2522 { |
| 2505 const char kDescription[] = "GOAWAY frame"; | 2523 const char kDescription[] = "GOAWAY frame"; |
| 2506 const unsigned char kV2FrameData[] = { | 2524 const unsigned char kV2FrameData[] = { |
| 2507 0x80, spdy_version_, 0x00, 0x07, | 2525 0x80, spdy_version_, 0x00, 0x07, |
| 2508 0x00, 0x00, 0x00, 0x04, | 2526 0x00, 0x00, 0x00, 0x04, |
| 2509 0x00, 0x00, 0x00, 0x00, | 2527 0x00, 0x00, 0x00, 0x00, |
| 2510 }; | 2528 }; |
| 2511 const unsigned char kV3FrameData[] = { | 2529 const unsigned char kV3FrameData[] = { |
| 2512 0x80, spdy_version_, 0x00, 0x07, | 2530 0x80, spdy_version_, 0x00, 0x07, |
| 2513 0x00, 0x00, 0x00, 0x08, | 2531 0x00, 0x00, 0x00, 0x08, |
| 2514 0x00, 0x00, 0x00, 0x00, | 2532 0x00, 0x00, 0x00, 0x00, |
| 2515 0x00, 0x00, 0x00, 0x00, | 2533 0x00, 0x00, 0x00, 0x00, |
| 2516 }; | 2534 }; |
| 2517 const unsigned char kV4FrameData[] = { | 2535 const unsigned char kV4FrameData[] = { |
| 2518 0x00, 0x0c, 0x07, 0x00, | 2536 0x00, 0x10, 0x07, 0x00, |
| 2537 0x00, 0x00, 0x00, 0x00, |
| 2519 0x00, 0x00, 0x00, 0x00, | 2538 0x00, 0x00, 0x00, 0x00, |
| 2520 0x00, 0x00, 0x00, 0x00, | 2539 0x00, 0x00, 0x00, 0x00, |
| 2521 }; | 2540 }; |
| 2522 scoped_ptr<SpdyFrame> frame(framer.CreateGoAway(0, GOAWAY_OK)); | 2541 scoped_ptr<SpdyFrame> frame(framer.CreateGoAway(0, GOAWAY_OK)); |
| 2523 if (IsSpdy2()) { | 2542 if (IsSpdy2()) { |
| 2524 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 2543 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
| 2525 } else if (IsSpdy3()) { | 2544 } else if (IsSpdy3()) { |
| 2526 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 2545 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
| 2527 } else { | 2546 } else { |
| 2528 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); | 2547 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); |
| 2529 } | 2548 } |
| 2530 } | 2549 } |
| 2531 | 2550 |
| 2532 { | 2551 { |
| 2533 const char kDescription[] = "GOAWAY frame with max stream ID, status"; | 2552 const char kDescription[] = "GOAWAY frame with max stream ID, status"; |
| 2534 const unsigned char kV2FrameData[] = { | 2553 const unsigned char kV2FrameData[] = { |
| 2535 0x80, spdy_version_, 0x00, 0x07, | 2554 0x80, spdy_version_, 0x00, 0x07, |
| 2536 0x00, 0x00, 0x00, 0x04, | 2555 0x00, 0x00, 0x00, 0x04, |
| 2537 0x7f, 0xff, 0xff, 0xff, | 2556 0x7f, 0xff, 0xff, 0xff, |
| 2538 }; | 2557 }; |
| 2539 const unsigned char kV3FrameData[] = { | 2558 const unsigned char kV3FrameData[] = { |
| 2540 0x80, spdy_version_, 0x00, 0x07, | 2559 0x80, spdy_version_, 0x00, 0x07, |
| 2541 0x00, 0x00, 0x00, 0x08, | 2560 0x00, 0x00, 0x00, 0x08, |
| 2542 0x7f, 0xff, 0xff, 0xff, | 2561 0x7f, 0xff, 0xff, 0xff, |
| 2543 0x00, 0x00, 0x00, 0x02, | 2562 0x00, 0x00, 0x00, 0x02, |
| 2544 }; | 2563 }; |
| 2545 const unsigned char kV4FrameData[] = { | 2564 const unsigned char kV4FrameData[] = { |
| 2546 0x00, 0x0c, 0x07, 0x00, | 2565 0x00, 0x10, 0x07, 0x00, |
| 2566 0x00, 0x00, 0x00, 0x00, |
| 2547 0x7f, 0xff, 0xff, 0xff, | 2567 0x7f, 0xff, 0xff, 0xff, |
| 2548 0x00, 0x00, 0x00, 0x02, | 2568 0x00, 0x00, 0x00, 0x02, |
| 2549 }; | 2569 }; |
| 2550 scoped_ptr<SpdyFrame> frame(framer.CreateGoAway(0x7FFFFFFF, | 2570 scoped_ptr<SpdyFrame> frame(framer.CreateGoAway(0x7FFFFFFF, |
| 2551 GOAWAY_INTERNAL_ERROR)); | 2571 GOAWAY_INTERNAL_ERROR)); |
| 2552 if (IsSpdy2()) { | 2572 if (IsSpdy2()) { |
| 2553 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 2573 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
| 2554 } else if (IsSpdy3()) { | 2574 } else if (IsSpdy3()) { |
| 2555 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 2575 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
| 2556 } else { | 2576 } else { |
| (...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3263 0x00, 0x00, 0x00, 0x1C, | 3283 0x00, 0x00, 0x00, 0x1C, |
| 3264 0x00, 0x00, 0x00, 0x03, | 3284 0x00, 0x00, 0x00, 0x03, |
| 3265 0x00, 0x00, 0x00, 0x01, // 1st Setting | 3285 0x00, 0x00, 0x00, 0x01, // 1st Setting |
| 3266 0x00, 0x00, 0x00, 0x02, | 3286 0x00, 0x00, 0x00, 0x02, |
| 3267 0x00, 0x00, 0x00, 0x01, // 2nd (duplicate) Setting | 3287 0x00, 0x00, 0x00, 0x01, // 2nd (duplicate) Setting |
| 3268 0x00, 0x00, 0x00, 0x03, | 3288 0x00, 0x00, 0x00, 0x03, |
| 3269 0x00, 0x00, 0x00, 0x03, // 3rd (unprocessed) Setting | 3289 0x00, 0x00, 0x00, 0x03, // 3rd (unprocessed) Setting |
| 3270 0x00, 0x00, 0x00, 0x03, | 3290 0x00, 0x00, 0x00, 0x03, |
| 3271 }; | 3291 }; |
| 3272 const unsigned char kV4FrameData[] = { | 3292 const unsigned char kV4FrameData[] = { |
| 3273 0x00, 0x20, 0x04, 0x00, | 3293 0x00, 0x24, 0x04, 0x00, |
| 3294 0x00, 0x00, 0x00, 0x00, |
| 3274 0x00, 0x00, 0x00, 0x03, | 3295 0x00, 0x00, 0x00, 0x03, |
| 3275 0x00, 0x00, 0x00, 0x01, // 1st Setting | 3296 0x00, 0x00, 0x00, 0x01, // 1st Setting |
| 3276 0x00, 0x00, 0x00, 0x02, | 3297 0x00, 0x00, 0x00, 0x02, |
| 3277 0x00, 0x00, 0x00, 0x01, // 2nd (duplicate) Setting | 3298 0x00, 0x00, 0x00, 0x01, // 2nd (duplicate) Setting |
| 3278 0x00, 0x00, 0x00, 0x03, | 3299 0x00, 0x00, 0x00, 0x03, |
| 3279 0x00, 0x00, 0x00, 0x03, // 3rd (unprocessed) Setting | 3300 0x00, 0x00, 0x00, 0x03, // 3rd (unprocessed) Setting |
| 3280 0x00, 0x00, 0x00, 0x03, | 3301 0x00, 0x00, 0x00, 0x03, |
| 3281 }; | 3302 }; |
| 3282 | 3303 |
| 3283 TestSpdyVisitor visitor(spdy_version_); | 3304 TestSpdyVisitor visitor(spdy_version_); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3313 0x00, 0x00, 0x00, 0x1C, | 3334 0x00, 0x00, 0x00, 0x1C, |
| 3314 0x00, 0x00, 0x00, 0x03, | 3335 0x00, 0x00, 0x00, 0x03, |
| 3315 0x00, 0x00, 0x00, 0x02, // 1st Setting | 3336 0x00, 0x00, 0x00, 0x02, // 1st Setting |
| 3316 0x00, 0x00, 0x00, 0x02, | 3337 0x00, 0x00, 0x00, 0x02, |
| 3317 0x00, 0x00, 0x00, 0x01, // 2nd (out of order) Setting | 3338 0x00, 0x00, 0x00, 0x01, // 2nd (out of order) Setting |
| 3318 0x00, 0x00, 0x00, 0x03, | 3339 0x00, 0x00, 0x00, 0x03, |
| 3319 0x00, 0x00, 0x01, 0x03, // 3rd (unprocessed) Setting | 3340 0x00, 0x00, 0x01, 0x03, // 3rd (unprocessed) Setting |
| 3320 0x00, 0x00, 0x00, 0x03, | 3341 0x00, 0x00, 0x00, 0x03, |
| 3321 }; | 3342 }; |
| 3322 const unsigned char kV4FrameData[] = { | 3343 const unsigned char kV4FrameData[] = { |
| 3323 0x00, 0x20, 0x04, 0x00, | 3344 0x00, 0x24, 0x04, 0x00, |
| 3345 0x00, 0x00, 0x00, 0x00, |
| 3324 0x00, 0x00, 0x00, 0x03, | 3346 0x00, 0x00, 0x00, 0x03, |
| 3325 0x00, 0x00, 0x00, 0x02, // 1st Setting | 3347 0x00, 0x00, 0x00, 0x02, // 1st Setting |
| 3326 0x00, 0x00, 0x00, 0x02, | 3348 0x00, 0x00, 0x00, 0x02, |
| 3327 0x00, 0x00, 0x00, 0x01, // 2nd (out of order) Setting | 3349 0x00, 0x00, 0x00, 0x01, // 2nd (out of order) Setting |
| 3328 0x00, 0x00, 0x00, 0x03, | 3350 0x00, 0x00, 0x00, 0x03, |
| 3329 0x00, 0x00, 0x01, 0x03, // 3rd (unprocessed) Setting | 3351 0x00, 0x00, 0x01, 0x03, // 3rd (unprocessed) Setting |
| 3330 0x00, 0x00, 0x00, 0x03, | 3352 0x00, 0x00, 0x00, 0x03, |
| 3331 }; | 3353 }; |
| 3332 | 3354 |
| 3333 TestSpdyVisitor visitor(spdy_version_); | 3355 TestSpdyVisitor visitor(spdy_version_); |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3500 TestSpdyVisitor visitor(spdy_version_); | 3522 TestSpdyVisitor visitor(spdy_version_); |
| 3501 visitor.use_compression_ = false; | 3523 visitor.use_compression_ = false; |
| 3502 visitor.SimulateInFramer(kFrameData, arraysize(kFrameData)); | 3524 visitor.SimulateInFramer(kFrameData, arraysize(kFrameData)); |
| 3503 EXPECT_EQ(1, visitor.error_count_); | 3525 EXPECT_EQ(1, visitor.error_count_); |
| 3504 } | 3526 } |
| 3505 | 3527 |
| 3506 TEST_P(SpdyFramerTest, SizesTest) { | 3528 TEST_P(SpdyFramerTest, SizesTest) { |
| 3507 SpdyFramer framer(spdy_version_); | 3529 SpdyFramer framer(spdy_version_); |
| 3508 EXPECT_EQ(8u, framer.GetDataFrameMinimumSize()); | 3530 EXPECT_EQ(8u, framer.GetDataFrameMinimumSize()); |
| 3509 if (IsSpdy4()) { | 3531 if (IsSpdy4()) { |
| 3510 EXPECT_EQ(4u, framer.GetControlFrameHeaderSize()); | |
| 3511 EXPECT_EQ(14u, framer.GetSynStreamMinimumSize()); | |
| 3512 EXPECT_EQ(8u, framer.GetSynReplyMinimumSize()); | 3532 EXPECT_EQ(8u, framer.GetSynReplyMinimumSize()); |
| 3513 EXPECT_EQ(12u, framer.GetRstStreamSize()); | 3533 EXPECT_EQ(12u, framer.GetRstStreamSize()); |
| 3514 EXPECT_EQ(8u, framer.GetSettingsMinimumSize()); | 3534 EXPECT_EQ(12u, framer.GetSettingsMinimumSize()); |
| 3515 EXPECT_EQ(8u, framer.GetPingSize()); | 3535 EXPECT_EQ(12u, framer.GetPingSize()); |
| 3516 EXPECT_EQ(12u, framer.GetGoAwaySize()); | 3536 EXPECT_EQ(16u, framer.GetGoAwaySize()); |
| 3517 EXPECT_EQ(8u, framer.GetHeadersMinimumSize()); | 3537 EXPECT_EQ(8u, framer.GetHeadersMinimumSize()); |
| 3518 EXPECT_EQ(12u, framer.GetWindowUpdateSize()); | 3538 EXPECT_EQ(12u, framer.GetWindowUpdateSize()); |
| 3519 EXPECT_EQ(6u, framer.GetCredentialMinimumSize()); | 3539 EXPECT_EQ(10u, framer.GetCredentialMinimumSize()); |
| 3520 EXPECT_EQ(4u, framer.GetFrameMinimumSize()); | 3540 EXPECT_EQ(8u, framer.GetFrameMinimumSize()); |
| 3521 EXPECT_EQ(65535u, framer.GetFrameMaximumSize()); | 3541 EXPECT_EQ(65535u, framer.GetFrameMaximumSize()); |
| 3522 EXPECT_EQ(65527u, framer.GetDataFrameMaximumPayload()); | 3542 EXPECT_EQ(65527u, framer.GetDataFrameMaximumPayload()); |
| 3523 } else { | 3543 } else { |
| 3524 EXPECT_EQ(8u, framer.GetControlFrameHeaderSize()); | 3544 EXPECT_EQ(8u, framer.GetControlFrameHeaderSize()); |
| 3525 EXPECT_EQ(18u, framer.GetSynStreamMinimumSize()); | 3545 EXPECT_EQ(18u, framer.GetSynStreamMinimumSize()); |
| 3526 EXPECT_EQ(IsSpdy2() ? 14u : 12u, framer.GetSynReplyMinimumSize()); | 3546 EXPECT_EQ(IsSpdy2() ? 14u : 12u, framer.GetSynReplyMinimumSize()); |
| 3527 EXPECT_EQ(16u, framer.GetRstStreamSize()); | 3547 EXPECT_EQ(16u, framer.GetRstStreamSize()); |
| 3528 EXPECT_EQ(12u, framer.GetSettingsMinimumSize()); | 3548 EXPECT_EQ(12u, framer.GetSettingsMinimumSize()); |
| 3529 EXPECT_EQ(12u, framer.GetPingSize()); | 3549 EXPECT_EQ(12u, framer.GetPingSize()); |
| 3530 EXPECT_EQ(IsSpdy2() ? 12u : 16u, framer.GetGoAwaySize()); | 3550 EXPECT_EQ(IsSpdy2() ? 12u : 16u, framer.GetGoAwaySize()); |
| (...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4117 0x00, 0x00, 0x00, 0x04, | 4137 0x00, 0x00, 0x00, 0x04, |
| 4118 0xff, 0xff, 0xff, 0xff, | 4138 0xff, 0xff, 0xff, 0xff, |
| 4119 }; | 4139 }; |
| 4120 const unsigned char kV3FrameData[] = { | 4140 const unsigned char kV3FrameData[] = { |
| 4121 0x80, spdy_version_, 0x00, 0x07, | 4141 0x80, spdy_version_, 0x00, 0x07, |
| 4122 0x00, 0x00, 0x00, 0x08, | 4142 0x00, 0x00, 0x00, 0x08, |
| 4123 0xff, 0xff, 0xff, 0xff, | 4143 0xff, 0xff, 0xff, 0xff, |
| 4124 0x00, 0x00, 0x00, 0x00, | 4144 0x00, 0x00, 0x00, 0x00, |
| 4125 }; | 4145 }; |
| 4126 const unsigned char kV4FrameData[] = { | 4146 const unsigned char kV4FrameData[] = { |
| 4127 0x00, 0x0c, 0x07, 0x00, | 4147 0x00, 0x10, 0x07, 0x00, |
| 4148 0x00, 0x00, 0x00, 0x00, |
| 4128 0xff, 0xff, 0xff, 0xff, | 4149 0xff, 0xff, 0xff, 0xff, |
| 4129 0x00, 0x00, 0x00, 0x00, | 4150 0x00, 0x00, 0x00, 0x00, |
| 4130 }; | 4151 }; |
| 4131 | 4152 |
| 4132 testing::StrictMock<test::MockVisitor> visitor; | 4153 testing::StrictMock<test::MockVisitor> visitor; |
| 4133 SpdyFramer framer(spdy_version_); | 4154 SpdyFramer framer(spdy_version_); |
| 4134 framer.set_visitor(&visitor); | 4155 framer.set_visitor(&visitor); |
| 4135 | 4156 |
| 4136 EXPECT_CALL(visitor, OnGoAway(0x7fffffff, GOAWAY_OK)); | 4157 EXPECT_CALL(visitor, OnGoAway(0x7fffffff, GOAWAY_OK)); |
| 4137 if (IsSpdy2()) { | 4158 if (IsSpdy2()) { |
| 4138 framer.ProcessInput(reinterpret_cast<const char*>(kV2FrameData), | 4159 framer.ProcessInput(reinterpret_cast<const char*>(kV2FrameData), |
| 4139 arraysize(kV2FrameData)); | 4160 arraysize(kV2FrameData)); |
| 4140 } else if (IsSpdy3()) { | 4161 } else if (IsSpdy3()) { |
| 4141 framer.ProcessInput(reinterpret_cast<const char*>(kV3FrameData), | 4162 framer.ProcessInput(reinterpret_cast<const char*>(kV3FrameData), |
| 4142 arraysize(kV3FrameData)); | 4163 arraysize(kV3FrameData)); |
| 4143 } else { | 4164 } else { |
| 4144 framer.ProcessInput(reinterpret_cast<const char*>(kV4FrameData), | 4165 framer.ProcessInput(reinterpret_cast<const char*>(kV4FrameData), |
| 4145 arraysize(kV4FrameData)); | 4166 arraysize(kV4FrameData)); |
| 4146 } | 4167 } |
| 4147 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); | 4168 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); |
| 4148 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); | 4169 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()); |
| 4149 } | 4170 } |
| 4150 | 4171 |
| 4151 } // namespace net | 4172 } // namespace net |
| OLD | NEW |