| // Copyright 2017 The Chromium OS 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 HAMMERD_MOCK_USB_UTILS_H_ |
| #define HAMMERD_MOCK_USB_UTILS_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include <gmock/gmock.h> |
| |
| #include "hammerd/usb_utils.h" |
| |
| namespace hammerd { |
| |
| ACTION_P(WriteBuf, ptr) { |
| memcpy(arg0, ptr, arg1); |
| return arg1; |
| } |
| |
| class MockUsbEndpoint : public UsbEndpointInterface { |
| public: |
| MockUsbEndpoint() = default; |
| ~MockUsbEndpoint() override = default; |
| MOCK_METHOD(bool, UsbSysfsExists, (), (override)); |
| MOCK_METHOD(UsbConnectStatus, Connect, (), (override)); |
| MOCK_METHOD(void, Close, (), (override)); |
| MOCK_METHOD(bool, IsConnected, (), (const, override)); |
| MOCK_METHOD(int, GetChunkLength, (), (const, override)); |
| MOCK_METHOD(std::string, GetConfigurationString, (), (const, override)); |
| |
| // Use implementation identical to UsbEndpoint::Transfer, and test calls |
| // to Send and Receive instead. |
| int Transfer(const void* outbuf, |
| int outlen, |
| void* inbuf, |
| int inlen, |
| bool allow_less, |
| unsigned int timeout_ms) override { |
| constexpr int kError = -1; |
| if (Send(outbuf, outlen, allow_less, timeout_ms) != outlen) { |
| return kError; |
| } |
| if (inlen == 0) { |
| return 0; |
| } |
| return Receive(inbuf, inlen, allow_less, timeout_ms); |
| } |
| int Send(const void* outbuf, |
| int outlen, |
| bool allow_less, |
| unsigned int timeout_ms) override { |
| // We only care about the value of the output buffer. |
| auto out_ptr = reinterpret_cast<const uint8_t*>(outbuf); |
| std::vector<uint8_t> out(out_ptr, out_ptr + outlen); |
| return SendHelper(out, outbuf, outlen); |
| } |
| |
| MOCK_METHOD(int, SendHelper, (std::vector<uint8_t>, const void*, int)); |
| |
| MOCK_METHOD(int, Receive, (void*, int, bool, unsigned int), (override)); |
| }; |
| |
| } // namespace hammerd |
| #endif // HAMMERD_MOCK_USB_UTILS_H_ |