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 |