// Copyright (c) 2012 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 CRYPTOHOME_MOCK_LOCKBOX_H_
#define CRYPTOHOME_MOCK_LOCKBOX_H_

#include "cryptohome/lockbox.h"

#include <brillo/secure_blob.h>

#include <gmock/gmock.h>

namespace cryptohome {
using ::testing::_;
using ::testing::Invoke;
using ::testing::Return;

class MockLockbox : public Lockbox {
 public:
  MockLockbox();
  virtual ~MockLockbox();
  MOCK_METHOD1(Create, bool(ErrorId*));  // NOLINT
  MOCK_METHOD1(Destroy, bool(ErrorId*));  // NOLINT
  MOCK_METHOD1(Load, bool(ErrorId*));  // NOLINT
  MOCK_METHOD2(Verify, bool(const brillo::Blob&, ErrorId*));
  MOCK_METHOD2(Store, bool(const brillo::Blob&, ErrorId*));

  MOCK_METHOD1(set_tpm, void(Tpm*));  // NOLINT
  MOCK_METHOD0(tpm, Tpm*());

  MOCK_METHOD1(set_platform, void(Platform*));  // NOLINT
  MOCK_METHOD0(platform, Platform*());

  MOCK_METHOD1(SetDataDirectory, void(const char*));
  MOCK_METHOD0(path, const char*());

  // Formerly protected methods.
  MOCK_CONST_METHOD0(HasAuthorization, bool());
  MOCK_CONST_METHOD0(TpmIsReady, bool());
  MOCK_CONST_METHOD2(GetSizeBlob, bool(const brillo::Blob&, brillo::Blob*));
  MOCK_CONST_METHOD2(ParseSizeBlob, bool(const brillo::Blob&, uint32_t*));
};
}  // namespace cryptohome

#endif  // CRYPTOHOME_MOCK_LOCKBOX_H_
