Home | History | Annotate | Download | only in cryptohome
      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 
     14 namespace chromeos {
     15 namespace {
     16 
     17 // Used as a GetSystemSaltCallback.
     18 void CopySystemSalt(std::string* out_system_salt,
     19                     const std::string& system_salt) {
     20   *out_system_salt = system_salt;
     21 }
     22 
     23 class 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 
     47 TEST_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