# Lint as: python2, python3 # Copyright 2021 The Chromium OS 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 logging import os import time from autotest_lib.client.bin import test from autotest_lib.client.bin import utils from autotest_lib.client.common_lib import error from autotest_lib.client.common_lib import ui_utils from autotest_lib.client.common_lib.cros import chrome class desktopui_RootfsLacros(test.test): """Tests logging in, opening lacros, and verifying the version number.""" version = 1 def is_lacros_running(self): """ Return True if lacros is running. """ process = utils.run('pgrep -f /run/lacros/chrome', ignore_status=True).stdout return len(process) > 0 def run_once(self, dont_override_profile=False): """Check rootfs-lacros opens and its version number.""" # Use args to keep test as hermetic as possible. # See crbug.com/1268252 and crbug.com/1268743 for details. browser_args = [ '--lacros-selection=rootfs', '--enable-features=LacrosSupport', '--enable-features=LacrosPrimary', '--disable-lacros-keep-alive', '--disable-login-lacros-opening' ] with chrome.Chrome(autotest_ext=True, dont_override_profile=dont_override_profile, extra_browser_args=browser_args) as cr: # Use chrome.automation API to drive UI. self.ui = ui_utils.UI_Handler() self.ui.start_ui_root(cr) # Click the shelf button for lacors. self.ui.wait_for_ui_obj('Lacros', role='button') self.ui.doDefault_on_obj('Lacros', role='button') # Check that lacros process is running. try: utils.poll_for_condition(condition=self.is_lacros_running) except utils.TimeoutError: raise error.TestFail( 'No Lacros processes running after clicking shelf icon' ) # Get lacros version res = utils.run('/run/lacros/chrome -version').stdout version = str(utils.parse_chrome_version(res)[0]) logging.info('Lacros version is %s', version) # Save lacros version for other uses. save_file = os.path.join(self.resultsdir, 'lacros_version.txt') tmp_file = '/tmp/lacros_version.txt' utils.run(['echo', version, '>', save_file]) utils.run(['echo', version, '>', tmp_file]) # Wait to make sure lacros doesn't crash. time.sleep(10) try: utils.poll_for_condition(condition=self.is_lacros_running) except utils.TimeoutError: raise error.TestFail('No Lacros processes running after 10s')