1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/cryptohome_op.h"
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string>
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h"
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/message_loop.h"
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/mock_library_loader.h"
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/mock_cryptohome_library.h"
13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/auth_attempt_state.h"
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/mock_auth_attempt_state_resolver.h"
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/test_attempt_state.h"
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gmock/include/gmock/gmock.h"
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::AnyNumber;
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::Invoke;
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::Return;
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::_;
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos {
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass CryptohomeOpTest : public ::testing::Test {
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  CryptohomeOpTest()
30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      : message_loop_(MessageLoop::TYPE_UI),
31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        ui_thread_(BrowserThread::UI, &message_loop_),
32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        io_thread_(BrowserThread::IO),
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        username_("me@nowhere.org"),
34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        hash_ascii_("0a010000000000a0"),
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch        state_(username_, "", hash_ascii_, "", "", false),
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        resolver_(new MockAuthAttemptStateResolver),
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        mock_library_(new MockCryptohomeLibrary) {
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~CryptohomeOpTest() {}
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void SetUp() {
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    CrosLibrary::TestApi* test_api = CrosLibrary::Get()->GetTestApi();
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    MockLibraryLoader* loader = new MockLibraryLoader();
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    ON_CALL(*loader, Load(_))
47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .WillByDefault(Return(true));
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    EXPECT_CALL(*loader, Load(_))
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(AnyNumber());
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    // Passes ownership of |loader| to CrosLibrary.
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    test_api->SetLibraryLoader(loader, true);
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    // |mock_library_| is mine, though.
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    test_api->SetCryptohomeLibrary(mock_library_.get(), false);
55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    mock_library_->SetUp(false, 0);
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    io_thread_.Start();
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void TearDown() {
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    // Prevent bogus gMock leak check from firing.
62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    chromeos::CrosLibrary::TestApi* test_api =
63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        chromeos::CrosLibrary::Get()->GetTestApi();
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    test_api->SetLibraryLoader(NULL, false);
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void ExpectMigrate(bool passing_old_hash, const std::string& hash) {
68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    if (passing_old_hash) {
69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      EXPECT_CALL(*(mock_library_.get()), AsyncMigrateKey(username_,
70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                          hash,
71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                          hash_ascii_,
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                          _))
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          .Times(1)
74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          .RetiresOnSaturation();
75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    } else {
76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      EXPECT_CALL(*(mock_library_.get()), AsyncMigrateKey(username_,
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                          hash_ascii_,
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                          hash,
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                          _))
80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          .Times(1)
81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          .RetiresOnSaturation();
82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void ExpectMount() {
86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    EXPECT_CALL(*(mock_library_.get()),
87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                AsyncMount(username_, hash_ascii_, true, _))
88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(1)
89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .RetiresOnSaturation();
90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void ExpectMountGuest() {
93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    EXPECT_CALL(*(mock_library_.get()), AsyncMountForBwsi(_))
94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(1)
95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .RetiresOnSaturation();
96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void ExpectRemove() {
99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    EXPECT_CALL(*(mock_library_.get()), AsyncRemove(username_, _))
100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(1)
101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .RetiresOnSaturation();
102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void ExpectCheckKey() {
105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_CALL(*(mock_library_.get()),
106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                AsyncCheckKey(username_, hash_ascii_, _))
107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(1)
108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .RetiresOnSaturation();
109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void RunTest(CryptohomeOp* op, bool outcome, int code) {
112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    mock_library_->SetAsyncBehavior(outcome, code);
113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_CALL(*(resolver_.get()), Resolve())
115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        .Times(1)
116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        .RetiresOnSaturation();
117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_TRUE(op->Initiate());
119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // Force IO thread to finish tasks so I can verify |state_|.
120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    io_thread_.Stop();
121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(outcome, state_.cryptohome_outcome());
123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(code, state_.cryptohome_code());
124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MessageLoop message_loop_;
127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BrowserThread ui_thread_;
128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BrowserThread io_thread_;
129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::string username_;
130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::string hash_ascii_;
131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TestAttemptState state_;
132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockAuthAttemptStateResolver> resolver_;
133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_refptr<CryptohomeOp> op_;
134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockCryptohomeLibrary> mock_library_;
135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MountSuccess) {
139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMount();
140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMountAttempt(&state_, resolver_.get(), true));
142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), true, kCryptohomeMountErrorNone);
143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MountFatal) {
146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMount();
147731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMountAttempt(&state_, resolver_.get(), true));
149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), false, kCryptohomeMountErrorFatal);
150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MountKeyFailure) {
153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMount();
154731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMountAttempt(&state_, resolver_.get(), true));
156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), false, kCryptohomeMountErrorKeyFailure);
157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MountRecreated) {
160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMount();
161731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
162731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMountAttempt(&state_, resolver_.get(), true));
163731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), true, kCryptohomeMountErrorRecreated);
164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MountGuestSuccess) {
167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMountGuest();
168731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
169731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMountGuestAttempt(&state_, resolver_.get()));
170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), true, kCryptohomeMountErrorNone);
171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MountGuestFatal) {
174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMountGuest();
175731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
176731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMountGuestAttempt(&state_, resolver_.get()));
177731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), false, kCryptohomeMountErrorFatal);
178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MigrateSuccessPassOld) {
181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMigrate(true, "");
182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMigrateAttempt(&state_, resolver_.get(), true, ""));
184731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), true, kCryptohomeMountErrorNone);
185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MigrateSuccessPassNew) {
188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMigrate(false, "");
189731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
190731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMigrateAttempt(&state_, resolver_.get(), false, ""));
191731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), true, kCryptohomeMountErrorNone);
192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, MigrateKeyFailure) {
195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectMigrate(true, "");
196731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
197731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateMigrateAttempt(&state_, resolver_.get(), true, ""));
198731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), false, kCryptohomeMountErrorKeyFailure);
199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, RemoveSuccess) {
202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectRemove();
203731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
204731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateRemoveAttempt(&state_, resolver_.get()));
205731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), true, kCryptohomeMountErrorNone);
206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(CryptohomeOpTest, RemoveFailure) {
209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExpectRemove();
210731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
211731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateRemoveAttempt(&state_, resolver_.get()));
212731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), false, kCryptohomeMountErrorKeyFailure);
213731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
214731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
215731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickTEST_F(CryptohomeOpTest, CheckKeySuccess) {
216731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ExpectCheckKey();
217731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
218731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateCheckKeyAttempt(&state_, resolver_.get()));
219731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), true, kCryptohomeMountErrorNone);
220731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
221731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
222731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickTEST_F(CryptohomeOpTest, CheckKeyFailure) {
223731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ExpectCheckKey();
224731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_refptr<CryptohomeOp> op(
225731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      CryptohomeOp::CreateCheckKeyAttempt(&state_, resolver_.get()));
226731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  RunTest(op.get(), false, kCryptohomeMountErrorKeyFailure);
227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}  // namespace chromeos
230