16dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar#!/usr/bin/python 26dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar# 36dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar# Copyright 2016 The Chromium OS Authors. All rights reserved. 46dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar# Use of this source code is governed by a BSD-style license that can be 56dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar# found in the LICENSE file. 66dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar 76dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar'''A simple sanity test for Chrome. 86dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar 96dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith BhandarkarThis script logs in, ensures that the cryptohome is mounted, 106dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkarand checks that the browser is functional. 116dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar''' 126dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar 1310b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkarfrom __future__ import print_function 1410b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar 1510b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkarimport datetime 166dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkarimport logging 1710b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkarimport os 186dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkarimport sys 196dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar 206dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar# This sets up import paths for autotest. 216dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkarimport common 2210b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkarfrom autotest_lib.client.bin import utils 2310b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkarfrom autotest_lib.client.common_lib.cros import arc, arc_common, chrome 246dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkarfrom autotest_lib.client.common_lib.error import TestFail 256dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkarfrom autotest_lib.client.cros import cryptohome 266dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar 276dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar 286dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkardef main(args): 296dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar '''The main function.''' 306dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar if args: 3110b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar print('No args for vm_sanity.py') 3210b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar return os.EX_USAGE 3310b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar 346dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar 3510b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar start = datetime.datetime.now() 366dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar logging.info('Starting chrome and logging in.') 3710b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar is_arc_available = chrome.is_arc_available() 3810b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar arc_mode = arc_common.ARC_MODE_ENABLED if is_arc_available else None 3910b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar with chrome.Chrome(arc_mode=arc_mode) as cr: 406dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar # Check that the cryptohome is mounted. 416dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar # is_vault_mounted throws an exception if it fails. 426dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar logging.info('Checking mounted cryptohome.') 436dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar cryptohome.is_vault_mounted(user=cr.username, allow_fail=False) 446dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar # Evaluate some javascript. 456dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar logging.info('Evaluating JavaScript.') 466dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar if cr.browser.tabs[0].EvaluateJavaScript('2+2') != 4: 4710b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar raise TestFail('EvaluateJavaScript failed') 4810b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar 4910b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar # ARC test. 5010b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar if is_arc_available: 5110b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar arc.wait_for_android_process('org.chromium.arc.intent_helper') 5210b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar arc.wait_for_adb_ready() 5310b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar logging.info('Android booted successfully.') 5410b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar if not arc.is_package_installed('android'): 5510b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar raise TestFail('"android" system package was not listed by ' 5610b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar 'Package Manager.') 5710b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar 5810b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar if is_arc_available: 5910b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar utils.poll_for_condition(lambda: not arc.is_adb_connected(), 6010b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar timeout=15, 6110b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar desc='Android container still running after ' 6210b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar 'Chrome shutdown.') 6310b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar elapsed = datetime.datetime.now() - start 6410b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar logging.info('Test succeeded in %s seconds.', elapsed.seconds) 6510b39114bd541ec1f15d841b3aa2e81ef901acb5Achuith Bhandarkar 666dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar 676dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkarif __name__ == '__main__': 686dd758fa212f47b47ff6bc140e9a667d6dafc734Achuith Bhandarkar sys.exit(main(sys.argv[1:])) 69