1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_CHROMEOS_CROS_MOCK_CRYPTOHOME_LIBRARY_H_
6#define CHROME_BROWSER_CHROMEOS_CROS_MOCK_CRYPTOHOME_LIBRARY_H_
7#pragma once
8
9#include <string>
10
11#include "chrome/browser/chromeos/cros/cryptohome_library.h"
12#include "testing/gmock/include/gmock/gmock.h"
13
14using ::testing::Invoke;
15using ::testing::WithArgs;
16using ::testing::_;
17
18namespace chromeos {
19
20class MockCryptohomeLibrary : public CryptohomeLibrary {
21 public:
22  MockCryptohomeLibrary() : outcome_(false), code_(0) {
23  }
24  virtual ~MockCryptohomeLibrary() {}
25  void SetUp(bool outcome, int code) {
26    outcome_ = outcome;
27    code_ = code;
28    ON_CALL(*this, AsyncCheckKey(_, _, _))
29        .WillByDefault(
30            WithArgs<2>(Invoke(this, &MockCryptohomeLibrary::DoCallback)));
31    ON_CALL(*this, AsyncMigrateKey(_, _, _, _))
32        .WillByDefault(
33            WithArgs<3>(Invoke(this, &MockCryptohomeLibrary::DoCallback)));
34    ON_CALL(*this, AsyncMount(_, _, _, _))
35        .WillByDefault(
36            WithArgs<3>(Invoke(this, &MockCryptohomeLibrary::DoCallback)));
37    ON_CALL(*this, AsyncMountForBwsi(_))
38        .WillByDefault(
39            WithArgs<0>(Invoke(this, &MockCryptohomeLibrary::DoCallback)));
40    ON_CALL(*this, AsyncRemove(_, _))
41        .WillByDefault(
42            WithArgs<1>(Invoke(this, &MockCryptohomeLibrary::DoCallback)));
43    ON_CALL(*this, AsyncDoAutomaticFreeDiskSpaceControl(_))
44        .WillByDefault(
45            WithArgs<0>(Invoke(this, &MockCryptohomeLibrary::DoCallback)));
46  }
47  MOCK_METHOD2(CheckKey, bool(const std::string& user_email,
48                              const std::string& passhash));
49  MOCK_METHOD3(AsyncCheckKey, bool(const std::string& user_email,
50                                   const std::string& passhash,
51                                   Delegate* callback));
52  MOCK_METHOD3(MigrateKey, bool(const std::string& user_email,
53                                const std::string& old_hash,
54                                const std::string& new_hash));
55  MOCK_METHOD4(AsyncMigrateKey, bool(const std::string& user_email,
56                                     const std::string& old_hash,
57                                     const std::string& new_hash,
58                                     Delegate* callback));
59  MOCK_METHOD3(Mount, bool(const std::string& user_email,
60                           const std::string& passhash,
61                           int* error_code));
62  MOCK_METHOD4(AsyncMount, bool(const std::string& user_email,
63                                const std::string& passhash,
64                                const bool create_if_missing,
65                                Delegate* callback));
66  MOCK_METHOD1(MountForBwsi, bool(int*));
67  MOCK_METHOD1(AsyncMountForBwsi, bool(Delegate* callback));
68  MOCK_METHOD0(Unmount, bool(void));
69  MOCK_METHOD1(Remove, bool(const std::string& user_email));
70  MOCK_METHOD2(AsyncRemove, bool(const std::string& user_email, Delegate* d));
71  MOCK_METHOD0(IsMounted, bool(void));
72  MOCK_METHOD0(GetSystemSalt, CryptohomeBlob(void));
73  MOCK_METHOD1(AsyncDoAutomaticFreeDiskSpaceControl, bool(Delegate* callback));
74
75  MOCK_METHOD0(TpmIsReady, bool(void));
76  MOCK_METHOD0(TpmIsEnabled, bool(void));
77  MOCK_METHOD0(TpmIsOwned, bool(void));
78  MOCK_METHOD0(TpmIsBeingOwned, bool(void));
79  MOCK_METHOD1(TpmGetPassword, bool(std::string* password));
80  MOCK_METHOD0(TpmCanAttemptOwnership, void(void));
81  MOCK_METHOD0(TpmClearStoredPassword, void(void));
82  MOCK_METHOD0(Pkcs11IsTpmTokenReady, bool(void));
83  MOCK_METHOD2(Pkcs11GetTpmTokenInfo, void(std::string*, std::string*));
84
85  MOCK_METHOD2(InstallAttributesGet, bool(const std::string&, std::string*));
86  MOCK_METHOD2(InstallAttributesSet, bool(const std::string&,
87                                          const std::string&));
88  MOCK_METHOD0(InstallAttributesCount, int(void));
89  MOCK_METHOD0(InstallAttributesFinalize, bool(void));
90  MOCK_METHOD0(InstallAttributesIsReady, bool(void));
91  MOCK_METHOD0(InstallAttributesIsSecure, bool(void));
92  MOCK_METHOD0(InstallAttributesIsInvalid, bool(void));
93  MOCK_METHOD0(InstallAttributesIsFirstInstall, bool(void));
94
95  void SetAsyncBehavior(bool outcome, int code) {
96    outcome_ = outcome;
97    code_ = code;
98  }
99
100  bool DoCallback(Delegate* d) {
101    d->OnComplete(outcome_, code_);
102    return true;
103  }
104
105 private:
106  bool outcome_;
107  int code_;
108  DISALLOW_COPY_AND_ASSIGN(MockCryptohomeLibrary);
109};
110
111}  // namespace chromeos
112
113#endif  // CHROME_BROWSER_CHROMEOS_CROS_MOCK_CRYPTOHOME_LIBRARY_H_
114