| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <iostream> | 6 #include <iostream> |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override { | 147 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override { |
| 148 LOG(FATAL); | 148 LOG(FATAL); |
| 149 } | 149 } |
| 150 void OnPing(SpdyPingId unique_id, bool is_ack) override { LOG(FATAL); } | 150 void OnPing(SpdyPingId unique_id, bool is_ack) override { LOG(FATAL); } |
| 151 void OnSettingsEnd() override { LOG(FATAL); } | 151 void OnSettingsEnd() override { LOG(FATAL); } |
| 152 void OnGoAway(SpdyStreamId last_accepted_stream_id, | 152 void OnGoAway(SpdyStreamId last_accepted_stream_id, |
| 153 SpdyGoAwayStatus status) override { | 153 SpdyGoAwayStatus status) override { |
| 154 LOG(FATAL); | 154 LOG(FATAL); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void OnHeaders(SpdyStreamId stream_id, bool fin, bool end) override { | 157 void OnHeaders(SpdyStreamId stream_id, bool has_priority, |
| 158 SpdyPriority priority, bool fin, bool end) override { |
| 158 SpdyFramer framer(version_); | 159 SpdyFramer framer(version_); |
| 159 framer.set_enable_compression(false); | 160 framer.set_enable_compression(false); |
| 160 SpdyHeadersIR headers(stream_id); | 161 SpdyHeadersIR headers(stream_id); |
| 162 headers.set_has_priority(has_priority); |
| 163 if (headers.has_priority()) { |
| 164 headers.set_priority(priority); |
| 165 } |
| 161 headers.set_fin(fin); | 166 headers.set_fin(fin); |
| 162 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers)); | 167 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers)); |
| 163 ResetBuffer(); | 168 ResetBuffer(); |
| 164 memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); | 169 memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); |
| 165 size_ += framer.GetHeadersMinimumSize(); | 170 size_ += framer.GetHeadersMinimumSize(); |
| 166 } | 171 } |
| 167 | 172 |
| 168 virtual void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) { | 173 virtual void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) { |
| 169 LOG(FATAL); | 174 LOG(FATAL); |
| 170 } | 175 } |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 ++settings_ack_sent_; | 387 ++settings_ack_sent_; |
| 383 } | 388 } |
| 384 | 389 |
| 385 void OnPing(SpdyPingId unique_id, bool is_ack) override { DLOG(FATAL); } | 390 void OnPing(SpdyPingId unique_id, bool is_ack) override { DLOG(FATAL); } |
| 386 | 391 |
| 387 void OnGoAway(SpdyStreamId last_accepted_stream_id, | 392 void OnGoAway(SpdyStreamId last_accepted_stream_id, |
| 388 SpdyGoAwayStatus status) override { | 393 SpdyGoAwayStatus status) override { |
| 389 ++goaway_count_; | 394 ++goaway_count_; |
| 390 } | 395 } |
| 391 | 396 |
| 392 void OnHeaders(SpdyStreamId stream_id, bool fin, bool end) override { | 397 void OnHeaders(SpdyStreamId stream_id, bool has_priority, |
| 398 SpdyPriority priority, bool fin, bool end) override { |
| 393 ++headers_frame_count_; | 399 ++headers_frame_count_; |
| 394 InitHeaderStreaming(HEADERS, stream_id); | 400 InitHeaderStreaming(HEADERS, stream_id); |
| 395 if (fin) { | 401 if (fin) { |
| 396 ++fin_flag_count_; | 402 ++fin_flag_count_; |
| 397 } | 403 } |
| 398 } | 404 } |
| 399 | 405 |
| 400 void OnWindowUpdate(SpdyStreamId stream_id, | 406 void OnWindowUpdate(SpdyStreamId stream_id, |
| 401 uint32 delta_window_size) override { | 407 uint32 delta_window_size) override { |
| 402 last_window_update_stream_ = stream_id; | 408 last_window_update_stream_ = stream_id; |
| (...skipping 815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1218 | 1224 |
| 1219 TestSpdyVisitor visitor(spdy_version_); | 1225 TestSpdyVisitor visitor(spdy_version_); |
| 1220 if (IsSpdy2()) { | 1226 if (IsSpdy2()) { |
| 1221 visitor.SimulateInFramer(kV2Input, sizeof(kV2Input)); | 1227 visitor.SimulateInFramer(kV2Input, sizeof(kV2Input)); |
| 1222 } else if (IsSpdy3()) { | 1228 } else if (IsSpdy3()) { |
| 1223 visitor.SimulateInFramer(kV3Input, sizeof(kV3Input)); | 1229 visitor.SimulateInFramer(kV3Input, sizeof(kV3Input)); |
| 1224 } else { | 1230 } else { |
| 1225 visitor.SimulateInFramer(kV4Input, sizeof(kV4Input)); | 1231 visitor.SimulateInFramer(kV4Input, sizeof(kV4Input)); |
| 1226 } | 1232 } |
| 1227 | 1233 |
| 1228 EXPECT_EQ(2, visitor.syn_frame_count_); | |
| 1229 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 1234 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
| 1230 EXPECT_EQ(1, visitor.headers_frame_count_); | |
| 1231 EXPECT_EQ(24, visitor.data_bytes_); | 1235 EXPECT_EQ(24, visitor.data_bytes_); |
| 1232 | |
| 1233 EXPECT_EQ(0, visitor.error_count_); | 1236 EXPECT_EQ(0, visitor.error_count_); |
| 1234 EXPECT_EQ(2, visitor.fin_frame_count_); | 1237 EXPECT_EQ(2, visitor.fin_frame_count_); |
| 1235 | 1238 |
| 1236 if (IsSpdy4()) { | 1239 if (IsSpdy4()) { |
| 1240 EXPECT_EQ(3, visitor.headers_frame_count_); |
| 1241 EXPECT_EQ(0, visitor.syn_frame_count_); |
| 1237 base::StringPiece reset_stream = "RESETSTREAM"; | 1242 base::StringPiece reset_stream = "RESETSTREAM"; |
| 1238 EXPECT_EQ(reset_stream, visitor.fin_opaque_data_); | 1243 EXPECT_EQ(reset_stream, visitor.fin_opaque_data_); |
| 1239 } else { | 1244 } else { |
| 1245 EXPECT_EQ(1, visitor.headers_frame_count_); |
| 1246 EXPECT_EQ(2, visitor.syn_frame_count_); |
| 1240 EXPECT_TRUE(visitor.fin_opaque_data_.empty()); | 1247 EXPECT_TRUE(visitor.fin_opaque_data_.empty()); |
| 1241 } | 1248 } |
| 1242 | 1249 |
| 1243 EXPECT_EQ(0, visitor.fin_flag_count_); | 1250 EXPECT_EQ(0, visitor.fin_flag_count_); |
| 1244 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); | 1251 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); |
| 1245 EXPECT_EQ(4, visitor.data_frame_count_); | 1252 EXPECT_EQ(4, visitor.data_frame_count_); |
| 1246 visitor.fin_opaque_data_.clear(); | 1253 visitor.fin_opaque_data_.clear(); |
| 1247 } | 1254 } |
| 1248 | 1255 |
| 1249 // Test that the FIN flag on a data frame signifies EOF. | 1256 // Test that the FIN flag on a data frame signifies EOF. |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1332 TestSpdyVisitor visitor(spdy_version_); | 1339 TestSpdyVisitor visitor(spdy_version_); |
| 1333 if (IsSpdy2()) { | 1340 if (IsSpdy2()) { |
| 1334 visitor.SimulateInFramer(kV2Input, sizeof(kV2Input)); | 1341 visitor.SimulateInFramer(kV2Input, sizeof(kV2Input)); |
| 1335 } else if (IsSpdy3()) { | 1342 } else if (IsSpdy3()) { |
| 1336 visitor.SimulateInFramer(kV3Input, sizeof(kV3Input)); | 1343 visitor.SimulateInFramer(kV3Input, sizeof(kV3Input)); |
| 1337 } else { | 1344 } else { |
| 1338 visitor.SimulateInFramer(kV4Input, sizeof(kV4Input)); | 1345 visitor.SimulateInFramer(kV4Input, sizeof(kV4Input)); |
| 1339 } | 1346 } |
| 1340 | 1347 |
| 1341 EXPECT_EQ(0, visitor.error_count_); | 1348 EXPECT_EQ(0, visitor.error_count_); |
| 1342 EXPECT_EQ(1, visitor.syn_frame_count_); | |
| 1343 if (IsSpdy4()) { | 1349 if (IsSpdy4()) { |
| 1350 EXPECT_EQ(0, visitor.syn_frame_count_); |
| 1344 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 1351 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
| 1345 EXPECT_EQ(1, visitor.headers_frame_count_); | 1352 EXPECT_EQ(2, visitor.headers_frame_count_); |
| 1346 } else { | 1353 } else { |
| 1354 EXPECT_EQ(1, visitor.syn_frame_count_); |
| 1347 EXPECT_EQ(1, visitor.syn_reply_frame_count_); | 1355 EXPECT_EQ(1, visitor.syn_reply_frame_count_); |
| 1348 EXPECT_EQ(0, visitor.headers_frame_count_); | 1356 EXPECT_EQ(0, visitor.headers_frame_count_); |
| 1349 } | 1357 } |
| 1350 EXPECT_EQ(16, visitor.data_bytes_); | 1358 EXPECT_EQ(16, visitor.data_bytes_); |
| 1351 EXPECT_EQ(0, visitor.fin_frame_count_); | 1359 EXPECT_EQ(0, visitor.fin_frame_count_); |
| 1352 EXPECT_EQ(0, visitor.fin_flag_count_); | 1360 EXPECT_EQ(0, visitor.fin_flag_count_); |
| 1353 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); | 1361 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); |
| 1354 EXPECT_EQ(2, visitor.data_frame_count_); | 1362 EXPECT_EQ(2, visitor.data_frame_count_); |
| 1355 } | 1363 } |
| 1356 | 1364 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1411 TestSpdyVisitor visitor(spdy_version_); | 1419 TestSpdyVisitor visitor(spdy_version_); |
| 1412 if (IsSpdy2()) { | 1420 if (IsSpdy2()) { |
| 1413 visitor.SimulateInFramer(kV2Input, sizeof(kV2Input)); | 1421 visitor.SimulateInFramer(kV2Input, sizeof(kV2Input)); |
| 1414 } else if (IsSpdy3()) { | 1422 } else if (IsSpdy3()) { |
| 1415 visitor.SimulateInFramer(kV3Input, sizeof(kV3Input)); | 1423 visitor.SimulateInFramer(kV3Input, sizeof(kV3Input)); |
| 1416 } else { | 1424 } else { |
| 1417 visitor.SimulateInFramer(kV4Input, sizeof(kV4Input)); | 1425 visitor.SimulateInFramer(kV4Input, sizeof(kV4Input)); |
| 1418 } | 1426 } |
| 1419 | 1427 |
| 1420 EXPECT_EQ(0, visitor.error_count_); | 1428 EXPECT_EQ(0, visitor.error_count_); |
| 1421 EXPECT_EQ(1, visitor.syn_frame_count_); | |
| 1422 if (IsSpdy4()) { | 1429 if (IsSpdy4()) { |
| 1430 EXPECT_EQ(0, visitor.syn_frame_count_); |
| 1423 EXPECT_EQ(0, visitor.syn_reply_frame_count_); | 1431 EXPECT_EQ(0, visitor.syn_reply_frame_count_); |
| 1424 EXPECT_EQ(1, visitor.headers_frame_count_); | 1432 EXPECT_EQ(2, visitor.headers_frame_count_); |
| 1425 } else { | 1433 } else { |
| 1434 EXPECT_EQ(1, visitor.syn_frame_count_); |
| 1426 EXPECT_EQ(1, visitor.syn_reply_frame_count_); | 1435 EXPECT_EQ(1, visitor.syn_reply_frame_count_); |
| 1427 EXPECT_EQ(0, visitor.headers_frame_count_); | 1436 EXPECT_EQ(0, visitor.headers_frame_count_); |
| 1428 } | 1437 } |
| 1429 EXPECT_EQ(0, visitor.data_bytes_); | 1438 EXPECT_EQ(0, visitor.data_bytes_); |
| 1430 EXPECT_EQ(0, visitor.fin_frame_count_); | 1439 EXPECT_EQ(0, visitor.fin_frame_count_); |
| 1431 EXPECT_EQ(1, visitor.fin_flag_count_); | 1440 EXPECT_EQ(1, visitor.fin_flag_count_); |
| 1432 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); | 1441 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); |
| 1433 EXPECT_EQ(0, visitor.data_frame_count_); | 1442 EXPECT_EQ(0, visitor.data_frame_count_); |
| 1434 } | 1443 } |
| 1435 | 1444 |
| (...skipping 3767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5203 if (!IsSpdy4() && flags & ~CONTROL_FLAG_FIN) { | 5212 if (!IsSpdy4() && flags & ~CONTROL_FLAG_FIN) { |
| 5204 EXPECT_CALL(visitor, OnError(_)); | 5213 EXPECT_CALL(visitor, OnError(_)); |
| 5205 } else if (IsSpdy4() && flags & ~(CONTROL_FLAG_FIN | | 5214 } else if (IsSpdy4() && flags & ~(CONTROL_FLAG_FIN | |
| 5206 HEADERS_FLAG_END_HEADERS | | 5215 HEADERS_FLAG_END_HEADERS | |
| 5207 HEADERS_FLAG_END_SEGMENT | | 5216 HEADERS_FLAG_END_SEGMENT | |
| 5208 HEADERS_FLAG_PADDED | | 5217 HEADERS_FLAG_PADDED | |
| 5209 HEADERS_FLAG_PRIORITY)) { | 5218 HEADERS_FLAG_PRIORITY)) { |
| 5210 EXPECT_CALL(visitor, OnError(_)); | 5219 EXPECT_CALL(visitor, OnError(_)); |
| 5211 } else { | 5220 } else { |
| 5212 if (spdy_version_ > SPDY3 && flags & HEADERS_FLAG_PRIORITY) { | 5221 if (spdy_version_ > SPDY3 && flags & HEADERS_FLAG_PRIORITY) { |
| 5213 EXPECT_CALL(visitor, OnSynStream(57, // stream id | 5222 EXPECT_CALL(visitor, OnHeaders(57, // stream id |
| 5214 0, // associated stream id | 5223 true, // has priority? |
| 5215 3, // priority | 5224 3, // priority |
| 5216 flags & CONTROL_FLAG_FIN, | 5225 flags & CONTROL_FLAG_FIN, // fin? |
| 5217 false)); // unidirectional | 5226 (flags & HEADERS_FLAG_END_HEADERS) || |
| 5227 !IsSpdy4())); // end headers? |
| 5218 } else { | 5228 } else { |
| 5219 EXPECT_CALL(visitor, OnHeaders(57, | 5229 EXPECT_CALL(visitor, OnHeaders(57, false, 0, |
| 5220 flags & CONTROL_FLAG_FIN, | 5230 flags & CONTROL_FLAG_FIN, |
| 5221 (flags & HEADERS_FLAG_END_HEADERS) || | 5231 (flags & HEADERS_FLAG_END_HEADERS) || |
| 5222 !IsSpdy4())); | 5232 !IsSpdy4())); |
| 5223 } | 5233 } |
| 5224 EXPECT_CALL(visitor, OnControlFrameHeaderData(57, _, _)) | 5234 EXPECT_CALL(visitor, OnControlFrameHeaderData(57, _, _)) |
| 5225 .WillRepeatedly(testing::Return(true)); | 5235 .WillRepeatedly(testing::Return(true)); |
| 5226 if (flags & DATA_FLAG_FIN && (!IsSpdy4() || | 5236 if (flags & DATA_FLAG_FIN && (!IsSpdy4() || |
| 5227 flags & HEADERS_FLAG_END_HEADERS)) { | 5237 flags & HEADERS_FLAG_END_HEADERS)) { |
| 5228 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)); | 5238 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)); |
| 5229 } else { | 5239 } else { |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5384 SCOPED_TRACE(testing::Message() << "Flags " << flags); | 5394 SCOPED_TRACE(testing::Message() << "Flags " << flags); |
| 5385 | 5395 |
| 5386 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 5396 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
| 5387 testing::StrictMock<net::test::MockDebugVisitor> debug_visitor; | 5397 testing::StrictMock<net::test::MockDebugVisitor> debug_visitor; |
| 5388 SpdyFramer framer(spdy_version_); | 5398 SpdyFramer framer(spdy_version_); |
| 5389 framer.set_visitor(&visitor); | 5399 framer.set_visitor(&visitor); |
| 5390 framer.set_debug_visitor(&debug_visitor); | 5400 framer.set_debug_visitor(&debug_visitor); |
| 5391 | 5401 |
| 5392 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, HEADERS, _, _)); | 5402 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, HEADERS, _, _)); |
| 5393 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(42, HEADERS, _)); | 5403 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(42, HEADERS, _)); |
| 5394 EXPECT_CALL(visitor, OnHeaders(42, 0, false)); | 5404 EXPECT_CALL(visitor, OnHeaders(42, false, 0, 0, false)); |
| 5395 EXPECT_CALL(visitor, OnControlFrameHeaderData(42, _, _)) | 5405 EXPECT_CALL(visitor, OnControlFrameHeaderData(42, _, _)) |
| 5396 .WillRepeatedly(testing::Return(true)); | 5406 .WillRepeatedly(testing::Return(true)); |
| 5397 | 5407 |
| 5398 SpdyHeadersIR headers_ir(42); | 5408 SpdyHeadersIR headers_ir(42); |
| 5399 headers_ir.SetHeader("foo", "bar"); | 5409 headers_ir.SetHeader("foo", "bar"); |
| 5400 scoped_ptr<SpdyFrame> frame0(framer.SerializeHeaders(headers_ir)); | 5410 scoped_ptr<SpdyFrame> frame0(framer.SerializeHeaders(headers_ir)); |
| 5401 SetFrameFlags(frame0.get(), 0, spdy_version_); | 5411 SetFrameFlags(frame0.get(), 0, spdy_version_); |
| 5402 | 5412 |
| 5403 SpdyContinuationIR continuation(42); | 5413 SpdyContinuationIR continuation(42); |
| 5404 continuation.SetHeader("foo", "bar"); | 5414 continuation.SetHeader("foo", "bar"); |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5915 TestSpdyVisitor visitor(spdy_version_); | 5925 TestSpdyVisitor visitor(spdy_version_); |
| 5916 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); | 5926 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); |
| 5917 | 5927 |
| 5918 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); | 5928 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); |
| 5919 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, | 5929 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, |
| 5920 visitor.framer_.error_code()) | 5930 visitor.framer_.error_code()) |
| 5921 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); | 5931 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); |
| 5922 } | 5932 } |
| 5923 | 5933 |
| 5924 } // namespace net | 5934 } // namespace net |
| OLD | NEW |