| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromeos/login/login_state.h" |
| |
| #include "base/command_line.h" |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "chromeos/chromeos_switches.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| const char kTestUserHash[] = "testuserhash"; |
| } // namespace |
| |
| namespace chromeos { |
| |
| class LoginStateTest : public testing::Test, |
| public LoginState::Observer { |
| public: |
| LoginStateTest() : logged_in_user_type_(LoginState::LOGGED_IN_USER_NONE), |
| login_state_changes_count_(0) { |
| } |
| ~LoginStateTest() override {} |
| |
| // testing::Test |
| void SetUp() override { |
| LoginState::Initialize(); |
| LoginState::Get()->set_always_logged_in(false); |
| LoginState::Get()->AddObserver(this); |
| } |
| |
| void TearDown() override { |
| LoginState::Get()->RemoveObserver(this); |
| LoginState::Shutdown(); |
| } |
| |
| // LoginState::Observer |
| void LoggedInStateChanged() override { |
| ++login_state_changes_count_; |
| logged_in_user_type_ = LoginState::Get()->GetLoggedInUserType(); |
| } |
| |
| protected: |
| // Returns number of times the login state changed since the last call to |
| // this method. |
| unsigned int GetNewLoginStateChangesCount() { |
| unsigned int result = login_state_changes_count_; |
| login_state_changes_count_ = 0; |
| return result; |
| } |
| |
| LoginState::LoggedInUserType logged_in_user_type_; |
| |
| private: |
| unsigned int login_state_changes_count_; |
| |
| DISALLOW_COPY_AND_ASSIGN(LoginStateTest); |
| }; |
| |
| TEST_F(LoginStateTest, TestLoginState) { |
| EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, |
| LoginState::Get()->GetLoggedInUserType()); |
| |
| // Setting login state to ACTIVE. |
| LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, |
| LoginState::LOGGED_IN_USER_REGULAR); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, |
| LoginState::Get()->GetLoggedInUserType()); |
| EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); |
| |
| EXPECT_EQ(1U, GetNewLoginStateChangesCount()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, logged_in_user_type_); |
| } |
| |
| TEST_F(LoginStateTest, TestSafeModeLoginState) { |
| EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, |
| LoginState::Get()->GetLoggedInUserType()); |
| // Setting login state to SAFE MODE. |
| LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_SAFE_MODE, |
| LoginState::LOGGED_IN_USER_NONE); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, |
| LoginState::Get()->GetLoggedInUserType()); |
| EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_TRUE(LoginState::Get()->IsInSafeMode()); |
| |
| EXPECT_EQ(1U, GetNewLoginStateChangesCount()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); |
| |
| // Setting login state to ACTIVE. |
| LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, |
| LoginState::LOGGED_IN_USER_OWNER); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, |
| LoginState::Get()->GetLoggedInUserType()); |
| EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); |
| |
| EXPECT_EQ(1U, GetNewLoginStateChangesCount()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, logged_in_user_type_); |
| } |
| |
| TEST_F(LoginStateTest, TestLoggedInStateChangedObserverOnUserTypeChange) { |
| LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, |
| LoginState::LOGGED_IN_USER_REGULAR); |
| |
| EXPECT_EQ(1u, GetNewLoginStateChangesCount()); |
| EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, logged_in_user_type_); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, |
| LoginState::Get()->GetLoggedInUserType()); |
| |
| // Change the user type, without changing the logged in state. |
| LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, |
| LoginState::LOGGED_IN_USER_OWNER); |
| |
| EXPECT_EQ(1u, GetNewLoginStateChangesCount()); |
| EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, logged_in_user_type_); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, |
| LoginState::Get()->GetLoggedInUserType()); |
| } |
| |
| TEST_F(LoginStateTest, TestPrimaryUser) { |
| EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, |
| LoginState::Get()->GetLoggedInUserType()); |
| |
| // Setting login state to ACTIVE and setting the primary user. |
| LoginState::Get()->SetLoggedInStateAndPrimaryUser( |
| LoginState::LOGGED_IN_ACTIVE, |
| LoginState::LOGGED_IN_USER_REGULAR, |
| kTestUserHash); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, |
| LoginState::Get()->GetLoggedInUserType()); |
| EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); |
| EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); |
| EXPECT_EQ(kTestUserHash, LoginState::Get()->primary_user_hash()); |
| |
| EXPECT_EQ(1U, GetNewLoginStateChangesCount()); |
| EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, logged_in_user_type_); |
| } |
| |
| } // namespace chromeos |