| // 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_METHOD0(Connect, UsbConnectStatus()); |
| MOCK_METHOD0(Close, void()); |
| MOCK_CONST_METHOD0(IsConnected, bool()); |
| MOCK_CONST_METHOD0(GetChunkLength, size_t()); |
| MOCK_CONST_METHOD0(GetConfigurationString, std::string()); |
| |
| // 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, 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, 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_METHOD3(SendHelper, |
| int(std::vector<uint8_t> out, const void* outbuf, int outlen)); |
| |
| MOCK_METHOD4( |
| Receive, |
| int(void* inbuf, int inlen, bool allow_less, unsigned int timeout_ms)); |
| }; |
| |
| } // namespace hammerd |
| #endif // HAMMERD_MOCK_USB_UTILS_H_ |