Allow QuicSession::WritevData() to write data at a specified encryption level.
gfe-relnote: protected by gfe2_reloadable_flag_quic_writevdata_at_level
PiperOrigin-RevId: 297697074
Change-Id: Ib4e5d860f22f506f36db76f4f8ee1c1e406f6a20
diff --git a/quic/tools/quic_simple_server_stream_test.cc b/quic/tools/quic_simple_server_stream_test.cc
index 880d3aa..1c71af1 100644
--- a/quic/tools/quic_simple_server_stream_test.cc
+++ b/quic/tools/quic_simple_server_stream_test.cc
@@ -10,6 +10,7 @@
#include "net/third_party/quiche/src/quic/core/http/http_encoder.h"
#include "net/third_party/quiche/src/quic/core/http/spdy_utils.h"
+#include "net/third_party/quiche/src/quic/core/quic_types.h"
#include "net/third_party/quiche/src/quic/core/quic_utils.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_expect_bug.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_ptr_util.h"
@@ -25,6 +26,7 @@
#include "net/third_party/quiche/src/quic/tools/quic_memory_cache_backend.h"
#include "net/third_party/quiche/src/quic/tools/quic_simple_server_session.h"
#include "net/third_party/quiche/src/common/platform/api/quiche_arraysize.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_optional.h"
#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
using testing::_;
@@ -109,7 +111,7 @@
QuicSessionPeer::SetMaxOpenIncomingStreams(this, kMaxStreamsForTest);
QuicSessionPeer::SetMaxOpenOutgoingStreams(this, kMaxStreamsForTest);
}
- ON_CALL(*this, WritevData(_, _, _, _, _))
+ ON_CALL(*this, WritevData(_, _, _, _, _, _))
.WillByDefault(Invoke(this, &MockQuicSimpleServerSession::ConsumeData));
}
@@ -122,12 +124,13 @@
void(const QuicConnectionCloseFrame& frame,
ConnectionCloseSource source));
MOCK_METHOD1(CreateIncomingStream, QuicSpdyStream*(QuicStreamId id));
- MOCK_METHOD5(WritevData,
+ MOCK_METHOD6(WritevData,
QuicConsumedData(QuicStreamId id,
size_t write_length,
QuicStreamOffset offset,
StreamSendingState state,
- bool is_retransmission));
+ bool is_retransmission,
+ quiche::QuicheOptional<EncryptionLevel> level));
MOCK_METHOD4(OnStreamHeaderList,
void(QuicStreamId stream_id,
bool fin,
@@ -163,11 +166,13 @@
MOCK_METHOD1(OnStopSendingReceived, void(const QuicStopSendingFrame& frame));
- QuicConsumedData ConsumeData(QuicStreamId id,
- size_t write_length,
- QuicStreamOffset offset,
- StreamSendingState state,
- bool /*is_retransmission*/) {
+ QuicConsumedData ConsumeData(
+ QuicStreamId id,
+ size_t write_length,
+ QuicStreamOffset offset,
+ StreamSendingState state,
+ bool /*is_retransmission*/,
+ quiche::QuicheOptional<EncryptionLevel> /*level*/) {
if (write_length > 0) {
auto buf = std::make_unique<char[]>(write_length);
QuicStream* stream = GetOrCreateStream(id);
@@ -273,7 +278,7 @@
::testing::PrintToStringParamName());
TEST_P(QuicSimpleServerStreamTest, TestFraming) {
- EXPECT_CALL(session_, WritevData(_, _, _, _, _))
+ EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
.WillRepeatedly(
Invoke(&session_, &MockQuicSimpleServerSession::ConsumeData));
stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
@@ -291,7 +296,7 @@
}
TEST_P(QuicSimpleServerStreamTest, TestFramingOnePacket) {
- EXPECT_CALL(session_, WritevData(_, _, _, _, _))
+ EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
.WillRepeatedly(
Invoke(&session_, &MockQuicSimpleServerSession::ConsumeData));
@@ -310,7 +315,7 @@
}
TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorInStopReading) {
- EXPECT_CALL(session_, WritevData(_, _, _, _, _))
+ EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
.WillRepeatedly(
Invoke(&session_, &MockQuicSimpleServerSession::ConsumeData));
@@ -331,9 +336,10 @@
// We'll automatically write out an error (headers + body)
EXPECT_CALL(*stream_, WriteHeadersMock(false));
if (UsesHttp3()) {
- EXPECT_CALL(session_, WritevData(_, kDataFrameHeaderLength, _, NO_FIN, _));
+ EXPECT_CALL(session_,
+ WritevData(_, kDataFrameHeaderLength, _, NO_FIN, _, _));
}
- EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _));
+ EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _, _));
EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
@@ -382,9 +388,9 @@
InSequence s;
EXPECT_CALL(*stream_, WriteHeadersMock(false));
if (UsesHttp3()) {
- EXPECT_CALL(session_, WritevData(_, header_length, _, NO_FIN, _));
+ EXPECT_CALL(session_, WritevData(_, header_length, _, NO_FIN, _, _));
}
- EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _));
+ EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _, _));
stream_->DoSendResponse();
EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
@@ -415,9 +421,9 @@
InSequence s;
EXPECT_CALL(*stream_, WriteHeadersMock(false));
if (UsesHttp3()) {
- EXPECT_CALL(session_, WritevData(_, header_length, _, NO_FIN, _));
+ EXPECT_CALL(session_, WritevData(_, header_length, _, NO_FIN, _, _));
}
- EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _));
+ EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _, _));
stream_->DoSendResponse();
EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
@@ -475,9 +481,9 @@
InSequence s;
EXPECT_CALL(*stream_, WriteHeadersMock(false));
if (UsesHttp3()) {
- EXPECT_CALL(session_, WritevData(_, header_length, _, NO_FIN, _));
+ EXPECT_CALL(session_, WritevData(_, header_length, _, NO_FIN, _, _));
}
- EXPECT_CALL(session_, WritevData(_, body.length(), _, FIN, _));
+ EXPECT_CALL(session_, WritevData(_, body.length(), _, FIN, _, _));
stream_->DoSendResponse();
EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
@@ -517,9 +523,9 @@
_, _));
EXPECT_CALL(*stream_, WriteHeadersMock(false));
if (UsesHttp3()) {
- EXPECT_CALL(session_, WritevData(_, header_length, _, NO_FIN, _));
+ EXPECT_CALL(session_, WritevData(_, header_length, _, NO_FIN, _, _));
}
- EXPECT_CALL(session_, WritevData(_, body.length(), _, FIN, _));
+ EXPECT_CALL(session_, WritevData(_, body.length(), _, FIN, _, _));
stream_->DoSendResponse();
EXPECT_EQ(*request_headers, session_.original_request_headers_);
}
@@ -574,10 +580,10 @@
if (UsesHttp3()) {
EXPECT_CALL(session_, WritevData(kServerInitiatedStreamId, header_length, _,
- NO_FIN, _));
+ NO_FIN, _, _));
}
EXPECT_CALL(session_,
- WritevData(kServerInitiatedStreamId, kBody.size(), _, FIN, _));
+ WritevData(kServerInitiatedStreamId, kBody.size(), _, FIN, _, _));
server_initiated_stream->PushResponse(std::move(headers));
EXPECT_EQ(kPath, server_initiated_stream->GetHeader(":path"));
EXPECT_EQ("GET", server_initiated_stream->GetHeader(":method"));
@@ -591,9 +597,10 @@
InSequence s;
EXPECT_CALL(*stream_, WriteHeadersMock(false));
if (UsesHttp3()) {
- EXPECT_CALL(session_, WritevData(_, kDataFrameHeaderLength, _, NO_FIN, _));
+ EXPECT_CALL(session_,
+ WritevData(_, kDataFrameHeaderLength, _, NO_FIN, _, _));
}
- EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _));
+ EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _, _));
stream_->DoSendErrorResponse();
EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
@@ -609,7 +616,7 @@
quiche::QuicheStringPiece("11\00012", 5));
EXPECT_CALL(*stream_, WriteHeadersMock(false));
- EXPECT_CALL(session_, WritevData(_, _, _, _, _))
+ EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
.WillRepeatedly(
Invoke(&session_, &MockQuicSimpleServerSession::ConsumeData));
stream_->OnStreamHeaderList(true, kFakeFrameLen, header_list_);
@@ -628,7 +635,7 @@
quiche::QuicheStringPiece("\00012", 3));
EXPECT_CALL(*stream_, WriteHeadersMock(false));
- EXPECT_CALL(session_, WritevData(_, _, _, _, _))
+ EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
.WillRepeatedly(
Invoke(&session_, &MockQuicSimpleServerSession::ConsumeData));
stream_->OnStreamHeaderList(true, kFakeFrameLen, header_list_);
@@ -664,7 +671,7 @@
// assumption on their number or size.
auto* qpack_decoder_stream =
QuicSpdySessionPeer::GetQpackDecoderSendStream(&session_);
- EXPECT_CALL(session_, WritevData(qpack_decoder_stream->id(), _, _, _, _))
+ EXPECT_CALL(session_, WritevData(qpack_decoder_stream->id(), _, _, _, _, _))
.Times(AnyNumber());
}
EXPECT_CALL(session_, SendRstStream(_, QUIC_RST_ACKNOWLEDGEMENT, _)).Times(1);