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