xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_receive_stream_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "quiche/quic/core/qpack/qpack_receive_stream.h"
6 
7 #include "absl/strings/string_view.h"
8 #include "quiche/quic/core/quic_utils.h"
9 #include "quiche/quic/platform/api/quic_test.h"
10 #include "quiche/quic/test_tools/quic_spdy_session_peer.h"
11 #include "quiche/quic/test_tools/quic_test_utils.h"
12 
13 namespace quic {
14 namespace test {
15 
16 namespace {
17 using ::testing::_;
18 using ::testing::AnyNumber;
19 using ::testing::StrictMock;
20 
21 struct TestParams {
TestParamsquic::test::__anon78834b0b0111::TestParams22   TestParams(const ParsedQuicVersion& version, Perspective perspective)
23       : version(version), perspective(perspective) {
24     QUIC_LOG(INFO) << "TestParams: version: "
25                    << ParsedQuicVersionToString(version)
26                    << ", perspective: " << perspective;
27   }
28 
TestParamsquic::test::__anon78834b0b0111::TestParams29   TestParams(const TestParams& other)
30       : version(other.version), perspective(other.perspective) {}
31 
32   ParsedQuicVersion version;
33   Perspective perspective;
34 };
35 
GetTestParams()36 std::vector<TestParams> GetTestParams() {
37   std::vector<TestParams> params;
38   ParsedQuicVersionVector all_supported_versions = AllSupportedVersions();
39   for (const auto& version : AllSupportedVersions()) {
40     if (!VersionUsesHttp3(version.transport_version)) {
41       continue;
42     }
43     for (Perspective p : {Perspective::IS_SERVER, Perspective::IS_CLIENT}) {
44       params.emplace_back(version, p);
45     }
46   }
47   return params;
48 }
49 
50 class QpackReceiveStreamTest : public QuicTestWithParam<TestParams> {
51  public:
QpackReceiveStreamTest()52   QpackReceiveStreamTest()
53       : connection_(new StrictMock<MockQuicConnection>(
54             &helper_, &alarm_factory_, perspective(),
55             SupportedVersions(GetParam().version))),
56         session_(connection_) {
57     EXPECT_CALL(session_, OnCongestionWindowChange(_)).Times(AnyNumber());
58     session_.Initialize();
59     EXPECT_CALL(
60         static_cast<const MockQuicCryptoStream&>(*session_.GetCryptoStream()),
61         encryption_established())
62         .WillRepeatedly(testing::Return(true));
63     QuicStreamId id = perspective() == Perspective::IS_SERVER
64                           ? GetNthClientInitiatedUnidirectionalStreamId(
65                                 session_.transport_version(), 3)
66                           : GetNthServerInitiatedUnidirectionalStreamId(
67                                 session_.transport_version(), 3);
68     char type[] = {0x03};
69     QuicStreamFrame data1(id, false, 0, absl::string_view(type, 1));
70     session_.OnStreamFrame(data1);
71     qpack_receive_stream_ =
72         QuicSpdySessionPeer::GetQpackDecoderReceiveStream(&session_);
73   }
74 
perspective() const75   Perspective perspective() const { return GetParam().perspective; }
76 
77   MockQuicConnectionHelper helper_;
78   MockAlarmFactory alarm_factory_;
79   StrictMock<MockQuicConnection>* connection_;
80   StrictMock<MockQuicSpdySession> session_;
81   QpackReceiveStream* qpack_receive_stream_;
82 };
83 
84 INSTANTIATE_TEST_SUITE_P(Tests, QpackReceiveStreamTest,
85                          ::testing::ValuesIn(GetTestParams()));
86 
TEST_P(QpackReceiveStreamTest,ResetQpackReceiveStream)87 TEST_P(QpackReceiveStreamTest, ResetQpackReceiveStream) {
88   EXPECT_TRUE(qpack_receive_stream_->is_static());
89   QuicRstStreamFrame rst_frame(kInvalidControlFrameId,
90                                qpack_receive_stream_->id(),
91                                QUIC_STREAM_CANCELLED, 1234);
92   EXPECT_CALL(*connection_,
93               CloseConnection(QUIC_HTTP_CLOSED_CRITICAL_STREAM, _, _));
94   qpack_receive_stream_->OnStreamReset(rst_frame);
95 }
96 
97 }  // namespace
98 }  // namespace test
99 }  // namespace quic
100