Home | History | Annotate | Download | only in login
      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 {
     13 const char kTestUserHash[] = "testuserhash";
     14 }  // namespace
     15 
     16 namespace chromeos {
     17 
     18 class 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 
     62 TEST_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 
     81 TEST_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 
    110 TEST_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 
    131 TEST_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