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

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

Issue 1918953003: Landing Recent QUIC changes until 4/22/2016 14:55 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Deleted SpdyFramerTests missed while mergeing 120451808 Created 4 years, 8 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.cc ('k') | net/tools/quic/quic_dispatcher.h » ('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 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 } 311 }
312 312
313 void OnStreamFrameData(SpdyStreamId stream_id, 313 void OnStreamFrameData(SpdyStreamId stream_id,
314 const char* data, 314 const char* data,
315 size_t len, 315 size_t len,
316 bool fin) override { 316 bool fin) override {
317 VLOG(1) << "OnStreamFrameData(" << stream_id << ", data, " << len << ", " 317 VLOG(1) << "OnStreamFrameData(" << stream_id << ", data, " << len << ", "
318 << fin << ") data:\n" 318 << fin << ") data:\n"
319 << base::HexEncode(data, len); 319 << base::HexEncode(data, len);
320 EXPECT_EQ(header_stream_id_, stream_id); 320 EXPECT_EQ(header_stream_id_, stream_id);
321 if (!FLAGS_spdy_on_stream_end) {
322 if (len == 0) {
323 ++end_of_stream_count_;
324 }
325 }
326
327 data_bytes_ += len; 321 data_bytes_ += len;
328 } 322 }
329 323
330 void OnStreamEnd(SpdyStreamId stream_id) override { 324 void OnStreamEnd(SpdyStreamId stream_id) override {
331 VLOG(1) << "OnStreamEnd(" << stream_id << ")"; 325 VLOG(1) << "OnStreamEnd(" << stream_id << ")";
332 EXPECT_EQ(header_stream_id_, stream_id); 326 EXPECT_EQ(header_stream_id_, stream_id);
333 ++end_of_stream_count_; 327 ++end_of_stream_count_;
334 } 328 }
335 329
336 void OnStreamPadding(SpdyStreamId stream_id, size_t len) override { 330 void OnStreamPadding(SpdyStreamId stream_id, size_t len) override {
(...skipping 4254 matching lines...) Expand 10 before | Expand all | Expand 10 after
4591 EXPECT_CALL(visitor, OnError(_)); 4585 EXPECT_CALL(visitor, OnError(_));
4592 framer.ProcessInput("HTTP/1.0", 8); 4586 framer.ProcessInput("HTTP/1.0", 8);
4593 EXPECT_TRUE(framer.probable_http_response()); 4587 EXPECT_TRUE(framer.probable_http_response());
4594 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 4588 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4595 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code()) 4589 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code())
4596 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4590 << SpdyFramer::ErrorCodeToString(framer.error_code());
4597 } 4591 }
4598 } 4592 }
4599 4593
4600 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3) { 4594 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3) {
4601 FLAGS_spdy_on_stream_end = true;
4602
4603 if (!IsSpdy3()) { 4595 if (!IsSpdy3()) {
4604 return; 4596 return;
4605 } 4597 }
4606 4598
4607 uint8_t flags = 0; 4599 uint8_t flags = 0;
4608 do { 4600 do {
4609 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4601 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4610 4602
4611 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4603 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4612 SpdyFramer framer(spdy_version_); 4604 SpdyFramer framer(spdy_version_);
(...skipping 19 matching lines...) Expand all
4632 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code()) 4624 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code())
4633 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4625 << SpdyFramer::ErrorCodeToString(framer.error_code());
4634 } else { 4626 } else {
4635 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 4627 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4636 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4628 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4637 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4629 << SpdyFramer::ErrorCodeToString(framer.error_code());
4638 } 4630 }
4639 } while (++flags != 0); 4631 } while (++flags != 0);
4640 } 4632 }
4641 4633
4642 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3disabled) {
4643 FLAGS_spdy_on_stream_end = false;
4644
4645 if (!IsSpdy3()) {
4646 return;
4647 }
4648
4649 uint8_t flags = 0;
4650 do {
4651 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4652
4653 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4654 SpdyFramer framer(spdy_version_);
4655 framer.set_visitor(&visitor);
4656
4657 SpdyDataIR data_ir(1, "hello");
4658 SpdySerializedFrame frame(framer.SerializeData(data_ir));
4659 SetFrameFlags(&frame, flags, spdy_version_);
4660
4661 if (flags & ~DATA_FLAG_FIN) {
4662 EXPECT_CALL(visitor, OnError(_));
4663 } else {
4664 EXPECT_CALL(visitor, OnDataFrameHeader(1, 5, flags & DATA_FLAG_FIN));
4665 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 5, false));
4666 if (flags & DATA_FLAG_FIN) {
4667 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true));
4668 }
4669 }
4670
4671 framer.ProcessInput(frame.data(), frame.size());
4672 if (flags & ~DATA_FLAG_FIN) {
4673 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4674 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS,
4675 framer.error_code())
4676 << SpdyFramer::ErrorCodeToString(framer.error_code());
4677 } else {
4678 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4679 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4680 << SpdyFramer::ErrorCodeToString(framer.error_code());
4681 }
4682 } while (++flags != 0);
4683 }
4684
4685 TEST_P(SpdyFramerTest, DataFrameFlagsV4) { 4634 TEST_P(SpdyFramerTest, DataFrameFlagsV4) {
4686 FLAGS_spdy_on_stream_end = true;
4687
4688 if (!IsHttp2()) { 4635 if (!IsHttp2()) {
4689 return; 4636 return;
4690 } 4637 }
4691 4638
4692 uint8_t valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_PADDED; 4639 uint8_t valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_PADDED;
4693 4640
4694 uint8_t flags = 0; 4641 uint8_t flags = 0;
4695 do { 4642 do {
4696 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4643 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4697 4644
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4730 EXPECT_EQ(SpdyFramer::SPDY_INVALID_PADDING, framer.error_code()) 4677 EXPECT_EQ(SpdyFramer::SPDY_INVALID_PADDING, framer.error_code())
4731 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4678 << SpdyFramer::ErrorCodeToString(framer.error_code());
4732 } else { 4679 } else {
4733 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 4680 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4734 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4681 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4735 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4682 << SpdyFramer::ErrorCodeToString(framer.error_code());
4736 } 4683 }
4737 } while (++flags != 0); 4684 } while (++flags != 0);
4738 } 4685 }
4739 4686
4740 TEST_P(SpdyFramerTest, DataFrameFlagsV4disabled) {
4741 FLAGS_spdy_on_stream_end = false;
4742
4743 if (!IsHttp2()) {
4744 return;
4745 }
4746
4747 uint8_t valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_PADDED;
4748
4749 uint8_t flags = 0;
4750 do {
4751 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4752
4753 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4754 SpdyFramer framer(spdy_version_);
4755 framer.set_visitor(&visitor);
4756
4757 SpdyDataIR data_ir(1, "hello");
4758 SpdySerializedFrame frame(framer.SerializeData(data_ir));
4759 SetFrameFlags(&frame, flags, spdy_version_);
4760
4761 if (flags & ~valid_data_flags) {
4762 EXPECT_CALL(visitor, OnError(_));
4763 } else {
4764 EXPECT_CALL(visitor, OnDataFrameHeader(1, 5, flags & DATA_FLAG_FIN));
4765 if (flags & DATA_FLAG_PADDED) {
4766 // The first byte of payload is parsed as padding length.
4767 EXPECT_CALL(visitor, OnStreamPadding(_, 1));
4768 // Expect Error since the frame ends prematurely.
4769 EXPECT_CALL(visitor, OnError(_));
4770 } else {
4771 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 5, false));
4772 if (flags & DATA_FLAG_FIN) {
4773 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true));
4774 }
4775 }
4776 }
4777
4778 framer.ProcessInput(frame.data(), frame.size());
4779 if (flags & ~valid_data_flags) {
4780 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4781 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code())
4782 << SpdyFramer::ErrorCodeToString(framer.error_code());
4783 } else if (flags & DATA_FLAG_PADDED) {
4784 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4785 EXPECT_EQ(SpdyFramer::SPDY_INVALID_PADDING, framer.error_code())
4786 << SpdyFramer::ErrorCodeToString(framer.error_code());
4787 } else {
4788 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4789 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4790 << SpdyFramer::ErrorCodeToString(framer.error_code());
4791 }
4792 } while (++flags != 0);
4793 }
4794
4795 TEST_P(SpdyFramerTest, SynStreamFrameFlags) { 4687 TEST_P(SpdyFramerTest, SynStreamFrameFlags) {
4796 FLAGS_spdy_on_stream_end = true;
4797
4798 if (!IsSpdy3()) { 4688 if (!IsSpdy3()) {
4799 return; 4689 return;
4800 } 4690 }
4801 4691
4802 uint8_t flags = 0; 4692 uint8_t flags = 0;
4803 do { 4693 do {
4804 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4694 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4805 4695
4806 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4696 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4807 testing::StrictMock<test::MockDebugVisitor> debug_visitor; 4697 testing::StrictMock<test::MockDebugVisitor> debug_visitor;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
4841 framer.error_code()) 4731 framer.error_code())
4842 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4732 << SpdyFramer::ErrorCodeToString(framer.error_code());
4843 } else { 4733 } else {
4844 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 4734 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4845 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4735 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4846 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4736 << SpdyFramer::ErrorCodeToString(framer.error_code());
4847 } 4737 }
4848 } while (++flags != 0); 4738 } while (++flags != 0);
4849 } 4739 }
4850 4740
4851 TEST_P(SpdyFramerTest, SynStreamFrameFlagsDisabled) {
4852 FLAGS_spdy_on_stream_end = false;
4853
4854 if (!IsSpdy3()) {
4855 return;
4856 }
4857
4858 uint8_t flags = 0;
4859 do {
4860 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4861
4862 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4863 testing::StrictMock<test::MockDebugVisitor> debug_visitor;
4864 SpdyFramer framer(spdy_version_);
4865 framer.set_visitor(&visitor);
4866 framer.set_debug_visitor(&debug_visitor);
4867
4868 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(8, SYN_STREAM, _, _));
4869
4870 SpdySynStreamIR syn_stream(8);
4871 syn_stream.set_associated_to_stream_id(3);
4872 syn_stream.set_priority(1);
4873 syn_stream.SetHeader("foo", "bar");
4874 SpdySerializedFrame frame(framer.SerializeSynStream(syn_stream));
4875 SetFrameFlags(&frame, flags, spdy_version_);
4876
4877 if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
4878 EXPECT_CALL(visitor, OnError(_));
4879 } else {
4880 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(8, SYN_STREAM, _));
4881 EXPECT_CALL(visitor, OnSynStream(8, 3, 1, flags & CONTROL_FLAG_FIN,
4882 flags & CONTROL_FLAG_UNIDIRECTIONAL));
4883 EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _))
4884 .WillRepeatedly(testing::Return(true));
4885 if (flags & DATA_FLAG_FIN) {
4886 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true));
4887 } else {
4888 // Do not close the stream if we are expecting a CONTINUATION frame.
4889 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)).Times(0);
4890 }
4891 }
4892
4893 framer.ProcessInput(frame.data(), frame.size());
4894 if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
4895 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4896 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
4897 framer.error_code())
4898 << SpdyFramer::ErrorCodeToString(framer.error_code());
4899 } else {
4900 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4901 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4902 << SpdyFramer::ErrorCodeToString(framer.error_code());
4903 }
4904 } while (++flags != 0);
4905 }
4906
4907 TEST_P(SpdyFramerTest, SynReplyFrameFlags) { 4741 TEST_P(SpdyFramerTest, SynReplyFrameFlags) {
4908 FLAGS_spdy_on_stream_end = true;
4909
4910 if (!IsSpdy3()) { 4742 if (!IsSpdy3()) {
4911 return; 4743 return;
4912 } 4744 }
4913 4745
4914 uint8_t flags = 0; 4746 uint8_t flags = 0;
4915 do { 4747 do {
4916 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4748 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4917 4749
4918 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4750 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4919 SpdyFramer framer(spdy_version_); 4751 SpdyFramer framer(spdy_version_);
(...skipping 22 matching lines...) Expand all
4942 framer.error_code()) 4774 framer.error_code())
4943 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4775 << SpdyFramer::ErrorCodeToString(framer.error_code());
4944 } else { 4776 } else {
4945 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 4777 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4946 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4778 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4947 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4779 << SpdyFramer::ErrorCodeToString(framer.error_code());
4948 } 4780 }
4949 } while (++flags != 0); 4781 } while (++flags != 0);
4950 } 4782 }
4951 4783
4952 TEST_P(SpdyFramerTest, SynReplyFrameFlagsDisabled) {
4953 FLAGS_spdy_on_stream_end = false;
4954
4955 if (!IsSpdy3()) {
4956 return;
4957 }
4958
4959 uint8_t flags = 0;
4960 do {
4961 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4962
4963 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4964 SpdyFramer framer(spdy_version_);
4965 framer.set_visitor(&visitor);
4966
4967 SpdySynReplyIR syn_reply(37);
4968 syn_reply.SetHeader("foo", "bar");
4969 SpdySerializedFrame frame(framer.SerializeSynReply(syn_reply));
4970 SetFrameFlags(&frame, flags, spdy_version_);
4971
4972 if (flags & ~CONTROL_FLAG_FIN) {
4973 EXPECT_CALL(visitor, OnError(_));
4974 } else {
4975 EXPECT_CALL(visitor, OnSynReply(37, flags & CONTROL_FLAG_FIN));
4976 EXPECT_CALL(visitor, OnControlFrameHeaderData(37, _, _))
4977 .WillRepeatedly(testing::Return(true));
4978 if (flags & DATA_FLAG_FIN) {
4979 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true));
4980 }
4981 }
4982
4983 framer.ProcessInput(frame.data(), frame.size());
4984 if (flags & ~CONTROL_FLAG_FIN) {
4985 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4986 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
4987 framer.error_code())
4988 << SpdyFramer::ErrorCodeToString(framer.error_code());
4989 } else {
4990 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4991 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4992 << SpdyFramer::ErrorCodeToString(framer.error_code());
4993 }
4994 } while (++flags != 0);
4995 }
4996
4997 TEST_P(SpdyFramerTest, RstStreamFrameFlags) { 4784 TEST_P(SpdyFramerTest, RstStreamFrameFlags) {
4998 uint8_t flags = 0; 4785 uint8_t flags = 0;
4999 do { 4786 do {
5000 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4787 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5001 4788
5002 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4789 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5003 SpdyFramer framer(spdy_version_); 4790 SpdyFramer framer(spdy_version_);
5004 framer.set_visitor(&visitor); 4791 framer.set_visitor(&visitor);
5005 4792
5006 SpdyRstStreamIR rst_stream(13, RST_STREAM_CANCEL); 4793 SpdyRstStreamIR rst_stream(13, RST_STREAM_CANCEL);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
5119 EXPECT_CALL(visitor, OnGoAway(97, GOAWAY_OK)); 4906 EXPECT_CALL(visitor, OnGoAway(97, GOAWAY_OK));
5120 4907
5121 framer.ProcessInput(frame.data(), frame.size()); 4908 framer.ProcessInput(frame.data(), frame.size());
5122 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 4909 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
5123 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4910 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5124 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4911 << SpdyFramer::ErrorCodeToString(framer.error_code());
5125 } while (++flags != 0); 4912 } while (++flags != 0);
5126 } 4913 }
5127 4914
5128 TEST_P(SpdyFramerTest, HeadersFrameFlags) { 4915 TEST_P(SpdyFramerTest, HeadersFrameFlags) {
5129 FLAGS_spdy_on_stream_end = true;
5130
5131 uint8_t flags = 0; 4916 uint8_t flags = 0;
5132 do { 4917 do {
5133 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4918 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5134 4919
5135 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4920 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5136 SpdyFramer framer(spdy_version_); 4921 SpdyFramer framer(spdy_version_);
5137 framer.set_visitor(&visitor); 4922 framer.set_visitor(&visitor);
5138 4923
5139 SpdyHeadersIR headers_ir(57); 4924 SpdyHeadersIR headers_ir(57);
5140 if (IsHttp2() && (flags & HEADERS_FLAG_PRIORITY)) { 4925 if (IsHttp2() && (flags & HEADERS_FLAG_PRIORITY)) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
5179 EXPECT_CALL(visitor, OnStreamEnd(_)).Times(0); 4964 EXPECT_CALL(visitor, OnStreamEnd(_)).Times(0);
5180 } 4965 }
5181 4966
5182 framer.ProcessInput(frame.data(), frame.size()); 4967 framer.ProcessInput(frame.data(), frame.size());
5183 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 4968 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
5184 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4969 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5185 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4970 << SpdyFramer::ErrorCodeToString(framer.error_code());
5186 } while (++flags != 0); 4971 } while (++flags != 0);
5187 } 4972 }
5188 4973
5189 TEST_P(SpdyFramerTest, HeadersFrameFlagsDisabled) {
5190 FLAGS_spdy_on_stream_end = false;
5191
5192 uint8_t flags = 0;
5193 do {
5194 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5195
5196 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5197 SpdyFramer framer(spdy_version_);
5198 framer.set_visitor(&visitor);
5199
5200 SpdyHeadersIR headers_ir(57);
5201 if (IsHttp2() && (flags & HEADERS_FLAG_PRIORITY)) {
5202 headers_ir.set_priority(3);
5203 headers_ir.set_has_priority(true);
5204 headers_ir.set_parent_stream_id(5);
5205 headers_ir.set_exclusive(true);
5206 }
5207 headers_ir.SetHeader("foo", "bar");
5208 SpdySerializedFrame frame(framer.SerializeHeaders(headers_ir));
5209 uint8_t set_flags = flags;
5210 if (IsHttp2()) {
5211 // TODO(jgraettinger): Add padding to SpdyHeadersIR,
5212 // and implement framing.
5213 set_flags &= ~HEADERS_FLAG_PADDED;
5214 }
5215 SetFrameFlags(&frame, set_flags, spdy_version_);
5216
5217 // Expected callback values
5218 SpdyStreamId stream_id = 57;
5219 bool has_priority = false;
5220 SpdyPriority priority = 0;
5221 SpdyStreamId parent_stream_id = 0;
5222 bool exclusive = false;
5223 bool fin = flags & CONTROL_FLAG_FIN;
5224 bool end = IsSpdy3() || (flags & HEADERS_FLAG_END_HEADERS);
5225 if (IsHttp2() && flags & HEADERS_FLAG_PRIORITY) {
5226 has_priority = true;
5227 priority = 3;
5228 parent_stream_id = 5;
5229 exclusive = true;
5230 }
5231 EXPECT_CALL(visitor, OnHeaders(stream_id, has_priority, priority,
5232 parent_stream_id, exclusive, fin, end));
5233 EXPECT_CALL(visitor, OnControlFrameHeaderData(57, _, _))
5234 .WillRepeatedly(testing::Return(true));
5235 if (flags & DATA_FLAG_FIN &&
5236 (IsSpdy3() || flags & HEADERS_FLAG_END_HEADERS)) {
5237 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true));
5238 } else {
5239 // Do not close the stream if we are expecting a CONTINUATION frame.
5240 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)).Times(0);
5241 }
5242 framer.ProcessInput(frame.data(), frame.size());
5243 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
5244 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5245 << SpdyFramer::ErrorCodeToString(framer.error_code());
5246 } while (++flags != 0);
5247 }
5248
5249 TEST_P(SpdyFramerTest, PingFrameFlags) { 4974 TEST_P(SpdyFramerTest, PingFrameFlags) {
5250 uint8_t flags = 0; 4975 uint8_t flags = 0;
5251 do { 4976 do {
5252 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4977 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5253 4978
5254 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4979 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5255 SpdyFramer framer(spdy_version_); 4980 SpdyFramer framer(spdy_version_);
5256 framer.set_visitor(&visitor); 4981 framer.set_visitor(&visitor);
5257 4982
5258 SpdySerializedFrame frame(framer.SerializePing(SpdyPingIR(42))); 4983 SpdySerializedFrame frame(framer.SerializePing(SpdyPingIR(42)));
(...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after
6000 5725
6001 EXPECT_EQ(1, visitor->data_frame_count_); 5726 EXPECT_EQ(1, visitor->data_frame_count_);
6002 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); 5727 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_));
6003 EXPECT_EQ(0, visitor->headers_frame_count_); 5728 EXPECT_EQ(0, visitor->headers_frame_count_);
6004 } 5729 }
6005 } 5730 }
6006 5731
6007 } // namespace test 5732 } // namespace test
6008 5733
6009 } // namespace net 5734 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_framer.cc ('k') | net/tools/quic/quic_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698