Index: chrome/browser/chromeos/login/saml/saml_offline_signin_limiter_unittest.cc |
diff --git a/chrome/browser/chromeos/login/saml/saml_offline_signin_limiter_unittest.cc b/chrome/browser/chromeos/login/saml/saml_offline_signin_limiter_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2747f3c8425624429a37c8c40eb1f8af5648166e |
--- /dev/null |
+++ b/chrome/browser/chromeos/login/saml/saml_offline_signin_limiter_unittest.cc |
@@ -0,0 +1,582 @@ |
+// Copyright 2014 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 "chrome/browser/chromeos/login/saml/saml_offline_signin_limiter.h" |
+ |
+#include "base/memory/ref_counted.h" |
+#include "base/prefs/pref_service.h" |
+#include "base/test/simple_test_clock.h" |
+#include "base/test/test_simple_task_runner.h" |
+#include "base/thread_task_runner_handle.h" |
+#include "base/time/clock.h" |
+#include "chrome/browser/chromeos/login/mock_user_manager.h" |
+#include "chrome/browser/chromeos/login/saml/saml_offline_signin_limiter_factory.h" |
+#include "chrome/browser/chromeos/login/user_manager.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/common/pref_names.h" |
+#include "chrome/test/base/testing_profile.h" |
+#include "components/user_prefs/pref_registry_syncable.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+using testing::Mock; |
+using testing::ReturnRef; |
+using testing::Sequence; |
+ |
+namespace chromeos { |
+ |
+namespace { |
+const char kTestUser[] = "user@example.com"; |
+} |
+ |
+class SAMLOfflineSigninLimiterTest : public testing::Test { |
+ protected: |
+ SAMLOfflineSigninLimiterTest(); |
+ virtual ~SAMLOfflineSigninLimiterTest(); |
+ |
+ // testing::Test: |
+ virtual void SetUp() OVERRIDE; |
+ virtual void TearDown() OVERRIDE; |
+ |
+ void DestroyLimiter(); |
+ void CreateLimiter(); |
+ |
+ scoped_refptr<base::TestSimpleTaskRunner> runner_; |
+ base::ThreadTaskRunnerHandle runner_handle_; |
+ |
+ MockUserManager* user_manager_; // Not owned. |
+ ScopedUserManagerEnabler user_manager_enabler_; |
+ |
+ scoped_ptr<TestingProfile> profile_; |
+ base::SimpleTestClock clock_; |
+ |
+ SAMLOfflineSigninLimiter* limiter_; // Owned. |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SAMLOfflineSigninLimiterTest); |
+}; |
+ |
+SAMLOfflineSigninLimiterTest::SAMLOfflineSigninLimiterTest() |
+ : runner_(new base::TestSimpleTaskRunner), |
+ runner_handle_(runner_), |
+ user_manager_(new MockUserManager), |
+ user_manager_enabler_(user_manager_), |
+ limiter_(NULL) { |
+} |
+ |
+SAMLOfflineSigninLimiterTest::~SAMLOfflineSigninLimiterTest() { |
+ DestroyLimiter(); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, Shutdown()).Times(1); |
+} |
+ |
+void SAMLOfflineSigninLimiterTest::DestroyLimiter() { |
+ if (limiter_) { |
+ limiter_->Shutdown(); |
+ delete limiter_; |
+ limiter_ = NULL; |
+ } |
+} |
+ |
+void SAMLOfflineSigninLimiterTest::CreateLimiter() { |
+ DestroyLimiter(); |
+ limiter_ = new SAMLOfflineSigninLimiter(profile_.get(), &clock_); |
+} |
+ |
+void SAMLOfflineSigninLimiterTest::SetUp() { |
+ const UserList user_list; |
+ EXPECT_CALL(*user_manager_, GetLoggedInUsers()) |
+ .Times(1) |
+ .WillOnce(ReturnRef(user_list)); |
+ profile_.reset(new TestingProfile); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ |
+ SAMLOfflineSigninLimiterFactory::SetClockForTesting(&clock_); |
+ user_manager_->AddUser(kTestUser); |
+ profile_->set_profile_name(kTestUser); |
+ clock_.Advance(base::TimeDelta::FromHours(1)); |
+} |
+ |
+void SAMLOfflineSigninLimiterTest::TearDown() { |
+ SAMLOfflineSigninLimiterFactory::SetClockForTesting(NULL); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, NoSAMLDefaultLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Set the time of last login with SAML. |
+ prefs->SetInt64(prefs::kSAMLLastGAIASignInTime, |
+ clock_.Now().ToInternalValue()); |
+ |
+ // Authenticate against GAIA without SAML. Verify that the flag enforcing |
+ // online login and the time of last login with SAML are cleared. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML); |
+ |
+ const PrefService::Preference* pref = |
+ prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+ |
+ // Log out. Verify that the flag enforcing online login is not set. |
+ DestroyLimiter(); |
+ |
+ // Authenticate offline. Verify that the flag enforcing online login is not |
+ // changed and the time of last login with SAML is not set. |
+ CreateLimiter(); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_OFFLINE); |
+ |
+ pref = prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, NoSAMLNoLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Remove the time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, -1); |
+ |
+ // Set the time of last login with SAML. |
+ prefs->SetInt64(prefs::kSAMLLastGAIASignInTime, |
+ clock_.Now().ToInternalValue()); |
+ |
+ // Authenticate against GAIA without SAML. Verify that the flag enforcing |
+ // online login and the time of last login with SAML are cleared. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML); |
+ |
+ const PrefService::Preference* pref = |
+ prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+ |
+ // Log out. Verify that the flag enforcing online login is not set. |
+ DestroyLimiter(); |
+ |
+ // Authenticate offline. Verify that the flag enforcing online login is not |
+ // changed and the time of last login with SAML is not set. |
+ CreateLimiter(); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_OFFLINE); |
+ |
+ pref = prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, NoSAMLZeroLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Set a zero time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, 0); |
+ |
+ // Set the time of last login with SAML. |
+ prefs->SetInt64(prefs::kSAMLLastGAIASignInTime, |
+ clock_.Now().ToInternalValue()); |
+ |
+ // Authenticate against GAIA without SAML. Verify that the flag enforcing |
+ // online login and the time of last login with SAML are cleared. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML); |
+ |
+ const PrefService::Preference* pref = |
+ prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+ |
+ // Log out. Verify that the flag enforcing online login is not set. |
+ DestroyLimiter(); |
+ |
+ // Authenticate offline. Verify that the flag enforcing online login is not |
+ // changed and the time of last login with SAML is not set. |
+ CreateLimiter(); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_OFFLINE); |
+ |
+ pref = prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, NoSAMLSetLimitWhileLoggedIn) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Remove the time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, -1); |
+ |
+ // Set the time of last login with SAML. |
+ prefs->SetInt64(prefs::kSAMLLastGAIASignInTime, |
+ clock_.Now().ToInternalValue()); |
+ |
+ // Authenticate against GAIA without SAML. Verify that the flag enforcing |
+ // online login and the time of last login with SAML are cleared. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML); |
+ |
+ const PrefService::Preference* pref = |
+ prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+ |
+ // Set a zero time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, 0); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, NoSAMLRemoveLimitWhileLoggedIn) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Set the time of last login with SAML. |
+ prefs->SetInt64(prefs::kSAMLLastGAIASignInTime, |
+ clock_.Now().ToInternalValue()); |
+ |
+ // Authenticate against GAIA without SAML. Verify that the flag enforcing |
+ // online login and the time of last login with SAML are cleared. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML); |
+ |
+ const PrefService::Preference* pref = |
+ prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+ |
+ // Remove the time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, -1); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, NoSAMLLogInWithExpiredLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Set the time of last login with SAML. |
+ prefs->SetInt64(prefs::kSAMLLastGAIASignInTime, |
+ clock_.Now().ToInternalValue()); |
+ |
+ // Advance time by four weeks. |
+ clock_.Advance(base::TimeDelta::FromDays(28)); // 4 weeks. |
+ |
+ // Authenticate against GAIA without SAML. Verify that the flag enforcing |
+ // online login and the time of last login with SAML are cleared. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML); |
+ |
+ const PrefService::Preference* pref = |
+ prefs->FindPreference(prefs::kSAMLLastGAIASignInTime); |
+ ASSERT_TRUE(pref); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, SAMLDefaultLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Authenticate against GAIA with SAML. Verify that the flag enforcing online |
+ // login is cleared and the time of last login with SAML is set. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITH_SAML); |
+ |
+ base::Time last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(clock_.Now(), last_gaia_signin_time); |
+ |
+ // Verify that the timer is running. |
+ EXPECT_TRUE(runner_->HasPendingTask()); |
+ |
+ // Log out. Verify that the flag enforcing online login is not set. |
+ DestroyLimiter(); |
+ |
+ // Advance time by an hour. |
+ clock_.Advance(base::TimeDelta::FromHours(1)); |
+ |
+ // Authenticate against GAIA with SAML. Verify that the flag enforcing online |
+ // login is cleared and the time of last login with SAML is updated. |
+ CreateLimiter(); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITH_SAML); |
+ |
+ last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(clock_.Now(), last_gaia_signin_time); |
+ |
+ // Verify that the timer is running. |
+ EXPECT_TRUE(runner_->HasPendingTask()); |
+ |
+ // Log out. Verify that the flag enforcing online login is not set. |
+ DestroyLimiter(); |
+ |
+ // Advance time by an hour. |
+ const base::Time gaia_signin_time = clock_.Now(); |
+ clock_.Advance(base::TimeDelta::FromHours(1)); |
+ |
+ // Authenticate offline. Verify that the flag enforcing online login and the |
+ // time of last login with SAML are not changed. |
+ CreateLimiter(); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_OFFLINE); |
+ |
+ last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(gaia_signin_time, last_gaia_signin_time); |
+ |
+ // Verify that the timer is running. |
+ EXPECT_TRUE(runner_->HasPendingTask()); |
+ |
+ // Advance time by four weeks. |
+ clock_.Advance(base::TimeDelta::FromDays(28)); // 4 weeks. |
+ |
+ // Allow the timer to fire. Verify that the flag enforcing online login is |
+ // set. |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(1); |
+ runner_->RunPendingTasks(); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, SAMLNoLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Remove the time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, -1); |
+ |
+ // Authenticate against GAIA with SAML. Verify that the flag enforcing online |
+ // login is cleared and the time of last login with SAML is set. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITH_SAML); |
+ |
+ base::Time last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(clock_.Now(), last_gaia_signin_time); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+ |
+ // Log out. Verify that the flag enforcing online login is not set. |
+ DestroyLimiter(); |
+ |
+ // Advance time by an hour. |
+ clock_.Advance(base::TimeDelta::FromHours(1)); |
+ |
+ // Authenticate against GAIA with SAML. Verify that the flag enforcing online |
+ // login is cleared and the time of last login with SAML is updated. |
+ CreateLimiter(); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITH_SAML); |
+ |
+ last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(clock_.Now(), last_gaia_signin_time); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+ |
+ // Log out. Verify that the flag enforcing online login is not set. |
+ DestroyLimiter(); |
+ |
+ // Advance time by an hour. |
+ const base::Time gaia_signin_time = clock_.Now(); |
+ clock_.Advance(base::TimeDelta::FromHours(1)); |
+ |
+ // Authenticate offline. Verify that the flag enforcing online login and the |
+ // time of last login with SAML are not changed. |
+ CreateLimiter(); |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_OFFLINE); |
+ |
+ last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(gaia_signin_time, last_gaia_signin_time); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, SAMLZeroLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Set a zero time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, 0); |
+ |
+ // Authenticate against GAIA with SAML. Verify that the flag enforcing online |
+ // login is cleared and then set immediately. Also verify that the time of |
+ // last login with SAML is set. |
+ CreateLimiter(); |
+ Sequence sequence; |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)) |
+ .Times(1) |
+ .InSequence(sequence); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)) |
+ .Times(1) |
+ .InSequence(sequence); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITH_SAML); |
+ |
+ const base::Time last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(clock_.Now(), last_gaia_signin_time); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, SAMLSetLimitWhileLoggedIn) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Remove the time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, -1); |
+ |
+ // Authenticate against GAIA with SAML. Verify that the flag enforcing online |
+ // login is cleared and the time of last login with SAML is set. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITH_SAML); |
+ |
+ const base::Time last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(clock_.Now(), last_gaia_signin_time); |
+ |
+ // Verify that no timer is running. |
+ EXPECT_FALSE(runner_->HasPendingTask()); |
+ |
+ // Set a zero time limit. Verify that the flag enforcing online login is set. |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(1); |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, 0); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, SAMLRemoveLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Authenticate against GAIA with SAML. Verify that the flag enforcing online |
+ // login is cleared and the time of last login with SAML is set. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITH_SAML); |
+ |
+ const base::Time last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(clock_.Now(), last_gaia_signin_time); |
+ |
+ // Verify that the timer is running. |
+ EXPECT_TRUE(runner_->HasPendingTask()); |
+ |
+ // Remove the time limit. |
+ prefs->SetInteger(prefs::kSAMLOfflineSigninTimeLimit, -1); |
+ |
+ // Allow the timer to fire. Verify that the flag enforcing online login is not |
+ // changed. |
+ Mock::VerifyAndClearExpectations(user_manager_); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ runner_->RunUntilIdle(); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, SAMLLogInWithExpiredLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Set the time of last login with SAML. |
+ prefs->SetInt64(prefs::kSAMLLastGAIASignInTime, |
+ clock_.Now().ToInternalValue()); |
+ |
+ // Advance time by four weeks. |
+ clock_.Advance(base::TimeDelta::FromDays(28)); // 4 weeks. |
+ |
+ // Authenticate against GAIA with SAML. Verify that the flag enforcing online |
+ // login is cleared and the time of last login with SAML is updated. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(1); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(0); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_GAIA_WITH_SAML); |
+ |
+ const base::Time last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(clock_.Now(), last_gaia_signin_time); |
+ |
+ // Verify that the timer is running. |
+ EXPECT_TRUE(runner_->HasPendingTask()); |
+} |
+ |
+TEST_F(SAMLOfflineSigninLimiterTest, SAMLLogInOfflineWithExpiredLimit) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ |
+ // Set the time of last login with SAML. |
+ prefs->SetInt64(prefs::kSAMLLastGAIASignInTime, |
+ clock_.Now().ToInternalValue()); |
+ |
+ // Advance time by four weeks. |
+ const base::Time gaia_signin_time = clock_.Now(); |
+ clock_.Advance(base::TimeDelta::FromDays(28)); // 4 weeks. |
+ |
+ // Authenticate offline. Verify that the flag enforcing online login is |
+ // set and the time of last login with SAML is not changed. |
+ CreateLimiter(); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, false)).Times(0); |
+ EXPECT_CALL(*user_manager_, SaveForceOnlineSignin(kTestUser, true)).Times(1); |
+ limiter_->SignedIn(UserContext::AUTH_FLOW_OFFLINE); |
+ |
+ const base::Time last_gaia_signin_time = base::Time::FromInternalValue( |
+ prefs->GetInt64(prefs::kSAMLLastGAIASignInTime)); |
+ EXPECT_EQ(gaia_signin_time, last_gaia_signin_time); |
+} |
+ |
+} // namespace chromeos |