// Copyright 2015 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 TPM_MANAGER_SERVER_MOCK_TPM_STATUS_H_
#define TPM_MANAGER_SERVER_MOCK_TPM_STATUS_H_

#include "tpm_manager/server/tpm_status.h"

#include <vector>

#include <gmock/gmock.h>

namespace tpm_manager {

class MockTpmStatus : public TpmStatus {
 public:
  MockTpmStatus();
  ~MockTpmStatus() override;

  MOCK_METHOD(bool, IsTpmEnabled, (), (override));
  MOCK_METHOD(bool, GetTpmOwned, (TpmOwnershipStatus*), (override));
  MOCK_METHOD(bool,
              GetDictionaryAttackInfo,
              (uint32_t*, uint32_t*, bool*, uint32_t*),
              (override));
  MOCK_METHOD(bool,
              GetVersionInfo,
              (uint32_t*,
               uint64_t*,
               uint32_t*,
               uint32_t*,
               uint64_t*,
               std::vector<uint8_t>*),
              (override));
  MOCK_METHOD(void, MarkRandomOwnerPasswordSet, (), (override));
};

}  // namespace tpm_manager

#endif  // TPM_MANAGER_SERVER_MOCK_TPM_STATUS_H_
