Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / backends / chrome / cros_unittest.py
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.
4
5 import logging
6
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
11
12
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
17     logged out"""
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())
22
23       # TODO(achuith): Remove dependency on /home/chronos/user.
24       chronos_fs = self._cri.FilesystemMountedAt('/home/chronos/user')
25       self.assertTrue(chronos_fs)
26       if self._is_guest:
27         self.assertEquals(chronos_fs, 'guestfs')
28       else:
29         crypto_fs = self._cri.FilesystemMountedAt(
30             self._cri.CryptohomePath(self._username))
31         self.assertEquals(crypto_fs, chronos_fs)
32
33     self.assertFalse(self._IsCryptohomeMounted())
34     self.assertEquals(self._cri.FilesystemMountedAt('/home/chronos/user'),
35                       '/dev/mapper/encstateful')
36
37
38 class CrOSLoginTest(cros_test_case.CrOSTestCase):
39   @benchmark.Enabled('chromeos')
40   def testLoginStatus(self):
41     """Tests autotestPrivate.loginStatus"""
42     if self._is_guest:
43       return
44     with self._CreateBrowser(autotest_ext=True) as b:
45       login_status = self._GetLoginStatus(b)
46       self.assertEquals(type(login_status), dict)
47
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'])
52
53   @benchmark.Enabled('chromeos')
54   def testLogout(self):
55     """Tests autotestPrivate.logout"""
56     if self._is_guest:
57       return
58     with self._CreateBrowser(autotest_ext=True) as b:
59       extension = self._GetAutotestExtension(b)
60       try:
61         extension.ExecuteJavaScript('chrome.autotestPrivate.logout();')
62       except (exceptions.BrowserConnectionGoneException,
63               exceptions.BrowserGoneException):
64         pass
65       util.WaitFor(lambda: not self._IsCryptohomeMounted(), 20)
66
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."""
71     if self._is_guest:
72       return
73     (username, password) = self._Credentials('credentials.txt')
74     if username and password:
75       with self._CreateBrowser(gaia_login=True,
76                                username=username,
77                                password=password):
78         self.assertTrue(util.WaitFor(self._IsCryptohomeMounted, 10))
79
80
81 class CrOSScreenLockerTest(cros_test_case.CrOSTestCase):
82   def _IsScreenLocked(self, browser):
83     return self._GetLoginStatus(browser)['isScreenLocked']
84
85   def _LockScreen(self, browser):
86     self.assertFalse(self._IsScreenLocked(browser))
87
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();')
93
94     logging.info('Waiting for the lock screen')
95     def ScreenLocked():
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))
102
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
108       ''')
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))
115
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))
123
124   @benchmark.Enabled('chromeos')
125   def testScreenLock(self):
126     """Tests autotestPrivate.screenLock"""
127     if self._is_guest:
128       return
129     with self._CreateBrowser(autotest_ext=True) as browser:
130       self._LockScreen(browser)
131       self._AttemptUnlockBadPassword(browser)
132       self._UnlockScreen(browser)