15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu# Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu# Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu# found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport os 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport unittest 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.core import browser_finder 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.core import extension_to_load 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.core import util 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom telemetry.core.platform import cros_interface 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.unittest import options_for_unittests 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass CrOSTestCase(unittest.TestCase): 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def setUp(self): 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu options = options_for_unittests.GetCopy() 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self._cri = cros_interface.CrOSInterface(options.cros_remote, 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu options.cros_ssh_identity) 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self._is_guest = options.browser_type == 'cros-chrome-guest' 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self._username = options.browser_options.username 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self._password = options.browser_options.password 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self._load_extension = None 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def _CreateBrowser(self, autotest_ext=False, auto_login=True, 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gaia_login=False, username=None, password=None): 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu """Finds and creates a browser for tests. if autotest_ext is True, 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu also loads the autotest extension""" 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu options = options_for_unittests.GetCopy() 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if autotest_ext: 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension_path = os.path.join(util.GetUnittestDataDir(), 'autotest_ext') 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert os.path.isdir(extension_path) 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self._load_extension = extension_to_load.ExtensionToLoad( 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu path=extension_path, 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu browser_type=options.browser_type, 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu is_component=True) 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu options.extensions_to_load = [self._load_extension] 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu browser_to_create = browser_finder.FindBrowser(options) 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertTrue(browser_to_create) 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser_options = browser_to_create.finder_options.browser_options 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser_options.create_browser_with_oobe = True 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser_options.auto_login = auto_login 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser_options.gaia_login = gaia_login 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if username is not None: 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser_options.username = username 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if password is not None: 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser_options.password = password 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return browser_to_create.Create() 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def _GetAutotestExtension(self, browser): 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu """Returns the autotest extension instance""" 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension = browser.extensions[self._load_extension] 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertTrue(extension) 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return extension 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def _IsCryptohomeMounted(self): 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu """Returns True if cryptohome is mounted. as determined by the cmd 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cryptohome --action=is_mounted""" 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return self._cri.RunCmdOnDevice( 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ['/usr/sbin/cryptohome', '--action=is_mounted'])[0].strip() == 'true' 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def _GetLoginStatus(self, browser): 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension = self._GetAutotestExtension(browser) 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertTrue(extension.EvaluateJavaScript( 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "typeof('chrome.autotestPrivate') != 'undefined'")) 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension.ExecuteJavaScript(''' 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu window.__login_status = null; 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu chrome.autotestPrivate.loginStatus(function(s) { 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu window.__login_status = s; 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }); 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ''') 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return util.WaitFor( 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu lambda: extension.EvaluateJavaScript('window.__login_status'), 10) 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) def _Credentials(self, credentials_path): 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) """Returns credentials from file.""" 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) credentials_path = os.path.join(os.path.dirname(__file__), 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) credentials_path) 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if os.path.isfile(credentials_path): 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) with open(credentials_path) as f: 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) username, password = f.read().rstrip().split(':') 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return (username, password) 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return (None, None) 87