| 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 "net/spdy/spdy_framer.h" | 5 #include "net/spdy/spdy_framer.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 1774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1785 const char kDescription[] = "GOAWAY frame"; | 1785 const char kDescription[] = "GOAWAY frame"; |
| 1786 const unsigned char kH2FrameData[] = { | 1786 const unsigned char kH2FrameData[] = { |
| 1787 0x00, 0x00, 0x0a, // Length: 10 | 1787 0x00, 0x00, 0x0a, // Length: 10 |
| 1788 0x07, // Type: GOAWAY | 1788 0x07, // Type: GOAWAY |
| 1789 0x00, // Flags: none | 1789 0x00, // Flags: none |
| 1790 0x00, 0x00, 0x00, 0x00, // Stream: 0 | 1790 0x00, 0x00, 0x00, 0x00, // Stream: 0 |
| 1791 0x00, 0x00, 0x00, 0x00, // Last: 0 | 1791 0x00, 0x00, 0x00, 0x00, // Last: 0 |
| 1792 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR | 1792 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR |
| 1793 0x47, 0x41, // Description | 1793 0x47, 0x41, // Description |
| 1794 }; | 1794 }; |
| 1795 SpdyGoAwayIR goaway_ir(0, GOAWAY_OK, "GA"); | 1795 SpdyGoAwayIR goaway_ir(0, GOAWAY_NO_ERROR, "GA"); |
| 1796 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir)); | 1796 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir)); |
| 1797 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); | 1797 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); |
| 1798 } | 1798 } |
| 1799 | 1799 |
| 1800 { | 1800 { |
| 1801 const char kDescription[] = "GOAWAY frame with max stream ID, status"; | 1801 const char kDescription[] = "GOAWAY frame with max stream ID, status"; |
| 1802 const unsigned char kH2FrameData[] = { | 1802 const unsigned char kH2FrameData[] = { |
| 1803 0x00, 0x00, 0x0a, // Length: 10 | 1803 0x00, 0x00, 0x0a, // Length: 10 |
| 1804 0x07, // Type: GOAWAY | 1804 0x07, // Type: GOAWAY |
| 1805 0x00, // Flags: none | 1805 0x00, // Flags: none |
| (...skipping 1664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3470 SpdyFramer::ErrorCodeToString( | 3470 SpdyFramer::ErrorCodeToString( |
| 3471 SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS)); | 3471 SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS)); |
| 3472 EXPECT_STREQ("UNKNOWN_ERROR", | 3472 EXPECT_STREQ("UNKNOWN_ERROR", |
| 3473 SpdyFramer::ErrorCodeToString(SpdyFramer::LAST_ERROR)); | 3473 SpdyFramer::ErrorCodeToString(SpdyFramer::LAST_ERROR)); |
| 3474 } | 3474 } |
| 3475 | 3475 |
| 3476 TEST_P(SpdyFramerTest, StatusCodeToStringTest) { | 3476 TEST_P(SpdyFramerTest, StatusCodeToStringTest) { |
| 3477 EXPECT_STREQ("NO_ERROR", SpdyFramer::StatusCodeToString(RST_STREAM_NO_ERROR)); | 3477 EXPECT_STREQ("NO_ERROR", SpdyFramer::StatusCodeToString(RST_STREAM_NO_ERROR)); |
| 3478 EXPECT_STREQ("PROTOCOL_ERROR", | 3478 EXPECT_STREQ("PROTOCOL_ERROR", |
| 3479 SpdyFramer::StatusCodeToString(RST_STREAM_PROTOCOL_ERROR)); | 3479 SpdyFramer::StatusCodeToString(RST_STREAM_PROTOCOL_ERROR)); |
| 3480 EXPECT_STREQ("INVALID_STREAM", | |
| 3481 SpdyFramer::StatusCodeToString(RST_STREAM_INVALID_STREAM)); | |
| 3482 EXPECT_STREQ("REFUSED_STREAM", | |
| 3483 SpdyFramer::StatusCodeToString(RST_STREAM_REFUSED_STREAM)); | |
| 3484 EXPECT_STREQ("UNSUPPORTED_VERSION", | |
| 3485 SpdyFramer::StatusCodeToString(RST_STREAM_UNSUPPORTED_VERSION)); | |
| 3486 EXPECT_STREQ("CANCEL", SpdyFramer::StatusCodeToString(RST_STREAM_CANCEL)); | |
| 3487 EXPECT_STREQ("INTERNAL_ERROR", | 3480 EXPECT_STREQ("INTERNAL_ERROR", |
| 3488 SpdyFramer::StatusCodeToString(RST_STREAM_INTERNAL_ERROR)); | 3481 SpdyFramer::StatusCodeToString(RST_STREAM_INTERNAL_ERROR)); |
| 3489 EXPECT_STREQ("FLOW_CONTROL_ERROR", | 3482 EXPECT_STREQ("FLOW_CONTROL_ERROR", |
| 3490 SpdyFramer::StatusCodeToString(RST_STREAM_FLOW_CONTROL_ERROR)); | 3483 SpdyFramer::StatusCodeToString(RST_STREAM_FLOW_CONTROL_ERROR)); |
| 3491 EXPECT_STREQ("UNKNOWN_STATUS", SpdyFramer::StatusCodeToString(-1)); | 3484 EXPECT_STREQ("SETTINGS_TIMEOUT", |
| 3485 SpdyFramer::StatusCodeToString(RST_STREAM_SETTINGS_TIMEOUT)); |
| 3486 EXPECT_STREQ("STREAM_CLOSED", |
| 3487 SpdyFramer::StatusCodeToString(RST_STREAM_STREAM_CLOSED)); |
| 3488 EXPECT_STREQ("FRAME_SIZE_ERROR", |
| 3489 SpdyFramer::StatusCodeToString(RST_STREAM_FRAME_SIZE_ERROR)); |
| 3490 EXPECT_STREQ("REFUSED_STREAM", |
| 3491 SpdyFramer::StatusCodeToString(RST_STREAM_REFUSED_STREAM)); |
| 3492 EXPECT_STREQ("CANCEL", SpdyFramer::StatusCodeToString(RST_STREAM_CANCEL)); |
| 3493 EXPECT_STREQ("COMPRESSION_ERROR", |
| 3494 SpdyFramer::StatusCodeToString(RST_STREAM_COMPRESSION_ERROR)); |
| 3495 EXPECT_STREQ("CONNECT_ERROR", |
| 3496 SpdyFramer::StatusCodeToString(RST_STREAM_CONNECT_ERROR)); |
| 3497 EXPECT_STREQ("ENHANCE_YOUR_CALM", |
| 3498 SpdyFramer::StatusCodeToString(RST_STREAM_ENHANCE_YOUR_CALM)); |
| 3499 EXPECT_STREQ("INADEQUATE_SECURITY", |
| 3500 SpdyFramer::StatusCodeToString(RST_STREAM_INADEQUATE_SECURITY)); |
| 3501 EXPECT_STREQ("HTTP_1_1_REQUIRED", |
| 3502 SpdyFramer::StatusCodeToString(RST_STREAM_HTTP_1_1_REQUIRED)); |
| 3492 } | 3503 } |
| 3493 | 3504 |
| 3494 TEST_P(SpdyFramerTest, FrameTypeToStringTest) { | 3505 TEST_P(SpdyFramerTest, FrameTypeToStringTest) { |
| 3495 EXPECT_STREQ("DATA", SpdyFramer::FrameTypeToString(DATA)); | 3506 EXPECT_STREQ("DATA", SpdyFramer::FrameTypeToString(DATA)); |
| 3496 EXPECT_STREQ("RST_STREAM", SpdyFramer::FrameTypeToString(RST_STREAM)); | 3507 EXPECT_STREQ("RST_STREAM", SpdyFramer::FrameTypeToString(RST_STREAM)); |
| 3497 EXPECT_STREQ("SETTINGS", SpdyFramer::FrameTypeToString(SETTINGS)); | 3508 EXPECT_STREQ("SETTINGS", SpdyFramer::FrameTypeToString(SETTINGS)); |
| 3498 EXPECT_STREQ("PING", SpdyFramer::FrameTypeToString(PING)); | 3509 EXPECT_STREQ("PING", SpdyFramer::FrameTypeToString(PING)); |
| 3499 EXPECT_STREQ("GOAWAY", SpdyFramer::FrameTypeToString(GOAWAY)); | 3510 EXPECT_STREQ("GOAWAY", SpdyFramer::FrameTypeToString(GOAWAY)); |
| 3500 EXPECT_STREQ("HEADERS", SpdyFramer::FrameTypeToString(HEADERS)); | 3511 EXPECT_STREQ("HEADERS", SpdyFramer::FrameTypeToString(HEADERS)); |
| 3501 EXPECT_STREQ("WINDOW_UPDATE", SpdyFramer::FrameTypeToString(WINDOW_UPDATE)); | 3512 EXPECT_STREQ("WINDOW_UPDATE", SpdyFramer::FrameTypeToString(WINDOW_UPDATE)); |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3619 TEST_P(SpdyFramerTest, GoawayFrameFlags) { | 3630 TEST_P(SpdyFramerTest, GoawayFrameFlags) { |
| 3620 uint8_t flags = 0; | 3631 uint8_t flags = 0; |
| 3621 do { | 3632 do { |
| 3622 SCOPED_TRACE(testing::Message() << "Flags " << flags << std::hex | 3633 SCOPED_TRACE(testing::Message() << "Flags " << flags << std::hex |
| 3623 << static_cast<int>(flags)); | 3634 << static_cast<int>(flags)); |
| 3624 | 3635 |
| 3625 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 3636 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 3626 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); | 3637 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); |
| 3627 framer.set_visitor(&visitor); | 3638 framer.set_visitor(&visitor); |
| 3628 | 3639 |
| 3629 SpdyGoAwayIR goaway_ir(97, GOAWAY_OK, "test"); | 3640 SpdyGoAwayIR goaway_ir(97, GOAWAY_NO_ERROR, "test"); |
| 3630 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir)); | 3641 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir)); |
| 3631 SetFrameFlags(&frame, flags); | 3642 SetFrameFlags(&frame, flags); |
| 3632 | 3643 |
| 3633 EXPECT_CALL(visitor, OnGoAway(97, GOAWAY_OK)); | 3644 EXPECT_CALL(visitor, OnGoAway(97, GOAWAY_NO_ERROR)); |
| 3634 | 3645 |
| 3635 framer.ProcessInput(frame.data(), frame.size()); | 3646 framer.ProcessInput(frame.data(), frame.size()); |
| 3636 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 3647 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 3637 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 3648 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 3638 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 3649 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 3639 } while (++flags != 0); | 3650 } while (++flags != 0); |
| 3640 } | 3651 } |
| 3641 | 3652 |
| 3642 TEST_P(SpdyFramerTest, HeadersFrameFlags) { | 3653 TEST_P(SpdyFramerTest, HeadersFrameFlags) { |
| 3643 uint8_t flags = 0; | 3654 uint8_t flags = 0; |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3900 0x00, // Flags: none | 3911 0x00, // Flags: none |
| 3901 0x00, 0x00, 0x00, 0x00, // Stream: 0 | 3912 0x00, 0x00, 0x00, 0x00, // Stream: 0 |
| 3902 0xff, 0xff, 0xff, 0xff, // Last: 0x7fffffff (R-bit set) | 3913 0xff, 0xff, 0xff, 0xff, // Last: 0x7fffffff (R-bit set) |
| 3903 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR | 3914 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR |
| 3904 }; | 3915 }; |
| 3905 | 3916 |
| 3906 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 3917 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 3907 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); | 3918 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); |
| 3908 framer.set_visitor(&visitor); | 3919 framer.set_visitor(&visitor); |
| 3909 | 3920 |
| 3910 EXPECT_CALL(visitor, OnGoAway(0x7fffffff, GOAWAY_OK)); | 3921 EXPECT_CALL(visitor, OnGoAway(0x7fffffff, GOAWAY_NO_ERROR)); |
| 3911 framer.ProcessInput(reinterpret_cast<const char*>(kH2FrameData), | 3922 framer.ProcessInput(reinterpret_cast<const char*>(kH2FrameData), |
| 3912 arraysize(kH2FrameData)); | 3923 arraysize(kH2FrameData)); |
| 3913 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 3924 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
| 3914 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) | 3925 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) |
| 3915 << SpdyFramer::ErrorCodeToString(framer.error_code()); | 3926 << SpdyFramer::ErrorCodeToString(framer.error_code()); |
| 3916 } | 3927 } |
| 3917 | 3928 |
| 3918 TEST_P(SpdyFramerTest, OnBlocked) { | 3929 TEST_P(SpdyFramerTest, OnBlocked) { |
| 3919 const SpdyStreamId kStreamId = 0; | 3930 const SpdyStreamId kStreamId = 0; |
| 3920 | 3931 |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4285 | 4296 |
| 4286 EXPECT_EQ(1, visitor->data_frame_count_); | 4297 EXPECT_EQ(1, visitor->data_frame_count_); |
| 4287 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); | 4298 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); |
| 4288 EXPECT_EQ(0, visitor->headers_frame_count_); | 4299 EXPECT_EQ(0, visitor->headers_frame_count_); |
| 4289 } | 4300 } |
| 4290 } | 4301 } |
| 4291 | 4302 |
| 4292 } // namespace test | 4303 } // namespace test |
| 4293 | 4304 |
| 4294 } // namespace net | 4305 } // namespace net |
| OLD | NEW |