| // Copyright (c) 2018 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef QUICHE_QUIC_TEST_TOOLS_QPACK_QPACK_DECODER_TEST_UTILS_H_ | |
| #define QUICHE_QUIC_TEST_TOOLS_QPACK_QPACK_DECODER_TEST_UTILS_H_ | |
| #include <string> | |
| #include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder.h" | |
| #include "net/third_party/quiche/src/quic/core/qpack/qpack_progressive_decoder.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_test.h" | |
| #include "net/third_party/quiche/src/quic/test_tools/qpack/qpack_test_utils.h" | |
| #include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h" | |
| #include "net/third_party/quiche/src/spdy/core/spdy_header_block.h" | |
| namespace quic { | |
| namespace test { | |
| // QpackDecoder::EncoderStreamErrorDelegate implementation that does nothing. | |
| class NoopEncoderStreamErrorDelegate | |
| : public QpackDecoder::EncoderStreamErrorDelegate { | |
| public: | |
| ~NoopEncoderStreamErrorDelegate() override = default; | |
| void OnEncoderStreamError(quiche::QuicheStringPiece error_message) override; | |
| }; | |
| // Mock QpackDecoder::EncoderStreamErrorDelegate implementation. | |
| class MockEncoderStreamErrorDelegate | |
| : public QpackDecoder::EncoderStreamErrorDelegate { | |
| public: | |
| ~MockEncoderStreamErrorDelegate() override = default; | |
| MOCK_METHOD1(OnEncoderStreamError, | |
| void(quiche::QuicheStringPiece error_message)); | |
| }; | |
| // HeadersHandlerInterface implementation that collects decoded headers | |
| // into a SpdyHeaderBlock. | |
| class TestHeadersHandler | |
| : public QpackProgressiveDecoder::HeadersHandlerInterface { | |
| public: | |
| TestHeadersHandler(); | |
| ~TestHeadersHandler() override = default; | |
| // HeadersHandlerInterface implementation: | |
| void OnHeaderDecoded(quiche::QuicheStringPiece name, | |
| quiche::QuicheStringPiece value) override; | |
| void OnDecodingCompleted() override; | |
| void OnDecodingErrorDetected( | |
| quiche::QuicheStringPiece error_message) override; | |
| // Release decoded header list. Must only be called if decoding is complete | |
| // and no errors have been detected. | |
| spdy::SpdyHeaderBlock ReleaseHeaderList(); | |
| bool decoding_completed() const; | |
| bool decoding_error_detected() const; | |
| const std::string& error_message() const; | |
| private: | |
| spdy::SpdyHeaderBlock header_list_; | |
| bool decoding_completed_; | |
| bool decoding_error_detected_; | |
| std::string error_message_; | |
| }; | |
| class MockHeadersHandler | |
| : public QpackProgressiveDecoder::HeadersHandlerInterface { | |
| public: | |
| MockHeadersHandler() = default; | |
| MockHeadersHandler(const MockHeadersHandler&) = delete; | |
| MockHeadersHandler& operator=(const MockHeadersHandler&) = delete; | |
| ~MockHeadersHandler() override = default; | |
| MOCK_METHOD2(OnHeaderDecoded, | |
| void(quiche::QuicheStringPiece name, | |
| quiche::QuicheStringPiece value)); | |
| MOCK_METHOD0(OnDecodingCompleted, void()); | |
| MOCK_METHOD1(OnDecodingErrorDetected, | |
| void(quiche::QuicheStringPiece error_message)); | |
| }; | |
| class NoOpHeadersHandler | |
| : public QpackProgressiveDecoder::HeadersHandlerInterface { | |
| public: | |
| ~NoOpHeadersHandler() override = default; | |
| void OnHeaderDecoded(quiche::QuicheStringPiece /*name*/, | |
| quiche::QuicheStringPiece /*value*/) override {} | |
| void OnDecodingCompleted() override {} | |
| void OnDecodingErrorDetected( | |
| quiche::QuicheStringPiece /*error_message*/) override {} | |
| }; | |
| void QpackDecode( | |
| uint64_t maximum_dynamic_table_capacity, | |
| uint64_t maximum_blocked_streams, | |
| QpackDecoder::EncoderStreamErrorDelegate* encoder_stream_error_delegate, | |
| QpackStreamSenderDelegate* decoder_stream_sender_delegate, | |
| QpackProgressiveDecoder::HeadersHandlerInterface* handler, | |
| const FragmentSizeGenerator& fragment_size_generator, | |
| quiche::QuicheStringPiece data); | |
| } // namespace test | |
| } // namespace quic | |
| #endif // QUICHE_QUIC_TEST_TOOLS_QPACK_QPACK_DECODER_TEST_UTILS_H_ |