Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3359)

Unified Diff: chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc

Issue 2468483002: session_manager: Tracks user sessions (Closed)
Patch Set: replace func overload with better names Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc
diff --git a/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc b/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..ea9a25f0889c65fd2bd67505a0edea884ce763ba
--- /dev/null
+++ b/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc
@@ -0,0 +1,161 @@
+// Copyright 2016 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/session/chrome_session_manager.h"
+
+#include <memory>
+
+#include "base/command_line.h"
+#include "base/macros.h"
+#include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/chromeos/login/existing_user_controller.h"
+#include "chrome/browser/chromeos/login/login_manager_test.h"
+#include "chrome/browser/chromeos/login/startup_utils.h"
+#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
+#include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
+#include "chrome/browser/chromeos/login/ui/webui_login_display.h"
+#include "chrome/browser/chromeos/login/wizard_controller.h"
+#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
+#include "chromeos/chromeos_switches.h"
+#include "content/public/test/test_utils.h"
+#include "google_apis/gaia/fake_gaia.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+
+namespace {
+
+const char* const kTestUsers[] = {"test-user1@consumer.example.com",
+ "test-user2@consumer.example.com",
+ "test-user3@consumer.example.com"};
+
+// Helper class to wait for user adding screen to finish.
+class UserAddingScreenWaiter : public UserAddingScreen::Observer {
+ public:
+ UserAddingScreenWaiter() { UserAddingScreen::Get()->AddObserver(this); }
+ ~UserAddingScreenWaiter() override {
+ UserAddingScreen::Get()->RemoveObserver(this);
+ }
+
+ void Wait() {
+ if (!UserAddingScreen::Get()->IsRunning())
+ return;
+ run_loop_ = base::MakeUnique<base::RunLoop>();
+ run_loop_->Run();
+ }
+
+ // UserAddingScreen::Observer:
+ void OnUserAddingFinished() override {
+ if (run_loop_)
+ run_loop_->Quit();
+ }
+
+ private:
+ std::unique_ptr<base::RunLoop> run_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(UserAddingScreenWaiter);
+};
+
+} // anonymous namespace
+
+class ChromeSessionManagerTest : public LoginManagerTest {
+ public:
+ ChromeSessionManagerTest() : LoginManagerTest(true) {}
+ ~ChromeSessionManagerTest() override {}
+
+ // LoginManagerTest:
+ void SetUpCommandLine(base::CommandLine* command_line) override {
+ LoginManagerTest::SetUpCommandLine(command_line);
+
+ command_line->AppendSwitch(switches::kOobeSkipPostLogin);
+ }
+
+ void StartSignInScreen() {
+ WizardController* wizard_controller =
+ WizardController::default_controller();
+ ASSERT_TRUE(wizard_controller);
+ wizard_controller->SkipToLoginForTesting(LoginScreenContext());
+ OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ChromeSessionManagerTest);
+};
+
+IN_PROC_BROWSER_TEST_F(ChromeSessionManagerTest, OobeNewUser) {
+ // Verify that session state is OOBE and no user sessions in fresh start.
+ session_manager::SessionManager* manager =
+ session_manager::SessionManager::Get();
+ EXPECT_EQ(session_manager::SessionState::OOBE, manager->session_state());
+ EXPECT_EQ(0u, manager->sessions().size());
+
+ // Login via fake gaia to add a new user.
+ fake_gaia_.SetFakeMergeSessionParams(kTestUsers[0], "fake_sid", "fake_lsid");
+ StartSignInScreen();
+
+ content::WindowedNotificationObserver session_start_waiter(
+ chrome::NOTIFICATION_SESSION_STARTED,
+ content::NotificationService::AllSources());
+
+ WebUILoginDisplay* login_display = static_cast<WebUILoginDisplay*>(
+ ExistingUserController::current_controller()->login_display());
+ login_display->ShowSigninScreenForCreds(kTestUsers[0], "fake_password");
+
+ session_start_waiter.Wait();
+
+ // Verify that session state is ACTIVE with one user session.
+ EXPECT_EQ(session_manager::SessionState::ACTIVE, manager->session_state());
+ EXPECT_EQ(1u, manager->sessions().size());
+}
+
+IN_PROC_BROWSER_TEST_F(ChromeSessionManagerTest, PRE_LoginExistingUsers) {
+ for (auto user : kTestUsers) {
+ RegisterUser(user);
+ }
+ StartupUtils::MarkOobeCompleted();
+}
+
+IN_PROC_BROWSER_TEST_F(ChromeSessionManagerTest, LoginExistingUsers) {
+ // Verify that session state is LOGIN_PRIMARY with existing user data dir.
+ session_manager::SessionManager* manager =
+ session_manager::SessionManager::Get();
+ EXPECT_EQ(session_manager::SessionState::LOGIN_PRIMARY,
+ manager->session_state());
+ EXPECT_EQ(0u, manager->sessions().size());
+
+ // Verify that session state is ACTIVE with one user session after signing
+ // in a user.
+ LoginUser(kTestUsers[0]);
+ EXPECT_EQ(session_manager::SessionState::ACTIVE, manager->session_state());
+ EXPECT_EQ(1u, manager->sessions().size());
+
+ for (size_t i = 1; i < arraysize(kTestUsers); ++i) {
+ // Verify that session state is LOGIN_SECONDARY during user adding.
+ UserAddingScreen::Get()->Start();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(session_manager::SessionState::LOGIN_SECONDARY,
+ manager->session_state());
+
+ // Verify that session state is ACTIVE with 1+i user sessions after user
+ // is added and new user session is started..
+ UserAddingScreenWaiter waiter;
+ AddUser(kTestUsers[i]);
+ waiter.Wait();
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_EQ(session_manager::SessionState::ACTIVE, manager->session_state());
+ EXPECT_EQ(1u + i, manager->sessions().size());
+ }
+
+ // Verify that session manager has the correct user session info.
+ ASSERT_EQ(arraysize(kTestUsers), manager->sessions().size());
+ for (size_t i = 0; i < arraysize(kTestUsers); ++i) {
+ EXPECT_EQ(kTestUsers[i],
+ manager->sessions()[i].user_account_id.GetUserEmail());
+ }
+}
+
+} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698