1 // Copyright 2023 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 // Pre-defined mocks for the APIs in web_transport.h.
6 
7 #ifndef QUICHE_WEB_TRANSPORT_TEST_TOOLS_MOCK_WEB_TRANSPORT_H_
8 #define QUICHE_WEB_TRANSPORT_TEST_TOOLS_MOCK_WEB_TRANSPORT_H_
9 
10 #include <cstddef>
11 #include <cstdint>
12 #include <memory>
13 #include <string>
14 
15 #include "absl/status/status.h"
16 #include "absl/strings/string_view.h"
17 #include "absl/time/time.h"
18 #include "absl/types/span.h"
19 #include "quiche/common/platform/api/quiche_export.h"
20 #include "quiche/common/platform/api/quiche_test.h"
21 #include "quiche/common/quiche_callbacks.h"
22 #include "quiche/common/quiche_stream.h"
23 #include "quiche/web_transport/web_transport.h"
24 
25 namespace webtransport {
26 namespace test {
27 
28 class QUICHE_NO_EXPORT MockStreamVisitor : public StreamVisitor {
29  public:
30   MOCK_METHOD(void, OnCanRead, (), (override));
31   MOCK_METHOD(void, OnCanWrite, (), (override));
32   MOCK_METHOD(void, OnResetStreamReceived, (StreamErrorCode), (override));
33   MOCK_METHOD(void, OnStopSendingReceived, (StreamErrorCode), (override));
34   MOCK_METHOD(void, OnWriteSideInDataRecvdState, (), (override));
35 };
36 
37 class QUICHE_NO_EXPORT MockStream : public Stream {
38  public:
39   MOCK_METHOD(ReadResult, Read, (absl::Span<char> buffer), (override));
40   MOCK_METHOD(ReadResult, Read, (std::string * output), (override));
41   MOCK_METHOD(absl::Status, Writev,
42               (absl::Span<const absl::string_view> data,
43                const quiche::StreamWriteOptions& options),
44               (override));
45   MOCK_METHOD(PeekResult, PeekNextReadableRegion, (), (const, override));
46   MOCK_METHOD(bool, SkipBytes, (size_t bytes), (override));
47   MOCK_METHOD(bool, CanWrite, (), (const, override));
48   MOCK_METHOD(void, AbruptlyTerminate, (absl::Status), (override));
49   MOCK_METHOD(size_t, ReadableBytes, (), (const, override));
50   MOCK_METHOD(StreamId, GetStreamId, (), (const, override));
51   MOCK_METHOD(void, ResetWithUserCode, (StreamErrorCode error), (override));
52   MOCK_METHOD(void, SendStopSending, (StreamErrorCode error), (override));
53   MOCK_METHOD(void, ResetDueToInternalError, (), (override));
54   MOCK_METHOD(void, MaybeResetDueToStreamObjectGone, (), (override));
55   MOCK_METHOD(StreamVisitor*, visitor, (), (override));
56   MOCK_METHOD(void, SetVisitor, (std::unique_ptr<StreamVisitor> visitor),
57               (override));
58 };
59 
60 class QUICHE_NO_EXPORT MockSessionVisitor : public SessionVisitor {
61  public:
62   MOCK_METHOD(void, OnSessionReady, (), (override));
63   MOCK_METHOD(void, OnSessionClosed,
64               (SessionErrorCode error_code, const std::string& error_message),
65               (override));
66   MOCK_METHOD(void, OnIncomingBidirectionalStreamAvailable, (), (override));
67   MOCK_METHOD(void, OnIncomingUnidirectionalStreamAvailable, (), (override));
68   MOCK_METHOD(void, OnDatagramReceived, (absl::string_view datagram),
69               (override));
70   MOCK_METHOD(void, OnCanCreateNewOutgoingBidirectionalStream, (), (override));
71   MOCK_METHOD(void, OnCanCreateNewOutgoingUnidirectionalStream, (), (override));
72 };
73 
74 class QUICHE_NO_EXPORT MockSession : public Session {
75  public:
76   MOCK_METHOD(void, CloseSession,
77               (SessionErrorCode error_code, absl::string_view error_message),
78               (override));
79   MOCK_METHOD(Stream*, AcceptIncomingBidirectionalStream, (), (override));
80   MOCK_METHOD(Stream*, AcceptIncomingUnidirectionalStream, (), (override));
81   MOCK_METHOD(bool, CanOpenNextOutgoingBidirectionalStream, (), (override));
82   MOCK_METHOD(bool, CanOpenNextOutgoingUnidirectionalStream, (), (override));
83   MOCK_METHOD(Stream*, OpenOutgoingBidirectionalStream, (), (override));
84   MOCK_METHOD(Stream*, OpenOutgoingUnidirectionalStream, (), (override));
85   MOCK_METHOD(Stream*, GetStreamById, (StreamId), (override));
86   MOCK_METHOD(DatagramStatus, SendOrQueueDatagram, (absl::string_view datagram),
87               (override));
88   MOCK_METHOD(uint64_t, GetMaxDatagramSize, (), (const, override));
89   MOCK_METHOD(void, SetDatagramMaxTimeInQueue,
90               (absl::Duration max_time_in_queue), (override));
91   MOCK_METHOD(DatagramStats, GetDatagramStats, (), (override));
92   MOCK_METHOD(SessionStats, GetSessionStats, (), (override));
93   MOCK_METHOD(void, NotifySessionDraining, (), (override));
94   MOCK_METHOD(void, SetOnDraining, (quiche::SingleUseCallback<void()>),
95               (override));
96 };
97 
98 }  // namespace test
99 }  // namespace webtransport
100 
101 #endif  // QUICHE_WEB_TRANSPORT_TEST_TOOLS_MOCK_WEB_TRANSPORT_H_
102