xref: /aosp_15_r20/external/grpc-grpc/test/core/transport/binder/mock_objects.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 // Copyright 2021 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef GRPC_TEST_CORE_TRANSPORT_BINDER_MOCK_OBJECTS_H
16 #define GRPC_TEST_CORE_TRANSPORT_BINDER_MOCK_OBJECTS_H
17 
18 #include <gmock/gmock.h>
19 
20 #include "src/core/ext/transport/binder/utils/transport_stream_receiver.h"
21 #include "src/core/ext/transport/binder/wire_format/binder.h"
22 #include "src/core/ext/transport/binder/wire_format/binder_constants.h"
23 #include "src/core/ext/transport/binder/wire_format/wire_reader.h"
24 #include "src/core/ext/transport/binder/wire_format/wire_writer.h"
25 
26 namespace grpc_binder {
27 
28 class MockWritableParcel : public WritableParcel {
29  public:
30   MOCK_METHOD(int32_t, GetDataSize, (), (const, override));
31   MOCK_METHOD(absl::Status, WriteInt32, (int32_t), (override));
32   MOCK_METHOD(absl::Status, WriteInt64, (int64_t), (override));
33   MOCK_METHOD(absl::Status, WriteBinder, (HasRawBinder*), (override));
34   MOCK_METHOD(absl::Status, WriteString, (absl::string_view), (override));
35   MOCK_METHOD(absl::Status, WriteByteArray, (const int8_t*, int32_t),
36               (override));
37 
38   MockWritableParcel();
39 };
40 
41 class MockReadableParcel : public ReadableParcel {
42  public:
43   MOCK_METHOD(int32_t, GetDataSize, (), (const, override));
44   MOCK_METHOD(absl::Status, ReadInt32, (int32_t*), (override));
45   MOCK_METHOD(absl::Status, ReadInt64, (int64_t*), (override));
46   MOCK_METHOD(absl::Status, ReadBinder, (std::unique_ptr<Binder>*), (override));
47   MOCK_METHOD(absl::Status, ReadByteArray, (std::string*), (override));
48   MOCK_METHOD(absl::Status, ReadString, (std::string*), (override));
49 
50   MockReadableParcel();
51 };
52 
53 class MockBinder : public Binder {
54  public:
55   MOCK_METHOD(void, Initialize, (), (override));
56   MOCK_METHOD(absl::Status, PrepareTransaction, (), (override));
57   MOCK_METHOD(absl::Status, Transact, (BinderTransportTxCode), (override));
58   MOCK_METHOD(WritableParcel*, GetWritableParcel, (), (const, override));
59   MOCK_METHOD(std::unique_ptr<TransactionReceiver>, ConstructTxReceiver,
60               (grpc_core::RefCountedPtr<WireReader>,
61                TransactionReceiver::OnTransactCb),
62               (const, override));
63   MOCK_METHOD(void*, GetRawBinder, (), (override));
64 
65   MockBinder();
GetWriter()66   MockWritableParcel& GetWriter() { return mock_input_; }
GetReader()67   MockReadableParcel& GetReader() { return mock_output_; }
68 
69  private:
70   MockWritableParcel mock_input_;
71   MockReadableParcel mock_output_;
72 };
73 
74 // TODO(waynetu): Implement transaction injection later for more thorough
75 // testing.
76 class MockTransactionReceiver : public TransactionReceiver {
77  public:
MockTransactionReceiver(OnTransactCb transact_cb,BinderTransportTxCode code,MockReadableParcel * output)78   explicit MockTransactionReceiver(OnTransactCb transact_cb,
79                                    BinderTransportTxCode code,
80                                    MockReadableParcel* output) {
81     if (code == BinderTransportTxCode::SETUP_TRANSPORT) {
82       EXPECT_CALL(*output, ReadInt32).WillOnce([](int32_t* version) {
83         *version = 1;
84         return absl::OkStatus();
85       });
86     }
87     transact_cb(static_cast<transaction_code_t>(code), output, /*uid=*/0)
88         .IgnoreError();
89   }
90 
91   MOCK_METHOD(void*, GetRawBinder, (), (override));
92 };
93 
94 class MockWireWriter : public WireWriter {
95  public:
96   MOCK_METHOD(absl::Status, RpcCall, (std::unique_ptr<Transaction>),
97               (override));
98   MOCK_METHOD(absl::Status, SendAck, (int64_t), (override));
99   MOCK_METHOD(void, OnAckReceived, (int64_t), (override));
100 };
101 
102 class MockTransportStreamReceiver : public TransportStreamReceiver {
103  public:
104   MOCK_METHOD(void, RegisterRecvInitialMetadata,
105               (StreamIdentifier, InitialMetadataCallbackType), (override));
106   MOCK_METHOD(void, RegisterRecvMessage,
107               (StreamIdentifier, MessageDataCallbackType), (override));
108   MOCK_METHOD(void, RegisterRecvTrailingMetadata,
109               (StreamIdentifier, TrailingMetadataCallbackType), (override));
110   MOCK_METHOD(void, NotifyRecvInitialMetadata,
111               (StreamIdentifier, absl::StatusOr<Metadata>), (override));
112   MOCK_METHOD(void, NotifyRecvMessage,
113               (StreamIdentifier, absl::StatusOr<std::string>), (override));
114   MOCK_METHOD(void, NotifyRecvTrailingMetadata,
115               (StreamIdentifier, absl::StatusOr<Metadata>, int), (override));
116   MOCK_METHOD(void, CancelStream, (StreamIdentifier), (override));
117 };
118 
119 }  // namespace grpc_binder
120 
121 #endif  // GRPC_TEST_CORE_TRANSPORT_BINDER_MOCK_OBJECTS_H
122