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

Side by Side Diff: net/spdy/spdy_framer_test.cc

Issue 2675593002: Spdy{RstStream,GoAway}Status -> SpdyErrorCode. (Closed)
Patch Set: Merged master, which includes 145087791. Created 3 years, 10 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
« no previous file with comments | « net/spdy/spdy_framer_decoder_adapter.cc ('k') | net/spdy/spdy_http_stream.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 LOG(FATAL); 142 LOG(FATAL);
143 } 143 }
144 144
145 void OnStreamEnd(SpdyStreamId stream_id) override { LOG(FATAL); } 145 void OnStreamEnd(SpdyStreamId stream_id) override { LOG(FATAL); }
146 146
147 void OnStreamPadding(SpdyStreamId stream_id, size_t len) override { 147 void OnStreamPadding(SpdyStreamId stream_id, size_t len) override {
148 LOG(FATAL); 148 LOG(FATAL);
149 } 149 }
150 150
151 void OnRstStream(SpdyStreamId stream_id, 151 void OnRstStream(SpdyStreamId stream_id,
152 SpdyRstStreamStatus status) override { 152 SpdyErrorCode error_code) override {
153 LOG(FATAL); 153 LOG(FATAL);
154 } 154 }
155 void OnSetting(SpdySettingsIds id, uint32_t value) override { LOG(FATAL); } 155 void OnSetting(SpdySettingsIds id, uint32_t value) override { LOG(FATAL); }
156 void OnPing(SpdyPingId unique_id, bool is_ack) override { LOG(FATAL); } 156 void OnPing(SpdyPingId unique_id, bool is_ack) override { LOG(FATAL); }
157 void OnSettingsEnd() override { LOG(FATAL); } 157 void OnSettingsEnd() override { LOG(FATAL); }
158 void OnGoAway(SpdyStreamId last_accepted_stream_id, 158 void OnGoAway(SpdyStreamId last_accepted_stream_id,
159 SpdyGoAwayStatus status) override { 159 SpdyErrorCode error_code) override {
160 LOG(FATAL); 160 LOG(FATAL);
161 } 161 }
162 162
163 void OnWindowUpdate(SpdyStreamId stream_id, 163 void OnWindowUpdate(SpdyStreamId stream_id,
164 int delta_window_size) override { 164 int delta_window_size) override {
165 LOG(FATAL); 165 LOG(FATAL);
166 } 166 }
167 167
168 void OnPriority(SpdyStreamId stream_id, 168 void OnPriority(SpdyStreamId stream_id,
169 SpdyStreamId parent_stream_id, 169 SpdyStreamId parent_stream_id,
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 351
352 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override { 352 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override {
353 CHECK(headers_handler_ != nullptr); 353 CHECK(headers_handler_ != nullptr);
354 headers_ = headers_handler_->decoded_block().Clone(); 354 headers_ = headers_handler_->decoded_block().Clone();
355 header_bytes_received_ = headers_handler_->header_bytes_parsed(); 355 header_bytes_received_ = headers_handler_->header_bytes_parsed();
356 if (end_headers) { 356 if (end_headers) {
357 headers_handler_.reset(); 357 headers_handler_.reset();
358 } 358 }
359 } 359 }
360 360
361 void OnRstStream(SpdyStreamId stream_id, 361 void OnRstStream(SpdyStreamId stream_id, SpdyErrorCode error_code) override {
362 SpdyRstStreamStatus status) override { 362 VLOG(1) << "OnRstStream(" << stream_id << ", " << error_code << ")";
363 VLOG(1) << "OnRstStream(" << stream_id << ", " << status << ")";
364 ++fin_frame_count_; 363 ++fin_frame_count_;
365 } 364 }
366 365
367 void OnSetting(SpdySettingsIds id, uint32_t value) override { 366 void OnSetting(SpdySettingsIds id, uint32_t value) override {
368 VLOG(1) << "OnSetting(" << id << ", " << std::hex << ", " << value << ")"; 367 VLOG(1) << "OnSetting(" << id << ", " << std::hex << ", " << value << ")";
369 ++setting_count_; 368 ++setting_count_;
370 } 369 }
371 370
372 void OnSettingsAck() override { 371 void OnSettingsAck() override {
373 VLOG(1) << "OnSettingsAck"; 372 VLOG(1) << "OnSettingsAck";
374 ++settings_ack_received_; 373 ++settings_ack_received_;
375 } 374 }
376 375
377 void OnSettingsEnd() override { 376 void OnSettingsEnd() override {
378 VLOG(1) << "OnSettingsEnd"; 377 VLOG(1) << "OnSettingsEnd";
379 ++settings_ack_sent_; 378 ++settings_ack_sent_;
380 } 379 }
381 380
382 void OnPing(SpdyPingId unique_id, bool is_ack) override { 381 void OnPing(SpdyPingId unique_id, bool is_ack) override {
383 LOG(DFATAL) << "OnPing(" << unique_id << ", " << (is_ack ? 1 : 0) << ")"; 382 LOG(DFATAL) << "OnPing(" << unique_id << ", " << (is_ack ? 1 : 0) << ")";
384 } 383 }
385 384
386 void OnGoAway(SpdyStreamId last_accepted_stream_id, 385 void OnGoAway(SpdyStreamId last_accepted_stream_id,
387 SpdyGoAwayStatus status) override { 386 SpdyErrorCode error_code) override {
388 VLOG(1) << "OnGoAway(" << last_accepted_stream_id << ", " << status << ")"; 387 VLOG(1) << "OnGoAway(" << last_accepted_stream_id << ", " << error_code
388 << ")";
389 ++goaway_count_; 389 ++goaway_count_;
390 } 390 }
391 391
392 void OnHeaders(SpdyStreamId stream_id, 392 void OnHeaders(SpdyStreamId stream_id,
393 bool has_priority, 393 bool has_priority,
394 int weight, 394 int weight,
395 SpdyStreamId parent_stream_id, 395 SpdyStreamId parent_stream_id,
396 bool exclusive, 396 bool exclusive,
397 bool fin, 397 bool fin,
398 bool end) override { 398 bool end) override {
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
1000 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 1000 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
1001 } 1001 }
1002 1002
1003 // Test that if we receive a RST_STREAM with stream ID zero, we signal an error 1003 // Test that if we receive a RST_STREAM with stream ID zero, we signal an error
1004 // (but don't crash). 1004 // (but don't crash).
1005 TEST_P(SpdyFramerTest, RstStreamWithStreamIdZero) { 1005 TEST_P(SpdyFramerTest, RstStreamWithStreamIdZero) {
1006 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 1006 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
1007 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 1007 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
1008 framer.set_visitor(&visitor); 1008 framer.set_visitor(&visitor);
1009 1009
1010 SpdyRstStreamIR rst_stream_ir(0, RST_STREAM_PROTOCOL_ERROR); 1010 SpdyRstStreamIR rst_stream_ir(0, ERROR_CODE_PROTOCOL_ERROR);
1011 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream_ir)); 1011 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream_ir));
1012 1012
1013 // We shouldn't have to read the whole frame before we signal an error. 1013 // We shouldn't have to read the whole frame before we signal an error.
1014 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 1014 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
1015 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size())); 1015 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size()));
1016 EXPECT_TRUE(framer.HasError()); 1016 EXPECT_TRUE(framer.HasError());
1017 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error()) 1017 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error())
1018 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 1018 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
1019 } 1019 }
1020 1020
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
1625 1625
1626 { 1626 {
1627 const char kDescription[] = "RST_STREAM frame"; 1627 const char kDescription[] = "RST_STREAM frame";
1628 const unsigned char kH2FrameData[] = { 1628 const unsigned char kH2FrameData[] = {
1629 0x00, 0x00, 0x04, // Length: 4 1629 0x00, 0x00, 0x04, // Length: 4
1630 0x03, // Type: RST_STREAM 1630 0x03, // Type: RST_STREAM
1631 0x00, // Flags: none 1631 0x00, // Flags: none
1632 0x00, 0x00, 0x00, 0x01, // Stream: 1 1632 0x00, 0x00, 0x00, 0x01, // Stream: 1
1633 0x00, 0x00, 0x00, 0x01, // Error: PROTOCOL_ERROR 1633 0x00, 0x00, 0x00, 0x01, // Error: PROTOCOL_ERROR
1634 }; 1634 };
1635 SpdyRstStreamIR rst_stream(1, RST_STREAM_PROTOCOL_ERROR); 1635 SpdyRstStreamIR rst_stream(1, ERROR_CODE_PROTOCOL_ERROR);
1636 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream)); 1636 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
1637 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1637 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1638 } 1638 }
1639 1639
1640 { 1640 {
1641 const char kDescription[] = "RST_STREAM frame with max stream ID"; 1641 const char kDescription[] = "RST_STREAM frame with max stream ID";
1642 const unsigned char kH2FrameData[] = { 1642 const unsigned char kH2FrameData[] = {
1643 0x00, 0x00, 0x04, // Length: 4 1643 0x00, 0x00, 0x04, // Length: 4
1644 0x03, // Type: RST_STREAM 1644 0x03, // Type: RST_STREAM
1645 0x00, // Flags: none 1645 0x00, // Flags: none
1646 0x7f, 0xff, 0xff, 0xff, // Stream: 0x7fffffff 1646 0x7f, 0xff, 0xff, 0xff, // Stream: 0x7fffffff
1647 0x00, 0x00, 0x00, 0x01, // Error: PROTOCOL_ERROR 1647 0x00, 0x00, 0x00, 0x01, // Error: PROTOCOL_ERROR
1648 }; 1648 };
1649 SpdyRstStreamIR rst_stream(0x7FFFFFFF, RST_STREAM_PROTOCOL_ERROR); 1649 SpdyRstStreamIR rst_stream(0x7FFFFFFF, ERROR_CODE_PROTOCOL_ERROR);
1650 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream)); 1650 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
1651 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1651 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1652 } 1652 }
1653 1653
1654 { 1654 {
1655 const char kDescription[] = "RST_STREAM frame with max status code"; 1655 const char kDescription[] = "RST_STREAM frame with max status code";
1656 const unsigned char kH2FrameData[] = { 1656 const unsigned char kH2FrameData[] = {
1657 0x00, 0x00, 0x04, // Length: 4 1657 0x00, 0x00, 0x04, // Length: 4
1658 0x03, // Type: RST_STREAM 1658 0x03, // Type: RST_STREAM
1659 0x00, // Flags: none 1659 0x00, // Flags: none
1660 0x7f, 0xff, 0xff, 0xff, // Stream: 0x7fffffff 1660 0x7f, 0xff, 0xff, 0xff, // Stream: 0x7fffffff
1661 0x00, 0x00, 0x00, 0x02, // Error: INTERNAL_ERROR 1661 0x00, 0x00, 0x00, 0x02, // Error: INTERNAL_ERROR
1662 }; 1662 };
1663 SpdyRstStreamIR rst_stream(0x7FFFFFFF, RST_STREAM_INTERNAL_ERROR); 1663 SpdyRstStreamIR rst_stream(0x7FFFFFFF, ERROR_CODE_INTERNAL_ERROR);
1664 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream)); 1664 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
1665 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1665 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1666 } 1666 }
1667 } 1667 }
1668 1668
1669 TEST_P(SpdyFramerTest, CreateSettings) { 1669 TEST_P(SpdyFramerTest, CreateSettings) {
1670 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 1670 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
1671 1671
1672 { 1672 {
1673 const char kDescription[] = "Network byte order SETTINGS frame"; 1673 const char kDescription[] = "Network byte order SETTINGS frame";
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 const char kDescription[] = "GOAWAY frame"; 1780 const char kDescription[] = "GOAWAY frame";
1781 const unsigned char kH2FrameData[] = { 1781 const unsigned char kH2FrameData[] = {
1782 0x00, 0x00, 0x0a, // Length: 10 1782 0x00, 0x00, 0x0a, // Length: 10
1783 0x07, // Type: GOAWAY 1783 0x07, // Type: GOAWAY
1784 0x00, // Flags: none 1784 0x00, // Flags: none
1785 0x00, 0x00, 0x00, 0x00, // Stream: 0 1785 0x00, 0x00, 0x00, 0x00, // Stream: 0
1786 0x00, 0x00, 0x00, 0x00, // Last: 0 1786 0x00, 0x00, 0x00, 0x00, // Last: 0
1787 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR 1787 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR
1788 0x47, 0x41, // Description 1788 0x47, 0x41, // Description
1789 }; 1789 };
1790 SpdyGoAwayIR goaway_ir(0, GOAWAY_NO_ERROR, "GA"); 1790 SpdyGoAwayIR goaway_ir(0, ERROR_CODE_NO_ERROR, "GA");
1791 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir)); 1791 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir));
1792 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1792 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1793 } 1793 }
1794 1794
1795 { 1795 {
1796 const char kDescription[] = "GOAWAY frame with max stream ID, status"; 1796 const char kDescription[] = "GOAWAY frame with max stream ID, status";
1797 const unsigned char kH2FrameData[] = { 1797 const unsigned char kH2FrameData[] = {
1798 0x00, 0x00, 0x0a, // Length: 10 1798 0x00, 0x00, 0x0a, // Length: 10
1799 0x07, // Type: GOAWAY 1799 0x07, // Type: GOAWAY
1800 0x00, // Flags: none 1800 0x00, // Flags: none
1801 0x00, 0x00, 0x00, 0x00, // Stream: 0 1801 0x00, 0x00, 0x00, 0x00, // Stream: 0
1802 0x7f, 0xff, 0xff, 0xff, // Last: 0x7fffffff 1802 0x7f, 0xff, 0xff, 0xff, // Last: 0x7fffffff
1803 0x00, 0x00, 0x00, 0x02, // Error: INTERNAL_ERROR 1803 0x00, 0x00, 0x00, 0x02, // Error: INTERNAL_ERROR
1804 0x47, 0x41, // Description 1804 0x47, 0x41, // Description
1805 }; 1805 };
1806 SpdyGoAwayIR goaway_ir(0x7FFFFFFF, GOAWAY_INTERNAL_ERROR, "GA"); 1806 SpdyGoAwayIR goaway_ir(0x7FFFFFFF, ERROR_CODE_INTERNAL_ERROR, "GA");
1807 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir)); 1807 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir));
1808 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1808 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1809 } 1809 }
1810 } 1810 }
1811 1811
1812 TEST_P(SpdyFramerTest, CreateHeadersUncompressed) { 1812 TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
1813 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); 1813 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION);
1814 1814
1815 { 1815 {
1816 const char kDescription[] = "HEADERS frame, no FIN"; 1816 const char kDescription[] = "HEADERS frame, no FIN";
(...skipping 1734 matching lines...) Expand 10 before | Expand all | Expand 10 after
3551 TEST_P(SpdyFramerTest, RstStreamFrameFlags) { 3551 TEST_P(SpdyFramerTest, RstStreamFrameFlags) {
3552 uint8_t flags = 0; 3552 uint8_t flags = 0;
3553 do { 3553 do {
3554 SCOPED_TRACE(testing::Message() << "Flags " << flags << std::hex 3554 SCOPED_TRACE(testing::Message() << "Flags " << flags << std::hex
3555 << static_cast<int>(flags)); 3555 << static_cast<int>(flags));
3556 3556
3557 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 3557 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
3558 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3558 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3559 framer.set_visitor(&visitor); 3559 framer.set_visitor(&visitor);
3560 3560
3561 SpdyRstStreamIR rst_stream(13, RST_STREAM_CANCEL); 3561 SpdyRstStreamIR rst_stream(13, ERROR_CODE_CANCEL);
3562 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream)); 3562 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
3563 SetFrameFlags(&frame, flags); 3563 SetFrameFlags(&frame, flags);
3564 3564
3565 EXPECT_CALL(visitor, OnRstStream(13, RST_STREAM_CANCEL)); 3565 EXPECT_CALL(visitor, OnRstStream(13, ERROR_CODE_CANCEL));
3566 3566
3567 framer.ProcessInput(frame.data(), frame.size()); 3567 framer.ProcessInput(frame.data(), frame.size());
3568 3568
3569 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 3569 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
3570 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 3570 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
3571 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 3571 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
3572 } while (++flags != 0); 3572 } while (++flags != 0);
3573 } 3573 }
3574 3574
3575 TEST_P(SpdyFramerTest, SettingsFrameFlags) { 3575 TEST_P(SpdyFramerTest, SettingsFrameFlags) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3613 TEST_P(SpdyFramerTest, GoawayFrameFlags) { 3613 TEST_P(SpdyFramerTest, GoawayFrameFlags) {
3614 uint8_t flags = 0; 3614 uint8_t flags = 0;
3615 do { 3615 do {
3616 SCOPED_TRACE(testing::Message() << "Flags " << flags << std::hex 3616 SCOPED_TRACE(testing::Message() << "Flags " << flags << std::hex
3617 << static_cast<int>(flags)); 3617 << static_cast<int>(flags));
3618 3618
3619 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 3619 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
3620 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3620 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3621 framer.set_visitor(&visitor); 3621 framer.set_visitor(&visitor);
3622 3622
3623 SpdyGoAwayIR goaway_ir(97, GOAWAY_NO_ERROR, "test"); 3623 SpdyGoAwayIR goaway_ir(97, ERROR_CODE_NO_ERROR, "test");
3624 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir)); 3624 SpdySerializedFrame frame(framer.SerializeGoAway(goaway_ir));
3625 SetFrameFlags(&frame, flags); 3625 SetFrameFlags(&frame, flags);
3626 3626
3627 EXPECT_CALL(visitor, OnGoAway(97, GOAWAY_NO_ERROR)); 3627 EXPECT_CALL(visitor, OnGoAway(97, ERROR_CODE_NO_ERROR));
3628 3628
3629 framer.ProcessInput(frame.data(), frame.size()); 3629 framer.ProcessInput(frame.data(), frame.size());
3630 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 3630 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
3631 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 3631 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
3632 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 3632 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
3633 } while (++flags != 0); 3633 } while (++flags != 0);
3634 } 3634 }
3635 3635
3636 TEST_P(SpdyFramerTest, HeadersFrameFlags) { 3636 TEST_P(SpdyFramerTest, HeadersFrameFlags) {
3637 uint8_t flags = 0; 3637 uint8_t flags = 0;
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
3839 0x03, // Type: RST_STREAM 3839 0x03, // Type: RST_STREAM
3840 0x00, // Flags: none 3840 0x00, // Flags: none
3841 0x00, 0x00, 0x00, 0x01, // Stream: 1 3841 0x00, 0x00, 0x00, 0x01, // Stream: 1
3842 0x00, 0x00, 0x00, 0xff, // Error: 255 3842 0x00, 0x00, 0x00, 0xff, // Error: 255
3843 }; 3843 };
3844 3844
3845 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 3845 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
3846 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3846 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3847 framer.set_visitor(&visitor); 3847 framer.set_visitor(&visitor);
3848 3848
3849 EXPECT_CALL(visitor, OnRstStream(1, RST_STREAM_NO_ERROR)); 3849 EXPECT_CALL(visitor, OnRstStream(1, ERROR_CODE_NO_ERROR));
3850 framer.ProcessInput(reinterpret_cast<const char*>(kH2RstStreamInvalid), 3850 framer.ProcessInput(reinterpret_cast<const char*>(kH2RstStreamInvalid),
3851 arraysize(kH2RstStreamInvalid)); 3851 arraysize(kH2RstStreamInvalid));
3852 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 3852 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
3853 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 3853 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
3854 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 3854 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
3855 3855
3856 framer.Reset(); 3856 framer.Reset();
3857 3857
3858 EXPECT_CALL(visitor, OnRstStream(1, RST_STREAM_INTERNAL_ERROR)); 3858 EXPECT_CALL(visitor, OnRstStream(1, ERROR_CODE_INTERNAL_ERROR));
3859 framer.ProcessInput(reinterpret_cast<const char*>(kH2RstStreamNumStatusCodes), 3859 framer.ProcessInput(reinterpret_cast<const char*>(kH2RstStreamNumStatusCodes),
3860 arraysize(kH2RstStreamNumStatusCodes)); 3860 arraysize(kH2RstStreamNumStatusCodes));
3861 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 3861 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
3862 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 3862 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
3863 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 3863 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
3864 } 3864 }
3865 3865
3866 // Test handling of GOAWAY frames with out-of-bounds status code. 3866 // Test handling of GOAWAY frames with out-of-bounds status code.
3867 TEST_P(SpdyFramerTest, GoAwayStatusBounds) { 3867 TEST_P(SpdyFramerTest, GoAwayStatusBounds) {
3868 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3868 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3869 const unsigned char kH2FrameData[] = { 3869 const unsigned char kH2FrameData[] = {
3870 0x00, 0x00, 0x0a, // Length: 10 3870 0x00, 0x00, 0x0a, // Length: 10
3871 0x07, // Type: GOAWAY 3871 0x07, // Type: GOAWAY
3872 0x00, // Flags: none 3872 0x00, // Flags: none
3873 0x00, 0x00, 0x00, 0x00, // Stream: 0 3873 0x00, 0x00, 0x00, 0x00, // Stream: 0
3874 0x00, 0x00, 0x00, 0x01, // Last: 1 3874 0x00, 0x00, 0x00, 0x01, // Last: 1
3875 0xff, 0xff, 0xff, 0xff, // Error: 0xffffffff 3875 0xff, 0xff, 0xff, 0xff, // Error: 0xffffffff
3876 0x47, 0x41, // Description 3876 0x47, 0x41, // Description
3877 }; 3877 };
3878 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 3878 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
3879 framer.set_visitor(&visitor); 3879 framer.set_visitor(&visitor);
3880 3880
3881 EXPECT_CALL(visitor, OnGoAway(1, GOAWAY_INTERNAL_ERROR)); 3881 EXPECT_CALL(visitor, OnGoAway(1, ERROR_CODE_INTERNAL_ERROR));
3882 framer.ProcessInput(reinterpret_cast<const char*>(kH2FrameData), 3882 framer.ProcessInput(reinterpret_cast<const char*>(kH2FrameData),
3883 arraysize(kH2FrameData)); 3883 arraysize(kH2FrameData));
3884 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 3884 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
3885 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 3885 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
3886 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 3886 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
3887 } 3887 }
3888 3888
3889 // Tests handling of a GOAWAY frame with out-of-bounds stream ID. 3889 // Tests handling of a GOAWAY frame with out-of-bounds stream ID.
3890 TEST_P(SpdyFramerTest, GoAwayStreamIdBounds) { 3890 TEST_P(SpdyFramerTest, GoAwayStreamIdBounds) {
3891 const unsigned char kH2FrameData[] = { 3891 const unsigned char kH2FrameData[] = {
3892 0x00, 0x00, 0x08, // Length: 8 3892 0x00, 0x00, 0x08, // Length: 8
3893 0x07, // Type: GOAWAY 3893 0x07, // Type: GOAWAY
3894 0x00, // Flags: none 3894 0x00, // Flags: none
3895 0x00, 0x00, 0x00, 0x00, // Stream: 0 3895 0x00, 0x00, 0x00, 0x00, // Stream: 0
3896 0xff, 0xff, 0xff, 0xff, // Last: 0x7fffffff (R-bit set) 3896 0xff, 0xff, 0xff, 0xff, // Last: 0x7fffffff (R-bit set)
3897 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR 3897 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR
3898 }; 3898 };
3899 3899
3900 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 3900 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
3901 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3901 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3902 framer.set_visitor(&visitor); 3902 framer.set_visitor(&visitor);
3903 3903
3904 EXPECT_CALL(visitor, OnGoAway(0x7fffffff, GOAWAY_NO_ERROR)); 3904 EXPECT_CALL(visitor, OnGoAway(0x7fffffff, ERROR_CODE_NO_ERROR));
3905 framer.ProcessInput(reinterpret_cast<const char*>(kH2FrameData), 3905 framer.ProcessInput(reinterpret_cast<const char*>(kH2FrameData),
3906 arraysize(kH2FrameData)); 3906 arraysize(kH2FrameData));
3907 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 3907 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
3908 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 3908 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
3909 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 3909 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
3910 } 3910 }
3911 3911
3912 TEST_P(SpdyFramerTest, OnBlocked) { 3912 TEST_P(SpdyFramerTest, OnBlocked) {
3913 const SpdyStreamId kStreamId = 0; 3913 const SpdyStreamId kStreamId = 0;
3914 3914
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
4305 4305
4306 EXPECT_EQ(1, visitor->data_frame_count_); 4306 EXPECT_EQ(1, visitor->data_frame_count_);
4307 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); 4307 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_));
4308 EXPECT_EQ(0, visitor->headers_frame_count_); 4308 EXPECT_EQ(0, visitor->headers_frame_count_);
4309 } 4309 }
4310 } 4310 }
4311 4311
4312 } // namespace test 4312 } // namespace test
4313 4313
4314 } // namespace net 4314 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_framer_decoder_adapter.cc ('k') | net/spdy/spdy_http_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698