1// Copyright (c) 2012 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/login/login_state.h" 6 7#include "base/command_line.h" 8#include "base/compiler_specific.h" 9#include "chromeos/chromeos_switches.h" 10#include "testing/gtest/include/gtest/gtest.h" 11 12namespace { 13const char kTestUserHash[] = "testuserhash"; 14} // namespace 15 16namespace chromeos { 17 18class LoginStateTest : public testing::Test, 19 public LoginState::Observer { 20 public: 21 LoginStateTest() : logged_in_user_type_(LoginState::LOGGED_IN_USER_NONE), 22 login_state_changes_count_(0) { 23 } 24 virtual ~LoginStateTest() { 25 } 26 27 // testing::Test 28 virtual void SetUp() OVERRIDE { 29 LoginState::Initialize(); 30 LoginState::Get()->set_always_logged_in(false); 31 LoginState::Get()->AddObserver(this); 32 } 33 34 virtual void TearDown() OVERRIDE { 35 LoginState::Get()->RemoveObserver(this); 36 LoginState::Shutdown(); 37 } 38 39 // LoginState::Observer 40 virtual void LoggedInStateChanged() OVERRIDE { 41 ++login_state_changes_count_; 42 logged_in_user_type_ = LoginState::Get()->GetLoggedInUserType(); 43 } 44 45 protected: 46 // Returns number of times the login state changed since the last call to 47 // this method. 48 unsigned int GetNewLoginStateChangesCount() { 49 unsigned int result = login_state_changes_count_; 50 login_state_changes_count_ = 0; 51 return result; 52 } 53 54 LoginState::LoggedInUserType logged_in_user_type_; 55 56 private: 57 unsigned int login_state_changes_count_; 58 59 DISALLOW_COPY_AND_ASSIGN(LoginStateTest); 60}; 61 62TEST_F(LoginStateTest, TestLoginState) { 63 EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); 64 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 65 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); 66 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, 67 LoginState::Get()->GetLoggedInUserType()); 68 69 // Setting login state to ACTIVE. 70 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, 71 LoginState::LOGGED_IN_USER_REGULAR); 72 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, 73 LoginState::Get()->GetLoggedInUserType()); 74 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 75 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 76 77 EXPECT_EQ(1U, GetNewLoginStateChangesCount()); 78 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, logged_in_user_type_); 79} 80 81TEST_F(LoginStateTest, TestSafeModeLoginState) { 82 EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); 83 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 84 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); 85 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, 86 LoginState::Get()->GetLoggedInUserType()); 87 // Setting login state to SAFE MODE. 88 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_SAFE_MODE, 89 LoginState::LOGGED_IN_USER_NONE); 90 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, 91 LoginState::Get()->GetLoggedInUserType()); 92 EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); 93 EXPECT_TRUE(LoginState::Get()->IsInSafeMode()); 94 95 EXPECT_EQ(1U, GetNewLoginStateChangesCount()); 96 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); 97 98 // Setting login state to ACTIVE. 99 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, 100 LoginState::LOGGED_IN_USER_OWNER); 101 EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, 102 LoginState::Get()->GetLoggedInUserType()); 103 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 104 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 105 106 EXPECT_EQ(1U, GetNewLoginStateChangesCount()); 107 EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, logged_in_user_type_); 108} 109 110TEST_F(LoginStateTest, TestLoggedInStateChangedObserverOnUserTypeChange) { 111 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, 112 LoginState::LOGGED_IN_USER_REGULAR); 113 114 EXPECT_EQ(1u, GetNewLoginStateChangesCount()); 115 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 116 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, logged_in_user_type_); 117 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, 118 LoginState::Get()->GetLoggedInUserType()); 119 120 // Change the user type, without changing the logged in state. 121 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, 122 LoginState::LOGGED_IN_USER_OWNER); 123 124 EXPECT_EQ(1u, GetNewLoginStateChangesCount()); 125 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 126 EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, logged_in_user_type_); 127 EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, 128 LoginState::Get()->GetLoggedInUserType()); 129} 130 131TEST_F(LoginStateTest, TestPrimaryUser) { 132 EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); 133 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 134 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); 135 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, 136 LoginState::Get()->GetLoggedInUserType()); 137 138 // Setting login state to ACTIVE and setting the primary user. 139 LoginState::Get()->SetLoggedInStateAndPrimaryUser( 140 LoginState::LOGGED_IN_ACTIVE, 141 LoginState::LOGGED_IN_USER_REGULAR, 142 kTestUserHash); 143 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, 144 LoginState::Get()->GetLoggedInUserType()); 145 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 146 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 147 EXPECT_EQ(kTestUserHash, LoginState::Get()->primary_user_hash()); 148 149 EXPECT_EQ(1U, GetNewLoginStateChangesCount()); 150 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, logged_in_user_type_); 151} 152 153} // namespace chromeos 154