#!/usr/bin/python # # Copyright 2016 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. '''A simple sanity test for Chrome. This script logs in, ensures that the cryptohome is mounted, and checks that the browser is functional. ''' from __future__ import print_function import datetime import logging import os import sys # This sets up import paths for autotest. import common from autotest_lib.client.bin import utils from autotest_lib.client.common_lib.cros import arc, arc_common, chrome from autotest_lib.client.common_lib.error import TestFail from autotest_lib.client.cros import cryptohome def main(args): '''The main function.''' if args: print('No args for vm_sanity.py') return os.EX_USAGE start = datetime.datetime.now() logging.info('Starting chrome and logging in.') is_arc_available = chrome.is_arc_available() arc_mode = arc_common.ARC_MODE_ENABLED if is_arc_available else None with chrome.Chrome(arc_mode=arc_mode) as cr: # Check that the cryptohome is mounted. # is_vault_mounted throws an exception if it fails. logging.info('Checking mounted cryptohome.') cryptohome.is_vault_mounted(user=cr.username, allow_fail=False) # Evaluate some javascript. logging.info('Evaluating JavaScript.') if cr.browser.tabs[0].EvaluateJavaScript('2+2') != 4: raise TestFail('EvaluateJavaScript failed') # ARC test. if is_arc_available: arc.wait_for_android_process('org.chromium.arc.intent_helper') arc.wait_for_adb_ready() logging.info('Android booted successfully.') if not arc.is_package_installed('android'): raise TestFail('"android" system package was not listed by ' 'Package Manager.') if is_arc_available: utils.poll_for_condition(lambda: not arc.is_adb_connected(), timeout=15, desc='Android container still running after ' 'Chrome shutdown.') elapsed = datetime.datetime.now() - start logging.info('Test succeeded in %s seconds.', elapsed.seconds) if __name__ == '__main__': sys.exit(main(sys.argv[1:]))