OLD | NEW |
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/core/quic_headers_stream.h" | 5 #include "net/quic/core/quic_headers_stream.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "net/quic/core/quic_bug_tracker.h" | 10 #include "net/quic/core/quic_bug_tracker.h" |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 | 307 |
308 void SaveToHandler(size_t size, const QuicHeaderList& header_list) { | 308 void SaveToHandler(size_t size, const QuicHeaderList& header_list) { |
309 headers_handler_.reset(new TestHeadersHandler); | 309 headers_handler_.reset(new TestHeadersHandler); |
310 headers_handler_->OnHeaderBlockStart(); | 310 headers_handler_->OnHeaderBlockStart(); |
311 for (const auto& p : header_list) { | 311 for (const auto& p : header_list) { |
312 headers_handler_->OnHeader(p.first, p.second); | 312 headers_handler_->OnHeader(p.first, p.second); |
313 } | 313 } |
314 headers_handler_->OnHeaderBlockEnd(size); | 314 headers_handler_->OnHeaderBlockEnd(size); |
315 } | 315 } |
316 | 316 |
317 void WriteHeadersAndExpectSynStream(QuicStreamId stream_id, | 317 void WriteAndExpectRequestHeaders(QuicStreamId stream_id, |
318 bool fin, | 318 bool fin, |
319 SpdyPriority priority) { | 319 SpdyPriority priority) { |
320 WriteHeadersAndCheckData(stream_id, fin, priority, SYN_STREAM); | 320 WriteHeadersAndCheckData(stream_id, fin, priority, true /*is_request*/); |
321 } | 321 } |
322 | 322 |
323 void WriteHeadersAndExpectSynReply(QuicStreamId stream_id, bool fin) { | 323 void WriteAndExpectResponseHeaders(QuicStreamId stream_id, bool fin) { |
324 WriteHeadersAndCheckData(stream_id, fin, 0, SYN_REPLY); | 324 WriteHeadersAndCheckData(stream_id, fin, 0, false /*is_request*/); |
325 } | 325 } |
326 | 326 |
327 void WriteHeadersAndCheckData(QuicStreamId stream_id, | 327 void WriteHeadersAndCheckData(QuicStreamId stream_id, |
328 bool fin, | 328 bool fin, |
329 SpdyPriority priority, | 329 SpdyPriority priority, |
330 SpdyFrameType type) { | 330 bool is_request) { |
331 // Write the headers and capture the outgoing data | 331 // Write the headers and capture the outgoing data |
332 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, | 332 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, |
333 false, nullptr)) | 333 false, nullptr)) |
334 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); | 334 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); |
335 headers_stream_->WriteHeaders(stream_id, headers_.Clone(), fin, priority, | 335 headers_stream_->WriteHeaders(stream_id, headers_.Clone(), fin, priority, |
336 nullptr); | 336 nullptr); |
337 | 337 |
338 // Parse the outgoing data and check that it matches was was written. | 338 // Parse the outgoing data and check that it matches was was written. |
339 if (type == SYN_STREAM) { | 339 if (is_request) { |
340 EXPECT_CALL(visitor_, | 340 EXPECT_CALL(visitor_, |
341 OnHeaders(stream_id, kHasPriority, | 341 OnHeaders(stream_id, kHasPriority, |
342 Spdy3PriorityToHttp2Weight(priority), | 342 Spdy3PriorityToHttp2Weight(priority), |
343 /*parent_stream_id=*/0, | 343 /*parent_stream_id=*/0, |
344 /*exclusive=*/false, fin, kFrameComplete)); | 344 /*exclusive=*/false, fin, kFrameComplete)); |
345 } else { | 345 } else { |
346 EXPECT_CALL(visitor_, | 346 EXPECT_CALL(visitor_, |
347 OnHeaders(stream_id, !kHasPriority, | 347 OnHeaders(stream_id, !kHasPriority, |
348 /*priority=*/0, | 348 /*priority=*/0, |
349 /*parent_stream_id=*/0, | 349 /*parent_stream_id=*/0, |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 | 424 |
425 TEST_P(QuicHeadersStreamTest, StreamId) { | 425 TEST_P(QuicHeadersStreamTest, StreamId) { |
426 EXPECT_EQ(3u, headers_stream_->id()); | 426 EXPECT_EQ(3u, headers_stream_->id()); |
427 } | 427 } |
428 | 428 |
429 TEST_P(QuicHeadersStreamTest, WriteHeaders) { | 429 TEST_P(QuicHeadersStreamTest, WriteHeaders) { |
430 for (QuicStreamId stream_id = kClientDataStreamId1; | 430 for (QuicStreamId stream_id = kClientDataStreamId1; |
431 stream_id < kClientDataStreamId3; stream_id += 2) { | 431 stream_id < kClientDataStreamId3; stream_id += 2) { |
432 for (bool fin : kFins) { | 432 for (bool fin : kFins) { |
433 if (perspective() == Perspective::IS_SERVER) { | 433 if (perspective() == Perspective::IS_SERVER) { |
434 WriteHeadersAndExpectSynReply(stream_id, fin); | 434 WriteAndExpectResponseHeaders(stream_id, fin); |
435 } else { | 435 } else { |
436 for (SpdyPriority priority = 0; priority < 7; ++priority) { | 436 for (SpdyPriority priority = 0; priority < 7; ++priority) { |
437 // TODO(rch): implement priorities correctly. | 437 // TODO(rch): implement priorities correctly. |
438 WriteHeadersAndExpectSynStream(stream_id, fin, 0); | 438 WriteAndExpectRequestHeaders(stream_id, fin, 0); |
439 } | 439 } |
440 } | 440 } |
441 } | 441 } |
442 } | 442 } |
443 } | 443 } |
444 | 444 |
445 TEST_P(QuicHeadersStreamTest, WritePushPromises) { | 445 TEST_P(QuicHeadersStreamTest, WritePushPromises) { |
446 for (QuicStreamId stream_id = kClientDataStreamId1; | 446 for (QuicStreamId stream_id = kClientDataStreamId1; |
447 stream_id < kClientDataStreamId3; stream_id += 2) { | 447 stream_id < kClientDataStreamId3; stream_id += 2) { |
448 QuicStreamId promised_stream_id = NextPromisedStreamId(); | 448 QuicStreamId promised_stream_id = NextPromisedStreamId(); |
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
925 testing::InSequence seq; | 925 testing::InSequence seq; |
926 for (int i = 1; i < 28; i++) { | 926 for (int i = 1; i < 28; i++) { |
927 EXPECT_CALL(*hpack_encoder_visitor, | 927 EXPECT_CALL(*hpack_encoder_visitor, |
928 OnUseEntry(QuicTime::Delta::FromMilliseconds(i))); | 928 OnUseEntry(QuicTime::Delta::FromMilliseconds(i))); |
929 } | 929 } |
930 } | 930 } |
931 for (QuicStreamId stream_id = kClientDataStreamId1; | 931 for (QuicStreamId stream_id = kClientDataStreamId1; |
932 stream_id < kClientDataStreamId3; stream_id += 2) { | 932 stream_id < kClientDataStreamId3; stream_id += 2) { |
933 for (bool fin : {false, true}) { | 933 for (bool fin : {false, true}) { |
934 if (perspective() == Perspective::IS_SERVER) { | 934 if (perspective() == Perspective::IS_SERVER) { |
935 WriteHeadersAndExpectSynReply(stream_id, fin); | 935 WriteAndExpectResponseHeaders(stream_id, fin); |
936 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 936 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
937 } else { | 937 } else { |
938 for (SpdyPriority priority = 0; priority < 7; ++priority) { | 938 for (SpdyPriority priority = 0; priority < 7; ++priority) { |
939 // TODO(rch): implement priorities correctly. | 939 // TODO(rch): implement priorities correctly. |
940 WriteHeadersAndExpectSynStream(stream_id, fin, 0); | 940 WriteAndExpectRequestHeaders(stream_id, fin, 0); |
941 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 941 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
942 } | 942 } |
943 } | 943 } |
944 } | 944 } |
945 } | 945 } |
946 } | 946 } |
947 | 947 |
948 TEST_P(QuicHeadersStreamTest, WritevStreamData) { | 948 TEST_P(QuicHeadersStreamTest, WritevStreamData) { |
949 QuicStreamId id = kClientDataStreamId1; | 949 QuicStreamId id = kClientDataStreamId1; |
950 QuicStreamOffset offset = 0; | 950 QuicStreamOffset offset = 0; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1056 consumed_data = headers_stream_->WritevStreamData( | 1056 consumed_data = headers_stream_->WritevStreamData( |
1057 id, MakeIOVector(data, &iov), offset, fin, nullptr); | 1057 id, MakeIOVector(data, &iov), offset, fin, nullptr); |
1058 | 1058 |
1059 EXPECT_EQ(consumed_data.bytes_consumed, 0u); | 1059 EXPECT_EQ(consumed_data.bytes_consumed, 0u); |
1060 EXPECT_EQ(consumed_data.fin_consumed, false); | 1060 EXPECT_EQ(consumed_data.fin_consumed, false); |
1061 } | 1061 } |
1062 | 1062 |
1063 } // namespace | 1063 } // namespace |
1064 } // namespace test | 1064 } // namespace test |
1065 } // namespace net | 1065 } // namespace net |
OLD | NEW |