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

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

Issue 2820263005: In QUIC version >= 38, enables random padding of size [1, 256] (Closed)
Patch Set: Created 3 years, 8 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/core/quic_headers_stream.h" 5 #include "net/quic/core/quic_headers_stream.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 #include <ostream> 8 #include <ostream>
9 #include <string> 9 #include <string>
10 #include <tuple> 10 #include <tuple>
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 void WriteAndExpectResponseHeaders(QuicStreamId stream_id, bool fin) { 310 void WriteAndExpectResponseHeaders(QuicStreamId stream_id, bool fin) {
311 WriteHeadersAndCheckData(stream_id, fin, 0, false /*is_request*/); 311 WriteHeadersAndCheckData(stream_id, fin, 0, false /*is_request*/);
312 } 312 }
313 313
314 void WriteHeadersAndCheckData(QuicStreamId stream_id, 314 void WriteHeadersAndCheckData(QuicStreamId stream_id,
315 bool fin, 315 bool fin,
316 SpdyPriority priority, 316 SpdyPriority priority,
317 bool is_request) { 317 bool is_request) {
318 // Write the headers and capture the outgoing data 318 // Write the headers and capture the outgoing data
319 EXPECT_CALL(session_, 319 EXPECT_CALL(session_,
320 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) 320 WritevData(headers_stream_, kHeadersStreamId, _, _, NO_FIN, _))
321 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); 321 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov)));
322 QuicSpdySessionPeer::WriteHeadersImpl( 322 QuicSpdySessionPeer::WriteHeadersImpl(
323 &session_, stream_id, headers_.Clone(), fin, priority, nullptr); 323 &session_, stream_id, headers_.Clone(), fin, priority, nullptr);
324 324
325 // Parse the outgoing data and check that it matches was was written. 325 // Parse the outgoing data and check that it matches was was written.
326 if (is_request) { 326 if (is_request) {
327 EXPECT_CALL(visitor_, 327 EXPECT_CALL(visitor_,
328 OnHeaders(stream_id, kHasPriority, 328 OnHeaders(stream_id, kHasPriority,
329 Spdy3PriorityToHttp2Weight(priority), 329 Spdy3PriorityToHttp2Weight(priority),
330 /*parent_stream_id=*/0, 330 /*parent_stream_id=*/0,
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 } 426 }
427 } 427 }
428 } 428 }
429 429
430 TEST_P(QuicHeadersStreamTest, WritePushPromises) { 430 TEST_P(QuicHeadersStreamTest, WritePushPromises) {
431 for (QuicStreamId stream_id = kClientDataStreamId1; 431 for (QuicStreamId stream_id = kClientDataStreamId1;
432 stream_id < kClientDataStreamId3; stream_id += 2) { 432 stream_id < kClientDataStreamId3; stream_id += 2) {
433 QuicStreamId promised_stream_id = NextPromisedStreamId(); 433 QuicStreamId promised_stream_id = NextPromisedStreamId();
434 if (perspective() == Perspective::IS_SERVER) { 434 if (perspective() == Perspective::IS_SERVER) {
435 // Write the headers and capture the outgoing data 435 // Write the headers and capture the outgoing data
436 EXPECT_CALL(session_, 436 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _,
437 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) 437 NO_FIN, _))
438 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); 438 .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov)));
439 session_.WritePushPromise(stream_id, promised_stream_id, 439 session_.WritePushPromise(stream_id, promised_stream_id,
440 headers_.Clone()); 440 headers_.Clone());
441 441
442 // Parse the outgoing data and check that it matches was was written. 442 // Parse the outgoing data and check that it matches was was written.
443 EXPECT_CALL(visitor_, 443 EXPECT_CALL(visitor_,
444 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); 444 OnPushPromise(stream_id, promised_stream_id, kFrameComplete));
445 headers_handler_.reset(new TestHeadersHandler); 445 headers_handler_.reset(new TestHeadersHandler);
446 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id)) 446 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id))
447 .WillOnce(Return(headers_handler_.get())); 447 .WillOnce(Return(headers_handler_.get()));
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 // Set headers stream send window large enough for data written below. 936 // Set headers stream send window large enough for data written below.
937 headers_stream_->flow_controller()->UpdateSendWindowOffset(data_len * 2 * 4); 937 headers_stream_->flow_controller()->UpdateSendWindowOffset(data_len * 2 * 4);
938 string data(data_len, 'a'); 938 string data(data_len, 'a');
939 939
940 for (bool fin : {true, false}) { 940 for (bool fin : {true, false}) {
941 for (bool use_ack_listener : {true, false}) { 941 for (bool use_ack_listener : {true, false}) {
942 QuicReferenceCountedPointer<ForceHolAckListener> ack_listener; 942 QuicReferenceCountedPointer<ForceHolAckListener> ack_listener;
943 if (use_ack_listener) { 943 if (use_ack_listener) {
944 ack_listener = new ForceHolAckListener(); 944 ack_listener = new ForceHolAckListener();
945 } 945 }
946 EXPECT_CALL(session_, 946 EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _,
947 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) 947 NO_FIN, _))
948 .WillRepeatedly(WithArgs<2, 5>(Invoke( 948 .WillRepeatedly(WithArgs<2, 5>(Invoke(
949 this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener))); 949 this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener)));
950 950
951 QuicConsumedData consumed_data = session_.WritevStreamData( 951 QuicConsumedData consumed_data = session_.WritevStreamData(
952 id, MakeIOVector(data, &iov), offset, fin, ack_listener); 952 id, MakeIOVector(data, &iov), offset, fin, ack_listener);
953 953
954 EXPECT_EQ(consumed_data.bytes_consumed, data_len); 954 EXPECT_EQ(consumed_data.bytes_consumed, data_len);
955 EXPECT_EQ(consumed_data.fin_consumed, fin); 955 EXPECT_EQ(consumed_data.fin_consumed, fin);
956 // Now process the written data with the SPDY framer, and verify 956 // Now process the written data with the SPDY framer, and verify
957 // that the original data is unchanged. 957 // that the original data is unchanged.
(...skipping 17 matching lines...) Expand all
975 saved_payloads_.clear(); 975 saved_payloads_.clear();
976 } 976 }
977 } 977 }
978 } 978 }
979 979
980 TEST_P(QuicHeadersStreamTest, WritevStreamDataFinOnly) { 980 TEST_P(QuicHeadersStreamTest, WritevStreamDataFinOnly) {
981 struct iovec iov; 981 struct iovec iov;
982 string data; 982 string data;
983 983
984 EXPECT_CALL(session_, 984 EXPECT_CALL(session_,
985 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) 985 WritevData(headers_stream_, kHeadersStreamId, _, _, NO_FIN, _))
986 .WillOnce(WithArgs<2, 5>( 986 .WillOnce(WithArgs<2, 5>(
987 Invoke(this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener))); 987 Invoke(this, &QuicHeadersStreamTest::SaveIovAndNotifyAckListener)));
988 988
989 QuicConsumedData consumed_data = session_.WritevStreamData( 989 QuicConsumedData consumed_data = session_.WritevStreamData(
990 kClientDataStreamId1, MakeIOVector(data, &iov), 0, true, nullptr); 990 kClientDataStreamId1, MakeIOVector(data, &iov), 0, true, nullptr);
991 991
992 EXPECT_EQ(consumed_data.bytes_consumed, 0u); 992 EXPECT_EQ(consumed_data.bytes_consumed, 0u);
993 EXPECT_EQ(consumed_data.fin_consumed, true); 993 EXPECT_EQ(consumed_data.fin_consumed, true);
994 } 994 }
995 995
(...skipping 11 matching lines...) Expand all
1007 const size_t data_len = kSpdyInitialFrameSizeLimit * kMinDataFrames + 1024; 1007 const size_t data_len = kSpdyInitialFrameSizeLimit * kMinDataFrames + 1024;
1008 // Set headers stream send window large enough for data written below. 1008 // Set headers stream send window large enough for data written below.
1009 headers_stream_->flow_controller()->UpdateSendWindowOffset(data_len * 2 * 4); 1009 headers_stream_->flow_controller()->UpdateSendWindowOffset(data_len * 2 * 4);
1010 string data(data_len, 'a'); 1010 string data(data_len, 'a');
1011 1011
1012 bool fin = true; 1012 bool fin = true;
1013 // So force the underlying |WritevData| to consume only 1 byte. 1013 // So force the underlying |WritevData| to consume only 1 byte.
1014 // In that case, |WritevStreamData| should consume just one 1014 // In that case, |WritevStreamData| should consume just one
1015 // HTTP/2 data frame's worth of data. 1015 // HTTP/2 data frame's worth of data.
1016 EXPECT_CALL(session_, 1016 EXPECT_CALL(session_,
1017 WritevData(headers_stream_, kHeadersStreamId, _, _, false, _)) 1017 WritevData(headers_stream_, kHeadersStreamId, _, _, NO_FIN, _))
1018 .WillOnce( 1018 .WillOnce(
1019 WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIovShort))); 1019 WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIovShort)));
1020 1020
1021 QuicConsumedData consumed_data = session_.WritevStreamData( 1021 QuicConsumedData consumed_data = session_.WritevStreamData(
1022 id, MakeIOVector(data, &iov), offset, fin, nullptr); 1022 id, MakeIOVector(data, &iov), offset, fin, nullptr);
1023 1023
1024 // bytes_consumed is max HTTP/2 data frame size minus the HTTP/2 1024 // bytes_consumed is max HTTP/2 data frame size minus the HTTP/2
1025 // data header size. 1025 // data header size.
1026 EXPECT_EQ(consumed_data.bytes_consumed, 1026 EXPECT_EQ(consumed_data.bytes_consumed,
1027 kSpdyInitialFrameSizeLimit - kDataFrameMinimumSize); 1027 kSpdyInitialFrameSizeLimit - kDataFrameMinimumSize);
1028 EXPECT_EQ(consumed_data.fin_consumed, false); 1028 EXPECT_EQ(consumed_data.fin_consumed, false);
1029 1029
1030 // If session already blocked, then bytes_consumed should be zero. 1030 // If session already blocked, then bytes_consumed should be zero.
1031 consumed_data = session_.WritevStreamData(id, MakeIOVector(data, &iov), 1031 consumed_data = session_.WritevStreamData(id, MakeIOVector(data, &iov),
1032 offset, fin, nullptr); 1032 offset, fin, nullptr);
1033 1033
1034 EXPECT_EQ(consumed_data.bytes_consumed, 0u); 1034 EXPECT_EQ(consumed_data.bytes_consumed, 0u);
1035 EXPECT_EQ(consumed_data.fin_consumed, false); 1035 EXPECT_EQ(consumed_data.fin_consumed, false);
1036 } 1036 }
1037 1037
1038 } // namespace 1038 } // namespace
1039 } // namespace test 1039 } // namespace test
1040 } // namespace net 1040 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698