xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/spdy/test_tools/mock_spdy_framer_visitor.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2014 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 #ifndef QUICHE_SPDY_TEST_TOOLS_MOCK_SPDY_FRAMER_VISITOR_H_
6 #define QUICHE_SPDY_TEST_TOOLS_MOCK_SPDY_FRAMER_VISITOR_H_
7 
8 #include <cstddef>
9 #include <cstdint>
10 #include <memory>
11 #include <string>
12 
13 #include "absl/strings/string_view.h"
14 #include "quiche/common/platform/api/quiche_export.h"
15 #include "quiche/common/platform/api/quiche_test.h"
16 #include "quiche/spdy/core/http2_frame_decoder_adapter.h"
17 #include "quiche/spdy/core/recording_headers_handler.h"
18 #include "quiche/spdy/core/spdy_alt_svc_wire_format.h"
19 #include "quiche/spdy/core/spdy_headers_handler_interface.h"
20 #include "quiche/spdy/core/spdy_protocol.h"
21 
22 namespace spdy {
23 
24 namespace test {
25 
26 class QUICHE_NO_EXPORT MockSpdyFramerVisitor
27     : public SpdyFramerVisitorInterface {
28  public:
29   MockSpdyFramerVisitor();
30   ~MockSpdyFramerVisitor() override;
31 
32   MOCK_METHOD(void, OnError,
33               (http2::Http2DecoderAdapter::SpdyFramerError error,
34                std::string detailed_error),
35               (override));
36   MOCK_METHOD(void, OnCommonHeader,
37               (SpdyStreamId stream_id, size_t length, uint8_t type,
38                uint8_t flags),
39               (override));
40   MOCK_METHOD(void, OnDataFrameHeader,
41               (SpdyStreamId stream_id, size_t length, bool fin), (override));
42   MOCK_METHOD(void, OnStreamFrameData,
43               (SpdyStreamId stream_id, const char* data, size_t len),
44               (override));
45   MOCK_METHOD(void, OnStreamEnd, (SpdyStreamId stream_id), (override));
46   MOCK_METHOD(void, OnStreamPadLength, (SpdyStreamId stream_id, size_t value),
47               (override));
48   MOCK_METHOD(void, OnStreamPadding, (SpdyStreamId stream_id, size_t len),
49               (override));
50   MOCK_METHOD(SpdyHeadersHandlerInterface*, OnHeaderFrameStart,
51               (SpdyStreamId stream_id), (override));
52   MOCK_METHOD(void, OnHeaderFrameEnd, (SpdyStreamId stream_id), (override));
53   MOCK_METHOD(void, OnRstStream,
54               (SpdyStreamId stream_id, SpdyErrorCode error_code), (override));
55   MOCK_METHOD(void, OnSettings, (), (override));
56   MOCK_METHOD(void, OnSetting, (SpdySettingsId id, uint32_t value), (override));
57   MOCK_METHOD(void, OnPing, (SpdyPingId unique_id, bool is_ack), (override));
58   MOCK_METHOD(void, OnSettingsEnd, (), (override));
59   MOCK_METHOD(void, OnSettingsAck, (), (override));
60   MOCK_METHOD(void, OnGoAway,
61               (SpdyStreamId last_accepted_stream_id, SpdyErrorCode error_code),
62               (override));
63   MOCK_METHOD(bool, OnGoAwayFrameData, (const char* goaway_data, size_t len),
64               (override));
65   MOCK_METHOD(void, OnHeaders,
66               (SpdyStreamId stream_id, size_t payload_length, bool has_priority,
67                int weight, SpdyStreamId parent_stream_id, bool exclusive,
68                bool fin, bool end),
69               (override));
70   MOCK_METHOD(void, OnWindowUpdate,
71               (SpdyStreamId stream_id, int delta_window_size), (override));
72   MOCK_METHOD(void, OnPushPromise,
73               (SpdyStreamId stream_id, SpdyStreamId promised_stream_id,
74                bool end),
75               (override));
76   MOCK_METHOD(void, OnContinuation,
77               (SpdyStreamId stream_id, size_t payload_length, bool end),
78               (override));
79   MOCK_METHOD(
80       void, OnAltSvc,
81       (SpdyStreamId stream_id, absl::string_view origin,
82        const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector),
83       (override));
84   MOCK_METHOD(void, OnPriority,
85               (SpdyStreamId stream_id, SpdyStreamId parent_stream_id,
86                int weight, bool exclusive),
87               (override));
88   MOCK_METHOD(void, OnPriorityUpdate,
89               (SpdyStreamId prioritized_stream_id,
90                absl::string_view priority_field_value),
91               (override));
92   MOCK_METHOD(bool, OnUnknownFrame,
93               (SpdyStreamId stream_id, uint8_t frame_type), (override));
94   MOCK_METHOD(void, OnUnknownFrameStart,
95               (SpdyStreamId stream_id, size_t length, uint8_t type,
96                uint8_t flags),
97               (override));
98   MOCK_METHOD(void, OnUnknownFramePayload,
99               (SpdyStreamId stream_id, absl::string_view payload), (override));
100 
DelegateHeaderHandling()101   void DelegateHeaderHandling() {
102     ON_CALL(*this, OnHeaderFrameStart(testing::_))
103         .WillByDefault(testing::Invoke(
104             this, &MockSpdyFramerVisitor::ReturnTestHeadersHandler));
105     ON_CALL(*this, OnHeaderFrameEnd(testing::_))
106         .WillByDefault(testing::Invoke(
107             this, &MockSpdyFramerVisitor::ResetTestHeadersHandler));
108   }
109 
ReturnTestHeadersHandler(SpdyStreamId)110   SpdyHeadersHandlerInterface* ReturnTestHeadersHandler(
111       SpdyStreamId /* stream_id */) {
112     if (headers_handler_ == nullptr) {
113       headers_handler_ = std::make_unique<RecordingHeadersHandler>();
114     }
115     return headers_handler_.get();
116   }
117 
ResetTestHeadersHandler(SpdyStreamId)118   void ResetTestHeadersHandler(SpdyStreamId /* stream_id */) {
119     headers_handler_.reset();
120   }
121 
122   std::unique_ptr<SpdyHeadersHandlerInterface> headers_handler_;
123 };
124 
125 }  // namespace test
126 
127 }  // namespace spdy
128 
129 #endif  // QUICHE_SPDY_TEST_TOOLS_MOCK_SPDY_FRAMER_VISITOR_H_
130