summaryrefslogtreecommitdiff
path: root/chromium/net/third_party/quiche/src/quic/core/quic_stream_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/third_party/quiche/src/quic/core/quic_stream_test.cc')
-rw-r--r--chromium/net/third_party/quiche/src/quic/core/quic_stream_test.cc170
1 files changed, 69 insertions, 101 deletions
diff --git a/chromium/net/third_party/quiche/src/quic/core/quic_stream_test.cc b/chromium/net/third_party/quiche/src/quic/core/quic_stream_test.cc
index d241dac9098..46c4b4af3f6 100644
--- a/chromium/net/third_party/quiche/src/quic/core/quic_stream_test.cc
+++ b/chromium/net/third_party/quiche/src/quic/core/quic_stream_test.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "net/third_party/quiche/src/quic/core/quic_stream.h"
+#include "quic/core/quic_stream.h"
#include <memory>
#include <string>
@@ -11,29 +11,29 @@
#include "absl/base/macros.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
-#include "net/third_party/quiche/src/quic/core/crypto/null_encrypter.h"
-#include "net/third_party/quiche/src/quic/core/frames/quic_rst_stream_frame.h"
-#include "net/third_party/quiche/src/quic/core/quic_connection.h"
-#include "net/third_party/quiche/src/quic/core/quic_constants.h"
-#include "net/third_party/quiche/src/quic/core/quic_error_codes.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/core/quic_versions.h"
-#include "net/third_party/quiche/src/quic/core/quic_write_blocked_list.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_expect_bug.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_mem_slice_storage.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_ptr_util.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_test_mem_slice_vector.h"
-#include "net/third_party/quiche/src/quic/test_tools/quic_config_peer.h"
-#include "net/third_party/quiche/src/quic/test_tools/quic_connection_peer.h"
-#include "net/third_party/quiche/src/quic/test_tools/quic_flow_controller_peer.h"
-#include "net/third_party/quiche/src/quic/test_tools/quic_session_peer.h"
-#include "net/third_party/quiche/src/quic/test_tools/quic_stream_peer.h"
-#include "net/third_party/quiche/src/quic/test_tools/quic_stream_sequencer_peer.h"
-#include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
+#include "quic/core/crypto/null_encrypter.h"
+#include "quic/core/frames/quic_rst_stream_frame.h"
+#include "quic/core/quic_connection.h"
+#include "quic/core/quic_constants.h"
+#include "quic/core/quic_error_codes.h"
+#include "quic/core/quic_types.h"
+#include "quic/core/quic_utils.h"
+#include "quic/core/quic_versions.h"
+#include "quic/core/quic_write_blocked_list.h"
+#include "quic/platform/api/quic_expect_bug.h"
+#include "quic/platform/api/quic_flags.h"
+#include "quic/platform/api/quic_logging.h"
+#include "quic/platform/api/quic_mem_slice_storage.h"
+#include "quic/platform/api/quic_ptr_util.h"
+#include "quic/platform/api/quic_test.h"
+#include "quic/platform/api/quic_test_mem_slice_vector.h"
+#include "quic/test_tools/quic_config_peer.h"
+#include "quic/test_tools/quic_connection_peer.h"
+#include "quic/test_tools/quic_flow_controller_peer.h"
+#include "quic/test_tools/quic_session_peer.h"
+#include "quic/test_tools/quic_stream_peer.h"
+#include "quic/test_tools/quic_stream_sequencer_peer.h"
+#include "quic/test_tools/quic_test_utils.h"
using testing::_;
using testing::AnyNumber;
@@ -116,15 +116,10 @@ class QuicStreamTest : public QuicTestWithParam<ParsedQuicVersion> {
// session_ now owns stream_.
session_->ActivateStream(QuicWrapUnique(stream_));
// Ignore resetting when session_ is terminated.
- if (!session_->split_up_send_rst()) {
- EXPECT_CALL(*session_, SendRstStream(kTestStreamId, _, _, _))
- .Times(AnyNumber());
- } else {
- EXPECT_CALL(*session_, MaybeSendStopSendingFrame(kTestStreamId, _))
- .Times(AnyNumber());
- EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _))
- .Times(AnyNumber());
- }
+ EXPECT_CALL(*session_, MaybeSendStopSendingFrame(kTestStreamId, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _))
+ .Times(AnyNumber());
write_blocked_list_ =
QuicSessionPeer::GetWriteBlockedStreams(session_.get());
}
@@ -471,11 +466,7 @@ TEST_P(QuicStreamTest, RstAlwaysSentIfNoFinSent) {
EXPECT_FALSE(rst_sent());
// Now close the stream, and expect that we send a RST.
- if (!session_->split_up_send_rst()) {
- EXPECT_CALL(*session_, SendRstStream(kTestStreamId, _, _, _));
- } else {
- EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _));
- }
+ EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _));
QuicRstStreamFrame rst_frame(kInvalidControlFrameId, stream_->id(),
QUIC_STREAM_CANCELLED, 1234);
stream_->OnStreamReset(rst_frame);
@@ -528,12 +519,7 @@ TEST_P(QuicStreamTest, OnlySendOneRst) {
EXPECT_FALSE(rst_sent());
// Reset the stream.
- if (!session_->split_up_send_rst()) {
- EXPECT_CALL(*session_, SendRstStream(kTestStreamId, _, _, _)).Times(1);
- } else {
- EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _))
- .Times(1);
- }
+ EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _)).Times(1);
stream_->Reset(QUIC_STREAM_CANCELLED);
EXPECT_FALSE(fin_sent());
EXPECT_TRUE(rst_sent());
@@ -747,8 +733,8 @@ TEST_P(QuicStreamTest, StreamTooLong) {
QuicStreamFrame stream_frame(stream_->id(), false, kMaxStreamLength, ".");
EXPECT_QUIC_PEER_BUG(
stream_->OnStreamFrame(stream_frame),
- quiche::QuicheStrCat("Receive stream frame on stream ", stream_->id(),
- " reaches max stream length"));
+ absl::StrCat("Receive stream frame on stream ", stream_->id(),
+ " reaches max stream length"));
}
TEST_P(QuicStreamTest, SetDrainingIncomingOutgoing) {
@@ -943,11 +929,7 @@ TEST_P(QuicStreamTest, CancelStream) {
EXPECT_TRUE(session_->HasUnackedStreamData());
EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
// Cancel stream.
- if (session_->split_up_send_rst()) {
- stream_->MaybeSendStopSending(QUIC_STREAM_NO_ERROR);
- } else {
- stream_->Reset(QUIC_STREAM_NO_ERROR);
- }
+ stream_->MaybeSendStopSending(QUIC_STREAM_NO_ERROR);
// stream still waits for acks as the error code is QUIC_STREAM_NO_ERROR, and
// data is going to be retransmitted.
EXPECT_TRUE(stream_->IsWaitingForAcks());
@@ -957,21 +939,13 @@ TEST_P(QuicStreamTest, CancelStream) {
EXPECT_CALL(*session_, WriteControlFrame(_, _))
.Times(AtLeast(1))
.WillRepeatedly(Invoke(&ClearControlFrameWithTransmissionType));
- if (!session_->split_up_send_rst()) {
- EXPECT_CALL(*session_,
- SendRstStream(stream_->id(), QUIC_STREAM_CANCELLED, 9, _))
- .WillOnce(InvokeWithoutArgs([this]() {
- session_->ReallySendRstStream(stream_->id(), QUIC_STREAM_CANCELLED,
- stream_->stream_bytes_written(), false);
- }));
- } else {
- EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, _, _))
- .WillOnce(InvokeWithoutArgs([this]() {
- session_->ReallyMaybeSendRstStreamFrame(
- stream_->id(), QUIC_STREAM_CANCELLED,
- stream_->stream_bytes_written());
- }));
- }
+
+ EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, _, _))
+ .WillOnce(InvokeWithoutArgs([this]() {
+ session_->ReallyMaybeSendRstStreamFrame(
+ stream_->id(), QUIC_STREAM_CANCELLED,
+ stream_->stream_bytes_written());
+ }));
stream_->Reset(QUIC_STREAM_CANCELLED);
EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
@@ -1003,13 +977,8 @@ TEST_P(QuicStreamTest, RstFrameReceivedStreamNotFinishSending) {
QuicRstStreamFrame rst_frame(kInvalidControlFrameId, stream_->id(),
QUIC_STREAM_CANCELLED, 9);
- if (!session_->split_up_send_rst()) {
- EXPECT_CALL(*session_,
- SendRstStream(stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9, _));
- } else {
- EXPECT_CALL(*session_, MaybeSendRstStreamFrame(
- stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9));
- }
+ EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
+ QUIC_RST_ACKNOWLEDGEMENT, 9));
stream_->OnStreamReset(rst_frame);
EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
// Stream stops waiting for acks as it does not finish sending and rst is
@@ -1031,7 +1000,6 @@ TEST_P(QuicStreamTest, RstFrameReceivedStreamFinishSending) {
EXPECT_TRUE(session_->HasUnackedStreamData());
// RST_STREAM received.
- EXPECT_CALL(*session_, SendRstStream(_, _, _, _)).Times(0);
QuicRstStreamFrame rst_frame(kInvalidControlFrameId, stream_->id(),
QUIC_STREAM_CANCELLED, 1234);
stream_->OnStreamReset(rst_frame);
@@ -1052,13 +1020,8 @@ TEST_P(QuicStreamTest, ConnectionClosed) {
stream_->WriteOrBufferData(kData1, false, nullptr);
EXPECT_TRUE(stream_->IsWaitingForAcks());
EXPECT_TRUE(session_->HasUnackedStreamData());
- if (!session_->split_up_send_rst()) {
- EXPECT_CALL(*session_,
- SendRstStream(stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9, _));
- } else {
- EXPECT_CALL(*session_, MaybeSendRstStreamFrame(
- stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9));
- }
+ EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
+ QUIC_RST_ACKNOWLEDGEMENT, 9));
QuicConnectionPeer::SetConnectionClose(connection_);
stream_->OnConnectionClosed(QUIC_INTERNAL_ERROR,
ConnectionCloseSource::FROM_SELF);
@@ -1583,19 +1546,13 @@ TEST_P(QuicStreamTest, ResetStreamOnTtlExpiresRetransmitLostData) {
connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
// Verify stream gets reset because TTL expires.
- if (!session_->split_up_send_rst()) {
- EXPECT_CALL(*session_, SendRstStream(_, QUIC_STREAM_TTL_EXPIRED, _, _))
- .Times(1);
- } else {
- if (session_->version().UsesHttp3()) {
- EXPECT_CALL(*session_,
- MaybeSendStopSendingFrame(_, QUIC_STREAM_TTL_EXPIRED))
- .Times(1);
- }
+ if (session_->version().UsesHttp3()) {
EXPECT_CALL(*session_,
- MaybeSendRstStreamFrame(_, QUIC_STREAM_TTL_EXPIRED, _))
+ MaybeSendStopSendingFrame(_, QUIC_STREAM_TTL_EXPIRED))
.Times(1);
}
+ EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, QUIC_STREAM_TTL_EXPIRED, _))
+ .Times(1);
stream_->OnCanWrite();
}
@@ -1613,19 +1570,13 @@ TEST_P(QuicStreamTest, ResetStreamOnTtlExpiresEarlyRetransmitData) {
connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
// Verify stream gets reset because TTL expires.
- if (!session_->split_up_send_rst()) {
- EXPECT_CALL(*session_, SendRstStream(_, QUIC_STREAM_TTL_EXPIRED, _, _))
- .Times(1);
- } else {
- if (session_->version().UsesHttp3()) {
- EXPECT_CALL(*session_,
- MaybeSendStopSendingFrame(_, QUIC_STREAM_TTL_EXPIRED))
- .Times(1);
- }
+ if (session_->version().UsesHttp3()) {
EXPECT_CALL(*session_,
- MaybeSendRstStreamFrame(_, QUIC_STREAM_TTL_EXPIRED, _))
+ MaybeSendStopSendingFrame(_, QUIC_STREAM_TTL_EXPIRED))
.Times(1);
}
+ EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, QUIC_STREAM_TTL_EXPIRED, _))
+ .Times(1);
stream_->RetransmitStreamData(0, 100, false, PTO_RETRANSMISSION);
}
@@ -1679,6 +1630,23 @@ TEST_P(QuicStreamTest, RstStreamFrameChangesCloseOffset) {
stream_->OnStreamReset(rst);
}
+// Regression test for b/176073284.
+TEST_P(QuicStreamTest, EmptyStreamFrameWithNoFin) {
+ Initialize();
+ QuicStreamFrame empty_stream_frame(stream_->id(), false, 0, "");
+ if (GetQuicReloadableFlag(quic_accept_empty_stream_frame_with_no_fin) &&
+ stream_->version().HasIetfQuicFrames()) {
+ EXPECT_CALL(*connection_,
+ CloseConnection(QUIC_EMPTY_STREAM_FRAME_NO_FIN, _, _))
+ .Times(0);
+ } else {
+ EXPECT_CALL(*connection_,
+ CloseConnection(QUIC_EMPTY_STREAM_FRAME_NO_FIN, _, _));
+ }
+ EXPECT_CALL(*stream_, OnDataAvailable()).Times(0);
+ stream_->OnStreamFrame(empty_stream_frame);
+}
+
} // namespace
} // namespace test
} // namespace quic