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 12 namespace chromeos { 13 14 class LoginStateTest : public testing::Test, 15 public LoginState::Observer { 16 public: 17 LoginStateTest() : logged_in_user_type_(LoginState::LOGGED_IN_USER_NONE), 18 login_state_changes_count_(0) { 19 } 20 virtual ~LoginStateTest() { 21 } 22 23 // testing::Test 24 virtual void SetUp() OVERRIDE { 25 LoginState::Initialize(); 26 LoginState::Get()->set_always_logged_in(false); 27 LoginState::Get()->AddObserver(this); 28 } 29 30 virtual void TearDown() OVERRIDE { 31 LoginState::Get()->RemoveObserver(this); 32 LoginState::Shutdown(); 33 } 34 35 // LoginState::Observer 36 virtual void LoggedInStateChanged() OVERRIDE { 37 ++login_state_changes_count_; 38 logged_in_user_type_ = LoginState::Get()->GetLoggedInUserType(); 39 } 40 41 protected: 42 // Returns number of times the login state changed since the last call to 43 // this method. 44 unsigned int GetNewLoginStateChangesCount() { 45 unsigned int result = login_state_changes_count_; 46 login_state_changes_count_ = 0; 47 return result; 48 } 49 50 LoginState::LoggedInUserType logged_in_user_type_; 51 52 private: 53 unsigned int login_state_changes_count_; 54 55 DISALLOW_COPY_AND_ASSIGN(LoginStateTest); 56 }; 57 58 TEST_F(LoginStateTest, TestLoginState) { 59 EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); 60 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 61 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); 62 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, 63 LoginState::Get()->GetLoggedInUserType()); 64 65 // Setting login state to ACTIVE. 66 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, 67 LoginState::LOGGED_IN_USER_REGULAR); 68 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, 69 LoginState::Get()->GetLoggedInUserType()); 70 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 71 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 72 73 EXPECT_EQ(1U, GetNewLoginStateChangesCount()); 74 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, logged_in_user_type_); 75 } 76 77 TEST_F(LoginStateTest, TestSafeModeLoginState) { 78 EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); 79 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 80 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); 81 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, 82 LoginState::Get()->GetLoggedInUserType()); 83 // Setting login state to SAFE MODE. 84 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_SAFE_MODE, 85 LoginState::LOGGED_IN_USER_NONE); 86 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, 87 LoginState::Get()->GetLoggedInUserType()); 88 EXPECT_FALSE(LoginState::Get()->IsUserLoggedIn()); 89 EXPECT_TRUE(LoginState::Get()->IsInSafeMode()); 90 91 EXPECT_EQ(1U, GetNewLoginStateChangesCount()); 92 EXPECT_EQ(LoginState::LOGGED_IN_USER_NONE, logged_in_user_type_); 93 94 // Setting login state to ACTIVE. 95 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, 96 LoginState::LOGGED_IN_USER_OWNER); 97 EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, 98 LoginState::Get()->GetLoggedInUserType()); 99 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 100 EXPECT_FALSE(LoginState::Get()->IsInSafeMode()); 101 102 EXPECT_EQ(1U, GetNewLoginStateChangesCount()); 103 EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, logged_in_user_type_); 104 } 105 106 TEST_F(LoginStateTest, TestLoggedInStateChangedObserverOnUserTypeChange) { 107 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, 108 LoginState::LOGGED_IN_USER_REGULAR); 109 110 EXPECT_EQ(1u, GetNewLoginStateChangesCount()); 111 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 112 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, logged_in_user_type_); 113 EXPECT_EQ(LoginState::LOGGED_IN_USER_REGULAR, 114 LoginState::Get()->GetLoggedInUserType()); 115 116 // Change the user type, without changing the logged in state. 117 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, 118 LoginState::LOGGED_IN_USER_OWNER); 119 120 EXPECT_EQ(1u, GetNewLoginStateChangesCount()); 121 EXPECT_TRUE(LoginState::Get()->IsUserLoggedIn()); 122 EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, logged_in_user_type_); 123 EXPECT_EQ(LoginState::LOGGED_IN_USER_OWNER, 124 LoginState::Get()->GetLoggedInUserType()); 125 } 126 127 } // namespace chromeos 128