mock_objects.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. #ifndef GRPC_TEST_CORE_TRANSPORT_BINDER_MOCK_OBJECTS_H
  15. #define GRPC_TEST_CORE_TRANSPORT_BINDER_MOCK_OBJECTS_H
  16. #include <gmock/gmock.h>
  17. #include "src/core/ext/transport/binder/utils/transport_stream_receiver.h"
  18. #include "src/core/ext/transport/binder/wire_format/binder.h"
  19. #include "src/core/ext/transport/binder/wire_format/wire_reader.h"
  20. #include "src/core/ext/transport/binder/wire_format/wire_writer.h"
  21. namespace grpc_binder {
  22. class MockWritableParcel : public WritableParcel {
  23. public:
  24. MOCK_METHOD(int32_t, GetDataSize, (), (const, override));
  25. MOCK_METHOD(absl::Status, WriteInt32, (int32_t), (override));
  26. MOCK_METHOD(absl::Status, WriteInt64, (int64_t), (override));
  27. MOCK_METHOD(absl::Status, WriteBinder, (HasRawBinder*), (override));
  28. MOCK_METHOD(absl::Status, WriteString, (absl::string_view), (override));
  29. MOCK_METHOD(absl::Status, WriteByteArray, (const int8_t*, int32_t),
  30. (override));
  31. MockWritableParcel();
  32. };
  33. class MockReadableParcel : public ReadableParcel {
  34. public:
  35. MOCK_METHOD(int32_t, GetDataSize, (), (const, override));
  36. MOCK_METHOD(absl::Status, ReadInt32, (int32_t*), (override));
  37. MOCK_METHOD(absl::Status, ReadInt64, (int64_t*), (override));
  38. MOCK_METHOD(absl::Status, ReadBinder, (std::unique_ptr<Binder>*), (override));
  39. MOCK_METHOD(absl::Status, ReadByteArray, (std::string*), (override));
  40. MOCK_METHOD(absl::Status, ReadString, (std::string*), (override));
  41. MockReadableParcel();
  42. };
  43. class MockBinder : public Binder {
  44. public:
  45. MOCK_METHOD(void, Initialize, (), (override));
  46. MOCK_METHOD(absl::Status, PrepareTransaction, (), (override));
  47. MOCK_METHOD(absl::Status, Transact, (BinderTransportTxCode), (override));
  48. MOCK_METHOD(WritableParcel*, GetWritableParcel, (), (const, override));
  49. MOCK_METHOD(std::unique_ptr<TransactionReceiver>, ConstructTxReceiver,
  50. (grpc_core::RefCountedPtr<WireReader>,
  51. TransactionReceiver::OnTransactCb),
  52. (const, override));
  53. MOCK_METHOD(void*, GetRawBinder, (), (override));
  54. MockBinder();
  55. MockWritableParcel& GetWriter() { return mock_input_; }
  56. MockReadableParcel& GetReader() { return mock_output_; }
  57. private:
  58. MockWritableParcel mock_input_;
  59. MockReadableParcel mock_output_;
  60. };
  61. // TODO(waynetu): Implement transaction injection later for more thorough
  62. // testing.
  63. class MockTransactionReceiver : public TransactionReceiver {
  64. public:
  65. explicit MockTransactionReceiver(OnTransactCb transact_cb,
  66. BinderTransportTxCode code,
  67. MockReadableParcel* output) {
  68. if (code == BinderTransportTxCode::SETUP_TRANSPORT) {
  69. EXPECT_CALL(*output, ReadInt32).WillOnce([](int32_t* version) {
  70. *version = 1;
  71. return absl::OkStatus();
  72. });
  73. }
  74. transact_cb(static_cast<transaction_code_t>(code), output, /*uid=*/0)
  75. .IgnoreError();
  76. }
  77. MOCK_METHOD(void*, GetRawBinder, (), (override));
  78. };
  79. class MockWireWriter : public WireWriter {
  80. public:
  81. MOCK_METHOD(absl::Status, RpcCall, (const Transaction&), (override));
  82. MOCK_METHOD(absl::Status, SendAck, (int64_t), (override));
  83. MOCK_METHOD(void, OnAckReceived, (int64_t), (override));
  84. };
  85. class MockTransportStreamReceiver : public TransportStreamReceiver {
  86. public:
  87. MOCK_METHOD(void, RegisterRecvInitialMetadata,
  88. (StreamIdentifier, InitialMetadataCallbackType), (override));
  89. MOCK_METHOD(void, RegisterRecvMessage,
  90. (StreamIdentifier, MessageDataCallbackType), (override));
  91. MOCK_METHOD(void, RegisterRecvTrailingMetadata,
  92. (StreamIdentifier, TrailingMetadataCallbackType), (override));
  93. MOCK_METHOD(void, NotifyRecvInitialMetadata,
  94. (StreamIdentifier, absl::StatusOr<Metadata>), (override));
  95. MOCK_METHOD(void, NotifyRecvMessage,
  96. (StreamIdentifier, absl::StatusOr<std::string>), (override));
  97. MOCK_METHOD(void, NotifyRecvTrailingMetadata,
  98. (StreamIdentifier, absl::StatusOr<Metadata>, int), (override));
  99. MOCK_METHOD(void, CancelStream, (StreamIdentifier), (override));
  100. };
  101. } // namespace grpc_binder
  102. #endif // GRPC_TEST_CORE_TRANSPORT_BINDER_MOCK_OBJECTS_H