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

Unified Diff: net/spdy/spdy_framer_test.cc

Issue 21820003: DO NOT COMMIT: SPDY 4: Hack SpdyFramer to turn SYN_STREAM and SYN_REPLY into HEADERS semi-transpare… Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase for draft 06 Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_framer.cc ('k') | net/spdy/spdy_protocol.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_framer_test.cc
diff --git a/net/spdy/spdy_framer_test.cc b/net/spdy/spdy_framer_test.cc
index d731b3adae94abd2f172485d9e23da95d2c134ba..9ce315fdab7092269ddbb27b6d54b0a95e2a6f3c 100644
--- a/net/spdy/spdy_framer_test.cc
+++ b/net/spdy/spdy_framer_test.cc
@@ -1012,13 +1012,13 @@ TEST_P(SpdyFramerTest, DuplicateHeader) {
if (spdy_version_ < 4) {
frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE);
frame.WriteUInt32(3); // stream_id
+ frame.WriteUInt32(0); // associated stream id
+ frame.WriteUInt16(0); // Priority.
} else {
- frame.WriteFramePrefix(framer, SYN_STREAM, CONTROL_FLAG_NONE, 3);
+ frame.WriteFramePrefix(framer, HEADERS, HEADERS_FLAG_PRIORITY, 3);
+ frame.WriteUInt32(framer.GetHighestPriority());
}
- frame.WriteUInt32(0); // associated stream id
- frame.WriteUInt16(0); // Priority.
-
if (IsSpdy2()) {
frame.WriteUInt16(2); // Number of headers.
frame.WriteString("name");
@@ -1053,13 +1053,13 @@ TEST_P(SpdyFramerTest, MultiValueHeader) {
if (spdy_version_ < 4) {
frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE);
frame.WriteUInt32(3); // stream_id
+ frame.WriteUInt32(0); // associated stream id
+ frame.WriteUInt16(0); // Priority.
} else {
- frame.WriteFramePrefix(framer, SYN_STREAM, CONTROL_FLAG_NONE, 3);
+ frame.WriteFramePrefix(framer, HEADERS, HEADERS_FLAG_PRIORITY, 3);
+ frame.WriteUInt32(framer.GetHighestPriority());
}
- frame.WriteUInt32(0); // associated stream id
- frame.WriteUInt16(0); // Priority.
-
string value("value1\0value2");
if (IsSpdy2()) {
frame.WriteUInt16(1); // Number of headers.
@@ -1325,14 +1325,13 @@ TEST_P(SpdyFramerTest, Basic) {
};
const unsigned char kV4Input[] = {
- 0x00, 0x1e, 0x01, 0x00, // SYN_STREAM #1
+ 0x00, 0x1c, 0x08, 0x08, // SYN_STREAM #1
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x02, 'h', 'h',
+ 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x02,
- 'v', 'v',
+ 'h', 'h', 0x00, 0x00,
+ 0x00, 0x02, 'v', 'v',
0x00, 0x24, 0x08, 0x00, // HEADERS on Stream #1
0x00, 0x00, 0x00, 0x01,
@@ -1350,11 +1349,10 @@ TEST_P(SpdyFramerTest, Basic) {
0xde, 0xad, 0xbe, 0xef,
0xde, 0xad, 0xbe, 0xef,
- 0x00, 0x12, 0x01, 0x00, // SYN Stream #3
+ 0x00, 0x10, 0x08, 0x08, // SYN Stream #3
0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00,
0x00, 0x10, 0x00, 0x00, // DATA on Stream #3
0x00, 0x00, 0x00, 0x03,
@@ -1455,16 +1453,15 @@ TEST_P(SpdyFramerTest, FinOnDataFrame) {
0xde, 0xad, 0xbe, 0xef,
};
const unsigned char kV4Input[] = {
- 0x00, 0x1e, 0x01, 0x00, // SYN_STREAM #1
+ 0x00, 0x1c, 0x08, 0x08, // SYN_STREAM #1
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x02, 'h', 'h',
+ 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x02,
- 'v', 'v',
+ 'h', 'h', 0x00, 0x00,
+ 0x00, 0x02, 'v', 'v',
- 0x00, 0x18, 0x02, 0x00, // SYN REPLY Stream #1
+ 0x00, 0x18, 0x08, 0x00, // SYN REPLY Stream #1
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x02,
@@ -1493,8 +1490,13 @@ TEST_P(SpdyFramerTest, FinOnDataFrame) {
EXPECT_EQ(0, visitor.error_count_);
EXPECT_EQ(1, visitor.syn_frame_count_);
- EXPECT_EQ(1, visitor.syn_reply_frame_count_);
- EXPECT_EQ(0, visitor.headers_frame_count_);
+ if (IsSpdy4()) {
+ EXPECT_EQ(0, visitor.syn_reply_frame_count_);
+ EXPECT_EQ(1, visitor.headers_frame_count_);
+ } else {
+ EXPECT_EQ(1, visitor.syn_reply_frame_count_);
+ EXPECT_EQ(0, visitor.headers_frame_count_);
+ }
EXPECT_EQ(16, visitor.data_bytes_);
EXPECT_EQ(0, visitor.fin_frame_count_);
EXPECT_EQ(0, visitor.fin_flag_count_);
@@ -1540,16 +1542,15 @@ TEST_P(SpdyFramerTest, FinOnSynReplyFrame) {
0x00, 0x02, 'b', 'b',
};
const unsigned char kV4Input[] = {
- 0x00, 0x1e, 0x01, 0x00, // SYN_STREAM #1
+ 0x00, 0x1c, 0x08, 0x08, // SYN_STREAM #1
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x02, 'h', 'h',
+ 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x02,
- 'v', 'v',
+ 'h', 'h', 0x00, 0x00,
+ 0x00, 0x02, 'v', 'v',
- 0x00, 0x18, 0x02, 0x01, // SYN_REPLY #1, with FIN
+ 0x00, 0x18, 0x08, 0x01, // SYN_REPLY #1, with FIN
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x02,
@@ -1568,8 +1569,13 @@ TEST_P(SpdyFramerTest, FinOnSynReplyFrame) {
EXPECT_EQ(0, visitor.error_count_);
EXPECT_EQ(1, visitor.syn_frame_count_);
- EXPECT_EQ(1, visitor.syn_reply_frame_count_);
- EXPECT_EQ(0, visitor.headers_frame_count_);
+ if (IsSpdy4()) {
+ EXPECT_EQ(0, visitor.syn_reply_frame_count_);
+ EXPECT_EQ(1, visitor.headers_frame_count_);
+ } else {
+ EXPECT_EQ(1, visitor.syn_reply_frame_count_);
+ EXPECT_EQ(0, visitor.headers_frame_count_);
+ }
EXPECT_EQ(0, visitor.data_bytes_);
EXPECT_EQ(0, visitor.fin_frame_count_);
EXPECT_EQ(1, visitor.fin_flag_count_);
@@ -1980,18 +1986,17 @@ TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) {
'a', 'r'
};
const unsigned char kV4FrameData[] = {
- 0x00, 0x2e, 0x01, 0x00,
+ 0x00, 0x2c, 0x08, 0x08,
0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00,
- kPri, kCre, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x03, 'b', 'a',
- 'r', 0x00, 0x00, 0x00,
- 0x03, 'f', 'o', 'o',
+ 0x00, 0x00, 0x00, 0x07,
+ 0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x03,
- 'f', 'o', 'o', 0x00,
- 0x00, 0x00, 0x03, 'b',
- 'a', 'r'
+ 'b', 'a', 'r', 0x00,
+ 0x00, 0x00, 0x03, 'f',
+ 'o', 'o', 0x00, 0x00,
+ 0x00, 0x03, 'f', 'o',
+ 'o', 0x00, 0x00, 0x00,
+ 0x03, 'b', 'a', 'r'
};
scoped_ptr<SpdyFrame> frame(
framer.CreateSynStream(1, // stream id
@@ -2046,17 +2051,17 @@ TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) {
'b', 'a', 'r'
};
const unsigned char kV4FrameData[] = {
- 0x00, 0x2b, 0x01, 0x01,
- 0x7f, 0xff, 0xff, 0xff,
+ 0x00, 0x29, 0x08, 0x09,
0x7f, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00,
- 0x00, 0x03, 'f', 'o',
- 'o', 0x00, 0x00, 0x00,
- 0x03, 'f', 'o', 'o',
0x00, 0x00, 0x00, 0x03,
- 'b', 'a', 'r'
+ 'f', 'o', 'o', 0x00,
+ 0x00, 0x00, 0x03, 'f',
+ 'o', 'o', 0x00, 0x00,
+ 0x00, 0x03, 'b', 'a',
+ 'r'
};
scoped_ptr<SpdyFrame> frame(
framer.CreateSynStream(0x7fffffff, // stream id
@@ -2112,17 +2117,17 @@ TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) {
0x00, 0x00, 0x00
};
const unsigned char kV4FrameData[] = {
- 0x00, 0x2b, 0x01, 0x01,
- 0x7f, 0xff, 0xff, 0xff,
+ 0x00, 0x29, 0x08, 0x09,
0x7f, 0xff, 0xff, 0xff,
- kPri, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x03, 'b', 'a',
- 'r', 0x00, 0x00, 0x00,
- 0x03, 'f', 'o', 'o',
+ 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x03,
- 'f', 'o', 'o', 0x00,
- 0x00, 0x00, 0x00
+ 'b', 'a', 'r', 0x00,
+ 0x00, 0x00, 0x03, 'f',
+ 'o', 'o', 0x00, 0x00,
+ 0x00, 0x03, 'f', 'o',
+ 'o', 0x00, 0x00, 0x00,
+ 0x00
};
scoped_ptr<SpdyFrame> frame(
framer.CreateSynStream(0x7fffffff, // stream id
@@ -2970,7 +2975,7 @@ TEST_P(SpdyFramerTest, CreateHeadersCompressed) {
0xff,
};
const unsigned char kV4FrameData[] = {
- 0x00, 0x35, 0x08, 0x00,
+ 0x00, 0x25, 0x08, 0x00,
0x00, 0x00, 0x00, 0x01,
0x38, 0xea, 0xe3, 0xc6,
0xa7, 0xc2, 0x02, 0xe5,
@@ -3191,7 +3196,13 @@ TEST_P(SpdyFramerTest, ReadCompressedSynReplyHeaderBlock) {
visitor.SimulateInFramer(
reinterpret_cast<unsigned char*>(control_frame->data()),
control_frame->size());
- EXPECT_EQ(1, visitor.syn_reply_frame_count_);
+ if (IsSpdy4()) {
+ EXPECT_EQ(0, visitor.syn_reply_frame_count_);
+ EXPECT_EQ(1, visitor.headers_frame_count_);
+ } else {
+ EXPECT_EQ(1, visitor.syn_reply_frame_count_);
+ EXPECT_EQ(0, visitor.headers_frame_count_);
+ }
EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_));
}
@@ -3846,6 +3857,11 @@ TEST_P(SpdyFramerTest, SizesTest) {
SpdyFramer framer(spdy_version_);
EXPECT_EQ(8u, framer.GetDataFrameMinimumSize());
if (IsSpdy4()) {
+ EXPECT_EQ(8u, framer.GetControlFrameHeaderSize());
+ EXPECT_EQ(12u, framer.GetSynStreamMinimumSize());
+ EXPECT_EQ(8u, framer.GetSynReplyMinimumSize());
+ EXPECT_EQ(12u, framer.GetRstStreamSize());
+ EXPECT_EQ(12u, framer.GetSettingsMinimumSize());
EXPECT_EQ(8u, framer.GetSynReplyMinimumSize());
EXPECT_EQ(12u, framer.GetRstStreamSize());
EXPECT_EQ(12u, framer.GetSettingsMinimumSize());
@@ -4074,14 +4090,27 @@ TEST_P(SpdyFramerTest, SynStreamFrameFlags) {
headers["foo"] = "bar";
scoped_ptr<SpdyFrame> frame(
framer.CreateSynStream(8, 3, 1, 0, CONTROL_FLAG_NONE, true, &headers));
- SetFrameFlags(frame.get(), flags, spdy_version_);
+ int set_flags = flags;
+ if(IsSpdy4()) {
+ set_flags |= HEADERS_FLAG_PRIORITY; // Required for SYN_STREAM simulation.
+ }
+ SetFrameFlags(frame.get(), set_flags, spdy_version_);
- if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
+ if (!IsSpdy4() &&
+ flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
+ EXPECT_CALL(visitor, OnError(_));
+ } else if (IsSpdy4() &&
+ flags & ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY)) {
EXPECT_CALL(visitor, OnError(_));
} else {
EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(8, SYN_STREAM, _));
- EXPECT_CALL(visitor, OnSynStream(8, 3, 1, 0, flags & CONTROL_FLAG_FIN,
- flags & CONTROL_FLAG_UNIDIRECTIONAL));
+ if (IsSpdy4()) {
+ EXPECT_CALL(visitor, OnSynStream(8, 0, 1, 0, flags & CONTROL_FLAG_FIN,
+ false));
+ } else {
+ EXPECT_CALL(visitor, OnSynStream(8, 3, 1, 0, flags & CONTROL_FLAG_FIN,
+ flags & CONTROL_FLAG_UNIDIRECTIONAL));
+ }
EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _))
.WillRepeatedly(testing::Return(true));
if (flags & DATA_FLAG_FIN) {
@@ -4090,7 +4119,14 @@ TEST_P(SpdyFramerTest, SynStreamFrameFlags) {
}
framer.ProcessInput(frame->data(), frame->size());
- if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
+ if (!IsSpdy4() &&
+ flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
+ EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
+ EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
+ framer.error_code())
+ << SpdyFramer::ErrorCodeToString(framer.error_code());
+ } else if (IsSpdy4() &&
+ flags & ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY)) {
EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
framer.error_code())
@@ -4104,6 +4140,10 @@ TEST_P(SpdyFramerTest, SynStreamFrameFlags) {
}
TEST_P(SpdyFramerTest, SynReplyFrameFlags) {
+ if (IsSpdy4()) {
+ // Covered by HEADERS case.
+ return;
+ }
for (int flags = 0; flags < 256; ++flags) {
SCOPED_TRACE(testing::Message() << "Flags " << flags);
@@ -4243,6 +4283,10 @@ TEST_P(SpdyFramerTest, GoawayFrameFlags) {
TEST_P(SpdyFramerTest, HeadersFrameFlags) {
for (int flags = 0; flags < 256; ++flags) {
+ if (IsSpdy4() && flags & HEADERS_FLAG_PRIORITY) {
+ // Covered by SYN_STREAM case.
+ continue;
+ }
SCOPED_TRACE(testing::Message() << "Flags " << flags);
testing::StrictMock<test::MockVisitor> visitor;
« no previous file with comments | « net/spdy/spdy_framer.cc ('k') | net/spdy/spdy_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698