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