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 <ostream> | 7 #include <ostream> |
8 #include <string> | 8 #include <string> |
9 #include <tuple> | 9 #include <tuple> |
10 #include <utility> | 10 #include <utility> |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 | 257 |
258 QuicConsumedData SaveIovShort(const QuicIOVector& data) { | 258 QuicConsumedData SaveIovShort(const QuicIOVector& data) { |
259 const iovec* iov = data.iov; | 259 const iovec* iov = data.iov; |
260 int consumed = 1; | 260 int consumed = 1; |
261 saved_data_.append(static_cast<char*>(iov[0].iov_base), consumed); | 261 saved_data_.append(static_cast<char*>(iov[0].iov_base), consumed); |
262 return QuicConsumedData(consumed, false); | 262 return QuicConsumedData(consumed, false); |
263 } | 263 } |
264 | 264 |
265 QuicConsumedData SaveIovAndNotifyAckListener( | 265 QuicConsumedData SaveIovAndNotifyAckListener( |
266 const QuicIOVector& data, | 266 const QuicIOVector& data, |
267 QuicAckListenerInterface* ack_listener) { | 267 const scoped_refptr<QuicAckListenerInterface>& ack_listener) { |
268 QuicConsumedData result = SaveIov(data); | 268 QuicConsumedData result = SaveIov(data); |
269 if (ack_listener) { | 269 if (ack_listener) { |
270 ack_listener->OnPacketAcked(result.bytes_consumed, | 270 ack_listener->OnPacketAcked(result.bytes_consumed, |
271 QuicTime::Delta::Zero()); | 271 QuicTime::Delta::Zero()); |
272 } | 272 } |
273 return result; | 273 return result; |
274 } | 274 } |
275 | 275 |
276 void SavePayload(const char* data, size_t len) { | 276 void SavePayload(const char* data, size_t len) { |
277 saved_payloads_.append(data, len); | 277 saved_payloads_.append(data, len); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 | 317 |
318 void WriteAndExpectResponseHeaders(QuicStreamId stream_id, bool fin) { | 318 void WriteAndExpectResponseHeaders(QuicStreamId stream_id, bool fin) { |
319 WriteHeadersAndCheckData(stream_id, fin, 0, false /*is_request*/); | 319 WriteHeadersAndCheckData(stream_id, fin, 0, false /*is_request*/); |
320 } | 320 } |
321 | 321 |
322 void WriteHeadersAndCheckData(QuicStreamId stream_id, | 322 void WriteHeadersAndCheckData(QuicStreamId stream_id, |
323 bool fin, | 323 bool fin, |
324 SpdyPriority priority, | 324 SpdyPriority priority, |
325 bool is_request) { | 325 bool is_request) { |
326 // Write the headers and capture the outgoing data | 326 // Write the headers and capture the outgoing data |
327 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, | 327 EXPECT_CALL(session_, |
328 false, nullptr)) | 328 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) |
329 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); | 329 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); |
330 headers_stream_->WriteHeaders(stream_id, headers_.Clone(), fin, priority, | 330 headers_stream_->WriteHeaders(stream_id, headers_.Clone(), fin, priority, |
331 nullptr); | 331 nullptr); |
332 | 332 |
333 // Parse the outgoing data and check that it matches was was written. | 333 // Parse the outgoing data and check that it matches was was written. |
334 if (is_request) { | 334 if (is_request) { |
335 EXPECT_CALL(visitor_, | 335 EXPECT_CALL(visitor_, |
336 OnHeaders(stream_id, kHasPriority, | 336 OnHeaders(stream_id, kHasPriority, |
337 Spdy3PriorityToHttp2Weight(priority), | 337 Spdy3PriorityToHttp2Weight(priority), |
338 /*parent_stream_id=*/0, | 338 /*parent_stream_id=*/0, |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 } | 436 } |
437 } | 437 } |
438 } | 438 } |
439 | 439 |
440 TEST_P(QuicHeadersStreamTest, WritePushPromises) { | 440 TEST_P(QuicHeadersStreamTest, WritePushPromises) { |
441 for (QuicStreamId stream_id = kClientDataStreamId1; | 441 for (QuicStreamId stream_id = kClientDataStreamId1; |
442 stream_id < kClientDataStreamId3; stream_id += 2) { | 442 stream_id < kClientDataStreamId3; stream_id += 2) { |
443 QuicStreamId promised_stream_id = NextPromisedStreamId(); | 443 QuicStreamId promised_stream_id = NextPromisedStreamId(); |
444 if (perspective() == Perspective::IS_SERVER) { | 444 if (perspective() == Perspective::IS_SERVER) { |
445 // Write the headers and capture the outgoing data | 445 // Write the headers and capture the outgoing data |
446 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, | 446 EXPECT_CALL(session_, |
447 false, nullptr)) | 447 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) |
448 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); | 448 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); |
449 headers_stream_->WritePushPromise(stream_id, promised_stream_id, | 449 headers_stream_->WritePushPromise(stream_id, promised_stream_id, |
450 headers_.Clone()); | 450 headers_.Clone()); |
451 | 451 |
452 // Parse the outgoing data and check that it matches was was written. | 452 // Parse the outgoing data and check that it matches was was written. |
453 EXPECT_CALL(visitor_, | 453 EXPECT_CALL(visitor_, |
454 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); | 454 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); |
455 headers_handler_.reset(new TestHeadersHandler); | 455 headers_handler_.reset(new TestHeadersHandler); |
456 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id)) | 456 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id)) |
457 .WillOnce(Return(headers_handler_.get())); | 457 .WillOnce(Return(headers_handler_.get())); |
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 scoped_refptr<ForceHolAckListener> ack_listener; | 956 scoped_refptr<ForceHolAckListener> ack_listener; |
957 if (use_ack_listener) { | 957 if (use_ack_listener) { |
958 ack_listener = new ForceHolAckListener(); | 958 ack_listener = new ForceHolAckListener(); |
959 } | 959 } |
960 EXPECT_CALL(session_, | 960 EXPECT_CALL(session_, |
961 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) | 961 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) |
962 .WillRepeatedly(WithArgs<2, 5>(Invoke( | 962 .WillRepeatedly(WithArgs<2, 5>(Invoke( |
963 this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener))); | 963 this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener))); |
964 | 964 |
965 QuicConsumedData consumed_data = headers_stream_->WritevStreamData( | 965 QuicConsumedData consumed_data = headers_stream_->WritevStreamData( |
966 id, MakeIOVector(data, &iov), offset, fin, ack_listener.get()); | 966 id, MakeIOVector(data, &iov), offset, fin, ack_listener); |
967 | 967 |
968 EXPECT_EQ(consumed_data.bytes_consumed, data_len); | 968 EXPECT_EQ(consumed_data.bytes_consumed, data_len); |
969 EXPECT_EQ(consumed_data.fin_consumed, fin); | 969 EXPECT_EQ(consumed_data.fin_consumed, fin); |
970 // Now process the written data with the SPDY framer, and verify | 970 // Now process the written data with the SPDY framer, and verify |
971 // that the original data is unchanged. | 971 // that the original data is unchanged. |
972 EXPECT_CALL(visitor_, OnDataFrameHeader(id, _, _)) | 972 EXPECT_CALL(visitor_, OnDataFrameHeader(id, _, _)) |
973 .Times(AtLeast(kMinDataFrames)); | 973 .Times(AtLeast(kMinDataFrames)); |
974 EXPECT_CALL(visitor_, OnStreamFrameData(id, _, _)) | 974 EXPECT_CALL(visitor_, OnStreamFrameData(id, _, _)) |
975 .WillRepeatedly(WithArgs<1, 2>( | 975 .WillRepeatedly(WithArgs<1, 2>( |
976 Invoke(this, &QuicHeadersStreamTest::SavePayload))); | 976 Invoke(this, &QuicHeadersStreamTest::SavePayload))); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1045 consumed_data = headers_stream_->WritevStreamData( | 1045 consumed_data = headers_stream_->WritevStreamData( |
1046 id, MakeIOVector(data, &iov), offset, fin, nullptr); | 1046 id, MakeIOVector(data, &iov), offset, fin, nullptr); |
1047 | 1047 |
1048 EXPECT_EQ(consumed_data.bytes_consumed, 0u); | 1048 EXPECT_EQ(consumed_data.bytes_consumed, 0u); |
1049 EXPECT_EQ(consumed_data.fin_consumed, false); | 1049 EXPECT_EQ(consumed_data.fin_consumed, false); |
1050 } | 1050 } |
1051 | 1051 |
1052 } // namespace | 1052 } // namespace |
1053 } // namespace test | 1053 } // namespace test |
1054 } // namespace net | 1054 } // namespace net |
OLD | NEW |