| Index: chrome/browser/chromeos/login/multi_profile_user_controller_unittest.cc
|
| diff --git a/chrome/browser/chromeos/login/multi_profile_user_controller_unittest.cc b/chrome/browser/chromeos/login/multi_profile_user_controller_unittest.cc
|
| deleted file mode 100644
|
| index 1c6884d26f6da4b4ba5f4a73e9b0317b9fd6fbcc..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/login/multi_profile_user_controller_unittest.cc
|
| +++ /dev/null
|
| @@ -1,398 +0,0 @@
|
| -// Copyright 2013 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/multi_profile_user_controller.h"
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/chromeos/login/fake_user_manager.h"
|
| -#include "chrome/browser/chromeos/login/multi_profile_user_controller_delegate.h"
|
| -#include "chrome/browser/chromeos/login/user_manager.h"
|
| -#include "chrome/browser/chromeos/policy/policy_cert_service.h"
|
| -#include "chrome/browser/chromeos/policy/policy_cert_service_factory.h"
|
| -#include "chrome/browser/chromeos/policy/policy_cert_verifier.h"
|
| -#include "chrome/browser/prefs/browser_prefs.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/test/base/scoped_testing_local_state.h"
|
| -#include "chrome/test/base/testing_browser_process.h"
|
| -#include "chrome/test/base/testing_pref_service_syncable.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "chrome/test/base/testing_profile_manager.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "net/cert/x509_certificate.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace chromeos {
|
| -
|
| -namespace {
|
| -
|
| -const char* kUsers[] = {"a@gmail.com", "b@gmail.com" };
|
| -
|
| -struct BehaviorTestCase {
|
| - const char* primary;
|
| - const char* secondary;
|
| - MultiProfileUserController::UserAllowedInSessionResult expected_allowed;
|
| -};
|
| -
|
| -const BehaviorTestCase kBehaviorTestCases[] = {
|
| - {
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - MultiProfileUserController::ALLOWED,
|
| - },
|
| - {
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - MultiProfileUserController::NOT_ALLOWED_POLICY_FORBIDS,
|
| - },
|
| - {
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - MultiProfileUserController::kBehaviorNotAllowed,
|
| - MultiProfileUserController::NOT_ALLOWED_POLICY_FORBIDS,
|
| - },
|
| - {
|
| - MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - MultiProfileUserController::ALLOWED,
|
| - },
|
| - {
|
| - MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - MultiProfileUserController::NOT_ALLOWED_POLICY_FORBIDS,
|
| - },
|
| - {
|
| - MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - MultiProfileUserController::kBehaviorNotAllowed,
|
| - MultiProfileUserController::NOT_ALLOWED_POLICY_FORBIDS,
|
| - },
|
| - {
|
| - MultiProfileUserController::kBehaviorNotAllowed,
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - MultiProfileUserController::NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS,
|
| - },
|
| - {
|
| - MultiProfileUserController::kBehaviorNotAllowed,
|
| - MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - MultiProfileUserController::NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS,
|
| - },
|
| - {
|
| - MultiProfileUserController::kBehaviorNotAllowed,
|
| - MultiProfileUserController::kBehaviorNotAllowed,
|
| - MultiProfileUserController::NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS,
|
| - },
|
| -};
|
| -
|
| -// Weak ptr to PolicyCertVerifier - object is freed in test destructor once
|
| -// we've ensured the profile has been shut down.
|
| -policy::PolicyCertVerifier* g_policy_cert_verifier_for_factory = NULL;
|
| -
|
| -KeyedService* TestPolicyCertServiceFactory(content::BrowserContext* context) {
|
| - return policy::PolicyCertService::CreateForTesting(
|
| - kUsers[0], g_policy_cert_verifier_for_factory, UserManager::Get())
|
| - .release();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class MultiProfileUserControllerTest
|
| - : public testing::Test,
|
| - public MultiProfileUserControllerDelegate {
|
| - public:
|
| - MultiProfileUserControllerTest()
|
| - : fake_user_manager_(new FakeUserManager),
|
| - user_manager_enabler_(fake_user_manager_),
|
| - user_not_allowed_count_(0) {}
|
| - virtual ~MultiProfileUserControllerTest() {}
|
| -
|
| - virtual void SetUp() OVERRIDE {
|
| - profile_manager_.reset(
|
| - new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
|
| - ASSERT_TRUE(profile_manager_->SetUp());
|
| - controller_.reset(new MultiProfileUserController(
|
| - this, TestingBrowserProcess::GetGlobal()->local_state()));
|
| -
|
| - for (size_t i = 0; i < arraysize(kUsers); ++i) {
|
| - const std::string user_email(kUsers[i]);
|
| - const User* user = fake_user_manager_->AddUser(user_email);
|
| -
|
| - // Note that user profiles are created after user login in reality.
|
| - TestingProfile* user_profile =
|
| - profile_manager_->CreateTestingProfile(user_email);
|
| - user_profile->set_profile_name(user_email);
|
| - user_profiles_.push_back(user_profile);
|
| -
|
| - fake_user_manager_->SetProfileForUser(user, user_profile);
|
| - }
|
| - }
|
| -
|
| - virtual void TearDown() OVERRIDE {
|
| - // Clear our cached pointer to the PolicyCertVerifier.
|
| - g_policy_cert_verifier_for_factory = NULL;
|
| -
|
| - // We must ensure that the PolicyCertVerifier outlives the
|
| - // PolicyCertService so shutdown the profile here. Additionally, we need
|
| - // to run the message loop between freeing the PolicyCertService and
|
| - // freeing the PolicyCertVerifier (see
|
| - // PolicyCertService::OnTrustAnchorsChanged() which is called from
|
| - // PolicyCertService::Shutdown()).
|
| - controller_.reset();
|
| - profile_manager_.reset();
|
| - base::RunLoop().RunUntilIdle();
|
| - }
|
| -
|
| - void LoginUser(size_t user_index) {
|
| - ASSERT_LT(user_index, arraysize(kUsers));
|
| - fake_user_manager_->LoginUser(kUsers[user_index]);
|
| - controller_->StartObserving(user_profiles_[user_index]);
|
| - }
|
| -
|
| - void SetOwner(size_t user_index) {
|
| - fake_user_manager_->set_owner_email(kUsers[user_index]);
|
| - }
|
| -
|
| - PrefService* GetUserPrefs(size_t user_index) {
|
| - return user_profiles_[user_index]->GetPrefs();
|
| - }
|
| -
|
| - void SetPrefBehavior(size_t user_index, const std::string& behavior) {
|
| - GetUserPrefs(user_index)->SetString(prefs::kMultiProfileUserBehavior,
|
| - behavior);
|
| - }
|
| -
|
| - std::string GetCachedBehavior(size_t user_index) {
|
| - return controller_->GetCachedValue(kUsers[user_index]);
|
| - }
|
| -
|
| - void SetCachedBehavior(size_t user_index,
|
| - const std::string& behavior) {
|
| - controller_->SetCachedValue(kUsers[user_index], behavior);
|
| - }
|
| -
|
| - void ResetCounts() {
|
| - user_not_allowed_count_ = 0;
|
| - }
|
| -
|
| - // MultiProfileUserControllerDeleagte overrides:
|
| - virtual void OnUserNotAllowed(const std::string& user_email) OVERRIDE {
|
| - ++user_not_allowed_count_;
|
| - }
|
| -
|
| - MultiProfileUserController* controller() { return controller_.get(); }
|
| - int user_not_allowed_count() const { return user_not_allowed_count_; }
|
| -
|
| - TestingProfile* profile(int index) {
|
| - return user_profiles_[index];
|
| - }
|
| -
|
| - content::TestBrowserThreadBundle threads_;
|
| - scoped_ptr<policy::PolicyCertVerifier> cert_verifier_;
|
| - scoped_ptr<TestingProfileManager> profile_manager_;
|
| - FakeUserManager* fake_user_manager_; // Not owned
|
| - ScopedUserManagerEnabler user_manager_enabler_;
|
| -
|
| - scoped_ptr<MultiProfileUserController> controller_;
|
| -
|
| - std::vector<TestingProfile*> user_profiles_;
|
| -
|
| - int user_not_allowed_count_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MultiProfileUserControllerTest);
|
| -};
|
| -
|
| -// Tests that everyone is allowed before a session starts.
|
| -TEST_F(MultiProfileUserControllerTest, AllAllowedBeforeLogin) {
|
| - const char* kTestCases[] = {
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - MultiProfileUserController::kBehaviorNotAllowed,
|
| - };
|
| - for (size_t i = 0; i < arraysize(kTestCases); ++i) {
|
| - SetCachedBehavior(0, kTestCases[i]);
|
| - EXPECT_EQ(MultiProfileUserController::ALLOWED,
|
| - controller()->IsUserAllowedInSession(kUsers[0]))
|
| - << "Case " << i;
|
| - }
|
| -}
|
| -
|
| -// Tests that invalid cache value would become the default "unrestricted".
|
| -TEST_F(MultiProfileUserControllerTest, InvalidCacheBecomesDefault) {
|
| - const char kBad[] = "some invalid value";
|
| - SetCachedBehavior(0, kBad);
|
| - EXPECT_EQ(MultiProfileUserController::kBehaviorUnrestricted,
|
| - GetCachedBehavior(0));
|
| -}
|
| -
|
| -// Tests that cached behavior value changes with user pref after login.
|
| -TEST_F(MultiProfileUserControllerTest, CachedBehaviorUpdate) {
|
| - LoginUser(0);
|
| -
|
| - const char* kTestCases[] = {
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - MultiProfileUserController::kBehaviorNotAllowed,
|
| - MultiProfileUserController::kBehaviorUnrestricted,
|
| - };
|
| - for (size_t i = 0; i < arraysize(kTestCases); ++i) {
|
| - SetPrefBehavior(0, kTestCases[i]);
|
| - EXPECT_EQ(kTestCases[i], GetCachedBehavior(0));
|
| - }
|
| -}
|
| -
|
| -// Tests that compromised cache value would be fixed and pref value is checked
|
| -// upon login.
|
| -TEST_F(MultiProfileUserControllerTest, CompromisedCacheFixedOnLogin) {
|
| - SetPrefBehavior(0, MultiProfileUserController::kBehaviorPrimaryOnly);
|
| - SetCachedBehavior(0, MultiProfileUserController::kBehaviorUnrestricted);
|
| - EXPECT_EQ(MultiProfileUserController::kBehaviorUnrestricted,
|
| - GetCachedBehavior(0));
|
| - LoginUser(0);
|
| - EXPECT_EQ(MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - GetCachedBehavior(0));
|
| -
|
| - EXPECT_EQ(0, user_not_allowed_count());
|
| - SetPrefBehavior(1, MultiProfileUserController::kBehaviorPrimaryOnly);
|
| - SetCachedBehavior(1, MultiProfileUserController::kBehaviorUnrestricted);
|
| - EXPECT_EQ(MultiProfileUserController::kBehaviorUnrestricted,
|
| - GetCachedBehavior(1));
|
| - LoginUser(1);
|
| - EXPECT_EQ(MultiProfileUserController::kBehaviorPrimaryOnly,
|
| - GetCachedBehavior(1));
|
| - EXPECT_EQ(1, user_not_allowed_count());
|
| -}
|
| -
|
| -// Tests cases before the second user login.
|
| -TEST_F(MultiProfileUserControllerTest, IsSecondaryAllowed) {
|
| - LoginUser(0);
|
| -
|
| - for (size_t i = 0; i < arraysize(kBehaviorTestCases); ++i) {
|
| - SetPrefBehavior(0, kBehaviorTestCases[i].primary);
|
| - SetCachedBehavior(1, kBehaviorTestCases[i].secondary);
|
| - EXPECT_EQ(kBehaviorTestCases[i].expected_allowed,
|
| - controller()->IsUserAllowedInSession(kUsers[1])) << "Case " << i;
|
| - }
|
| -}
|
| -
|
| -// Tests user behavior changes within a two-user session.
|
| -TEST_F(MultiProfileUserControllerTest, PrimaryBehaviorChange) {
|
| - LoginUser(0);
|
| - LoginUser(1);
|
| -
|
| - for (size_t i = 0; i < arraysize(kBehaviorTestCases); ++i) {
|
| - SetPrefBehavior(0, MultiProfileUserController::kBehaviorUnrestricted);
|
| - SetPrefBehavior(1, MultiProfileUserController::kBehaviorUnrestricted);
|
| - ResetCounts();
|
| -
|
| - SetPrefBehavior(0, kBehaviorTestCases[i].primary);
|
| - SetPrefBehavior(1, kBehaviorTestCases[i].secondary);
|
| - if (user_not_allowed_count() == 0) {
|
| - EXPECT_EQ(kBehaviorTestCases[i].expected_allowed,
|
| - MultiProfileUserController::ALLOWED) << "Case " << i;
|
| - } else {
|
| - EXPECT_NE(kBehaviorTestCases[i].expected_allowed,
|
| - MultiProfileUserController::ALLOWED) << "Case " << i;
|
| - }
|
| - }
|
| -}
|
| -
|
| -// Tests that owner could not be a secondary user.
|
| -TEST_F(MultiProfileUserControllerTest, NoSecondaryOwner) {
|
| - LoginUser(0);
|
| - SetOwner(1);
|
| -
|
| - EXPECT_EQ(MultiProfileUserController::NOT_ALLOWED_OWNER_AS_SECONDARY,
|
| - controller()->IsUserAllowedInSession(kUsers[1]));
|
| -
|
| - EXPECT_EQ(0, user_not_allowed_count());
|
| - LoginUser(1);
|
| - EXPECT_EQ(1, user_not_allowed_count());
|
| -}
|
| -
|
| -TEST_F(MultiProfileUserControllerTest,
|
| - UsedPolicyCertificatesAllowedForPrimary) {
|
| - // Verifies that any user can sign-in as the primary user, regardless of the
|
| - // tainted state.
|
| - policy::PolicyCertServiceFactory::SetUsedPolicyCertificates(kUsers[0]);
|
| - EXPECT_EQ(MultiProfileUserController::ALLOWED,
|
| - controller()->IsUserAllowedInSession(kUsers[0]));
|
| - EXPECT_EQ(MultiProfileUserController::ALLOWED,
|
| - controller()->IsUserAllowedInSession(kUsers[1]));
|
| -}
|
| -
|
| -TEST_F(MultiProfileUserControllerTest,
|
| - UsedPolicyCertificatesDisallowedForSecondary) {
|
| - // Verifies that if a regular user is signed-in then other regular users can
|
| - // be added but tainted users can't.
|
| - LoginUser(1);
|
| -
|
| - // TODO(xiyuan): Remove the following SetPrefBehavor when default is
|
| - // changed back to enabled.
|
| - SetPrefBehavior(1, MultiProfileUserController::kBehaviorUnrestricted);
|
| -
|
| - EXPECT_EQ(MultiProfileUserController::ALLOWED,
|
| - controller()->IsUserAllowedInSession(kUsers[0]));
|
| - policy::PolicyCertServiceFactory::SetUsedPolicyCertificates(kUsers[0]);
|
| - EXPECT_EQ(MultiProfileUserController::NOT_ALLOWED_POLICY_CERT_TAINTED,
|
| - controller()->IsUserAllowedInSession(kUsers[0]));
|
| -}
|
| -
|
| -TEST_F(MultiProfileUserControllerTest,
|
| - UsedPolicyCertificatesDisallowsSecondaries) {
|
| - // Verifies that if a tainted user is signed-in then no other users can
|
| - // be added.
|
| - policy::PolicyCertServiceFactory::SetUsedPolicyCertificates(kUsers[0]);
|
| - LoginUser(0);
|
| -
|
| - cert_verifier_.reset(new policy::PolicyCertVerifier(base::Closure()));
|
| - g_policy_cert_verifier_for_factory = cert_verifier_.get();
|
| - ASSERT_TRUE(
|
| - policy::PolicyCertServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - profile(0), TestPolicyCertServiceFactory));
|
| -
|
| - EXPECT_EQ(MultiProfileUserController::NOT_ALLOWED_PRIMARY_POLICY_CERT_TAINTED,
|
| - controller()->IsUserAllowedInSession(kUsers[1]));
|
| - policy::PolicyCertServiceFactory::SetUsedPolicyCertificates(kUsers[1]);
|
| - EXPECT_EQ(MultiProfileUserController::NOT_ALLOWED_POLICY_CERT_TAINTED,
|
| - controller()->IsUserAllowedInSession(kUsers[1]));
|
| -
|
| - // Flush tasks posted to IO.
|
| - base::RunLoop().RunUntilIdle();
|
| -}
|
| -
|
| -TEST_F(MultiProfileUserControllerTest,
|
| - PolicyCertificatesInMemoryDisallowsSecondaries) {
|
| - // Verifies that if a user is signed-in and has policy certificates installed
|
| - // then no other users can be added.
|
| - LoginUser(0);
|
| -
|
| - // TODO(xiyuan): Remove the following SetPrefBehavor when default is
|
| - // changed back to enabled.
|
| - SetPrefBehavior(0, MultiProfileUserController::kBehaviorUnrestricted);
|
| -
|
| - cert_verifier_.reset(new policy::PolicyCertVerifier(base::Closure()));
|
| - g_policy_cert_verifier_for_factory = cert_verifier_.get();
|
| - ASSERT_TRUE(
|
| - policy::PolicyCertServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - profile(0), TestPolicyCertServiceFactory));
|
| - policy::PolicyCertService* service =
|
| - policy::PolicyCertServiceFactory::GetForProfile(profile(0));
|
| - ASSERT_TRUE(service);
|
| -
|
| - EXPECT_FALSE(service->has_policy_certificates());
|
| - EXPECT_EQ(MultiProfileUserController::ALLOWED,
|
| - controller()->IsUserAllowedInSession(kUsers[1]));
|
| -
|
| - net::CertificateList certificates;
|
| - certificates.push_back(new net::X509Certificate(
|
| - "subject", "issuer", base::Time(), base::Time()));
|
| - service->OnTrustAnchorsChanged(certificates);
|
| - EXPECT_TRUE(service->has_policy_certificates());
|
| - EXPECT_EQ(MultiProfileUserController::NOT_ALLOWED_PRIMARY_POLICY_CERT_TAINTED,
|
| - controller()->IsUserAllowedInSession(kUsers[1]));
|
| -
|
| - // Flush tasks posted to IO.
|
| - base::RunLoop().RunUntilIdle();
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|