// 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_UPDATE_FW_H_
#define HAMMERD_MOCK_UPDATE_FW_H_

#include <string>

#include <gmock/gmock.h>

#include "hammerd/update_fw.h"

namespace hammerd {

// Since SendSubcommandReceiveResponse is using a void* pointer that can't
// be natively addressed by gMock, we defined a marco that makes side effect
// (the void *resp) be the one we desired.
ACTION_P(WriteResponse, ptr) {
  std::memcpy(arg2, ptr, arg3);
  return true;
}

class MockFirmwareUpdater : public FirmwareUpdaterInterface {
 public:
  MockFirmwareUpdater() = default;

  MOCK_METHOD1(LoadEcImage, bool(const std::string& ec_image));
  MOCK_METHOD1(LoadTouchpadImage, bool(const std::string& touchpad_image));
  MOCK_METHOD0(ConnectUsb, UsbConnectStatus());
  MOCK_METHOD0(TryConnectUsb, UsbConnectStatus());
  MOCK_METHOD0(CloseUsb, void());
  MOCK_METHOD0(SendFirstPdu, bool());
  MOCK_METHOD0(SendDone, void());
  MOCK_METHOD0(InjectEntropy, bool());
  MOCK_METHOD1(SendSubcommand, bool(UpdateExtraCommand subcommand));
  MOCK_METHOD2(SendSubcommandWithPayload,
               bool(UpdateExtraCommand subcommand,
                    const std::string& cmd_body));
  MOCK_METHOD4(SendSubcommandReceiveResponse,
               bool(UpdateExtraCommand subcommand,
                    const std::string& cmd_body,
                    void* resp,
                    size_t resp_size));
  MOCK_METHOD1(TransferImage, bool(SectionName section_name));
  MOCK_METHOD2(TransferTouchpadFirmware,
               bool(uint32_t section_addr, size_t data_len));
  MOCK_CONST_METHOD0(CurrentSection, SectionName());
  MOCK_CONST_METHOD0(ValidKey, bool());
  MOCK_CONST_METHOD0(CompareRollback, int());
  MOCK_CONST_METHOD1(VersionMismatch, bool(SectionName section_name));
  MOCK_CONST_METHOD1(IsSectionLocked, bool(SectionName section_name));
  MOCK_CONST_METHOD0(IsCritical, bool());
  MOCK_METHOD0(UnlockRW, bool());
  MOCK_CONST_METHOD0(IsRollbackLocked, bool());
  MOCK_METHOD0(UnlockRollback, bool());
  MOCK_CONST_METHOD0(GetEcImageVersion, std::string());
};

}  // namespace hammerd
#endif  // HAMMERD_MOCK_UPDATE_FW_H_
