1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
7 from telemetry import benchmark
8 from telemetry.core import exceptions
9 from telemetry.core import util
10 from telemetry.core.backends.chrome import cros_test_case
13 class CrOSCryptohomeTest(cros_test_case.CrOSTestCase):
14 @benchmark.Enabled('chromeos')
15 def testCryptohome(self):
16 """Verifies cryptohome mount status for regular and guest user and when
18 with self._CreateBrowser() as b:
19 self.assertEquals(1, len(b.tabs))
20 self.assertTrue(b.tabs[0].url)
21 self.assertTrue(self._IsCryptohomeMounted())
23 # TODO(achuith): Remove dependency on /home/chronos/user.
24 chronos_fs = self._cri.FilesystemMountedAt('/home/chronos/user')
25 self.assertTrue(chronos_fs)
27 self.assertEquals(chronos_fs, 'guestfs')
29 crypto_fs = self._cri.FilesystemMountedAt(
30 self._cri.CryptohomePath(self._username))
31 self.assertEquals(crypto_fs, chronos_fs)
33 self.assertFalse(self._IsCryptohomeMounted())
34 self.assertEquals(self._cri.FilesystemMountedAt('/home/chronos/user'),
35 '/dev/mapper/encstateful')
38 class CrOSLoginTest(cros_test_case.CrOSTestCase):
39 @benchmark.Enabled('chromeos')
40 def testLoginStatus(self):
41 """Tests autotestPrivate.loginStatus"""
44 with self._CreateBrowser(autotest_ext=True) as b:
45 login_status = self._GetLoginStatus(b)
46 self.assertEquals(type(login_status), dict)
48 self.assertEquals(not self._is_guest, login_status['isRegularUser'])
49 self.assertEquals(self._is_guest, login_status['isGuest'])
50 self.assertEquals(login_status['email'], self._username)
51 self.assertFalse(login_status['isScreenLocked'])
53 @benchmark.Enabled('chromeos')
55 """Tests autotestPrivate.logout"""
58 with self._CreateBrowser(autotest_ext=True) as b:
59 extension = self._GetAutotestExtension(b)
61 extension.ExecuteJavaScript('chrome.autotestPrivate.logout();')
62 except (exceptions.BrowserConnectionGoneException,
63 exceptions.BrowserGoneException):
65 util.WaitFor(lambda: not self._IsCryptohomeMounted(), 20)
67 @benchmark.Enabled('chromeos')
68 def testGaiaLogin(self):
69 """Tests gaia login. Credentials are expected to be found in a
70 credentials.txt file, with a single line of format username:password."""
73 (username, password) = self._Credentials('credentials.txt')
74 if username and password:
75 with self._CreateBrowser(gaia_login=True,
78 self.assertTrue(util.WaitFor(self._IsCryptohomeMounted, 10))
81 class CrOSScreenLockerTest(cros_test_case.CrOSTestCase):
82 def _IsScreenLocked(self, browser):
83 return self._GetLoginStatus(browser)['isScreenLocked']
85 def _LockScreen(self, browser):
86 self.assertFalse(self._IsScreenLocked(browser))
88 extension = self._GetAutotestExtension(browser)
89 self.assertTrue(extension.EvaluateJavaScript(
90 "typeof chrome.autotestPrivate.lockScreen == 'function'"))
91 logging.info('Locking screen')
92 extension.ExecuteJavaScript('chrome.autotestPrivate.lockScreen();')
94 logging.info('Waiting for the lock screen')
96 return (browser.oobe_exists and
97 browser.oobe.EvaluateJavaScript("typeof Oobe == 'function'") and
98 browser.oobe.EvaluateJavaScript(
99 "typeof Oobe.authenticateForTesting == 'function'"))
100 util.WaitFor(ScreenLocked, 10)
101 self.assertTrue(self._IsScreenLocked(browser))
103 def _AttemptUnlockBadPassword(self, browser):
104 logging.info('Trying a bad password')
105 def ErrorBubbleVisible():
106 return not browser.oobe.EvaluateJavaScript('''
107 document.getElementById('bubble').hidden
109 self.assertFalse(ErrorBubbleVisible())
110 browser.oobe.ExecuteJavaScript('''
111 Oobe.authenticateForTesting('%s', 'bad');
112 ''' % self._username)
113 util.WaitFor(ErrorBubbleVisible, 10)
114 self.assertTrue(self._IsScreenLocked(browser))
116 def _UnlockScreen(self, browser):
117 logging.info('Unlocking')
118 browser.oobe.ExecuteJavaScript('''
119 Oobe.authenticateForTesting('%s', '%s');
120 ''' % (self._username, self._password))
121 util.WaitFor(lambda: not browser.oobe_exists, 10)
122 self.assertFalse(self._IsScreenLocked(browser))
124 @benchmark.Enabled('chromeos')
125 def testScreenLock(self):
126 """Tests autotestPrivate.screenLock"""
129 with self._CreateBrowser(autotest_ext=True) as browser:
130 self._LockScreen(browser)
131 self._AttemptUnlockBadPassword(browser)
132 self._UnlockScreen(browser)