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

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

Issue 2102253003: Make SpdyHeaderBlock non-copyable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: iOS fix. Created 4 years, 5 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
« no previous file with comments | « net/quic/quic_chromium_client_stream.cc ('k') | net/quic/quic_client_promised_info.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/quic/quic_chromium_client_stream.h" 5 #include "net/quic/quic_chromium_client_stream.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 21 matching lines...) Expand all
32 namespace { 32 namespace {
33 33
34 const QuicStreamId kTestStreamId = 5u; 34 const QuicStreamId kTestStreamId = 5u;
35 35
36 class MockDelegate : public QuicChromiumClientStream::Delegate { 36 class MockDelegate : public QuicChromiumClientStream::Delegate {
37 public: 37 public:
38 MockDelegate() {} 38 MockDelegate() {}
39 39
40 MOCK_METHOD0(OnSendData, int()); 40 MOCK_METHOD0(OnSendData, int());
41 MOCK_METHOD2(OnSendDataComplete, int(int, bool*)); 41 MOCK_METHOD2(OnSendDataComplete, int(int, bool*));
42 MOCK_METHOD2(OnHeadersAvailable, 42 void OnHeadersAvailable(const SpdyHeaderBlock& headers,
43 size_t frame_len) override {
44 headers_ = headers.Clone();
45 OnHeadersAvailableMock(headers, frame_len);
46 }
47 MOCK_METHOD2(OnHeadersAvailableMock,
43 void(const SpdyHeaderBlock& headers, size_t frame_len)); 48 void(const SpdyHeaderBlock& headers, size_t frame_len));
44 MOCK_METHOD2(OnDataReceived, int(const char*, int)); 49 MOCK_METHOD2(OnDataReceived, int(const char*, int));
45 MOCK_METHOD0(OnDataAvailable, void()); 50 MOCK_METHOD0(OnDataAvailable, void());
46 MOCK_METHOD0(OnClose, void()); 51 MOCK_METHOD0(OnClose, void());
47 MOCK_METHOD1(OnError, void(int)); 52 MOCK_METHOD1(OnError, void(int));
48 MOCK_METHOD0(HasSendHeadersComplete, bool()); 53 MOCK_METHOD0(HasSendHeadersComplete, bool());
49 54
55 SpdyHeaderBlock headers_;
56
50 private: 57 private:
51 DISALLOW_COPY_AND_ASSIGN(MockDelegate); 58 DISALLOW_COPY_AND_ASSIGN(MockDelegate);
52 }; 59 };
53 60
54 class MockQuicClientSessionBase : public QuicClientSessionBase { 61 class MockQuicClientSessionBase : public QuicClientSessionBase {
55 public: 62 public:
56 explicit MockQuicClientSessionBase(QuicConnection* connection, 63 explicit MockQuicClientSessionBase(QuicConnection* connection,
57 QuicClientPushPromiseIndex* index); 64 QuicClientPushPromiseIndex* index);
58 ~MockQuicClientSessionBase() override; 65 ~MockQuicClientSessionBase() override;
59 66
(...skipping 25 matching lines...) Expand all
85 void(QuicStreamId stream_id, SpdyPriority priority)); 92 void(QuicStreamId stream_id, SpdyPriority priority));
86 MOCK_METHOD3(OnStreamHeadersComplete, 93 MOCK_METHOD3(OnStreamHeadersComplete,
87 void(QuicStreamId stream_id, bool fin, size_t frame_len)); 94 void(QuicStreamId stream_id, bool fin, size_t frame_len));
88 MOCK_METHOD2(OnPromiseHeaders, 95 MOCK_METHOD2(OnPromiseHeaders,
89 void(QuicStreamId stream_id, StringPiece headers_data)); 96 void(QuicStreamId stream_id, StringPiece headers_data));
90 MOCK_METHOD3(OnPromiseHeadersComplete, 97 MOCK_METHOD3(OnPromiseHeadersComplete,
91 void(QuicStreamId stream_id, 98 void(QuicStreamId stream_id,
92 QuicStreamId promised_stream_id, 99 QuicStreamId promised_stream_id,
93 size_t frame_len)); 100 size_t frame_len));
94 MOCK_METHOD0(IsCryptoHandshakeConfirmed, bool()); 101 MOCK_METHOD0(IsCryptoHandshakeConfirmed, bool());
95 MOCK_METHOD5(WriteHeaders, 102 // Methods taking non-copyable types like SpdyHeaderBlock by value cannot be
103 // mocked directly.
104 size_t WriteHeaders(
105 QuicStreamId id,
106 SpdyHeaderBlock headers,
107 bool fin,
108 SpdyPriority priority,
109 QuicAckListenerInterface* ack_notifier_delegate) override {
110 return WriteHeadersMock(id, headers, fin, priority, ack_notifier_delegate);
111 }
112 MOCK_METHOD5(WriteHeadersMock,
96 size_t(QuicStreamId id, 113 size_t(QuicStreamId id,
97 SpdyHeaderBlock headers, 114 const SpdyHeaderBlock& headers,
98 bool fin, 115 bool fin,
99 SpdyPriority priority, 116 SpdyPriority priority,
100 QuicAckListenerInterface* ack_notifier_delegate)); 117 QuicAckListenerInterface* ack_notifier_delegate));
101 MOCK_METHOD1(OnHeadersHeadOfLineBlocking, void(QuicTime::Delta delta)); 118 MOCK_METHOD1(OnHeadersHeadOfLineBlocking, void(QuicTime::Delta delta));
102 119
103 using QuicSession::ActivateStream; 120 using QuicSession::ActivateStream;
104 121
105 // Returns a QuicConsumedData that indicates all of |data| (and |fin| if set) 122 // Returns a QuicConsumedData that indicates all of |data| (and |fin| if set)
106 // has been consumed. 123 // has been consumed.
107 static QuicConsumedData ConsumeAllData( 124 static QuicConsumedData ConsumeAllData(
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 228
212 TEST_P(QuicChromiumClientStreamTest, OnFinRead) { 229 TEST_P(QuicChromiumClientStreamTest, OnFinRead) {
213 InitializeHeaders(); 230 InitializeHeaders();
214 std::string uncompressed_headers = 231 std::string uncompressed_headers =
215 SpdyUtils::SerializeUncompressedHeaders(headers_); 232 SpdyUtils::SerializeUncompressedHeaders(headers_);
216 QuicStreamOffset offset = 0; 233 QuicStreamOffset offset = 0;
217 stream_->OnStreamHeaders(uncompressed_headers); 234 stream_->OnStreamHeaders(uncompressed_headers);
218 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); 235 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
219 236
220 EXPECT_CALL(delegate_, 237 EXPECT_CALL(delegate_,
221 OnHeadersAvailable(headers_, uncompressed_headers.length())); 238 OnHeadersAvailableMock(_, uncompressed_headers.length()));
222 base::RunLoop().RunUntilIdle(); 239 base::RunLoop().RunUntilIdle();
240 EXPECT_EQ(headers_, delegate_.headers_);
223 EXPECT_TRUE(stream_->decompressed_headers().empty()); 241 EXPECT_TRUE(stream_->decompressed_headers().empty());
224 242
225 QuicStreamFrame frame2(kTestStreamId, true, offset, StringPiece()); 243 QuicStreamFrame frame2(kTestStreamId, true, offset, StringPiece());
226 EXPECT_CALL(delegate_, OnClose()); 244 EXPECT_CALL(delegate_, OnClose());
227 stream_->OnStreamFrame(frame2); 245 stream_->OnStreamFrame(frame2);
228 } 246 }
229 247
230 TEST_P(QuicChromiumClientStreamTest, OnDataAvailableBeforeHeaders) { 248 TEST_P(QuicChromiumClientStreamTest, OnDataAvailableBeforeHeaders) {
231 EXPECT_CALL(delegate_, OnClose()); 249 EXPECT_CALL(delegate_, OnClose());
232 250
233 EXPECT_CALL(delegate_, OnDataAvailable()).Times(0); 251 EXPECT_CALL(delegate_, OnDataAvailable()).Times(0);
234 stream_->OnDataAvailable(); 252 stream_->OnDataAvailable();
235 } 253 }
236 254
237 TEST_P(QuicChromiumClientStreamTest, OnDataAvailable) { 255 TEST_P(QuicChromiumClientStreamTest, OnDataAvailable) {
238 InitializeHeaders(); 256 InitializeHeaders();
239 std::string uncompressed_headers = 257 std::string uncompressed_headers =
240 SpdyUtils::SerializeUncompressedHeaders(headers_); 258 SpdyUtils::SerializeUncompressedHeaders(headers_);
241 stream_->OnStreamHeaders(uncompressed_headers); 259 stream_->OnStreamHeaders(uncompressed_headers);
242 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); 260 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
243 261
244 EXPECT_CALL(delegate_, 262 EXPECT_CALL(delegate_,
245 OnHeadersAvailable(headers_, uncompressed_headers.length())); 263 OnHeadersAvailableMock(_, uncompressed_headers.length()));
246 base::RunLoop().RunUntilIdle(); 264 base::RunLoop().RunUntilIdle();
265 EXPECT_EQ(headers_, delegate_.headers_);
247 EXPECT_TRUE(stream_->decompressed_headers().empty()); 266 EXPECT_TRUE(stream_->decompressed_headers().empty());
248 267
249 const char data[] = "hello world!"; 268 const char data[] = "hello world!";
250 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 269 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
251 /*offset=*/0, data)); 270 /*offset=*/0, data));
252 271
253 EXPECT_CALL(delegate_, OnDataAvailable()) 272 EXPECT_CALL(delegate_, OnDataAvailable())
254 .WillOnce(testing::Invoke( 273 .WillOnce(testing::Invoke(
255 CreateFunctor(&QuicChromiumClientStreamTest::ReadData, 274 CreateFunctor(&QuicChromiumClientStreamTest::ReadData,
256 base::Unretained(this), 275 base::Unretained(this),
(...skipping 17 matching lines...) Expand all
274 } 293 }
275 294
276 TEST_P(QuicChromiumClientStreamTest, OnDataAvailableWithError) { 295 TEST_P(QuicChromiumClientStreamTest, OnDataAvailableWithError) {
277 InitializeHeaders(); 296 InitializeHeaders();
278 std::string uncompressed_headers = 297 std::string uncompressed_headers =
279 SpdyUtils::SerializeUncompressedHeaders(headers_); 298 SpdyUtils::SerializeUncompressedHeaders(headers_);
280 stream_->OnStreamHeaders(uncompressed_headers); 299 stream_->OnStreamHeaders(uncompressed_headers);
281 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); 300 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
282 301
283 EXPECT_CALL(delegate_, 302 EXPECT_CALL(delegate_,
284 OnHeadersAvailable(headers_, uncompressed_headers.length())); 303 OnHeadersAvailableMock(_, uncompressed_headers.length()));
285 base::RunLoop().RunUntilIdle(); 304 base::RunLoop().RunUntilIdle();
305 EXPECT_EQ(headers_, delegate_.headers_);
286 EXPECT_TRUE(stream_->decompressed_headers().empty()); 306 EXPECT_TRUE(stream_->decompressed_headers().empty());
287 307
288 const char data[] = "hello world!"; 308 const char data[] = "hello world!";
289 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 309 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
290 /*offset=*/0, data)); 310 /*offset=*/0, data));
291 EXPECT_CALL(delegate_, OnDataAvailable()) 311 EXPECT_CALL(delegate_, OnDataAvailable())
292 .WillOnce(testing::Invoke(CreateFunctor( 312 .WillOnce(testing::Invoke(CreateFunctor(
293 &QuicChromiumClientStream::Reset, 313 &QuicChromiumClientStream::Reset,
294 base::Unretained(stream_), QUIC_STREAM_CANCELLED))); 314 base::Unretained(stream_), QUIC_STREAM_CANCELLED)));
295 base::RunLoop().RunUntilIdle(); 315 base::RunLoop().RunUntilIdle();
296 316
297 EXPECT_CALL(delegate_, OnClose()); 317 EXPECT_CALL(delegate_, OnClose());
298 } 318 }
299 319
300 TEST_P(QuicChromiumClientStreamTest, OnError) { 320 TEST_P(QuicChromiumClientStreamTest, OnError) {
301 EXPECT_CALL(delegate_, OnError(ERR_INTERNET_DISCONNECTED)); 321 EXPECT_CALL(delegate_, OnError(ERR_INTERNET_DISCONNECTED));
302 322
303 stream_->OnError(ERR_INTERNET_DISCONNECTED); 323 stream_->OnError(ERR_INTERNET_DISCONNECTED);
304 EXPECT_FALSE(stream_->GetDelegate()); 324 EXPECT_FALSE(stream_->GetDelegate());
305 } 325 }
306 326
307 TEST_P(QuicChromiumClientStreamTest, OnTrailers) { 327 TEST_P(QuicChromiumClientStreamTest, OnTrailers) {
308 InitializeHeaders(); 328 InitializeHeaders();
309 std::string uncompressed_headers = 329 std::string uncompressed_headers =
310 SpdyUtils::SerializeUncompressedHeaders(headers_); 330 SpdyUtils::SerializeUncompressedHeaders(headers_);
311 stream_->OnStreamHeaders(uncompressed_headers); 331 stream_->OnStreamHeaders(uncompressed_headers);
312 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); 332 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
313 333
314 EXPECT_CALL(delegate_, 334 EXPECT_CALL(delegate_,
315 OnHeadersAvailable(headers_, uncompressed_headers.length())); 335 OnHeadersAvailableMock(_, uncompressed_headers.length()));
316 base::RunLoop().RunUntilIdle(); 336 base::RunLoop().RunUntilIdle();
337 EXPECT_EQ(headers_, delegate_.headers_);
317 EXPECT_TRUE(stream_->decompressed_headers().empty()); 338 EXPECT_TRUE(stream_->decompressed_headers().empty());
318 339
319 const char data[] = "hello world!"; 340 const char data[] = "hello world!";
320 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 341 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
321 /*offset=*/0, data)); 342 /*offset=*/0, data));
322 343
323 EXPECT_CALL(delegate_, OnDataAvailable()) 344 EXPECT_CALL(delegate_, OnDataAvailable())
324 .WillOnce(testing::Invoke(CreateFunctor( 345 .WillOnce(testing::Invoke(CreateFunctor(
325 &QuicChromiumClientStreamTest::ReadData, base::Unretained(this), 346 &QuicChromiumClientStreamTest::ReadData, base::Unretained(this),
326 StringPiece(data, arraysize(data) - 1)))); 347 StringPiece(data, arraysize(data) - 1))));
327 348
328 SpdyHeaderBlock trailers; 349 SpdyHeaderBlock trailers;
329 trailers["bar"] = "foo"; 350 trailers["bar"] = "foo";
330 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(data)); 351 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(data));
331 std::string uncompressed_trailers = 352 std::string uncompressed_trailers =
332 SpdyUtils::SerializeUncompressedHeaders(trailers); 353 SpdyUtils::SerializeUncompressedHeaders(trailers);
333 354
334 stream_->OnStreamHeaders(uncompressed_trailers); 355 stream_->OnStreamHeaders(uncompressed_trailers);
335 stream_->OnStreamHeadersComplete(true, uncompressed_trailers.length()); 356 stream_->OnStreamHeadersComplete(true, uncompressed_trailers.length());
336 357
337 SpdyHeaderBlock actual_trailers;
338
339 base::RunLoop run_loop; 358 base::RunLoop run_loop;
340 EXPECT_CALL(delegate_, OnHeadersAvailable(_, uncompressed_trailers.length())) 359 EXPECT_CALL(delegate_,
341 .WillOnce(testing::DoAll( 360 OnHeadersAvailableMock(_, uncompressed_trailers.length()))
342 testing::SaveArg<0>(&actual_trailers), 361 .WillOnce(testing::InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
343 testing::InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })));
344 362
345 run_loop.Run(); 363 run_loop.Run();
346 // Make sure kFinalOffsetHeaderKey is gone from the delivered actual trailers. 364 // Make sure kFinalOffsetHeaderKey is gone from the delivered actual trailers.
347 trailers.erase(kFinalOffsetHeaderKey); 365 trailers.erase(kFinalOffsetHeaderKey);
348 EXPECT_EQ(trailers, actual_trailers); 366 EXPECT_EQ(trailers, delegate_.headers_);
349 base::RunLoop().RunUntilIdle(); 367 base::RunLoop().RunUntilIdle();
350 EXPECT_CALL(delegate_, OnClose()); 368 EXPECT_CALL(delegate_, OnClose());
351 } 369 }
352 370
353 // Tests that trailers are marked as consumed only before delegate is to be 371 // Tests that trailers are marked as consumed only before delegate is to be
354 // immediately notified about trailers. 372 // immediately notified about trailers.
355 TEST_P(QuicChromiumClientStreamTest, MarkTrailersConsumedWhenNotifyDelegate) { 373 TEST_P(QuicChromiumClientStreamTest, MarkTrailersConsumedWhenNotifyDelegate) {
356 InitializeHeaders(); 374 InitializeHeaders();
357 std::string uncompressed_headers = 375 std::string uncompressed_headers =
358 SpdyUtils::SerializeUncompressedHeaders(headers_); 376 SpdyUtils::SerializeUncompressedHeaders(headers_);
359 stream_->OnStreamHeaders(uncompressed_headers); 377 stream_->OnStreamHeaders(uncompressed_headers);
360 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); 378 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
361 379
362 EXPECT_CALL(delegate_, 380 EXPECT_CALL(delegate_,
363 OnHeadersAvailable(headers_, uncompressed_headers.length())); 381 OnHeadersAvailableMock(_, uncompressed_headers.length()));
364 base::RunLoop().RunUntilIdle(); 382 base::RunLoop().RunUntilIdle();
383 EXPECT_EQ(headers_, delegate_.headers_);
365 EXPECT_TRUE(stream_->decompressed_headers().empty()); 384 EXPECT_TRUE(stream_->decompressed_headers().empty());
366 385
367 const char data[] = "hello world!"; 386 const char data[] = "hello world!";
368 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 387 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
369 /*offset=*/0, data)); 388 /*offset=*/0, data));
370 389
371 base::RunLoop run_loop; 390 base::RunLoop run_loop;
372 EXPECT_CALL(delegate_, OnDataAvailable()) 391 EXPECT_CALL(delegate_, OnDataAvailable())
373 .Times(1) 392 .Times(1)
374 .WillOnce(testing::DoAll( 393 .WillOnce(testing::DoAll(
(...skipping 28 matching lines...) Expand all
403 .WillOnce(testing::DoAll( 422 .WillOnce(testing::DoAll(
404 testing::Invoke(CreateFunctor(&QuicChromiumClientStreamTest::ReadData, 423 testing::Invoke(CreateFunctor(&QuicChromiumClientStreamTest::ReadData,
405 base::Unretained(this), StringPiece())), 424 base::Unretained(this), StringPiece())),
406 testing::InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); }))); 425 testing::InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })));
407 run_loop2.Run(); 426 run_loop2.Run();
408 // Make sure that the stream is not closed, even though ReadData returns 0. 427 // Make sure that the stream is not closed, even though ReadData returns 0.
409 EXPECT_FALSE(stream_->IsDoneReading()); 428 EXPECT_FALSE(stream_->IsDoneReading());
410 429
411 // The OnHeadersAvailable call should follow. 430 // The OnHeadersAvailable call should follow.
412 base::RunLoop run_loop3; 431 base::RunLoop run_loop3;
413 SpdyHeaderBlock actual_trailers;
414 EXPECT_CALL(delegate_, 432 EXPECT_CALL(delegate_,
415 OnHeadersAvailable(_, uncompressed_trailers.length())) 433 OnHeadersAvailableMock(_, uncompressed_trailers.length()))
416 .WillOnce(testing::DoAll( 434 .WillOnce(
417 testing::SaveArg<0>(&actual_trailers), 435 testing::InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); }));
418 testing::InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); })));
419 436
420 run_loop3.Run(); 437 run_loop3.Run();
421 // Make sure the stream is properly closed since trailers and data are all 438 // Make sure the stream is properly closed since trailers and data are all
422 // consumed. 439 // consumed.
423 EXPECT_TRUE(stream_->IsDoneReading()); 440 EXPECT_TRUE(stream_->IsDoneReading());
424 // Make sure kFinalOffsetHeaderKey is gone from the delivered actual trailers. 441 // Make sure kFinalOffsetHeaderKey is gone from the delivered actual trailers.
425 trailers.erase(kFinalOffsetHeaderKey); 442 trailers.erase(kFinalOffsetHeaderKey);
426 EXPECT_EQ(trailers, actual_trailers); 443 EXPECT_EQ(trailers, delegate_.headers_);
427 444
428 base::RunLoop().RunUntilIdle(); 445 base::RunLoop().RunUntilIdle();
429 EXPECT_CALL(delegate_, OnClose()); 446 EXPECT_CALL(delegate_, OnClose());
430 } 447 }
431 448
432 TEST_P(QuicChromiumClientStreamTest, WriteStreamData) { 449 TEST_P(QuicChromiumClientStreamTest, WriteStreamData) {
433 EXPECT_CALL(delegate_, OnClose()); 450 EXPECT_CALL(delegate_, OnClose());
434 451
435 const char kData1[] = "hello world"; 452 const char kData1[] = "hello world";
436 const size_t kDataLen = arraysize(kData1); 453 const size_t kDataLen = arraysize(kData1);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 session_.ActivateStream(stream); 538 session_.ActivateStream(stream);
522 539
523 InitializeHeaders(); 540 InitializeHeaders();
524 std::string uncompressed_headers = 541 std::string uncompressed_headers =
525 SpdyUtils::SerializeUncompressedHeaders(headers_); 542 SpdyUtils::SerializeUncompressedHeaders(headers_);
526 stream->OnStreamHeaders(uncompressed_headers); 543 stream->OnStreamHeaders(uncompressed_headers);
527 stream->OnStreamHeadersComplete(false, uncompressed_headers.length()); 544 stream->OnStreamHeadersComplete(false, uncompressed_headers.length());
528 EXPECT_TRUE(stream->decompressed_headers().empty()); 545 EXPECT_TRUE(stream->decompressed_headers().empty());
529 546
530 EXPECT_CALL(delegate_, 547 EXPECT_CALL(delegate_,
531 OnHeadersAvailable(headers_, uncompressed_headers.length())); 548 OnHeadersAvailableMock(_, uncompressed_headers.length()));
532 stream->SetDelegate(&delegate_); 549 stream->SetDelegate(&delegate_);
533 base::RunLoop().RunUntilIdle(); 550 base::RunLoop().RunUntilIdle();
551 EXPECT_EQ(headers_, delegate_.headers_);
534 552
535 // Times(2) because OnClose will be called for stream and stream_. 553 // Times(2) because OnClose will be called for stream and stream_.
536 EXPECT_CALL(delegate_, OnClose()).Times(2); 554 EXPECT_CALL(delegate_, OnClose()).Times(2);
537 } 555 }
538 556
539 } // namespace 557 } // namespace
540 } // namespace test 558 } // namespace test
541 } // namespace net 559 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_chromium_client_stream.cc ('k') | net/quic/quic_client_promised_info.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698