Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 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_protocol.h" | 5 #include "net/spdy/spdy_protocol.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "net/spdy/spdy_bitmasks.h" | 8 #include "net/spdy/spdy_bitmasks.h" |
| 9 #include "net/spdy/spdy_framer.h" | 9 #include "net/spdy/spdy_framer.h" |
| 10 #include "testing/platform_test.h" | 10 #include "testing/platform_test.h" |
| 11 | 11 |
| 12 using spdy::CONTROL_FLAG_FIN; | 12 using spdy::CONTROL_FLAG_FIN; |
| 13 using spdy::CONTROL_FLAG_NONE; | 13 using spdy::CONTROL_FLAG_NONE; |
| 14 using spdy::FlagsAndLength; | |
| 14 using spdy::GOAWAY; | 15 using spdy::GOAWAY; |
| 15 using spdy::HEADERS; | 16 using spdy::HEADERS; |
| 16 using spdy::NOOP; | 17 using spdy::NOOP; |
| 17 using spdy::NUM_CONTROL_FRAME_TYPES; | 18 using spdy::NUM_CONTROL_FRAME_TYPES; |
| 18 using spdy::PING; | 19 using spdy::PING; |
| 19 using spdy::RST_STREAM; | 20 using spdy::RST_STREAM; |
| 20 using spdy::SETTINGS; | 21 using spdy::SETTINGS; |
| 21 using spdy::SYN_REPLY; | 22 using spdy::SYN_REPLY; |
| 22 using spdy::SYN_STREAM; | 23 using spdy::SYN_STREAM; |
| 23 using spdy::WINDOW_UPDATE; | 24 using spdy::SettingsFlagsAndId; |
| 24 using spdy::FlagsAndLength; | |
| 25 using spdy::SpdyControlFrame; | 25 using spdy::SpdyControlFrame; |
| 26 using spdy::SpdyControlType; | 26 using spdy::SpdyControlType; |
| 27 using spdy::SpdyDataFrame; | 27 using spdy::SpdyDataFrame; |
| 28 using spdy::SpdyFrame; | 28 using spdy::SpdyFrame; |
| 29 using spdy::SpdyFramer; | 29 using spdy::SpdyFramer; |
| 30 using spdy::SpdyGoAwayControlFrame; | |
| 30 using spdy::SpdyHeaderBlock; | 31 using spdy::SpdyHeaderBlock; |
| 31 using spdy::SpdyHeadersControlFrame; | 32 using spdy::SpdyHeadersControlFrame; |
| 32 using spdy::SpdyGoAwayControlFrame; | |
| 33 using spdy::SpdyNoOpControlFrame; | |
| 34 using spdy::SpdyPingControlFrame; | 33 using spdy::SpdyPingControlFrame; |
| 35 using spdy::SpdyRstStreamControlFrame; | 34 using spdy::SpdyRstStreamControlFrame; |
| 36 using spdy::SpdySettings; | 35 using spdy::SpdySettings; |
| 37 using spdy::SpdySettingsControlFrame; | 36 using spdy::SpdySettingsControlFrame; |
| 38 using spdy::SpdyStatusCodes; | 37 using spdy::SpdyStatusCodes; |
| 39 using spdy::SpdySynReplyControlFrame; | 38 using spdy::SpdySynReplyControlFrame; |
| 40 using spdy::SpdySynStreamControlFrame; | 39 using spdy::SpdySynStreamControlFrame; |
| 41 using spdy::SpdyWindowUpdateControlFrame; | 40 using spdy::SpdyWindowUpdateControlFrame; |
| 42 using spdy::SettingsFlagsAndId; | 41 using spdy::WINDOW_UPDATE; |
| 43 using spdy::kLengthMask; | 42 using spdy::kLengthMask; |
| 44 using spdy::kSpdyProtocolVersion; | |
| 45 using spdy::kStreamIdMask; | 43 using spdy::kStreamIdMask; |
| 46 | 44 |
| 47 namespace { | 45 namespace { |
| 48 | 46 |
| 49 // Test our protocol constants | 47 // Test our protocol constants |
| 50 TEST(SpdyProtocolTest, ProtocolConstants) { | 48 TEST(SpdyProtocolTest, ProtocolConstants) { |
| 51 EXPECT_EQ(8u, SpdyFrame::kHeaderSize); | 49 EXPECT_EQ(8u, SpdyFrame::kHeaderSize); |
| 52 EXPECT_EQ(8u, SpdyDataFrame::size()); | 50 EXPECT_EQ(8u, SpdyDataFrame::size()); |
| 53 EXPECT_EQ(8u, SpdyControlFrame::kHeaderSize); | 51 EXPECT_EQ(8u, SpdyControlFrame::kHeaderSize); |
| 54 EXPECT_EQ(18u, SpdySynStreamControlFrame::size()); | 52 EXPECT_EQ(18u, SpdySynStreamControlFrame::size()); |
| 55 EXPECT_EQ(14u, SpdySynReplyControlFrame::size()); | 53 EXPECT_EQ(12u, SpdySynReplyControlFrame::size()); |
|
Ryan Hamilton
2012/03/09 19:09:58
Why is this changing? Just want to make sure we'r
ramant (doing other things)
2012/03/10 01:14:09
Added separate tests for SPDY/2 and SPDY/3.
Done.
| |
| 56 EXPECT_EQ(16u, SpdyRstStreamControlFrame::size()); | 54 EXPECT_EQ(16u, SpdyRstStreamControlFrame::size()); |
| 57 EXPECT_EQ(12u, SpdySettingsControlFrame::size()); | 55 EXPECT_EQ(12u, SpdySettingsControlFrame::size()); |
| 58 EXPECT_EQ(8u, SpdyNoOpControlFrame::size()); | |
| 59 EXPECT_EQ(12u, SpdyPingControlFrame::size()); | 56 EXPECT_EQ(12u, SpdyPingControlFrame::size()); |
| 60 EXPECT_EQ(12u, SpdyGoAwayControlFrame::size()); | 57 EXPECT_EQ(12u, SpdyGoAwayControlFrame::size()); |
| 61 EXPECT_EQ(14u, SpdyHeadersControlFrame::size()); | 58 EXPECT_EQ(12u, SpdyHeadersControlFrame::size()); |
| 62 EXPECT_EQ(16u, SpdyWindowUpdateControlFrame::size()); | 59 EXPECT_EQ(16u, SpdyWindowUpdateControlFrame::size()); |
| 63 EXPECT_EQ(4u, sizeof(FlagsAndLength)); | 60 EXPECT_EQ(4u, sizeof(FlagsAndLength)); |
| 64 EXPECT_EQ(1, SYN_STREAM); | 61 EXPECT_EQ(1, SYN_STREAM); |
| 65 EXPECT_EQ(2, SYN_REPLY); | 62 EXPECT_EQ(2, SYN_REPLY); |
| 66 EXPECT_EQ(3, RST_STREAM); | 63 EXPECT_EQ(3, RST_STREAM); |
| 67 EXPECT_EQ(4, SETTINGS); | 64 EXPECT_EQ(4, SETTINGS); |
| 68 EXPECT_EQ(5, NOOP); | 65 EXPECT_EQ(5, NOOP); |
| 69 EXPECT_EQ(6, PING); | 66 EXPECT_EQ(6, PING); |
| 70 EXPECT_EQ(7, GOAWAY); | 67 EXPECT_EQ(7, GOAWAY); |
| 71 EXPECT_EQ(8, HEADERS); | 68 EXPECT_EQ(8, HEADERS); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 88 EXPECT_FALSE(frame.is_control_frame()); | 85 EXPECT_FALSE(frame.is_control_frame()); |
| 89 } | 86 } |
| 90 | 87 |
| 91 TEST(SpdyProtocolTest, DataFrameStructs) { | 88 TEST(SpdyProtocolTest, DataFrameStructs) { |
| 92 SpdyDataFrame data_frame; | 89 SpdyDataFrame data_frame; |
| 93 data_frame.set_stream_id(12345); | 90 data_frame.set_stream_id(12345); |
| 94 EXPECT_EQ(12345u, data_frame.stream_id()); | 91 EXPECT_EQ(12345u, data_frame.stream_id()); |
| 95 } | 92 } |
| 96 | 93 |
| 97 TEST(SpdyProtocolTest, ControlFrameStructs) { | 94 TEST(SpdyProtocolTest, ControlFrameStructs) { |
| 98 SpdyFramer framer; | 95 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); |
|
Ryan Hamilton
2012/03/09 19:09:58
Where is this defined? We want to make sure we're
ramant (doing other things)
2012/03/10 01:14:09
Forked this test for spdy/2 and spdy/3.
Done.
| |
| 99 SpdyHeaderBlock headers; | 96 SpdyHeaderBlock headers; |
| 100 | 97 |
| 101 scoped_ptr<SpdySynStreamControlFrame> syn_frame( | 98 scoped_ptr<SpdySynStreamControlFrame> syn_frame( |
| 102 framer.CreateSynStream(123, 456, 2, CONTROL_FLAG_FIN, false, &headers)); | 99 framer.CreateSynStream(123, 456, 2, CONTROL_FLAG_FIN, false, &headers)); |
| 103 EXPECT_EQ(kSpdyProtocolVersion, syn_frame->version()); | 100 EXPECT_EQ(framer.protocol_version(), syn_frame->version()); |
| 104 EXPECT_TRUE(syn_frame->is_control_frame()); | 101 EXPECT_TRUE(syn_frame->is_control_frame()); |
| 105 EXPECT_EQ(SYN_STREAM, syn_frame->type()); | 102 EXPECT_EQ(SYN_STREAM, syn_frame->type()); |
| 106 EXPECT_EQ(123u, syn_frame->stream_id()); | 103 EXPECT_EQ(123u, syn_frame->stream_id()); |
| 107 EXPECT_EQ(456u, syn_frame->associated_stream_id()); | 104 EXPECT_EQ(456u, syn_frame->associated_stream_id()); |
| 108 EXPECT_EQ(2u, syn_frame->priority()); | 105 EXPECT_EQ(2u, syn_frame->priority()); |
| 109 EXPECT_EQ(2, syn_frame->header_block_len()); | 106 EXPECT_EQ((SPDY_VERSION_FOR_TESTS < 3) ? 2 : 4, |
| 107 syn_frame->header_block_len()); | |
| 110 EXPECT_EQ(1u, syn_frame->flags()); | 108 EXPECT_EQ(1u, syn_frame->flags()); |
| 111 syn_frame->set_associated_stream_id(999u); | 109 syn_frame->set_associated_stream_id(999u); |
| 112 EXPECT_EQ(123u, syn_frame->stream_id()); | 110 EXPECT_EQ(123u, syn_frame->stream_id()); |
| 113 EXPECT_EQ(999u, syn_frame->associated_stream_id()); | 111 EXPECT_EQ(999u, syn_frame->associated_stream_id()); |
| 114 | 112 |
| 115 scoped_ptr<SpdySynReplyControlFrame> syn_reply( | 113 scoped_ptr<SpdySynReplyControlFrame> syn_reply( |
| 116 framer.CreateSynReply(123, CONTROL_FLAG_NONE, false, &headers)); | 114 framer.CreateSynReply(123, CONTROL_FLAG_NONE, false, &headers)); |
| 117 EXPECT_EQ(kSpdyProtocolVersion, syn_reply->version()); | 115 EXPECT_EQ(framer.protocol_version(), syn_reply->version()); |
| 118 EXPECT_TRUE(syn_reply->is_control_frame()); | 116 EXPECT_TRUE(syn_reply->is_control_frame()); |
| 119 EXPECT_EQ(SYN_REPLY, syn_reply->type()); | 117 EXPECT_EQ(SYN_REPLY, syn_reply->type()); |
| 120 EXPECT_EQ(123u, syn_reply->stream_id()); | 118 EXPECT_EQ(123u, syn_reply->stream_id()); |
| 121 EXPECT_EQ(2, syn_reply->header_block_len()); | 119 EXPECT_EQ((SPDY_VERSION_FOR_TESTS < 3) ? 2 : 4, |
| 120 syn_reply->header_block_len()); | |
| 122 EXPECT_EQ(0, syn_reply->flags()); | 121 EXPECT_EQ(0, syn_reply->flags()); |
| 123 | 122 |
| 124 scoped_ptr<SpdyRstStreamControlFrame> rst_frame( | 123 scoped_ptr<SpdyRstStreamControlFrame> rst_frame( |
| 125 framer.CreateRstStream(123, spdy::PROTOCOL_ERROR)); | 124 framer.CreateRstStream(123, spdy::PROTOCOL_ERROR)); |
| 126 EXPECT_EQ(kSpdyProtocolVersion, rst_frame->version()); | 125 EXPECT_EQ(framer.protocol_version(), rst_frame->version()); |
| 127 EXPECT_TRUE(rst_frame->is_control_frame()); | 126 EXPECT_TRUE(rst_frame->is_control_frame()); |
| 128 EXPECT_EQ(RST_STREAM, rst_frame->type()); | 127 EXPECT_EQ(RST_STREAM, rst_frame->type()); |
| 129 EXPECT_EQ(123u, rst_frame->stream_id()); | 128 EXPECT_EQ(123u, rst_frame->stream_id()); |
| 130 EXPECT_EQ(spdy::PROTOCOL_ERROR, rst_frame->status()); | 129 EXPECT_EQ(spdy::PROTOCOL_ERROR, rst_frame->status()); |
| 131 rst_frame->set_status(spdy::INVALID_STREAM); | 130 rst_frame->set_status(spdy::INVALID_STREAM); |
| 132 EXPECT_EQ(spdy::INVALID_STREAM, rst_frame->status()); | 131 EXPECT_EQ(spdy::INVALID_STREAM, rst_frame->status()); |
| 133 EXPECT_EQ(0, rst_frame->flags()); | 132 EXPECT_EQ(0, rst_frame->flags()); |
| 134 | 133 |
| 135 scoped_ptr<SpdyNoOpControlFrame> noop_frame( | |
| 136 framer.CreateNopFrame()); | |
| 137 EXPECT_EQ(kSpdyProtocolVersion, noop_frame->version()); | |
| 138 EXPECT_TRUE(noop_frame->is_control_frame()); | |
| 139 EXPECT_EQ(NOOP, noop_frame->type()); | |
| 140 EXPECT_EQ(0, noop_frame->flags()); | |
| 141 | |
| 142 const uint32 kUniqueId = 1234567u; | 134 const uint32 kUniqueId = 1234567u; |
| 143 const uint32 kUniqueId2 = 31415926u; | 135 const uint32 kUniqueId2 = 31415926u; |
| 144 scoped_ptr<SpdyPingControlFrame> ping_frame( | 136 scoped_ptr<SpdyPingControlFrame> ping_frame( |
| 145 framer.CreatePingFrame(kUniqueId)); | 137 framer.CreatePingFrame(kUniqueId)); |
| 146 EXPECT_EQ(kSpdyProtocolVersion, ping_frame->version()); | 138 EXPECT_EQ(framer.protocol_version(), ping_frame->version()); |
| 147 EXPECT_TRUE(ping_frame->is_control_frame()); | 139 EXPECT_TRUE(ping_frame->is_control_frame()); |
| 148 EXPECT_EQ(PING, ping_frame->type()); | 140 EXPECT_EQ(PING, ping_frame->type()); |
| 149 EXPECT_EQ(kUniqueId, ping_frame->unique_id()); | 141 EXPECT_EQ(kUniqueId, ping_frame->unique_id()); |
| 150 ping_frame->set_unique_id(kUniqueId2); | 142 ping_frame->set_unique_id(kUniqueId2); |
| 151 EXPECT_EQ(kUniqueId2, ping_frame->unique_id()); | 143 EXPECT_EQ(kUniqueId2, ping_frame->unique_id()); |
| 152 | 144 |
| 153 scoped_ptr<SpdyGoAwayControlFrame> goaway_frame( | 145 scoped_ptr<SpdyGoAwayControlFrame> goaway_frame( |
| 154 framer.CreateGoAway(123)); | 146 framer.CreateGoAway(123)); |
| 155 EXPECT_EQ(kSpdyProtocolVersion, goaway_frame->version()); | 147 EXPECT_EQ(framer.protocol_version(), goaway_frame->version()); |
| 156 EXPECT_TRUE(goaway_frame->is_control_frame()); | 148 EXPECT_TRUE(goaway_frame->is_control_frame()); |
| 157 EXPECT_EQ(GOAWAY, goaway_frame->type()); | 149 EXPECT_EQ(GOAWAY, goaway_frame->type()); |
| 158 EXPECT_EQ(123u, goaway_frame->last_accepted_stream_id()); | 150 EXPECT_EQ(123u, goaway_frame->last_accepted_stream_id()); |
| 159 | 151 |
| 160 scoped_ptr<SpdyHeadersControlFrame> headers_frame( | 152 scoped_ptr<SpdyHeadersControlFrame> headers_frame( |
| 161 framer.CreateHeaders(123, CONTROL_FLAG_NONE, false, &headers)); | 153 framer.CreateHeaders(123, CONTROL_FLAG_NONE, false, &headers)); |
| 162 EXPECT_EQ(kSpdyProtocolVersion, headers_frame->version()); | 154 EXPECT_EQ(framer.protocol_version(), headers_frame->version()); |
| 163 EXPECT_TRUE(headers_frame->is_control_frame()); | 155 EXPECT_TRUE(headers_frame->is_control_frame()); |
| 164 EXPECT_EQ(HEADERS, headers_frame->type()); | 156 EXPECT_EQ(HEADERS, headers_frame->type()); |
| 165 EXPECT_EQ(123u, headers_frame->stream_id()); | 157 EXPECT_EQ(123u, headers_frame->stream_id()); |
| 166 EXPECT_EQ(2, headers_frame->header_block_len()); | 158 EXPECT_EQ((SPDY_VERSION_FOR_TESTS < 3) ? 2 : 4, |
| 159 headers_frame->header_block_len()); | |
| 167 EXPECT_EQ(0, headers_frame->flags()); | 160 EXPECT_EQ(0, headers_frame->flags()); |
| 168 | 161 |
| 169 scoped_ptr<SpdyWindowUpdateControlFrame> window_update_frame( | 162 scoped_ptr<SpdyWindowUpdateControlFrame> window_update_frame( |
| 170 framer.CreateWindowUpdate(123, 456)); | 163 framer.CreateWindowUpdate(123, 456)); |
| 171 EXPECT_EQ(kSpdyProtocolVersion, window_update_frame->version()); | 164 EXPECT_EQ(framer.protocol_version(), window_update_frame->version()); |
| 172 EXPECT_TRUE(window_update_frame->is_control_frame()); | 165 EXPECT_TRUE(window_update_frame->is_control_frame()); |
| 173 EXPECT_EQ(WINDOW_UPDATE, window_update_frame->type()); | 166 EXPECT_EQ(WINDOW_UPDATE, window_update_frame->type()); |
| 174 EXPECT_EQ(123u, window_update_frame->stream_id()); | 167 EXPECT_EQ(123u, window_update_frame->stream_id()); |
| 175 EXPECT_EQ(456u, window_update_frame->delta_window_size()); | 168 EXPECT_EQ(456u, window_update_frame->delta_window_size()); |
| 176 } | 169 } |
| 177 | 170 |
| 178 TEST(SpdyProtocolTest, TestDataFrame) { | 171 TEST(SpdyProtocolTest, TestDataFrame) { |
| 179 SpdyDataFrame frame; | 172 SpdyDataFrame frame; |
| 180 | 173 |
| 181 // Set the stream ID to various values. | 174 // Set the stream ID to various values. |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 212 flags = frame.flags(); | 205 flags = frame.flags(); |
| 213 EXPECT_EQ(all_flags, flags); | 206 EXPECT_EQ(all_flags, flags); |
| 214 EXPECT_EQ(length, frame.length()); | 207 EXPECT_EQ(length, frame.length()); |
| 215 frame.set_flags(5u); | 208 frame.set_flags(5u); |
| 216 EXPECT_EQ(5u, frame.flags()); | 209 EXPECT_EQ(5u, frame.flags()); |
| 217 EXPECT_EQ(length, frame.length()); | 210 EXPECT_EQ(length, frame.length()); |
| 218 } | 211 } |
| 219 | 212 |
| 220 // Test various types of SETTINGS frames. | 213 // Test various types of SETTINGS frames. |
| 221 TEST(SpdyProtocolTest, TestSpdySettingsFrame) { | 214 TEST(SpdyProtocolTest, TestSpdySettingsFrame) { |
| 222 SpdyFramer framer; | 215 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); |
| 223 | 216 |
| 224 // Create a settings frame with no settings. | 217 // Create a settings frame with no settings. |
| 225 SpdySettings settings; | 218 SpdySettings settings; |
| 226 scoped_ptr<SpdySettingsControlFrame> settings_frame( | 219 scoped_ptr<SpdySettingsControlFrame> settings_frame( |
| 227 framer.CreateSettings(settings)); | 220 framer.CreateSettings(settings)); |
| 228 EXPECT_EQ(kSpdyProtocolVersion, settings_frame->version()); | 221 EXPECT_EQ(framer.protocol_version(), settings_frame->version()); |
| 229 EXPECT_TRUE(settings_frame->is_control_frame()); | 222 EXPECT_TRUE(settings_frame->is_control_frame()); |
| 230 EXPECT_EQ(SETTINGS, settings_frame->type()); | 223 EXPECT_EQ(SETTINGS, settings_frame->type()); |
| 231 EXPECT_EQ(0u, settings_frame->num_entries()); | 224 EXPECT_EQ(0u, settings_frame->num_entries()); |
| 232 | 225 |
| 233 // We'll add several different ID/Flag combinations and then verify | 226 // We'll add several different ID/Flag combinations and then verify |
| 234 // that they encode and decode properly. | 227 // that they encode and decode properly. |
| 235 SettingsFlagsAndId ids[] = { | 228 SettingsFlagsAndId ids[] = { |
| 236 0x00000000, | 229 SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, 0x00000000), |
| 237 0xffffffff, | 230 SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, 0xffffffff), |
| 238 0xff000001, | 231 SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, 0xff000001), |
| 239 0x01000002, | 232 SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, 0xffffffff), |
| 233 SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, 0x01000002), | |
| 234 SettingsFlagsAndId(3, 1) | |
| 240 }; | 235 }; |
| 241 | 236 |
| 242 for (size_t index = 0; index < arraysize(ids); ++index) { | 237 for (size_t index = 0; index < arraysize(ids); ++index) { |
| 243 settings.insert(settings.end(), std::make_pair(ids[index], index)); | 238 settings.insert(settings.end(), std::make_pair(ids[index], index)); |
| 244 settings_frame.reset(framer.CreateSettings(settings)); | 239 settings_frame.reset(framer.CreateSettings(settings)); |
| 245 EXPECT_EQ(kSpdyProtocolVersion, settings_frame->version()); | 240 EXPECT_EQ(framer.protocol_version(), settings_frame->version()); |
| 246 EXPECT_TRUE(settings_frame->is_control_frame()); | 241 EXPECT_TRUE(settings_frame->is_control_frame()); |
| 247 EXPECT_EQ(SETTINGS, settings_frame->type()); | 242 EXPECT_EQ(SETTINGS, settings_frame->type()); |
| 248 EXPECT_EQ(index + 1, settings_frame->num_entries()); | 243 EXPECT_EQ(index + 1, settings_frame->num_entries()); |
| 249 | 244 |
| 250 SpdySettings parsed_settings; | 245 SpdySettings parsed_settings; |
| 251 EXPECT_TRUE(framer.ParseSettings(settings_frame.get(), &parsed_settings)); | 246 EXPECT_TRUE(framer.ParseSettings(settings_frame.get(), &parsed_settings)); |
| 252 EXPECT_EQ(parsed_settings.size(), settings.size()); | 247 EXPECT_EQ(settings.size(), parsed_settings.size()); |
| 253 SpdySettings::const_iterator it = parsed_settings.begin(); | 248 SpdySettings::const_iterator it = parsed_settings.begin(); |
| 254 int pos = 0; | 249 int pos = 0; |
| 255 while (it != parsed_settings.end()) { | 250 while (it != parsed_settings.end()) { |
| 256 SettingsFlagsAndId parsed = it->first; | 251 SettingsFlagsAndId parsed = it->first; |
| 257 uint32 value = it->second; | 252 uint32 value = it->second; |
| 258 EXPECT_EQ(parsed.flags(), ids[pos].flags()); | 253 EXPECT_EQ(ids[pos].flags(), parsed.flags()); |
| 259 EXPECT_EQ(parsed.id(), ids[pos].id()); | 254 EXPECT_EQ(ids[pos].id(), parsed.id()); |
| 260 EXPECT_EQ(value, static_cast<uint32>(pos)); | 255 EXPECT_EQ(static_cast<uint32>(pos), value); |
| 261 ++it; | 256 ++it; |
| 262 ++pos; | 257 ++pos; |
| 263 } | 258 } |
| 264 } | 259 } |
| 265 } | 260 } |
| 266 | 261 |
| 267 TEST(SpdyProtocolTest, HasHeaderBlock) { | 262 TEST(SpdyProtocolTest, HasHeaderBlock) { |
| 268 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); | 263 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); |
| 269 for (SpdyControlType type = SYN_STREAM; | 264 for (SpdyControlType type = SYN_STREAM; |
| 270 type < NUM_CONTROL_FRAME_TYPES; | 265 type < NUM_CONTROL_FRAME_TYPES; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 344 | 339 |
| 345 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameType) { | 340 TEST(SpdyProtocolDeathTest, TestSpdyControlFrameType) { |
| 346 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); | 341 SpdyControlFrame frame(SpdyControlFrame::kHeaderSize); |
| 347 memset(frame.data(), 255, SpdyControlFrame::kHeaderSize); | 342 memset(frame.data(), 255, SpdyControlFrame::kHeaderSize); |
| 348 | 343 |
| 349 // type() should be out of bounds. | 344 // type() should be out of bounds. |
| 350 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); | 345 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); |
| 351 | 346 |
| 352 uint16 version = frame.version(); | 347 uint16 version = frame.version(); |
| 353 | 348 |
| 354 for (int i = SYN_STREAM; i <= spdy::NOOP; ++i) { | 349 for (int i = SYN_STREAM; i <= spdy::WINDOW_UPDATE; ++i) { |
| 355 frame.set_type(static_cast<SpdyControlType>(i)); | 350 frame.set_type(static_cast<SpdyControlType>(i)); |
| 356 EXPECT_EQ(i, static_cast<int>(frame.type())); | 351 EXPECT_EQ(i, static_cast<int>(frame.type())); |
| 357 EXPECT_TRUE(frame.AppearsToBeAValidControlFrame()); | 352 if (i == spdy::NOOP) { |
| 353 // NOOP frames aren't 'valid'. | |
|
Ryan Hamilton
2012/03/09 19:09:58
NOOP is valid in spdy/2 right?
ramant (doing other things)
2012/03/10 01:14:09
Checked in SPDY/2 tests and kept the as above for
| |
| 354 EXPECT_FALSE(frame.AppearsToBeAValidControlFrame()); | |
| 355 } else { | |
| 356 EXPECT_TRUE(frame.AppearsToBeAValidControlFrame()); | |
| 357 } | |
| 358 // Make sure setting type does not alter the version block. | 358 // Make sure setting type does not alter the version block. |
| 359 EXPECT_EQ(version, frame.version()); | 359 EXPECT_EQ(version, frame.version()); |
| 360 EXPECT_TRUE(frame.is_control_frame()); | 360 EXPECT_TRUE(frame.is_control_frame()); |
| 361 } | 361 } |
| 362 } | 362 } |
| 363 | 363 |
| 364 TEST(SpdyProtocolDeathTest, TestRstStreamStatusBounds) { | 364 TEST(SpdyProtocolDeathTest, TestRstStreamStatusBounds) { |
| 365 SpdyFramer framer; | 365 SpdyFramer framer(SPDY_VERSION_FOR_TESTS); |
| 366 scoped_ptr<SpdyRstStreamControlFrame> rst_frame; | 366 scoped_ptr<SpdyRstStreamControlFrame> rst_frame; |
| 367 | 367 |
| 368 rst_frame.reset(framer.CreateRstStream(123, spdy::PROTOCOL_ERROR)); | 368 rst_frame.reset(framer.CreateRstStream(123, spdy::PROTOCOL_ERROR)); |
| 369 EXPECT_EQ(spdy::PROTOCOL_ERROR, rst_frame->status()); | 369 EXPECT_EQ(spdy::PROTOCOL_ERROR, rst_frame->status()); |
| 370 | 370 |
| 371 rst_frame->set_status(spdy::INVALID); | 371 rst_frame->set_status(spdy::INVALID); |
| 372 EXPECT_EQ(spdy::INVALID, rst_frame->status()); | 372 EXPECT_EQ(spdy::INVALID, rst_frame->status()); |
| 373 | 373 |
| 374 rst_frame->set_status( | 374 rst_frame->set_status( |
| 375 static_cast<spdy::SpdyStatusCodes>(spdy::INVALID - 1)); | 375 static_cast<spdy::SpdyStatusCodes>(spdy::INVALID - 1)); |
| 376 EXPECT_EQ(spdy::INVALID, rst_frame->status()); | 376 EXPECT_EQ(spdy::INVALID, rst_frame->status()); |
| 377 | 377 |
| 378 rst_frame->set_status(spdy::NUM_STATUS_CODES); | 378 rst_frame->set_status(spdy::NUM_STATUS_CODES); |
| 379 EXPECT_EQ(spdy::INVALID, rst_frame->status()); | 379 EXPECT_EQ(spdy::INVALID, rst_frame->status()); |
| 380 } | 380 } |
| 381 | 381 |
| 382 } // namespace | 382 } // namespace |
| OLD | NEW |