• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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