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