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

Side by Side Diff: net/quic/quic_headers_stream_test.cc

Issue 1777163003: OnStreamEnd is now called instead of the sentinel call of OnStreamFrameData(stream_id, nullptr, 0, … (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@116266391
Patch Set: Merge spdy_framer_test.cc Created 4 years, 9 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/quic/quic_headers_stream.h" 5 #include "net/quic/quic_headers_stream.h"
6 6
7 #include "net/quic/quic_utils.h" 7 #include "net/quic/quic_utils.h"
8 #include "net/quic/spdy_utils.h" 8 #include "net/quic/spdy_utils.h"
9 #include "net/quic/test_tools/quic_connection_peer.h" 9 #include "net/quic/test_tools/quic_connection_peer.h"
10 #include "net/quic/test_tools/quic_spdy_session_peer.h" 10 #include "net/quic/test_tools/quic_spdy_session_peer.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 bool end)); 86 bool end));
87 MOCK_METHOD2(OnContinuation, void(SpdyStreamId stream_id, bool end)); 87 MOCK_METHOD2(OnContinuation, void(SpdyStreamId stream_id, bool end));
88 MOCK_METHOD3(OnAltSvc, 88 MOCK_METHOD3(OnAltSvc,
89 void(SpdyStreamId stream_id, 89 void(SpdyStreamId stream_id,
90 StringPiece origin, 90 StringPiece origin,
91 const SpdyAltSvcWireFormat::AlternativeServiceVector& 91 const SpdyAltSvcWireFormat::AlternativeServiceVector&
92 altsvc_vector)); 92 altsvc_vector));
93 MOCK_METHOD2(OnUnknownFrame, bool(SpdyStreamId stream_id, int frame_type)); 93 MOCK_METHOD2(OnUnknownFrame, bool(SpdyStreamId stream_id, int frame_type));
94 }; 94 };
95 95
96 // Run all tests with each version, and client or server 96 // Run all tests with each version, perspective (client or server),
97 // and relevant flag options (false or true)
97 struct TestParams { 98 struct TestParams {
98 TestParams(QuicVersion version, Perspective perspective) 99 TestParams(QuicVersion version,
99 : version(version), perspective(perspective) {} 100 Perspective perspective,
101 bool spdy_on_stream_end)
102 : version(version),
103 perspective(perspective),
104 spdy_on_stream_end(spdy_on_stream_end) {}
100 105
101 friend ostream& operator<<(ostream& os, const TestParams& p) { 106 friend ostream& operator<<(ostream& os, const TestParams& p) {
102 os << "{ version: " << QuicVersionToString(p.version); 107 os << "{ version: " << QuicVersionToString(p.version);
103 os << ", perspective: " << p.perspective << " }"; 108 os << ", perspective: " << p.perspective;
109 os << ", spdy_on_stream_end: " << p.spdy_on_stream_end << " }";
104 return os; 110 return os;
105 } 111 }
106 112
107 QuicVersion version; 113 QuicVersion version;
108 Perspective perspective; 114 Perspective perspective;
115 bool spdy_on_stream_end;
109 }; 116 };
110 117
111 // Constructs various test permutations. 118 // Constructs various test permutations.
112 vector<TestParams> GetTestParams() { 119 vector<TestParams> GetTestParams() {
113 vector<TestParams> params; 120 vector<TestParams> params;
114 QuicVersionVector all_supported_versions = QuicSupportedVersions(); 121 QuicVersionVector all_supported_versions = QuicSupportedVersions();
115 for (const QuicVersion version : all_supported_versions) { 122 for (const QuicVersion version : all_supported_versions) {
116 params.push_back(TestParams(version, Perspective::IS_CLIENT)); 123 params.push_back(TestParams(version, Perspective::IS_CLIENT, true));
117 params.push_back(TestParams(version, Perspective::IS_SERVER)); 124 params.push_back(TestParams(version, Perspective::IS_SERVER, true));
125 params.push_back(TestParams(version, Perspective::IS_CLIENT, false));
126 params.push_back(TestParams(version, Perspective::IS_SERVER, false));
118 } 127 }
119 FLAGS_quic_supports_push_promise = true; 128 FLAGS_quic_supports_push_promise = true;
120 return params; 129 return params;
121 } 130 }
122 131
123 class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> { 132 class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParams> {
124 public: 133 public:
125 QuicHeadersStreamTest() 134 QuicHeadersStreamTest()
126 : connection_(new StrictMock<MockConnection>(&helper_, 135 : connection_(new StrictMock<MockConnection>(&helper_,
127 perspective(), 136 perspective(),
128 GetVersion())), 137 GetVersion())),
129 session_(connection_), 138 session_(connection_),
130 headers_stream_(QuicSpdySessionPeer::GetHeadersStream(&session_)), 139 headers_stream_(QuicSpdySessionPeer::GetHeadersStream(&session_)),
131 body_("hello world"), 140 body_("hello world"),
132 framer_(HTTP2),
133 stream_frame_(kHeadersStreamId, /*fin=*/false, /*offset=*/0, ""), 141 stream_frame_(kHeadersStreamId, /*fin=*/false, /*offset=*/0, ""),
134 next_promised_stream_id_(2) { 142 next_promised_stream_id_(2) {
135 FLAGS_quic_always_log_bugs_for_tests = true; 143 FLAGS_quic_always_log_bugs_for_tests = true;
136 headers_[":version"] = "HTTP/1.1"; 144 headers_[":version"] = "HTTP/1.1";
137 headers_[":status"] = "200 Ok"; 145 headers_[":status"] = "200 Ok";
138 headers_["content-length"] = "11"; 146 headers_["content-length"] = "11";
139 framer_.set_visitor(&visitor_); 147 FLAGS_spdy_on_stream_end = GetParam().spdy_on_stream_end;
148 framer_ = std::unique_ptr<SpdyFramer>(new SpdyFramer(HTTP2));
149 framer_->set_visitor(&visitor_);
140 EXPECT_EQ(version(), session_.connection()->version()); 150 EXPECT_EQ(version(), session_.connection()->version());
141 EXPECT_TRUE(headers_stream_ != nullptr); 151 EXPECT_TRUE(headers_stream_ != nullptr);
142 VLOG(1) << GetParam(); 152 VLOG(1) << GetParam();
143 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); 153 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
144 } 154 }
145 155
146 QuicConsumedData SaveIov(const QuicIOVector& data) { 156 QuicConsumedData SaveIov(const QuicIOVector& data) {
147 const iovec* iov = data.iov; 157 const iovec* iov = data.iov;
148 int count = data.iov_count; 158 int count = data.iov_count;
149 for (int i = 0; i < count; ++i) { 159 for (int i = 0; i < count; ++i) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 EXPECT_CALL(visitor_, 200 EXPECT_CALL(visitor_,
191 OnHeaders(stream_id, !kHasPriority, 201 OnHeaders(stream_id, !kHasPriority,
192 /*priority=*/0, 202 /*priority=*/0,
193 /*parent_stream_id=*/0, 203 /*parent_stream_id=*/0,
194 /*exclusive=*/false, fin, kFrameComplete)); 204 /*exclusive=*/false, fin, kFrameComplete));
195 } 205 }
196 EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _)) 206 EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _))
197 .WillRepeatedly(WithArgs<1, 2>( 207 .WillRepeatedly(WithArgs<1, 2>(
198 Invoke(this, &QuicHeadersStreamTest::SaveHeaderData))); 208 Invoke(this, &QuicHeadersStreamTest::SaveHeaderData)));
199 if (fin) { 209 if (fin) {
200 EXPECT_CALL(visitor_, OnStreamFrameData(stream_id, nullptr, 0, true)); 210 if (FLAGS_spdy_on_stream_end) {
211 EXPECT_CALL(visitor_, OnStreamEnd(stream_id));
212 } else {
213 EXPECT_CALL(visitor_, OnStreamFrameData(stream_id, nullptr, 0, true));
214 }
201 } 215 }
202 framer_.ProcessInput(saved_data_.data(), saved_data_.length()); 216 framer_->ProcessInput(saved_data_.data(), saved_data_.length());
203 EXPECT_FALSE(framer_.HasError()) 217 EXPECT_FALSE(framer_->HasError())
204 << SpdyFramer::ErrorCodeToString(framer_.error_code()); 218 << SpdyFramer::ErrorCodeToString(framer_->error_code());
205 219
206 CheckHeaders(); 220 CheckHeaders();
207 saved_data_.clear(); 221 saved_data_.clear();
208 } 222 }
209 223
210 void CheckHeaders() { 224 void CheckHeaders() {
211 SpdyHeaderBlock headers; 225 SpdyHeaderBlock headers;
212 EXPECT_TRUE(framer_.ParseHeaderBlockInBuffer( 226 EXPECT_TRUE(framer_->ParseHeaderBlockInBuffer(
213 saved_header_data_.data(), saved_header_data_.length(), &headers)); 227 saved_header_data_.data(), saved_header_data_.length(), &headers));
214 EXPECT_EQ(headers_, headers); 228 EXPECT_EQ(headers_, headers);
215 saved_header_data_.clear(); 229 saved_header_data_.clear();
216 } 230 }
217 231
218 Perspective perspective() { return GetParam().perspective; } 232 Perspective perspective() { return GetParam().perspective; }
219 233
220 QuicVersion version() { return GetParam().version; } 234 QuicVersion version() { return GetParam().version; }
221 235
222 QuicVersionVector GetVersion() { 236 QuicVersionVector GetVersion() {
(...skipping 10 matching lines...) Expand all
233 static const bool kHasPriority = true; 247 static const bool kHasPriority = true;
234 248
235 MockConnectionHelper helper_; 249 MockConnectionHelper helper_;
236 StrictMock<MockConnection>* connection_; 250 StrictMock<MockConnection>* connection_;
237 StrictMock<MockQuicSpdySession> session_; 251 StrictMock<MockQuicSpdySession> session_;
238 QuicHeadersStream* headers_stream_; 252 QuicHeadersStream* headers_stream_;
239 SpdyHeaderBlock headers_; 253 SpdyHeaderBlock headers_;
240 string body_; 254 string body_;
241 string saved_data_; 255 string saved_data_;
242 string saved_header_data_; 256 string saved_header_data_;
243 SpdyFramer framer_; 257 std::unique_ptr<SpdyFramer> framer_;
244 StrictMock<MockVisitor> visitor_; 258 StrictMock<MockVisitor> visitor_;
245 QuicStreamFrame stream_frame_; 259 QuicStreamFrame stream_frame_;
246 QuicStreamId next_promised_stream_id_; 260 QuicStreamId next_promised_stream_id_;
247 }; 261 };
248 262
249 INSTANTIATE_TEST_CASE_P(Tests, 263 INSTANTIATE_TEST_CASE_P(Tests,
250 QuicHeadersStreamTest, 264 QuicHeadersStreamTest,
251 ::testing::ValuesIn(GetTestParams())); 265 ::testing::ValuesIn(GetTestParams()));
252 266
253 TEST_P(QuicHeadersStreamTest, StreamId) { 267 TEST_P(QuicHeadersStreamTest, StreamId) {
(...skipping 26 matching lines...) Expand all
280 .WillOnce(WithArgs<1>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); 294 .WillOnce(WithArgs<1>(Invoke(this, &QuicHeadersStreamTest::SaveIov)));
281 headers_stream_->WritePushPromise(stream_id, promised_stream_id, headers_, 295 headers_stream_->WritePushPromise(stream_id, promised_stream_id, headers_,
282 nullptr); 296 nullptr);
283 297
284 // Parse the outgoing data and check that it matches was was written. 298 // Parse the outgoing data and check that it matches was was written.
285 EXPECT_CALL(visitor_, 299 EXPECT_CALL(visitor_,
286 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); 300 OnPushPromise(stream_id, promised_stream_id, kFrameComplete));
287 EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _)) 301 EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _))
288 .WillRepeatedly(WithArgs<1, 2>( 302 .WillRepeatedly(WithArgs<1, 2>(
289 Invoke(this, &QuicHeadersStreamTest::SaveHeaderData))); 303 Invoke(this, &QuicHeadersStreamTest::SaveHeaderData)));
290 framer_.ProcessInput(saved_data_.data(), saved_data_.length()); 304 framer_->ProcessInput(saved_data_.data(), saved_data_.length());
291 EXPECT_FALSE(framer_.HasError()) 305 EXPECT_FALSE(framer_->HasError())
292 << SpdyFramer::ErrorCodeToString(framer_.error_code()); 306 << SpdyFramer::ErrorCodeToString(framer_->error_code());
293 CheckHeaders(); 307 CheckHeaders();
294 saved_data_.clear(); 308 saved_data_.clear();
295 } else { 309 } else {
296 EXPECT_DFATAL(headers_stream_->WritePushPromise( 310 EXPECT_DFATAL(headers_stream_->WritePushPromise(
297 stream_id, promised_stream_id, headers_, nullptr), 311 stream_id, promised_stream_id, headers_, nullptr),
298 "Client shouldn't send PUSH_PROMISE"); 312 "Client shouldn't send PUSH_PROMISE");
299 } 313 }
300 } 314 }
301 } 315 }
302 316
303 TEST_P(QuicHeadersStreamTest, ProcessRawData) { 317 TEST_P(QuicHeadersStreamTest, ProcessRawData) {
304 for (QuicStreamId stream_id = kClientDataStreamId1; 318 for (QuicStreamId stream_id = kClientDataStreamId1;
305 stream_id < kClientDataStreamId3; stream_id += 2) { 319 stream_id < kClientDataStreamId3; stream_id += 2) {
306 for (bool fin : {false, true}) { 320 for (bool fin : {false, true}) {
307 for (SpdyPriority priority = 0; priority < 7; ++priority) { 321 for (SpdyPriority priority = 0; priority < 7; ++priority) {
308 // Replace with "WriteHeadersAndSaveData" 322 // Replace with "WriteHeadersAndSaveData"
309 scoped_ptr<SpdySerializedFrame> frame; 323 scoped_ptr<SpdySerializedFrame> frame;
310 if (perspective() == Perspective::IS_SERVER) { 324 if (perspective() == Perspective::IS_SERVER) {
311 SpdyHeadersIR headers_frame(stream_id); 325 SpdyHeadersIR headers_frame(stream_id);
312 headers_frame.set_header_block(headers_); 326 headers_frame.set_header_block(headers_);
313 headers_frame.set_fin(fin); 327 headers_frame.set_fin(fin);
314 headers_frame.set_has_priority(true); 328 headers_frame.set_has_priority(true);
315 frame.reset(framer_.SerializeFrame(headers_frame)); 329 frame.reset(framer_->SerializeFrame(headers_frame));
316 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); 330 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0));
317 } else { 331 } else {
318 SpdyHeadersIR headers_frame(stream_id); 332 SpdyHeadersIR headers_frame(stream_id);
319 headers_frame.set_header_block(headers_); 333 headers_frame.set_header_block(headers_);
320 headers_frame.set_fin(fin); 334 headers_frame.set_fin(fin);
321 frame.reset(framer_.SerializeFrame(headers_frame)); 335 frame.reset(framer_->SerializeFrame(headers_frame));
322 } 336 }
323 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)) 337 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _))
324 .WillRepeatedly(WithArgs<1>(Invoke( 338 .WillRepeatedly(WithArgs<1>(Invoke(
325 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); 339 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece)));
326 EXPECT_CALL(session_, 340 EXPECT_CALL(session_,
327 OnStreamHeadersComplete(stream_id, fin, frame->size())); 341 OnStreamHeadersComplete(stream_id, fin, frame->size()));
328 stream_frame_.frame_buffer = frame->data(); 342 stream_frame_.frame_buffer = frame->data();
329 stream_frame_.frame_length = frame->size(); 343 stream_frame_.frame_length = frame->size();
330 headers_stream_->OnStreamFrame(stream_frame_); 344 headers_stream_->OnStreamFrame(stream_frame_);
331 stream_frame_.offset += frame->size(); 345 stream_frame_.offset += frame->size();
332 CheckHeaders(); 346 CheckHeaders();
333 } 347 }
334 } 348 }
335 } 349 }
336 } 350 }
337 351
338 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) { 352 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) {
339 if (perspective() == Perspective::IS_SERVER) 353 if (perspective() == Perspective::IS_SERVER)
340 return; 354 return;
341 for (QuicStreamId stream_id = kClientDataStreamId1; 355 for (QuicStreamId stream_id = kClientDataStreamId1;
342 stream_id < kClientDataStreamId3; stream_id += 2) { 356 stream_id < kClientDataStreamId3; stream_id += 2) {
343 QuicStreamId promised_stream_id = NextPromisedStreamId(); 357 QuicStreamId promised_stream_id = NextPromisedStreamId();
344 scoped_ptr<SpdySerializedFrame> frame; 358 scoped_ptr<SpdySerializedFrame> frame;
345 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id); 359 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id);
346 push_promise.set_header_block(headers_); 360 push_promise.set_header_block(headers_);
347 frame.reset(framer_.SerializeFrame(push_promise)); 361 frame.reset(framer_->SerializeFrame(push_promise));
348 if (perspective() == Perspective::IS_SERVER) { 362 if (perspective() == Perspective::IS_SERVER) {
349 EXPECT_CALL(*connection_, SendConnectionCloseWithDetails( 363 EXPECT_CALL(*connection_, SendConnectionCloseWithDetails(
350 QUIC_INVALID_HEADERS_STREAM_DATA, 364 QUIC_INVALID_HEADERS_STREAM_DATA,
351 "PUSH_PROMISE not supported.")) 365 "PUSH_PROMISE not supported."))
352 .WillRepeatedly( 366 .WillRepeatedly(
353 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection)); 367 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection));
354 } else { 368 } else {
355 EXPECT_CALL(session_, OnPromiseHeaders(stream_id, _)) 369 EXPECT_CALL(session_, OnPromiseHeaders(stream_id, _))
356 .WillRepeatedly(WithArgs<1>( 370 .WillRepeatedly(WithArgs<1>(
357 Invoke(this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); 371 Invoke(this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece)));
(...skipping 16 matching lines...) Expand all
374 bool fin = true; 388 bool fin = true;
375 for (int stream_num = 0; stream_num < 10; stream_num++) { 389 for (int stream_num = 0; stream_num < 10; stream_num++) {
376 QuicStreamId stream_id = QuicClientDataStreamId(stream_num); 390 QuicStreamId stream_id = QuicClientDataStreamId(stream_num);
377 // Replace with "WriteHeadersAndSaveData" 391 // Replace with "WriteHeadersAndSaveData"
378 scoped_ptr<SpdySerializedFrame> frame; 392 scoped_ptr<SpdySerializedFrame> frame;
379 if (perspective() == Perspective::IS_SERVER) { 393 if (perspective() == Perspective::IS_SERVER) {
380 SpdyHeadersIR headers_frame(stream_id); 394 SpdyHeadersIR headers_frame(stream_id);
381 headers_frame.set_header_block(headers_); 395 headers_frame.set_header_block(headers_);
382 headers_frame.set_fin(fin); 396 headers_frame.set_fin(fin);
383 headers_frame.set_has_priority(true); 397 headers_frame.set_has_priority(true);
384 frame.reset(framer_.SerializeFrame(headers_frame)); 398 frame.reset(framer_->SerializeFrame(headers_frame));
385 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); 399 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0));
386 } else { 400 } else {
387 SpdyHeadersIR headers_frame(stream_id); 401 SpdyHeadersIR headers_frame(stream_id);
388 headers_frame.set_header_block(headers_); 402 headers_frame.set_header_block(headers_);
389 headers_frame.set_fin(fin); 403 headers_frame.set_fin(fin);
390 frame.reset(framer_.SerializeFrame(headers_frame)); 404 frame.reset(framer_->SerializeFrame(headers_frame));
391 } 405 }
392 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)); 406 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _));
393 EXPECT_CALL(session_, 407 EXPECT_CALL(session_,
394 OnStreamHeadersComplete(stream_id, fin, frame->size())); 408 OnStreamHeadersComplete(stream_id, fin, frame->size()));
395 stream_frame_.frame_buffer = frame->data(); 409 stream_frame_.frame_buffer = frame->data();
396 stream_frame_.frame_length = frame->size(); 410 stream_frame_.frame_length = frame->size();
397 headers_stream_->OnStreamFrame(stream_frame_); 411 headers_stream_->OnStreamFrame(stream_frame_);
398 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); 412 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
399 stream_frame_.offset += frame->size(); 413 stream_frame_.offset += frame->size();
400 } 414 }
401 } 415 }
402 416
403 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) { 417 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) {
404 QuicStreamId stream_id; 418 QuicStreamId stream_id;
405 bool fin = true; 419 bool fin = true;
406 QuicStreamFrame stream_frames[10]; 420 QuicStreamFrame stream_frames[10];
407 scoped_ptr<SpdySerializedFrame> frames[10]; 421 scoped_ptr<SpdySerializedFrame> frames[10];
408 // First create all the frames in order 422 // First create all the frames in order
409 { 423 {
410 InSequence seq; 424 InSequence seq;
411 for (int stream_num = 0; stream_num < 10; ++stream_num) { 425 for (int stream_num = 0; stream_num < 10; ++stream_num) {
412 stream_id = QuicClientDataStreamId(stream_num); 426 stream_id = QuicClientDataStreamId(stream_num);
413 if (perspective() == Perspective::IS_SERVER) { 427 if (perspective() == Perspective::IS_SERVER) {
414 SpdyHeadersIR headers_frame(stream_id); 428 SpdyHeadersIR headers_frame(stream_id);
415 headers_frame.set_header_block(headers_); 429 headers_frame.set_header_block(headers_);
416 headers_frame.set_fin(fin); 430 headers_frame.set_fin(fin);
417 headers_frame.set_has_priority(true); 431 headers_frame.set_has_priority(true);
418 frames[stream_num].reset(framer_.SerializeFrame(headers_frame)); 432 frames[stream_num].reset(framer_->SerializeFrame(headers_frame));
419 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)).Times(1); 433 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)).Times(1);
420 } else { 434 } else {
421 SpdyHeadersIR headers_frame(stream_id); 435 SpdyHeadersIR headers_frame(stream_id);
422 headers_frame.set_header_block(headers_); 436 headers_frame.set_header_block(headers_);
423 headers_frame.set_fin(fin); 437 headers_frame.set_fin(fin);
424 frames[stream_num].reset(framer_.SerializeFrame(headers_frame)); 438 frames[stream_num].reset(framer_->SerializeFrame(headers_frame));
425 } 439 }
426 stream_frames[stream_num].stream_id = stream_frame_.stream_id; 440 stream_frames[stream_num].stream_id = stream_frame_.stream_id;
427 stream_frames[stream_num].offset = stream_frame_.offset; 441 stream_frames[stream_num].offset = stream_frame_.offset;
428 stream_frames[stream_num].frame_buffer = frames[stream_num]->data(); 442 stream_frames[stream_num].frame_buffer = frames[stream_num]->data();
429 stream_frames[stream_num].frame_length = frames[stream_num]->size(); 443 stream_frames[stream_num].frame_length = frames[stream_num]->size();
430 DVLOG(1) << "make frame for stream " << stream_num << " offset " 444 DVLOG(1) << "make frame for stream " << stream_num << " offset "
431 << stream_frames[stream_num].offset; 445 << stream_frames[stream_num].offset;
432 stream_frame_.offset += frames[stream_num]->size(); 446 stream_frame_.offset += frames[stream_num]->size();
433 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)).Times(1); 447 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)).Times(1);
434 EXPECT_CALL(session_, OnStreamHeadersComplete(stream_id, fin, _)) 448 EXPECT_CALL(session_, OnStreamHeadersComplete(stream_id, fin, _))
(...skipping 23 matching lines...) Expand all
458 stream_id < kClientDataStreamId3; stream_id += 2) { 472 stream_id < kClientDataStreamId3; stream_id += 2) {
459 for (bool fin : {false, true}) { 473 for (bool fin : {false, true}) {
460 for (SpdyPriority priority = 0; priority < 7; ++priority) { 474 for (SpdyPriority priority = 0; priority < 7; ++priority) {
461 // Replace with "WriteHeadersAndSaveData" 475 // Replace with "WriteHeadersAndSaveData"
462 scoped_ptr<SpdySerializedFrame> frame; 476 scoped_ptr<SpdySerializedFrame> frame;
463 if (perspective() == Perspective::IS_SERVER) { 477 if (perspective() == Perspective::IS_SERVER) {
464 SpdyHeadersIR headers_frame(stream_id); 478 SpdyHeadersIR headers_frame(stream_id);
465 headers_frame.set_header_block(headers_); 479 headers_frame.set_header_block(headers_);
466 headers_frame.set_fin(fin); 480 headers_frame.set_fin(fin);
467 headers_frame.set_has_priority(true); 481 headers_frame.set_has_priority(true);
468 frame.reset(framer_.SerializeFrame(headers_frame)); 482 frame.reset(framer_->SerializeFrame(headers_frame));
469 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); 483 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0));
470 } else { 484 } else {
471 SpdyHeadersIR headers_frame(stream_id); 485 SpdyHeadersIR headers_frame(stream_id);
472 headers_frame.set_header_block(headers_); 486 headers_frame.set_header_block(headers_);
473 headers_frame.set_fin(fin); 487 headers_frame.set_fin(fin);
474 frame.reset(framer_.SerializeFrame(headers_frame)); 488 frame.reset(framer_->SerializeFrame(headers_frame));
475 } 489 }
476 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)) 490 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _))
477 .WillRepeatedly(WithArgs<1>(Invoke( 491 .WillRepeatedly(WithArgs<1>(Invoke(
478 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); 492 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece)));
479 EXPECT_CALL(session_, 493 EXPECT_CALL(session_,
480 OnStreamHeadersComplete(stream_id, fin, frame->size())); 494 OnStreamHeadersComplete(stream_id, fin, frame->size()));
481 stream_frame_.frame_buffer = frame->data(); 495 stream_frame_.frame_buffer = frame->data();
482 stream_frame_.frame_length = frame->size(); 496 stream_frame_.frame_length = frame->size();
483 headers_stream_->OnStreamFrame(stream_frame_); 497 headers_stream_->OnStreamFrame(stream_frame_);
484 stream_frame_.offset += frame->size(); 498 stream_frame_.offset += frame->size();
485 CheckHeaders(); 499 CheckHeaders();
486 } 500 }
487 } 501 }
488 } 502 }
489 } 503 }
490 504
491 TEST_P(QuicHeadersStreamTest, ProcessBadData) { 505 TEST_P(QuicHeadersStreamTest, ProcessBadData) {
492 const char kBadData[] = "blah blah blah"; 506 const char kBadData[] = "blah blah blah";
493 EXPECT_CALL(*connection_, SendConnectionCloseWithDetails( 507 EXPECT_CALL(*connection_, SendConnectionCloseWithDetails(
494 QUIC_INVALID_HEADERS_STREAM_DATA, _)) 508 QUIC_INVALID_HEADERS_STREAM_DATA, _))
495 .Times(::testing::AnyNumber()); 509 .Times(::testing::AnyNumber());
496 stream_frame_.frame_buffer = kBadData; 510 stream_frame_.frame_buffer = kBadData;
497 stream_frame_.frame_length = strlen(kBadData); 511 stream_frame_.frame_length = strlen(kBadData);
498 headers_stream_->OnStreamFrame(stream_frame_); 512 headers_stream_->OnStreamFrame(stream_frame_);
499 } 513 }
500 514
501 TEST_P(QuicHeadersStreamTest, ProcessSpdyDataFrame) { 515 TEST_P(QuicHeadersStreamTest, ProcessSpdyDataFrame) {
502 SpdyDataIR data(2, ""); 516 SpdyDataIR data(2, "");
503 scoped_ptr<SpdySerializedFrame> frame(framer_.SerializeFrame(data)); 517 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data));
504 EXPECT_CALL(*connection_, 518 EXPECT_CALL(*connection_,
505 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, 519 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA,
506 "SPDY DATA frame received.")) 520 "SPDY DATA frame received."))
507 .WillOnce( 521 .WillOnce(
508 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection)); 522 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection));
509 stream_frame_.frame_buffer = frame->data(); 523 stream_frame_.frame_buffer = frame->data();
510 stream_frame_.frame_length = frame->size(); 524 stream_frame_.frame_length = frame->size();
511 headers_stream_->OnStreamFrame(stream_frame_); 525 headers_stream_->OnStreamFrame(stream_frame_);
512 } 526 }
513 527
514 TEST_P(QuicHeadersStreamTest, ProcessSpdyRstStreamFrame) { 528 TEST_P(QuicHeadersStreamTest, ProcessSpdyRstStreamFrame) {
515 SpdyRstStreamIR data(2, RST_STREAM_PROTOCOL_ERROR); 529 SpdyRstStreamIR data(2, RST_STREAM_PROTOCOL_ERROR);
516 scoped_ptr<SpdySerializedFrame> frame(framer_.SerializeFrame(data)); 530 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data));
517 EXPECT_CALL(*connection_, 531 EXPECT_CALL(*connection_,
518 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, 532 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA,
519 "SPDY RST_STREAM frame received.")) 533 "SPDY RST_STREAM frame received."))
520 .WillOnce( 534 .WillOnce(
521 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection)); 535 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection));
522 stream_frame_.frame_buffer = frame->data(); 536 stream_frame_.frame_buffer = frame->data();
523 stream_frame_.frame_length = frame->size(); 537 stream_frame_.frame_length = frame->size();
524 headers_stream_->OnStreamFrame(stream_frame_); 538 headers_stream_->OnStreamFrame(stream_frame_);
525 } 539 }
526 540
527 TEST_P(QuicHeadersStreamTest, ProcessSpdySettingsFrame) { 541 TEST_P(QuicHeadersStreamTest, ProcessSpdySettingsFrame) {
528 SpdySettingsIR data; 542 SpdySettingsIR data;
529 data.AddSetting(SETTINGS_HEADER_TABLE_SIZE, true, true, 0); 543 data.AddSetting(SETTINGS_HEADER_TABLE_SIZE, true, true, 0);
530 scoped_ptr<SpdySerializedFrame> frame(framer_.SerializeFrame(data)); 544 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data));
531 EXPECT_CALL(*connection_, 545 EXPECT_CALL(*connection_,
532 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, 546 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA,
533 "SPDY SETTINGS frame received.")) 547 "SPDY SETTINGS frame received."))
534 .WillOnce( 548 .WillOnce(
535 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection)); 549 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection));
536 stream_frame_.frame_buffer = frame->data(); 550 stream_frame_.frame_buffer = frame->data();
537 stream_frame_.frame_length = frame->size(); 551 stream_frame_.frame_length = frame->size();
538 headers_stream_->OnStreamFrame(stream_frame_); 552 headers_stream_->OnStreamFrame(stream_frame_);
539 } 553 }
540 554
541 TEST_P(QuicHeadersStreamTest, ProcessSpdyPingFrame) { 555 TEST_P(QuicHeadersStreamTest, ProcessSpdyPingFrame) {
542 SpdyPingIR data(1); 556 SpdyPingIR data(1);
543 scoped_ptr<SpdySerializedFrame> frame(framer_.SerializeFrame(data)); 557 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data));
544 EXPECT_CALL(*connection_, 558 EXPECT_CALL(*connection_,
545 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, 559 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA,
546 "SPDY PING frame received.")) 560 "SPDY PING frame received."))
547 .WillOnce( 561 .WillOnce(
548 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection)); 562 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection));
549 stream_frame_.frame_buffer = frame->data(); 563 stream_frame_.frame_buffer = frame->data();
550 stream_frame_.frame_length = frame->size(); 564 stream_frame_.frame_length = frame->size();
551 headers_stream_->OnStreamFrame(stream_frame_); 565 headers_stream_->OnStreamFrame(stream_frame_);
552 } 566 }
553 567
554 TEST_P(QuicHeadersStreamTest, ProcessSpdyGoAwayFrame) { 568 TEST_P(QuicHeadersStreamTest, ProcessSpdyGoAwayFrame) {
555 SpdyGoAwayIR data(1, GOAWAY_PROTOCOL_ERROR, "go away"); 569 SpdyGoAwayIR data(1, GOAWAY_PROTOCOL_ERROR, "go away");
556 scoped_ptr<SpdySerializedFrame> frame(framer_.SerializeFrame(data)); 570 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data));
557 EXPECT_CALL(*connection_, 571 EXPECT_CALL(*connection_,
558 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, 572 SendConnectionCloseWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA,
559 "SPDY GOAWAY frame received.")) 573 "SPDY GOAWAY frame received."))
560 .WillOnce( 574 .WillOnce(
561 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection)); 575 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection));
562 stream_frame_.frame_buffer = frame->data(); 576 stream_frame_.frame_buffer = frame->data();
563 stream_frame_.frame_length = frame->size(); 577 stream_frame_.frame_length = frame->size();
564 headers_stream_->OnStreamFrame(stream_frame_); 578 headers_stream_->OnStreamFrame(stream_frame_);
565 } 579 }
566 580
567 TEST_P(QuicHeadersStreamTest, ProcessSpdyWindowUpdateFrame) { 581 TEST_P(QuicHeadersStreamTest, ProcessSpdyWindowUpdateFrame) {
568 SpdyWindowUpdateIR data(1, 1); 582 SpdyWindowUpdateIR data(1, 1);
569 scoped_ptr<SpdySerializedFrame> frame(framer_.SerializeFrame(data)); 583 scoped_ptr<SpdySerializedFrame> frame(framer_->SerializeFrame(data));
570 EXPECT_CALL(*connection_, SendConnectionCloseWithDetails( 584 EXPECT_CALL(*connection_, SendConnectionCloseWithDetails(
571 QUIC_INVALID_HEADERS_STREAM_DATA, 585 QUIC_INVALID_HEADERS_STREAM_DATA,
572 "SPDY WINDOW_UPDATE frame received.")) 586 "SPDY WINDOW_UPDATE frame received."))
573 .WillOnce( 587 .WillOnce(
574 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection)); 588 InvokeWithoutArgs(this, &QuicHeadersStreamTest::CloseConnection));
575 stream_frame_.frame_buffer = frame->data(); 589 stream_frame_.frame_buffer = frame->data();
576 stream_frame_.frame_length = frame->size(); 590 stream_frame_.frame_length = frame->size();
577 headers_stream_->OnStreamFrame(stream_frame_); 591 headers_stream_->OnStreamFrame(stream_frame_);
578 } 592 }
579 593
580 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) { 594 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) {
581 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl( 595 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl(
582 headers_stream_)); 596 headers_stream_));
583 } 597 }
584 598
585 } // namespace 599 } // namespace
586 } // namespace test 600 } // namespace test
587 } // namespace net 601 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698