1// Copyright 2013 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#include "chromeos/cryptohome/system_salt_getter.h" 6 7#include "base/bind.h" 8#include "base/message_loop/message_loop.h" 9#include "base/run_loop.h" 10#include "chromeos/dbus/dbus_thread_manager.h" 11#include "chromeos/dbus/fake_cryptohome_client.h" 12#include "testing/gtest/include/gtest/gtest.h" 13 14namespace chromeos { 15namespace { 16 17// Used as a GetSystemSaltCallback. 18void CopySystemSalt(std::string* out_system_salt, 19 const std::string& system_salt) { 20 *out_system_salt = system_salt; 21} 22 23class SystemSaltGetterTest : public testing::Test { 24 protected: 25 SystemSaltGetterTest() : fake_cryptohome_client_(NULL) {} 26 27 virtual void SetUp() OVERRIDE { 28 fake_cryptohome_client_ = new FakeCryptohomeClient; 29 DBusThreadManager::GetSetterForTesting()->SetCryptohomeClient( 30 scoped_ptr<CryptohomeClient>(fake_cryptohome_client_)); 31 32 EXPECT_FALSE(SystemSaltGetter::IsInitialized()); 33 SystemSaltGetter::Initialize(); 34 ASSERT_TRUE(SystemSaltGetter::IsInitialized()); 35 ASSERT_TRUE(SystemSaltGetter::Get()); 36 } 37 38 virtual void TearDown() OVERRIDE { 39 SystemSaltGetter::Shutdown(); 40 DBusThreadManager::Shutdown(); 41 } 42 43 base::MessageLoopForUI message_loop_; 44 FakeCryptohomeClient* fake_cryptohome_client_; 45}; 46 47TEST_F(SystemSaltGetterTest, GetSystemSalt) { 48 // Try to get system salt before the service becomes available. 49 fake_cryptohome_client_->SetServiceIsAvailable(false); 50 std::string system_salt; 51 SystemSaltGetter::Get()->GetSystemSalt( 52 base::Bind(&CopySystemSalt, &system_salt)); 53 base::RunLoop().RunUntilIdle(); 54 EXPECT_TRUE(system_salt.empty()); // System salt is not returned yet. 55 56 // Service becomes available. 57 fake_cryptohome_client_->SetServiceIsAvailable(true); 58 base::RunLoop().RunUntilIdle(); 59 const std::string expected_system_salt = 60 SystemSaltGetter::ConvertRawSaltToHexString( 61 FakeCryptohomeClient::GetStubSystemSalt()); 62 EXPECT_EQ(expected_system_salt, system_salt); // System salt is returned. 63} 64 65} // namespace 66} // namespace chromeos 67