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