blob: 55761b6c388cf52ced1656660379a06b676235c6 [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// Copyright (c) 2018 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_QUIC_CORE_QPACK_QPACK_DECODER_TEST_UTILS_H_
6#define QUICHE_QUIC_CORE_QPACK_QPACK_DECODER_TEST_UTILS_H_
7
QUICHE teama6ef0a62019-03-07 20:34:33 -05008#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder.h"
9#include "net/third_party/quiche/src/quic/core/qpack/qpack_progressive_decoder.h"
10#include "net/third_party/quiche/src/quic/core/qpack/qpack_test_utils.h"
11#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
dschinazi580d30b2019-04-26 15:05:20 -070012#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050013#include "net/third_party/quiche/src/spdy/core/spdy_header_block.h"
14
15namespace quic {
16namespace test {
17
18// QpackDecoder::EncoderStreamErrorDelegate implementation that does nothing.
19class NoopEncoderStreamErrorDelegate
20 : public QpackDecoder::EncoderStreamErrorDelegate {
21 public:
22 ~NoopEncoderStreamErrorDelegate() override = default;
23
24 void OnEncoderStreamError(QuicStringPiece error_message) override;
25};
26
27// Mock QpackDecoder::EncoderStreamErrorDelegate implementation.
28class MockEncoderStreamErrorDelegate
29 : public QpackDecoder::EncoderStreamErrorDelegate {
30 public:
31 ~MockEncoderStreamErrorDelegate() override = default;
32
33 MOCK_METHOD1(OnEncoderStreamError, void(QuicStringPiece error_message));
34};
35
36// QpackDecoderStreamSender::Delegate implementation that does nothing.
37class NoopDecoderStreamSenderDelegate
38 : public QpackDecoderStreamSender::Delegate {
39 public:
40 ~NoopDecoderStreamSenderDelegate() override = default;
41
42 void WriteDecoderStreamData(QuicStringPiece data) override;
43};
44
45// Mock QpackDecoderStreamSender::Delegate implementation.
46class MockDecoderStreamSenderDelegate
47 : public QpackDecoderStreamSender::Delegate {
48 public:
49 ~MockDecoderStreamSenderDelegate() override = default;
50
51 MOCK_METHOD1(WriteDecoderStreamData, void(QuicStringPiece data));
52};
53
54// HeadersHandlerInterface implementation that collects decoded headers
55// into a SpdyHeaderBlock.
56class TestHeadersHandler
57 : public QpackProgressiveDecoder::HeadersHandlerInterface {
58 public:
59 TestHeadersHandler();
60 ~TestHeadersHandler() override = default;
61
62 // HeadersHandlerInterface implementation:
63 void OnHeaderDecoded(QuicStringPiece name, QuicStringPiece value) override;
64 void OnDecodingCompleted() override;
65 void OnDecodingErrorDetected(QuicStringPiece error_message) override;
66
67 // Release decoded header list. Must only be called if decoding is complete
68 // and no errors have been detected.
69 spdy::SpdyHeaderBlock ReleaseHeaderList();
70
71 bool decoding_completed() const;
72 bool decoding_error_detected() const;
73
74 private:
75 spdy::SpdyHeaderBlock header_list_;
76 bool decoding_completed_;
77 bool decoding_error_detected_;
78};
79
80class MockHeadersHandler
81 : public QpackProgressiveDecoder::HeadersHandlerInterface {
82 public:
83 MockHeadersHandler() = default;
84 MockHeadersHandler(const MockHeadersHandler&) = delete;
85 MockHeadersHandler& operator=(const MockHeadersHandler&) = delete;
86 ~MockHeadersHandler() override = default;
87
88 MOCK_METHOD2(OnHeaderDecoded,
89 void(QuicStringPiece name, QuicStringPiece value));
90 MOCK_METHOD0(OnDecodingCompleted, void());
91 MOCK_METHOD1(OnDecodingErrorDetected, void(QuicStringPiece error_message));
92};
93
94class NoOpHeadersHandler
95 : public QpackProgressiveDecoder::HeadersHandlerInterface {
96 public:
97 ~NoOpHeadersHandler() override = default;
98
99 void OnHeaderDecoded(QuicStringPiece name, QuicStringPiece value) override {}
100 void OnDecodingCompleted() override {}
101 void OnDecodingErrorDetected(QuicStringPiece error_message) override {}
102};
103
104void QpackDecode(
105 QpackDecoder::EncoderStreamErrorDelegate* encoder_stream_error_delegate,
106 QpackDecoderStreamSender::Delegate* decoder_stream_sender_delegate,
107 QpackProgressiveDecoder::HeadersHandlerInterface* handler,
108 const FragmentSizeGenerator& fragment_size_generator,
109 QuicStringPiece data);
110
111} // namespace test
112} // namespace quic
113
114#endif // QUICHE_QUIC_CORE_QPACK_QPACK_DECODER_TEST_UTILS_H_