| Index: chrome/test/functional/chromeos_login.py
|
| diff --git a/chrome/test/functional/chromeos_login.py b/chrome/test/functional/chromeos_login.py
|
| deleted file mode 100755
|
| index 786b0716f15859124e74ede805632197ed813b0d..0000000000000000000000000000000000000000
|
| --- a/chrome/test/functional/chromeos_login.py
|
| +++ /dev/null
|
| @@ -1,371 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 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.
|
| -
|
| -import os
|
| -import subprocess
|
| -import sys
|
| -
|
| -import pyauto_functional # Must be imported before pyauto
|
| -import pyauto
|
| -import pyauto_errors
|
| -import test_utils
|
| -
|
| -
|
| -sys.path.append('/usr/local') # To make autotest libs importable.
|
| -from autotest.cros import cros_ui
|
| -from autotest.cros import cryptohome
|
| -
|
| -
|
| -class ChromeosLogin(pyauto.PyUITest):
|
| - """TestCases for Logging into ChromeOS."""
|
| -
|
| - assert os.geteuid() == 0, 'Need to run this test as root'
|
| -
|
| - def ShouldAutoLogin(self):
|
| - return False
|
| -
|
| - def setUp(self):
|
| - # We want a clean session_manager instance for every run,
|
| - # so restart ui now.
|
| - cros_ui.stop(allow_fail=True)
|
| - cryptohome.remove_all_vaults()
|
| - cros_ui.start(wait_for_login_prompt=False)
|
| - pyauto.PyUITest.setUp(self)
|
| -
|
| - def _ValidCredentials(self, account_type='test_google_account'):
|
| - """Obtains a valid username and password from a data file.
|
| -
|
| - Returns:
|
| - A dictionary with the keys 'username' and 'password'
|
| - """
|
| - return self.GetPrivateInfo()[account_type]
|
| -
|
| - def testExecuteJavascriptInOOBEWebUI(self):
|
| - """Test that javascript can be executed at the login page."""
|
| - msg = 'test success'
|
| - ret = self.ExecuteJavascriptInOOBEWebUI(
|
| - 'window.domAutomationController.send("%s");' % msg)
|
| - self.assertEqual(ret, msg)
|
| -
|
| - def testGoodLogin(self):
|
| - """Test that login is successful with valid credentials."""
|
| - credentials = self._ValidCredentials()
|
| - self.Login(credentials['username'], credentials['password'])
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_logged_in'], msg='Login failed.')
|
| -
|
| - def testBadUsername(self):
|
| - """Test that login fails when passed an invalid username."""
|
| - self.assertRaises(
|
| - pyauto_errors.JSONInterfaceError,
|
| - lambda: self.Login('doesnotexist@fakedomain.org', 'badpassword'))
|
| - login_info = self.GetLoginInfo()
|
| - self.assertFalse(login_info['is_logged_in'],
|
| - msg='Login succeeded, with bad credentials.')
|
| -
|
| - def testBadPassword(self):
|
| - """Test that login fails when passed an invalid password."""
|
| - credentials = self._ValidCredentials()
|
| - self.assertRaises(
|
| - pyauto_errors.JSONInterfaceError,
|
| - lambda: self.Login(credentials['username'], 'badpassword'))
|
| - login_info = self.GetLoginInfo()
|
| - self.assertFalse(login_info['is_logged_in'],
|
| - msg='Login succeeded, with bad credentials.')
|
| -
|
| - def testLoginAsGuest(self):
|
| - """Test we can login with guest mode."""
|
| - self.LoginAsGuest()
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_logged_in'], msg='Not logged in at all.')
|
| - self.assertTrue(login_info['is_guest'], msg='Not logged in as guest.')
|
| -
|
| - def testLockScreenAfterLogin(self):
|
| - """Test after logging in that the screen can be locked."""
|
| - self.testGoodLogin()
|
| - self.assertFalse(self.GetLoginInfo()['is_screen_locked'],
|
| - msg='Screen is locked, but the screen was not locked.')
|
| - self.LockScreen()
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_screen_locked'], msg='The screen is not '
|
| - 'locked after attempting to lock the screen.')
|
| -
|
| - def testLockAndUnlockScreenAfterLogin(self):
|
| - """Test locking and unlocking the screen after logging in."""
|
| - self.testLockScreenAfterLogin()
|
| - self.UnlockScreen(self._ValidCredentials()['password'])
|
| - login_info = self.GetLoginInfo()
|
| - self.assertFalse(login_info['is_screen_locked'],
|
| - msg='Screen is locked, but it should have been unlocked.')
|
| -
|
| - def testLockAndUnlockScreenAfterLoginWithBadPassword(self):
|
| - """Test locking and unlocking the screen with the wrong password."""
|
| - self.testLockScreenAfterLogin()
|
| - self.UnlockScreen('not_the_right_password')
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_screen_locked'],
|
| - msg='Screen is unlock, but it should have been unlocked '
|
| - 'since we attempted to unlock with a bad password')
|
| -
|
| - def testLoginToCreateNewAccount(self):
|
| - """Test we can login as a guest and create a new account."""
|
| - self.ShowCreateAccountUI()
|
| - # The login hook does not wait for the first tab to load, so we wait here.
|
| - self.assertTrue(
|
| - self.WaitUntil(self.GetActiveTabTitle, expect_retval='Google Accounts'),
|
| - msg='Could not verify that the Accounts tab was opened.')
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_guest'], msg='Not logged in as guest.')
|
| -
|
| - def testGoodLoginForTransitionedDomainAccount(self):
|
| - """Test that login is successful with valid credentials for a domain.
|
| -
|
| - ChromeOS only allows GA+ accounts to login, there are also known as
|
| - transitioned accounts.
|
| -
|
| - """
|
| - credentials = self._ValidCredentials(account_type='test_domain_account')
|
| - self.Login(credentials['username'], credentials['password'])
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_logged_in'], msg='Login failed.')
|
| -
|
| - def testNavigateAfterLogin(self):
|
| - """Test that page navigation is successful after logging in."""
|
| - self.testGoodLogin()
|
| - self.NavigateToURL("http://www.google.com")
|
| - self.assertEqual(self.GetActiveTabTitle(), 'Google',
|
| - msg='Unable to navigate to Google and verify tab title.')
|
| -
|
| - def testSigningOutFromLockedScreen(self):
|
| - """Test logout can be performed from the lock screen."""
|
| - self.testLockScreenAfterLogin()
|
| - self.SignoutInScreenLocker()
|
| - self.assertFalse(self.GetLoginInfo()['is_logged_in'],
|
| - msg='Still logged in when we should be logged out.')
|
| -
|
| - def testLoginSequenceSanity(self):
|
| - """Test that the interface can maintain a connection after multiple logins.
|
| -
|
| - This test is to verify the stability of the automation interface.
|
| -
|
| - """
|
| - self.testGoodLogin()
|
| - self.Logout()
|
| - self.testBadPassword()
|
| - self.testLoginAsGuest()
|
| - self.Logout()
|
| - self.testLoginToCreateNewAccount()
|
| -
|
| - def testLogoutWithNoWindows(self):
|
| - """Verify logout when no browser windows are present."""
|
| - self.testGoodLogin()
|
| - for i in range(5):
|
| - self.OpenNewBrowserWindow(True)
|
| - for _ in range(self.GetBrowserWindowCount()):
|
| - self.CloseBrowserWindow(0)
|
| - self.assertEqual(0, self.GetBrowserWindowCount(),
|
| - msg='Could not close all browser windows')
|
| - self.Logout()
|
| - self.testGoodLogin()
|
| -
|
| - def testInitialLoginState(self):
|
| - """Verify basic state of browser windows at initial login."""
|
| - self.testGoodLogin()
|
| - # Should have 1 browser window with 1 tab.
|
| - info = self.GetBrowserInfo()
|
| - self.assertEqual(1, len(info['windows']))
|
| - self.assertFalse(info['windows'][0]['incognito'],
|
| - msg='Did not expect incognito window after login')
|
| - self.assertEqual(1, len(info['windows'][0]['tabs']))
|
| -
|
| - self.OpenNewBrowserWindow(True)
|
| - # Should have 2 regular browser windows.
|
| - info = self.GetBrowserInfo()
|
| - self.assertEqual(2, len(info['windows']))
|
| - self.assertFalse(info['windows'][0]['incognito'])
|
| - self.assertFalse(info['windows'][1]['incognito'],
|
| - msg='Expected a regular new window.')
|
| -
|
| - def testProfilePreservedBetweenLogins(self):
|
| - """Verify that profile is preserved between two login sessions.
|
| -
|
| - Also verify Local State.
|
| - """
|
| - self.testGoodLogin()
|
| -
|
| - # Build up some history and setup state in "Local State".
|
| - url = self.GetHttpURLForDataPath('title2.html')
|
| - self.NavigateToURL(url)
|
| - # chromeos often takes a while to register URLs into history.
|
| - self.assertTrue(self.WaitUntil(lambda: self.GetHistoryInfo().History()),
|
| - msg='Could not open %s successfully' % url)
|
| - open('/home/chronos/__magic__', 'w').close()
|
| - open('/home/chronos/user/__magic__', 'w').close()
|
| -
|
| - def _VerifyProfile():
|
| - history = self.GetHistoryInfo().History()
|
| - self.assertEqual(1, len(history))
|
| - self.assertEqual(url, history[0]['url'])
|
| - self.assertTrue(os.path.exists('/home/chronos/__magic__'),
|
| - msg='/home/chronos/__magic__ did not persist across login sessions')
|
| - self.assertTrue(os.path.exists('/home/chronos/user/__magic__'),
|
| - msg='/home/chronos/user/__magic__ did not persist across '
|
| - 'login sessions')
|
| -
|
| - _VerifyProfile()
|
| - self.Logout()
|
| - self.testGoodLogin() # Re-login with same account.
|
| - _VerifyProfile()
|
| -
|
| - def testGuestCrosh(self):
|
| - """Verify we can use crosh in guest mode."""
|
| - self.LoginAsGuest()
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_logged_in'], msg='Not logged in at all.')
|
| - self.assertTrue(login_info['is_guest'], msg='Not logged in as guest.')
|
| - for _ in range(self.GetBrowserWindowCount()):
|
| - self.CloseBrowserWindow(0)
|
| - test_utils.OpenCroshVerification(self)
|
| -
|
| - # Verify crosh prompt.
|
| - self.WaitForHtermText(text='crosh> ',
|
| - msg='Could not find "crosh> " prompt')
|
| - self.assertTrue(
|
| - self.GetHtermRowsText(start=0, end=2).endswith('crosh> '),
|
| - msg='Could not find "crosh> " prompt')
|
| -
|
| - # Run a crosh command.
|
| - self.SendKeysToHterm('help\\n')
|
| - self.WaitForHtermText(text='help_advanced',
|
| - msg='Could not find "help_advanced" in help output.')
|
| -
|
| - # Exit crosh and close tab.
|
| - self.SendKeysToHterm('exit\\n')
|
| - self.WaitForHtermText(text='command crosh completed with exit code 0',
|
| - msg='Could not exit crosh.')
|
| -
|
| - def testCroshPreservedBetweenLogins(self):
|
| - """Verify user can continue after re-login."""
|
| - self.testGoodLogin()
|
| - self.CloseBrowserWindow(0)
|
| - test_utils.OpenCroshVerification(self)
|
| -
|
| - # Verify crosh prompt.
|
| - self.WaitForHtermText(text='crosh> ',
|
| - msg='Could not find "crosh> " prompt')
|
| - self.assertTrue(
|
| - self.GetHtermRowsText(start=0, end=2).endswith('crosh> '),
|
| - msg='Could not find "crosh> " prompt')
|
| -
|
| - # Open 2 other tabs.
|
| - self.AppendTab(self.GetHttpURLForDataPath('title2.html'))
|
| - self.assertEqual('Title Of Awesomeness', self.GetActiveTabTitle(),
|
| - msg='Unable to naviage to title2.html and '
|
| - 'verify tab title.')
|
| - self.AppendTab(self.GetHttpURLForDataPath('settings', 'image_page.html'))
|
| - self.assertEqual('Show an image', self.GetActiveTabTitle(),
|
| - msg='Unable to navigate to image_page and '
|
| - 'verify tab title.')
|
| - self.Logout()
|
| - self.testGoodLogin() # Re-Login with same account.
|
| -
|
| - # Verify 3 tabs are still open after re-login.
|
| - self.assertEqual(3, len(self.GetBrowserInfo()['windows'][0]['tabs']))
|
| -
|
| -
|
| -class ChromeosLoginCachedCredentialsAddUser(pyauto.PyUITest):
|
| - """TestCase for failing to add a user with invalid proxy settings."""
|
| - assert os.geteuid() == 0, 'Need to run this test as root'
|
| -
|
| - def ShouldAutoLogin(self):
|
| - return False
|
| -
|
| - def setUp(self):
|
| - # We want a clean session_manager instance for every run,
|
| - # so restart ui now.
|
| - cros_ui.stop(allow_fail=True)
|
| - cryptohome.remove_all_vaults()
|
| - cros_ui.start(wait_for_login_prompt=False)
|
| - pyauto.PyUITest.setUp(self)
|
| -
|
| - def tearDown(self):
|
| - self.ResetProxySettingsOnChromeOS()
|
| - pyauto.PyUITest.tearDown(self)
|
| -
|
| - def _ValidCredentials(self, account_type='test_google_account'):
|
| - """Obtains a valid username and password from a data file.
|
| -
|
| - Returns:
|
| - A dictionary with the keys 'username' and 'password'
|
| - """
|
| - return self.GetPrivateInfo()[account_type]
|
| -
|
| - def testCachedCredentialsAddUser(self):
|
| - self.SetSharedProxies(True)
|
| - proxy_config = {
|
| - 'mode': 'fixed_servers',
|
| - 'server': '127.0.0.1'
|
| - }
|
| - self.SetProxySettingOnChromeOS(proxy_config);
|
| -
|
| - """Test that login fails."""
|
| - credentials = self._ValidCredentials()
|
| - self.assertRaises(
|
| - pyauto_errors.JSONInterfaceError,
|
| - lambda: self.Login(credentials['username'],
|
| - credentials['password'])
|
| - )
|
| -
|
| -class ChromeosLoginCachedCredentialsUserPod(ChromeosLogin):
|
| - """TestCase for Logging into ChromeOS with cached credentials and
|
| - invalid proxy settings.
|
| - """
|
| - assert os.geteuid() == 0, 'Need to run this test as root'
|
| -
|
| - def ShouldAutoLogin(self):
|
| - return False
|
| -
|
| - def setUp(self):
|
| - # We want a clean session_manager instance for every run,
|
| - # so restart ui now.
|
| - cros_ui.stop(allow_fail=True)
|
| - cryptohome.remove_all_vaults()
|
| - cros_ui.start(wait_for_login_prompt=False)
|
| - pyauto.PyUITest.setUp(self)
|
| -
|
| - def tearDown(self):
|
| - self.ResetProxySettingsOnChromeOS()
|
| - pyauto.PyUITest.tearDown(self)
|
| -
|
| - def _ValidCredentials(self, account_type='test_google_account'):
|
| - """Obtains a valid username and password from a data file.
|
| -
|
| - Returns:
|
| - A dictionary with the keys 'username' and 'password'
|
| - """
|
| - return self.GetPrivateInfo()[account_type]
|
| -
|
| - def testCachedCredentialsUserPod(self):
|
| - """Test that we can login without connectivity if we have so before.
|
| -
|
| - This test is currently disabled because testGoodLogin tries to
|
| - add a user after setting proxies, which is supposed to fail. To
|
| - make it pass we need a hook that simply calls Login on the delegate
|
| - in webui_login_display.cc ::ShowSigninScreenForCreds.
|
| - """
|
| - self.testGoodLogin()
|
| - self.Logout()
|
| - self.SetSharedProxies(True)
|
| - proxy_config = {
|
| - 'mode': 'fixed_servers',
|
| - 'server': '127.0.0.1'
|
| - }
|
| - self.SetProxySettingOnChromeOS(proxy_config);
|
| - self.testGoodLogin()
|
| - self.ResetProxySettingsOnChromeOS()
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - pyauto_functional.Main()
|
|
|