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