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

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

Issue 2895993003: Misc cleanup in net/spdy/core. (Closed)
Patch Set: Rebase. Created 3 years, 7 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
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/core/spdy_framer.h" 5 #include "net/spdy/core/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>
11 #include <limits> 11 #include <limits>
12 #include <tuple> 12 #include <tuple>
13 #include <vector> 13 #include <vector>
14 14
15 #include "base/compiler_specific.h" 15 #include "base/compiler_specific.h"
16 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/macros.h" 17 #include "base/macros.h"
18 #include "base/memory/ptr_util.h"
19 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
20 #include "net/quic/platform/api/quic_flags.h" 19 #include "net/quic/platform/api/quic_flags.h"
21 #include "net/spdy/chromium/spdy_flags.h" 20 #include "net/spdy/chromium/spdy_flags.h"
22 #include "net/spdy/core/array_output_buffer.h" 21 #include "net/spdy/core/array_output_buffer.h"
23 #include "net/spdy/core/hpack/hpack_constants.h" 22 #include "net/spdy/core/hpack/hpack_constants.h"
24 #include "net/spdy/core/mock_spdy_framer_visitor.h" 23 #include "net/spdy/core/mock_spdy_framer_visitor.h"
25 #include "net/spdy/core/spdy_frame_builder.h" 24 #include "net/spdy/core/spdy_frame_builder.h"
26 #include "net/spdy/core/spdy_frame_reader.h" 25 #include "net/spdy/core/spdy_frame_reader.h"
27 #include "net/spdy/core/spdy_protocol.h" 26 #include "net/spdy/core/spdy_protocol.h"
28 #include "net/spdy/core/spdy_test_utils.h" 27 #include "net/spdy/core/spdy_test_utils.h"
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 header_stream_id_ = stream_id; 428 header_stream_id_ = stream_id;
430 } 429 }
431 430
432 void OnStreamFrameData(SpdyStreamId stream_id, 431 void OnStreamFrameData(SpdyStreamId stream_id,
433 const char* data, 432 const char* data,
434 size_t len) override { 433 size_t len) override {
435 VLOG(1) << "OnStreamFrameData(" << stream_id << ", data, " << len << ", " 434 VLOG(1) << "OnStreamFrameData(" << stream_id << ", data, " << len << ", "
436 << ") data:\n" 435 << ") data:\n"
437 << base::HexEncode(data, len); 436 << base::HexEncode(data, len);
438 EXPECT_EQ(header_stream_id_, stream_id); 437 EXPECT_EQ(header_stream_id_, stream_id);
438
439 data_bytes_ += len; 439 data_bytes_ += len;
440 } 440 }
441 441
442 void OnStreamEnd(SpdyStreamId stream_id) override { 442 void OnStreamEnd(SpdyStreamId stream_id) override {
443 VLOG(1) << "OnStreamEnd(" << stream_id << ")"; 443 VLOG(1) << "OnStreamEnd(" << stream_id << ")";
444 EXPECT_EQ(header_stream_id_, stream_id); 444 EXPECT_EQ(header_stream_id_, stream_id);
445 ++end_of_stream_count_; 445 ++end_of_stream_count_;
446 } 446 }
447 447
448 void OnStreamPadding(SpdyStreamId stream_id, size_t len) override { 448 void OnStreamPadding(SpdyStreamId stream_id, size_t len) override {
(...skipping 18 matching lines...) Expand all
467 headers_handler_.reset(); 467 headers_handler_.reset();
468 } 468 }
469 } 469 }
470 470
471 void OnRstStream(SpdyStreamId stream_id, SpdyErrorCode error_code) override { 471 void OnRstStream(SpdyStreamId stream_id, SpdyErrorCode error_code) override {
472 VLOG(1) << "OnRstStream(" << stream_id << ", " << error_code << ")"; 472 VLOG(1) << "OnRstStream(" << stream_id << ", " << error_code << ")";
473 ++fin_frame_count_; 473 ++fin_frame_count_;
474 } 474 }
475 475
476 void OnSetting(SpdySettingsIds id, uint32_t value) override { 476 void OnSetting(SpdySettingsIds id, uint32_t value) override {
477 VLOG(1) << "OnSetting(" << id << ", " << std::hex << ", " << value << ")"; 477 VLOG(1) << "OnSetting(" << id << ", " << std::hex << value << ")";
478 ++setting_count_; 478 ++setting_count_;
479 } 479 }
480 480
481 void OnSettingsAck() override { 481 void OnSettingsAck() override {
482 VLOG(1) << "OnSettingsAck"; 482 VLOG(1) << "OnSettingsAck";
483 ++settings_ack_received_; 483 ++settings_ack_received_;
484 } 484 }
485 485
486 void OnSettingsEnd() override { 486 void OnSettingsEnd() override {
487 VLOG(1) << "OnSettingsEnd"; 487 VLOG(1) << "OnSettingsEnd";
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 headers.SetHeader("alpha", "beta"); 846 headers.SetHeader("alpha", "beta");
847 headers.SetHeader("gamma", "charlie"); 847 headers.SetHeader("gamma", "charlie");
848 SpdySerializedFrame frame( 848 SpdySerializedFrame frame(
849 SpdyFramerPeer::SerializeHeaders(&framer, headers, &output_)); 849 SpdyFramerPeer::SerializeHeaders(&framer, headers, &output_));
850 850
851 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); 851 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
852 visitor.SimulateInFramer(reinterpret_cast<unsigned char*>(frame.data()), 852 visitor.SimulateInFramer(reinterpret_cast<unsigned char*>(frame.data()),
853 frame.size() - 2); 853 frame.size() - 2);
854 854
855 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); 855 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_);
856 EXPECT_EQ(0u, visitor.headers_.size()); 856 EXPECT_THAT(visitor.headers_, testing::IsEmpty());
857 } 857 }
858 858
859 // Test that we can encode and decode stream dependency values in a header 859 // Test that we can encode and decode stream dependency values in a header
860 // frame. 860 // frame.
861 TEST_P(SpdyFramerTest, HeaderStreamDependencyValues) { 861 TEST_P(SpdyFramerTest, HeaderStreamDependencyValues) {
862 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); 862 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION);
863 863
864 const SpdyStreamId parent_stream_id_test_array[] = {0, 3}; 864 const SpdyStreamId parent_stream_id_test_array[] = {0, 3};
865 for (SpdyStreamId parent_stream_id : parent_stream_id_test_array) { 865 for (SpdyStreamId parent_stream_id : parent_stream_id_test_array) {
866 const bool exclusive_test_array[] = {true, false}; 866 const bool exclusive_test_array[] = {true, false};
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 0x08, // Flags: PADDED 1050 0x08, // Flags: PADDED
1051 0x00, 0x00, 0x00, 0x01, // Stream: 1 1051 0x00, 0x00, 0x00, 0x01, // Stream: 1
1052 0x04, // PadLen: 4 trailing bytes 1052 0x04, // PadLen: 4 trailing bytes
1053 0x00, 0x00, 0x00, 0x00, // Padding 1053 0x00, 0x00, 0x00, 0x00, // Padding
1054 }; 1054 };
1055 1055
1056 SpdySerializedFrame frame(kH2FrameData, sizeof(kH2FrameData), false); 1056 SpdySerializedFrame frame(kH2FrameData, sizeof(kH2FrameData), false);
1057 1057
1058 EXPECT_CALL(visitor, OnHeaders(1, false, 0, 0, false, false, false)); 1058 EXPECT_CALL(visitor, OnHeaders(1, false, 0, 0, false, false, false));
1059 EXPECT_CALL(visitor, OnHeaderFrameStart(1)).Times(1); 1059 EXPECT_CALL(visitor, OnHeaderFrameStart(1)).Times(1);
1060
1060 EXPECT_EQ(frame.size(), framer.ProcessInput(frame.data(), frame.size())); 1061 EXPECT_EQ(frame.size(), framer.ProcessInput(frame.data(), frame.size()));
1061 EXPECT_FALSE(framer.HasError()); 1062 EXPECT_FALSE(framer.HasError());
1062 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 1063 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
1063 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 1064 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
1064 } 1065 }
1065 1066
1066 // Test that if we receive a DATA with stream ID zero, we signal an error 1067 // Test that if we receive a DATA with stream ID zero, we signal an error
1067 // (but don't crash). 1068 // (but don't crash).
1068 TEST_P(SpdyFramerTest, DataWithStreamIdZero) { 1069 TEST_P(SpdyFramerTest, DataWithStreamIdZero) {
1069 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 1070 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 // Test that if we receive a RST_STREAM with stream ID zero, we signal an error 1128 // Test that if we receive a RST_STREAM with stream ID zero, we signal an error
1128 // (but don't crash). 1129 // (but don't crash).
1129 TEST_P(SpdyFramerTest, RstStreamWithStreamIdZero) { 1130 TEST_P(SpdyFramerTest, RstStreamWithStreamIdZero) {
1130 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 1131 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
1131 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 1132 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
1132 framer.set_visitor(&visitor); 1133 framer.set_visitor(&visitor);
1133 1134
1134 SpdyRstStreamIR rst_stream_ir(0, ERROR_CODE_PROTOCOL_ERROR); 1135 SpdyRstStreamIR rst_stream_ir(0, ERROR_CODE_PROTOCOL_ERROR);
1135 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream_ir)); 1136 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream_ir));
1136 if (use_output_) { 1137 if (use_output_) {
1137 ASSERT_TRUE(framer.SerializeRstStream(rst_stream_ir, &output_)); 1138 EXPECT_TRUE(framer.SerializeRstStream(rst_stream_ir, &output_));
1138 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); 1139 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
1139 } 1140 }
1140 1141
1141 // We shouldn't have to read the whole frame before we signal an error. 1142 // We shouldn't have to read the whole frame before we signal an error.
1142 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 1143 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
1143 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size())); 1144 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size()));
1144 EXPECT_TRUE(framer.HasError()); 1145 EXPECT_TRUE(framer.HasError());
1145 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error()) 1146 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error())
1146 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 1147 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
1147 } 1148 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1194 SpdySerializedFrame frame(kH2FrameData, sizeof(kH2FrameData), false); 1195 SpdySerializedFrame frame(kH2FrameData, sizeof(kH2FrameData), false);
1195 1196
1196 // We shouldn't have to read the whole frame before we signal an error. 1197 // We shouldn't have to read the whole frame before we signal an error.
1197 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 1198 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
1198 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size())); 1199 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size()));
1199 EXPECT_TRUE(framer.HasError()); 1200 EXPECT_TRUE(framer.HasError());
1200 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error()) 1201 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error())
1201 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 1202 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
1202 } 1203 }
1203 1204
1204 // Test that if we receive a CONTINUATION with stream ID zero, we signal an 1205 // Test that if we receive a CONTINUATION with stream ID zero, we signal
1205 // SPDY_INVALID_STREAM_ID. 1206 // SPDY_INVALID_STREAM_ID.
1206 TEST_P(SpdyFramerTest, ContinuationWithStreamIdZero) { 1207 TEST_P(SpdyFramerTest, ContinuationWithStreamIdZero) {
1207 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 1208 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
1208 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 1209 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
1209 framer.set_visitor(&visitor); 1210 framer.set_visitor(&visitor);
1210 1211
1211 SpdyContinuationIR continuation(0); 1212 SpdyContinuationIR continuation(0);
1212 auto some_nonsense_encoding = 1213 auto some_nonsense_encoding =
1213 SpdyMakeUnique<SpdyString>("some nonsense encoding"); 1214 SpdyMakeUnique<SpdyString>("some nonsense encoding");
1214 continuation.take_encoding(std::move(some_nonsense_encoding)); 1215 continuation.take_encoding(std::move(some_nonsense_encoding));
1215 continuation.set_end_headers(true); 1216 continuation.set_end_headers(true);
1216 SpdySerializedFrame frame(framer.SerializeContinuation(continuation)); 1217 SpdySerializedFrame frame(framer.SerializeContinuation(continuation));
1217 if (use_output_) { 1218 if (use_output_) {
1218 ASSERT_TRUE(framer.SerializeContinuation(continuation, &output_)); 1219 ASSERT_TRUE(framer.SerializeContinuation(continuation, &output_));
1219 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); 1220 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
1220 } 1221 }
1221 1222
1222 // We shouldn't have to read the whole frame before we signal an error. 1223 // We shouldn't have to read the whole frame before we signal an error.
1223 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 1224 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
1224 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size())); 1225 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size()));
1225 EXPECT_TRUE(framer.HasError()); 1226 EXPECT_TRUE(framer.HasError());
1226 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error()) 1227 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error())
1227 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 1228 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
1228 } 1229 }
1229 1230
1230 // Test that if we receive a PUSH_PROMISE with stream ID zero, we signal an 1231 // Test that if we receive a PUSH_PROMISE with stream ID zero, we signal
1231 // SPDY_INVALID_STREAM_ID. 1232 // SPDY_INVALID_STREAM_ID.
1232 TEST_P(SpdyFramerTest, PushPromiseWithStreamIdZero) { 1233 TEST_P(SpdyFramerTest, PushPromiseWithStreamIdZero) {
1233 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 1234 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
1234 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 1235 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
1235 framer.set_visitor(&visitor); 1236 framer.set_visitor(&visitor);
1236 1237
1237 SpdyPushPromiseIR push_promise(0, 4); 1238 SpdyPushPromiseIR push_promise(0, 4);
1238 push_promise.SetHeader("alpha", "beta"); 1239 push_promise.SetHeader("alpha", "beta");
1239 SpdySerializedFrame frame(SpdyFramerPeer::SerializePushPromise( 1240 SpdySerializedFrame frame(SpdyFramerPeer::SerializePushPromise(
1240 &framer, push_promise, use_output_ ? &output_ : nullptr)); 1241 &framer, push_promise, use_output_ ? &output_ : nullptr));
1241 1242
1242 // We shouldn't have to read the whole frame before we signal an error. 1243 // We shouldn't have to read the whole frame before we signal an error.
1243 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 1244 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
1244 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size())); 1245 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size()));
1245 EXPECT_TRUE(framer.HasError()); 1246 EXPECT_TRUE(framer.HasError());
1246 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error()) 1247 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error())
1247 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 1248 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
1248 } 1249 }
1249 1250
1250 // Test that if we receive a PUSH_PROMISE with promised stream ID zero, we 1251 // Test that if we receive a PUSH_PROMISE with promised stream ID zero, we
1251 // signal SPDY_INVALID_STREAM_ID. 1252 // signal SPDY_INVALID_CONTROL_FRAME.
1252 TEST_P(SpdyFramerTest, PushPromiseWithPromisedStreamIdZero) { 1253 TEST_P(SpdyFramerTest, PushPromiseWithPromisedStreamIdZero) {
1253 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 1254 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
1254 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 1255 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
1255 framer.set_visitor(&visitor); 1256 framer.set_visitor(&visitor);
1256 1257
1257 SpdyPushPromiseIR push_promise(3, 0); 1258 SpdyPushPromiseIR push_promise(3, 0);
1258 push_promise.SetHeader("alpha", "beta"); 1259 push_promise.SetHeader("alpha", "beta");
1259 SpdySerializedFrame frame(SpdyFramerPeer::SerializePushPromise( 1260 SpdySerializedFrame frame(SpdyFramerPeer::SerializePushPromise(
1260 &framer, push_promise, use_output_ ? &output_ : nullptr)); 1261 &framer, push_promise, use_output_ ? &output_ : nullptr));
1261 1262
(...skipping 28 matching lines...) Expand all
1290 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); 1291 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
1291 visitor.SimulateInFramer( 1292 visitor.SimulateInFramer(
1292 reinterpret_cast<unsigned char*>(control_frame.data()), 1293 reinterpret_cast<unsigned char*>(control_frame.data()),
1293 control_frame.size()); 1294 control_frame.size());
1294 1295
1295 EXPECT_THAT(visitor.headers_, testing::ElementsAre(testing::Pair( 1296 EXPECT_THAT(visitor.headers_, testing::ElementsAre(testing::Pair(
1296 "name", SpdyStringPiece(value)))); 1297 "name", SpdyStringPiece(value))));
1297 } 1298 }
1298 1299
1299 TEST_P(SpdyFramerTest, CompressEmptyHeaders) { 1300 TEST_P(SpdyFramerTest, CompressEmptyHeaders) {
1300 // See crbug.com/172383 1301 // See https://crbug.com/172383/
1301 SpdyHeadersIR headers(1); 1302 SpdyHeadersIR headers(1);
1302 headers.SetHeader("server", "SpdyServer 1.0"); 1303 headers.SetHeader("server", "SpdyServer 1.0");
1303 headers.SetHeader("date", "Mon 12 Jan 2009 12:12:12 PST"); 1304 headers.SetHeader("date", "Mon 12 Jan 2009 12:12:12 PST");
1304 headers.SetHeader("status", "200"); 1305 headers.SetHeader("status", "200");
1305 headers.SetHeader("version", "HTTP/1.1"); 1306 headers.SetHeader("version", "HTTP/1.1");
1306 headers.SetHeader("content-type", "text/html"); 1307 headers.SetHeader("content-type", "text/html");
1307 headers.SetHeader("content-length", "12"); 1308 headers.SetHeader("content-length", "12");
1308 headers.SetHeader("x-empty-header", ""); 1309 headers.SetHeader("x-empty-header", "");
1309 1310
1310 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 1311 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream)); 1751 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
1751 if (use_output_) { 1752 if (use_output_) {
1752 ASSERT_TRUE(framer.SerializeRstStream(rst_stream, &output_)); 1753 ASSERT_TRUE(framer.SerializeRstStream(rst_stream, &output_));
1753 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); 1754 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
1754 } 1755 }
1755 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1756 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1756 } 1757 }
1757 1758
1758 { 1759 {
1759 const char kDescription[] = "RST_STREAM frame with max stream ID"; 1760 const char kDescription[] = "RST_STREAM frame with max stream ID";
1761 // clang-format off
1760 const unsigned char kH2FrameData[] = { 1762 const unsigned char kH2FrameData[] = {
1761 0x00, 0x00, 0x04, // Length: 4 1763 0x00, 0x00, 0x04, // Length: 4
1762 0x03, // Type: RST_STREAM 1764 0x03, // Type: RST_STREAM
1763 0x00, // Flags: none 1765 0x00, // Flags: none
1764 0x7f, 0xff, 0xff, 0xff, // Stream: 0x7fffffff 1766 0x7f, 0xff, 0xff, 0xff, // Stream: 0x7fffffff
1765 0x00, 0x00, 0x00, 0x01, // Error: PROTOCOL_ERROR 1767 0x00, 0x00, 0x00, 0x01, // Error: PROTOCOL_ERROR
1766 }; 1768 };
1767 SpdyRstStreamIR rst_stream(0x7FFFFFFF, ERROR_CODE_PROTOCOL_ERROR); 1769 SpdyRstStreamIR rst_stream(0x7FFFFFFF, ERROR_CODE_PROTOCOL_ERROR);
1768 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream)); 1770 SpdySerializedFrame frame(framer.SerializeRstStream(rst_stream));
1769 if (use_output_) { 1771 if (use_output_) {
(...skipping 22 matching lines...) Expand all
1792 } 1794 }
1793 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1795 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1794 } 1796 }
1795 } 1797 }
1796 1798
1797 TEST_P(SpdyFramerTest, CreateSettings) { 1799 TEST_P(SpdyFramerTest, CreateSettings) {
1798 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 1800 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
1799 1801
1800 { 1802 {
1801 const char kDescription[] = "Network byte order SETTINGS frame"; 1803 const char kDescription[] = "Network byte order SETTINGS frame";
1802
1803 const unsigned char kH2FrameData[] = { 1804 const unsigned char kH2FrameData[] = {
1804 0x00, 0x00, 0x06, // Length: 6 1805 0x00, 0x00, 0x06, // Length: 6
1805 0x04, // Type: SETTINGS 1806 0x04, // Type: SETTINGS
1806 0x00, // Flags: none 1807 0x00, // Flags: none
1807 0x00, 0x00, 0x00, 0x00, // Stream: 0 1808 0x00, 0x00, 0x00, 0x00, // Stream: 0
1808 0x00, 0x04, // Param: INITIAL_WINDOW_SIZE 1809 0x00, 0x04, // Param: INITIAL_WINDOW_SIZE
1809 0x0a, 0x0b, 0x0c, 0x0d, // Value: 168496141 1810 0x0a, 0x0b, 0x0c, 0x0d, // Value: 168496141
1810 }; 1811 };
1811 1812
1812 uint32_t kValue = 0x0a0b0c0d; 1813 uint32_t kValue = 0x0a0b0c0d;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1853 output_.Reset(); 1854 output_.Reset();
1854 ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_)); 1855 ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
1855 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); 1856 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
1856 } 1857 }
1857 1858
1858 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1859 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1859 } 1860 }
1860 1861
1861 { 1862 {
1862 const char kDescription[] = "Empty SETTINGS frame"; 1863 const char kDescription[] = "Empty SETTINGS frame";
1863
1864 const unsigned char kH2FrameData[] = { 1864 const unsigned char kH2FrameData[] = {
1865 0x00, 0x00, 0x00, // Length: 0 1865 0x00, 0x00, 0x00, // Length: 0
1866 0x04, // Type: SETTINGS 1866 0x04, // Type: SETTINGS
1867 0x00, // Flags: none 1867 0x00, // Flags: none
1868 0x00, 0x00, 0x00, 0x00, // Stream: 0 1868 0x00, 0x00, 0x00, 0x00, // Stream: 0
1869 }; 1869 };
1870 SpdySettingsIR settings_ir; 1870 SpdySettingsIR settings_ir;
1871 SpdySerializedFrame frame(framer.SerializeSettings(settings_ir)); 1871 SpdySerializedFrame frame(framer.SerializeSettings(settings_ir));
1872 if (use_output_) { 1872 if (use_output_) {
1873 output_.Reset(); 1873 output_.Reset();
(...skipping 19 matching lines...) Expand all
1893 0x9a, 0xbc, 0xde, 0xff, // Data 1893 0x9a, 0xbc, 0xde, 0xff, // Data
1894 }; 1894 };
1895 const unsigned char kH2FrameDataWithAck[] = { 1895 const unsigned char kH2FrameDataWithAck[] = {
1896 0x00, 0x00, 0x08, // Length: 8 1896 0x00, 0x00, 0x08, // Length: 8
1897 0x06, // Type: PING 1897 0x06, // Type: PING
1898 0x01, // Flags: ACK 1898 0x01, // Flags: ACK
1899 0x00, 0x00, 0x00, 0x00, // Stream: 0 1899 0x00, 0x00, 0x00, 0x00, // Stream: 0
1900 0x12, 0x34, 0x56, 0x78, // Opaque 1900 0x12, 0x34, 0x56, 0x78, // Opaque
1901 0x9a, 0xbc, 0xde, 0xff, // Data 1901 0x9a, 0xbc, 0xde, 0xff, // Data
1902 }; 1902 };
1903 SpdySerializedFrame frame;
1904 const SpdyPingId kPingId = 0x123456789abcdeffULL; 1903 const SpdyPingId kPingId = 0x123456789abcdeffULL;
1905 SpdyPingIR ping_ir(kPingId); 1904 SpdyPingIR ping_ir(kPingId);
1906 // Tests SpdyPingIR when the ping is not an ack. 1905 // Tests SpdyPingIR when the ping is not an ack.
1907 ASSERT_FALSE(ping_ir.is_ack()); 1906 ASSERT_FALSE(ping_ir.is_ack());
1908 frame = framer.SerializePing(ping_ir); 1907 SpdySerializedFrame frame(framer.SerializePing(ping_ir));
1909 if (use_output_) { 1908 if (use_output_) {
1910 ASSERT_TRUE(framer.SerializePing(ping_ir, &output_)); 1909 ASSERT_TRUE(framer.SerializePing(ping_ir, &output_));
1911 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); 1910 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
1912 } 1911 }
1913 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData)); 1912 CompareFrame(kDescription, frame, kH2FrameData, arraysize(kH2FrameData));
1914 1913
1915 // Tests SpdyPingIR when the ping is an ack. 1914 // Tests SpdyPingIR when the ping is an ack.
1916 ping_ir.set_is_ack(true); 1915 ping_ir.set_is_ack(true);
1917 frame = framer.SerializePing(ping_ir); 1916 frame = framer.SerializePing(ping_ir);
1918 if (use_output_) { 1917 if (use_output_) {
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after
2874 EXPECT_TRUE(it->HasNextFrame()); 2873 EXPECT_TRUE(it->HasNextFrame());
2875 EXPECT_EQ(it->NextFrame(&output_), frame.size()); 2874 EXPECT_EQ(it->NextFrame(&output_), frame.size());
2876 EXPECT_FALSE(it->HasNextFrame()); 2875 EXPECT_FALSE(it->HasNextFrame());
2877 } 2876 }
2878 2877
2879 private: 2878 private:
2880 ArrayOutputBuffer output_; 2879 ArrayOutputBuffer output_;
2881 }; 2880 };
2882 2881
2883 TEST_F(SpdyControlFrameIteratorTest, RstStreamFrameWithIterator) { 2882 TEST_F(SpdyControlFrameIteratorTest, RstStreamFrameWithIterator) {
2884 auto ir = base::MakeUnique<SpdyRstStreamIR>(0, ERROR_CODE_PROTOCOL_ERROR); 2883 auto ir = SpdyMakeUnique<SpdyRstStreamIR>(0, ERROR_CODE_PROTOCOL_ERROR);
2885 RunTest(std::move(ir)); 2884 RunTest(std::move(ir));
2886 } 2885 }
2887 2886
2888 TEST_F(SpdyControlFrameIteratorTest, SettingsFrameWithIterator) { 2887 TEST_F(SpdyControlFrameIteratorTest, SettingsFrameWithIterator) {
2889 auto ir = base::MakeUnique<SpdySettingsIR>(); 2888 auto ir = SpdyMakeUnique<SpdySettingsIR>();
2890 uint32_t kValue = 0x0a0b0c0d; 2889 uint32_t kValue = 0x0a0b0c0d;
2891 SpdySettingsIds kId = SETTINGS_INITIAL_WINDOW_SIZE; 2890 SpdySettingsIds kId = SETTINGS_INITIAL_WINDOW_SIZE;
2892 ir->AddSetting(kId, kValue); 2891 ir->AddSetting(kId, kValue);
2893 RunTest(std::move(ir)); 2892 RunTest(std::move(ir));
2894 } 2893 }
2895 2894
2896 TEST_F(SpdyControlFrameIteratorTest, PingFrameWithIterator) { 2895 TEST_F(SpdyControlFrameIteratorTest, PingFrameWithIterator) {
2897 const SpdyPingId kPingId = 0x123456789abcdeffULL; 2896 const SpdyPingId kPingId = 0x123456789abcdeffULL;
2898 auto ir = base::MakeUnique<SpdyPingIR>(kPingId); 2897 auto ir = SpdyMakeUnique<SpdyPingIR>(kPingId);
2899 RunTest(std::move(ir)); 2898 RunTest(std::move(ir));
2900 } 2899 }
2901 2900
2902 TEST_F(SpdyControlFrameIteratorTest, GoAwayFrameWithIterator) { 2901 TEST_F(SpdyControlFrameIteratorTest, GoAwayFrameWithIterator) {
2903 auto ir = base::MakeUnique<SpdyGoAwayIR>(0, ERROR_CODE_NO_ERROR, "GA"); 2902 auto ir = SpdyMakeUnique<SpdyGoAwayIR>(0, ERROR_CODE_NO_ERROR, "GA");
2904 RunTest(std::move(ir)); 2903 RunTest(std::move(ir));
2905 } 2904 }
2906 2905
2907 TEST_F(SpdyControlFrameIteratorTest, WindowUpdateFrameWithIterator) { 2906 TEST_F(SpdyControlFrameIteratorTest, WindowUpdateFrameWithIterator) {
2908 auto ir = base::MakeUnique<SpdyWindowUpdateIR>(1, 1); 2907 auto ir = SpdyMakeUnique<SpdyWindowUpdateIR>(1, 1);
2909 RunTest(std::move(ir)); 2908 RunTest(std::move(ir));
2910 } 2909 }
2911 2910
2912 TEST_F(SpdyControlFrameIteratorTest, AtlSvcFrameWithIterator) { 2911 TEST_F(SpdyControlFrameIteratorTest, AtlSvcFrameWithIterator) {
2913 auto ir = base::MakeUnique<SpdyAltSvcIR>(3); 2912 auto ir = SpdyMakeUnique<SpdyAltSvcIR>(3);
2914 ir->set_origin("origin"); 2913 ir->set_origin("origin");
2915 ir->add_altsvc(SpdyAltSvcWireFormat::AlternativeService( 2914 ir->add_altsvc(SpdyAltSvcWireFormat::AlternativeService(
2916 "pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector())); 2915 "pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector()));
2917 ir->add_altsvc(SpdyAltSvcWireFormat::AlternativeService( 2916 ir->add_altsvc(SpdyAltSvcWireFormat::AlternativeService(
2918 "p\"=i:d", "h_\\o\"st", 123, 42, 2917 "p\"=i:d", "h_\\o\"st", 123, 42,
2919 SpdyAltSvcWireFormat::VersionVector{24})); 2918 SpdyAltSvcWireFormat::VersionVector{24}));
2920 RunTest(std::move(ir)); 2919 RunTest(std::move(ir));
2921 } 2920 }
2922 2921
2923 TEST_F(SpdyControlFrameIteratorTest, PriorityFrameWithIterator) { 2922 TEST_F(SpdyControlFrameIteratorTest, PriorityFrameWithIterator) {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
3031 // Zero-len settings frames are permitted as of HTTP/2. 3030 // Zero-len settings frames are permitted as of HTTP/2.
3032 EXPECT_EQ(0, visitor.error_count_); 3031 EXPECT_EQ(0, visitor.error_count_);
3033 } 3032 }
3034 3033
3035 // Tests handling of SETTINGS frames with invalid length. 3034 // Tests handling of SETTINGS frames with invalid length.
3036 TEST_P(SpdyFramerTest, ReadBogusLenSettingsFrame) { 3035 TEST_P(SpdyFramerTest, ReadBogusLenSettingsFrame) {
3037 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3036 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3038 SpdySettingsIR settings_ir; 3037 SpdySettingsIR settings_ir;
3039 3038
3040 // Add settings to more than fill the frame so that we don't get a buffer 3039 // Add settings to more than fill the frame so that we don't get a buffer
3041 // overflow when calling SimulateInFramer() below. These settings must be 3040 // overflow when calling SimulateInFramer() below. These settings must be
3042 // distinct parameters because SpdySettingsIR has a map for settings, and will 3041 // distinct parameters because SpdySettingsIR has a map for settings, and
3043 // collapse multiple copies of the same parameter. 3042 // will collapse multiple copies of the same parameter.
3044 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0x00000002); 3043 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0x00000002);
3045 settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 0x00000002); 3044 settings_ir.AddSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 0x00000002);
3046 SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir)); 3045 SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
3047 if (use_output_) { 3046 if (use_output_) {
3048 ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_)); 3047 ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
3049 control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); 3048 control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
3050 } 3049 }
3051 const size_t kNewLength = 8; 3050 const size_t kNewLength = 8;
3052 SetFrameLength(&control_frame, kNewLength); 3051 SetFrameLength(&control_frame, kNewLength);
3053 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); 3052 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
3421 3420
3422 EXPECT_THAT( 3421 EXPECT_THAT(
3423 visitor.headers_, 3422 visitor.headers_,
3424 testing::ElementsAre(testing::Pair("cookie", "foo=bar; baz=bing; "), 3423 testing::ElementsAre(testing::Pair("cookie", "foo=bar; baz=bing; "),
3425 testing::Pair("name", "value"))); 3424 testing::Pair("name", "value")));
3426 } 3425 }
3427 3426
3428 TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) { 3427 TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) {
3429 // frame-format off 3428 // frame-format off
3430 const unsigned char kInput[] = { 3429 const unsigned char kInput[] = {
3431 0x00, 0x00, 0x17, 0x05, // PUSH_PROMISE 3430 0x00, 0x00, 0x17, // Length: 23
3432 0x08, 0x00, 0x00, 0x00, // PADDED 3431 0x05, // Type: PUSH_PROMISE
3433 0x01, 0x02, 0x00, 0x00, // Stream 1, Pad length field 3432 0x08, // Flags: PADDED
3434 0x00, 0x2A, 0x00, 0x06, // Promised stream 42 3433 0x00, 0x00, 0x00, 0x01, // Stream: 1
3435 'c', 'o', 'o', 'k', 3434 0x02, // PadLen: 2 trailing bytes
3436 'i', 'e', 0x07, 'f', 3435 0x00, 0x00, 0x00, 0x2a, // Promise: 42
3437 'o', 'o', '=', 'b', 3436 0x00, // Unindexed Entry
3438 'a', 'r', 0x00, 0x00, 3437 0x06, // Name Len: 6
3438 'c', 'o', 'o', 'k', 'i', 'e', // Name
3439 0x07, // Value Len: 7
3440 'f', 'o', 'o', '=', 'b', 'a', 'r', // Value
3441 0x00, 0x00, // Padding
3439 3442
3440 0x00, 0x00, 0x14, 0x09, // CONTINUATION 3443 0x00, 0x00, 0x14, // Length: 20
3441 0x00, 0x00, 0x00, 0x00, 3444 0x09, // Type: CONTINUATION
3442 0x01, 0x00, 0x06, 'c', // Stream 1 3445 0x00, // Flags: none
3443 'o', 'o', 'k', 'i', 3446 0x00, 0x00, 0x00, 0x01, // Stream: 1
3444 'e', 0x08, 'b', 'a', 3447 0x00, // Unindexed Entry
3445 'z', '=', 'b', 'i', 3448 0x06, // Name Len: 6
3446 'n', 'g', 0x00, 0x06, 3449 'c', 'o', 'o', 'k', 'i', 'e', // Name
3447 'c', 3450 0x08, // Value Len: 7
3451 'b', 'a', 'z', '=', 'b', 'i', 'n', 'g', // Value
3452 0x00, // Unindexed Entry
3453 0x06, // Name Len: 6
3454 'c', // Name (split)
3448 3455
3449 0x00, 0x00, 0x12, 0x09, // CONTINUATION 3456 0x00, 0x00, 0x12, // Length: 18
3450 0x04, 0x00, 0x00, 0x00, // END_HEADERS 3457 0x09, // Type: CONTINUATION
3451 0x01, 'o', 'o', 'k', // Stream 1 3458 0x04, // Flags: END_HEADERS
3452 'i', 'e', 0x00, 0x00, 3459 0x00, 0x00, 0x00, 0x01, // Stream: 1
3453 0x04, 'n', 'a', 'm', 3460 'o', 'o', 'k', 'i', 'e', // Name (continued)
3454 'e', 0x05, 'v', 'a', 3461 0x00, // Value Len: 0
3455 'l', 'u', 'e', 3462 0x00, // Unindexed Entry
3463 0x04, // Name Len: 4
3464 'n', 'a', 'm', 'e', // Name
3465 0x05, // Value Len: 5
3466 'v', 'a', 'l', 'u', 'e', // Value
3456 }; 3467 };
3457 // frame-format on 3468 // frame-format on
3458 3469
3459 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3470 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3460 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); 3471 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
3461 visitor.SimulateInFramer(kInput, sizeof(kInput)); 3472 visitor.SimulateInFramer(kInput, sizeof(kInput));
3462 3473
3463 EXPECT_EQ(0, visitor.error_count_); 3474 EXPECT_EQ(0, visitor.error_count_);
3464 EXPECT_EQ(1u, visitor.last_push_promise_stream_); 3475 EXPECT_EQ(1u, visitor.last_push_promise_stream_);
3465 EXPECT_EQ(42u, visitor.last_push_promise_promised_stream_); 3476 EXPECT_EQ(42u, visitor.last_push_promise_promised_stream_);
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
3724 settings_ir.AddSetting(SETTINGS_HEADER_TABLE_SIZE, 10); 3735 settings_ir.AddSetting(SETTINGS_HEADER_TABLE_SIZE, 10);
3725 SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir)); 3736 SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
3726 if (use_output_) { 3737 if (use_output_) {
3727 ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_)); 3738 ASSERT_TRUE(framer.SerializeSettings(settings_ir, &output_));
3728 control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); 3739 control_frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
3729 } 3740 }
3730 visitor.SimulateInFramer( 3741 visitor.SimulateInFramer(
3731 reinterpret_cast<unsigned char*>(control_frame.data()), 3742 reinterpret_cast<unsigned char*>(control_frame.data()),
3732 control_frame.size()); 3743 control_frame.size());
3733 EXPECT_EQ(0, visitor.error_count_); 3744 EXPECT_EQ(0, visitor.error_count_);
3734 EXPECT_EQ(1u, static_cast<unsigned>(visitor.setting_count_)); 3745 EXPECT_EQ(1, visitor.setting_count_);
3735 EXPECT_EQ(1u, static_cast<unsigned>(visitor.settings_ack_sent_)); 3746 EXPECT_EQ(1, visitor.settings_ack_sent_);
3736 } 3747 }
3737 3748
3738 TEST_P(SpdyFramerTest, ReadUnknownExtensionFrameWithExtension) { 3749 TEST_P(SpdyFramerTest, ReadUnknownExtensionFrameWithExtension) {
3739 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3750 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3740 3751
3741 // The unrecognized frame type should still have a valid length. 3752 // The unrecognized frame type should still have a valid length.
3742 const unsigned char unknown_frame[] = { 3753 const unsigned char unknown_frame[] = {
3743 0x00, 0x00, 0x14, // Length: 20 3754 0x00, 0x00, 0x14, // Length: 20
3744 0xff, // Type: UnknownFrameType(255) 3755 0xff, // Type: UnknownFrameType(255)
3745 0xff, // Flags: 0xff 3756 0xff, // Flags: 0xff
(...skipping 17 matching lines...) Expand all
3763 3774
3764 // Follow it up with a valid control frame to make sure we handle 3775 // Follow it up with a valid control frame to make sure we handle
3765 // subsequent frames correctly. 3776 // subsequent frames correctly.
3766 SpdySettingsIR settings_ir; 3777 SpdySettingsIR settings_ir;
3767 settings_ir.AddSetting(SETTINGS_HEADER_TABLE_SIZE, 10); 3778 settings_ir.AddSetting(SETTINGS_HEADER_TABLE_SIZE, 10);
3768 SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir)); 3779 SpdySerializedFrame control_frame(framer.SerializeSettings(settings_ir));
3769 visitor.SimulateInFramer( 3780 visitor.SimulateInFramer(
3770 reinterpret_cast<unsigned char*>(control_frame.data()), 3781 reinterpret_cast<unsigned char*>(control_frame.data()),
3771 control_frame.size()); 3782 control_frame.size());
3772 EXPECT_EQ(0, visitor.error_count_); 3783 EXPECT_EQ(0, visitor.error_count_);
3773 EXPECT_EQ(1u, static_cast<unsigned>(visitor.setting_count_)); 3784 EXPECT_EQ(1, visitor.setting_count_);
3774 EXPECT_EQ(1u, static_cast<unsigned>(visitor.settings_ack_sent_)); 3785 EXPECT_EQ(1, visitor.settings_ack_sent_);
3775 } 3786 }
3776 3787
3777 TEST_P(SpdyFramerTest, ReadGarbageWithValidLength) { 3788 TEST_P(SpdyFramerTest, ReadGarbageWithValidLength) {
3778 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); 3789 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
3779 const unsigned char kFrameData[] = { 3790 const unsigned char kFrameData[] = {
3780 0x00, 0x00, 0x08, // Length: 8 3791 0x00, 0x00, 0x08, // Length: 8
3781 0xff, // Type: UnknownFrameType(255) 3792 0xff, // Type: UnknownFrameType(255)
3782 0xff, // Flags: 0xff 3793 0xff, // Flags: 0xff
3783 0xff, 0xff, 0xff, 0xff, // Stream: 0x7fffffff (R-bit set) 3794 0xff, 0xff, 0xff, 0xff, // Stream: 0x7fffffff (R-bit set)
3784 0xff, 0xff, 0xff, 0xff, // Payload 3795 0xff, 0xff, 0xff, 0xff, // Payload
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
4081 } 4092 }
4082 headers_ir.SetHeader("foo", "bar"); 4093 headers_ir.SetHeader("foo", "bar");
4083 SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders( 4094 SpdySerializedFrame frame(SpdyFramerPeer::SerializeHeaders(
4084 &framer, headers_ir, use_output_ ? &output_ : nullptr)); 4095 &framer, headers_ir, use_output_ ? &output_ : nullptr));
4085 uint8_t set_flags = flags & ~HEADERS_FLAG_PADDED; 4096 uint8_t set_flags = flags & ~HEADERS_FLAG_PADDED;
4086 SetFrameFlags(&frame, set_flags); 4097 SetFrameFlags(&frame, set_flags);
4087 4098
4088 // Expected callback values 4099 // Expected callback values
4089 SpdyStreamId stream_id = 57; 4100 SpdyStreamId stream_id = 57;
4090 bool has_priority = false; 4101 bool has_priority = false;
4091 SpdyPriority priority = 0; 4102 int weight = 0;
4092 SpdyStreamId parent_stream_id = 0; 4103 SpdyStreamId parent_stream_id = 0;
4093 bool exclusive = false; 4104 bool exclusive = false;
4094 bool fin = flags & CONTROL_FLAG_FIN; 4105 bool fin = flags & CONTROL_FLAG_FIN;
4095 bool end = flags & HEADERS_FLAG_END_HEADERS; 4106 bool end = flags & HEADERS_FLAG_END_HEADERS;
4096 if (flags & HEADERS_FLAG_PRIORITY) { 4107 if (flags & HEADERS_FLAG_PRIORITY) {
4097 has_priority = true; 4108 has_priority = true;
4098 priority = 3; 4109 weight = 3;
4099 parent_stream_id = 5; 4110 parent_stream_id = 5;
4100 exclusive = true; 4111 exclusive = true;
4101 } 4112 }
4102 EXPECT_CALL(visitor, OnHeaders(stream_id, has_priority, priority, 4113 EXPECT_CALL(visitor, OnHeaders(stream_id, has_priority, weight,
4103 parent_stream_id, exclusive, fin, end)); 4114 parent_stream_id, exclusive, fin, end));
4104 EXPECT_CALL(visitor, OnHeaderFrameStart(57)).Times(1); 4115 EXPECT_CALL(visitor, OnHeaderFrameStart(57)).Times(1);
4105 if (end) { 4116 if (end) {
4106 EXPECT_CALL(visitor, OnHeaderFrameEnd(57, _)).Times(1); 4117 EXPECT_CALL(visitor, OnHeaderFrameEnd(57, _)).Times(1);
4107 } 4118 }
4108 if (flags & DATA_FLAG_FIN && end) { 4119 if (flags & DATA_FLAG_FIN && end) {
4109 EXPECT_CALL(visitor, OnStreamEnd(_)); 4120 EXPECT_CALL(visitor, OnStreamEnd(_));
4110 } else { 4121 } else {
4111 // Do not close the stream if we are expecting a CONTINUATION frame. 4122 // Do not close the stream if we are expecting a CONTINUATION frame.
4112 EXPECT_CALL(visitor, OnStreamEnd(_)).Times(0); 4123 EXPECT_CALL(visitor, OnStreamEnd(_)).Times(0);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
4260 } 4271 }
4261 4272
4262 framer.ProcessInput(frame0.data(), frame0.size()); 4273 framer.ProcessInput(frame0.data(), frame0.size());
4263 framer.ProcessInput(frame1.data(), frame1.size()); 4274 framer.ProcessInput(frame1.data(), frame1.size());
4264 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 4275 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4265 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 4276 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
4266 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 4277 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
4267 } while (++flags != 0); 4278 } while (++flags != 0);
4268 } 4279 }
4269 4280
4270 // TODO(mlavan): Add TEST_F(SpdyFramerTest, AltSvcFrameFlags) 4281 // TODO(mlavan): Add TEST_P(SpdyFramerTest, AltSvcFrameFlags)
4271 4282
4272 // Test handling of a RST_STREAM with out-of-bounds status codes. 4283 // Test handling of a RST_STREAM with out-of-bounds status codes.
4273 TEST_P(SpdyFramerTest, RstStreamStatusBounds) { 4284 TEST_P(SpdyFramerTest, RstStreamStatusBounds) {
4274 const unsigned char kH2RstStreamInvalid[] = { 4285 const unsigned char kH2RstStreamInvalid[] = {
4275 0x00, 0x00, 0x04, // Length: 4 4286 0x00, 0x00, 0x04, // Length: 4
4276 0x03, // Type: RST_STREAM 4287 0x03, // Type: RST_STREAM
4277 0x00, // Flags: none 4288 0x00, // Flags: none
4278 0x00, 0x00, 0x00, 0x01, // Stream: 1 4289 0x00, 0x00, 0x00, 0x01, // Stream: 1
4279 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR 4290 0x00, 0x00, 0x00, 0x00, // Error: NO_ERROR
4280 }; 4291 };
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
4564 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); 4575 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
4565 } 4576 }
4566 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4577 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4567 framer.set_visitor(&visitor); 4578 framer.set_visitor(&visitor);
4568 EXPECT_CALL(visitor, OnPriority(3, 1, 256, false)); 4579 EXPECT_CALL(visitor, OnPriority(3, 1, 256, false));
4569 framer.ProcessInput(frame.data(), frame.size()); 4580 framer.ProcessInput(frame.data(), frame.size());
4570 4581
4571 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); 4582 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
4572 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) 4583 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error())
4573 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); 4584 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error());
4574 // TODO(mlavan): once we actually maintain a priority tree,
4575 // check that state is adjusted correctly.
4576 } 4585 }
4577 4586
4578 // Tests handling of PRIORITY frame with incorrect size. 4587 // Tests handling of PRIORITY frame with incorrect size.
4579 TEST_P(SpdyFramerTest, ReadIncorrectlySizedPriority) { 4588 TEST_P(SpdyFramerTest, ReadIncorrectlySizedPriority) {
4580 // PRIORITY frame of size 4, which isn't correct. 4589 // PRIORITY frame of size 4, which isn't correct.
4581 const unsigned char kFrameData[] = { 4590 const unsigned char kFrameData[] = {
4582 0x00, 0x00, 0x04, // Length: 4 4591 0x00, 0x00, 0x04, // Length: 4
4583 0x02, // Type: PRIORITY 4592 0x02, // Type: PRIORITY
4584 0x00, // Flags: none 4593 0x00, // Flags: none
4585 0x00, 0x00, 0x00, 0x03, // Stream: 3 4594 0x00, 0x00, 0x00, 0x03, // Stream: 3
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
4808 4817
4809 EXPECT_EQ(1, visitor->data_frame_count_); 4818 EXPECT_EQ(1, visitor->data_frame_count_);
4810 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); 4819 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_));
4811 EXPECT_EQ(0, visitor->headers_frame_count_); 4820 EXPECT_EQ(0, visitor->headers_frame_count_);
4812 } 4821 }
4813 } 4822 }
4814 4823
4815 } // namespace test 4824 } // namespace test
4816 4825
4817 } // namespace net 4826 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698