1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstdlib>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstring>
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/command_line.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/files/scoped_temp_dir.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/chrome_user_manager_impl.h"
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/test/base/scoped_testing_local_state.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chromeos/chromeos_switches.h"
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/settings/cros_settings_names.h"
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/settings/cros_settings_provider.h"
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h"
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h"
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/common/content_switches.h"
31a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class UnittestProfileManager : public ::ProfileManagerWithoutInit {
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  explicit UnittestProfileManager(const base::FilePath& user_data_dir)
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      : ::ProfileManagerWithoutInit(user_data_dir) {}
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected:
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual Profile* CreateProfileHelper(
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const base::FilePath& file_path) OVERRIDE {
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if (!base::PathExists(file_path)) {
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      if (!base::CreateDirectory(file_path))
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        return NULL;
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return new TestingProfile(file_path, NULL);
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserManagerTest : public testing::Test {
54a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch protected:
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    CommandLine& command_line = *CommandLine::ForCurrentProcess();
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    command_line.AppendSwitch(::switches::kTestType);
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    command_line.AppendSwitch(
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        chromeos::switches::kIgnoreUserProfileMappingForTests);
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cros_settings_ = CrosSettings::Get();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Replace the real DeviceSettingsProvider with a stub.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    device_settings_provider_ =
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cros_settings_->GetProvider(chromeos::kReportDeviceVersionInfo);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_TRUE(device_settings_provider_);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cros_settings_->RemoveSettingsProvider(device_settings_provider_));
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cros_settings_->AddSettingsProvider(&stub_settings_provider_);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Populate the stub DeviceSettingsProvider with valid values.
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    SetDeviceSettings(false, "", false);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Register an in-memory local settings instance.
7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    local_state_.reset(
7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        new ScopedTestingLocalState(TestingBrowserProcess::GetGlobal()));
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    TestingBrowserProcess::GetGlobal()->SetProfileManager(
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        new UnittestProfileManager(temp_dir_.path()));
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    chromeos::DBusThreadManager::Initialize();
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ResetUserManager();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TearDown() OVERRIDE {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Unregister the in-memory local settings instance.
8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    local_state_.reset();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Restore the real DeviceSettingsProvider.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cros_settings_->RemoveSettingsProvider(&stub_settings_provider_));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cros_settings_->AddSettingsProvider(device_settings_provider_);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Shut down the DeviceSettingsService.
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    DeviceSettingsService::Get()->UnsetSessionManager();
98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL);
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::RunLoop().RunUntilIdle();
101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    chromeos::DBusThreadManager::Shutdown();
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ChromeUserManagerImpl* GetChromeUserManager() const {
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return static_cast<ChromeUserManagerImpl*>(
1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        user_manager::UserManager::Get());
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetUserManagerEphemeralUsersEnabled() const {
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return GetChromeUserManager()->GetEphemeralUsersEnabled();
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUserManagerEphemeralUsersEnabled(bool ephemeral_users_enabled) {
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    GetChromeUserManager()->SetEphemeralUsersEnabled(ephemeral_users_enabled);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& GetUserManagerOwnerEmail() const {
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return GetChromeUserManager()->GetOwnerEmail();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUserManagerOwnerEmail(const std::string& owner_email) {
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    GetChromeUserManager()->SetOwnerEmail(owner_email);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ResetUserManager() {
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Reset the UserManager singleton.
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_manager_enabler_.reset();
1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // Initialize the UserManager singleton to a fresh ChromeUserManagerImpl
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // instance.
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_manager_enabler_.reset(
1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        new ScopedUserManagerEnabler(new ChromeUserManagerImpl));
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // ChromeUserManagerImpl ctor posts a task to reload policies.
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    base::RunLoop().RunUntilIdle();
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetDeviceSettings(bool ephemeral_users_enabled,
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const std::string &owner,
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                         bool supervised_users_enabled) {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::FundamentalValue
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ephemeral_users_enabled_value(ephemeral_users_enabled);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    stub_settings_provider_.Set(kAccountsPrefEphemeralUsersEnabled,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ephemeral_users_enabled_value);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringValue owner_value(owner);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    stub_settings_provider_.Set(kDeviceOwner, owner_value);
146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    stub_settings_provider_.Set(kAccountsPrefSupervisedUsersEnabled,
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        base::FundamentalValue(supervised_users_enabled));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RetrieveTrustedDevicePolicies() {
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    GetChromeUserManager()->RetrieveTrustedDevicePolicies();
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
155a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  content::TestBrowserThreadBundle thread_bundle_;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CrosSettings* cros_settings_;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CrosSettingsProvider* device_settings_provider_;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StubCrosSettingsProvider stub_settings_provider_;
16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<ScopedTestingLocalState> local_state_;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ScopedTestDeviceSettingsService test_device_settings_service_;
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ScopedTestCrosSettings test_cros_settings_;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::ScopedTempDir temp_dir_;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(UserManagerTest, RetrieveTrustedDevicePolicies) {
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserManagerEphemeralUsersEnabled(true);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserManagerOwnerEmail("");
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetDeviceSettings(false, "owner@invalid.domain", false);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RetrieveTrustedDevicePolicies();
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetUserManagerEphemeralUsersEnabled());
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetUserManagerOwnerEmail(), "owner@invalid.domain");
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(UserManagerTest, RemoveAllExceptOwnerFromList) {
1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  user_manager::UserManager::Get()->UserLoggedIn(
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "owner@invalid.domain", "owner@invalid.domain", false);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResetUserManager();
1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  user_manager::UserManager::Get()->UserLoggedIn(
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "user0@invalid.domain", "owner@invalid.domain", false);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResetUserManager();
1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  user_manager::UserManager::Get()->UserLoggedIn(
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "user1@invalid.domain", "owner@invalid.domain", false);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResetUserManager();
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const user_manager::UserList* users =
1926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      &user_manager::UserManager::Get()->GetUsers();
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(3U, users->size());
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ((*users)[0]->email(), "user1@invalid.domain");
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ((*users)[1]->email(), "user0@invalid.domain");
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ((*users)[2]->email(), "owner@invalid.domain");
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetDeviceSettings(true, "owner@invalid.domain", false);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RetrieveTrustedDevicePolicies();
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  users = &user_manager::UserManager::Get()->GetUsers();
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1U, users->size());
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain");
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(UserManagerTest, RegularUserLoggedInAsEphemeral) {
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetDeviceSettings(true, "owner@invalid.domain", false);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RetrieveTrustedDevicePolicies();
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  user_manager::UserManager::Get()->UserLoggedIn(
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "owner@invalid.domain", "user0@invalid.domain", false);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResetUserManager();
2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  user_manager::UserManager::Get()->UserLoggedIn(
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "user0@invalid.domain", "user0@invalid.domain", false);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResetUserManager();
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const user_manager::UserList* users =
2186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      &user_manager::UserManager::Get()->GetUsers();
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1U, users->size());
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain");
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
224