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