1 #ifndef QUICHE_HTTP2_ADAPTER_TEST_FRAME_SEQUENCE_H_ 2 #define QUICHE_HTTP2_ADAPTER_TEST_FRAME_SEQUENCE_H_ 3 4 #include <cstdint> 5 #include <memory> 6 #include <string> 7 #include <vector> 8 9 #include "quiche/http2/adapter/http2_protocol.h" 10 #include "quiche/common/platform/api/quiche_export.h" 11 #include "quiche/spdy/core/http2_header_block.h" 12 #include "quiche/spdy/core/spdy_protocol.h" 13 14 namespace http2 { 15 namespace adapter { 16 namespace test { 17 18 std::vector<Header> QUICHE_NO_EXPORT ToHeaders( 19 absl::Span<const std::pair<absl::string_view, absl::string_view>> headers); 20 21 class QUICHE_NO_EXPORT TestFrameSequence { 22 public: 23 TestFrameSequence() = default; 24 25 TestFrameSequence& ClientPreface( 26 absl::Span<const Http2Setting> settings = {}); 27 TestFrameSequence& ServerPreface( 28 absl::Span<const Http2Setting> settings = {}); 29 TestFrameSequence& Data(Http2StreamId stream_id, absl::string_view payload, 30 bool fin = false, 31 std::optional<int> padding_length = std::nullopt); 32 TestFrameSequence& RstStream(Http2StreamId stream_id, Http2ErrorCode error); 33 TestFrameSequence& Settings(absl::Span<const Http2Setting> settings); 34 TestFrameSequence& SettingsAck(); 35 TestFrameSequence& PushPromise(Http2StreamId stream_id, 36 Http2StreamId promised_stream_id, 37 absl::Span<const Header> headers); 38 TestFrameSequence& Ping(Http2PingId id); 39 TestFrameSequence& PingAck(Http2PingId id); 40 TestFrameSequence& GoAway(Http2StreamId last_good_stream_id, 41 Http2ErrorCode error, 42 absl::string_view payload = ""); 43 TestFrameSequence& Headers( 44 Http2StreamId stream_id, 45 absl::Span<const std::pair<absl::string_view, absl::string_view>> headers, 46 bool fin = false, bool add_continuation = false); 47 TestFrameSequence& Headers(Http2StreamId stream_id, 48 spdy::Http2HeaderBlock block, bool fin = false, 49 bool add_continuation = false); 50 TestFrameSequence& Headers(Http2StreamId stream_id, 51 absl::Span<const Header> headers, bool fin = false, 52 bool add_continuation = false); 53 TestFrameSequence& WindowUpdate(Http2StreamId stream_id, int32_t delta); 54 TestFrameSequence& Priority(Http2StreamId stream_id, 55 Http2StreamId parent_stream_id, int weight, 56 bool exclusive); 57 TestFrameSequence& Metadata(Http2StreamId stream_id, 58 absl::string_view payload, 59 bool multiple_frames = false); 60 61 std::string Serialize(); 62 63 private: 64 std::string preface_; 65 std::vector<std::unique_ptr<spdy::SpdyFrameIR>> frames_; 66 }; 67 68 } // namespace test 69 } // namespace adapter 70 } // namespace http2 71 72 #endif // QUICHE_HTTP2_ADAPTER_TEST_FRAME_SEQUENCE_H_ 73