Home | History | Annotate | Download | only in cros
      1 # Copyright 2016 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 #
      5 # This file contains things that are shared by arc.py and arc_util.py.
      6 
      7 import logging
      8 
      9 from autotest_lib.client.bin import utils
     10 from autotest_lib.client.common_lib import error
     11 
     12 
     13 # Ask Chrome to start ARC instance and the script will block until ARC's boot
     14 # completed event.
     15 ARC_MODE_ENABLED = "enabled"
     16 # Similar to "enabled", except that it will not block.
     17 ARC_MODE_ENABLED_ASYNC = "enabled_async"
     18 # Ask Chrome to not start ARC instance.  This is the default.
     19 ARC_MODE_DISABLED = "disabled"
     20 # All available ARC options.
     21 ARC_MODES = [ARC_MODE_ENABLED, ARC_MODE_ENABLED_ASYNC, ARC_MODE_DISABLED]
     22 
     23 _BOOT_CHECK_INTERVAL_SECONDS = 2
     24 _WAIT_FOR_ANDROID_BOOT_SECONDS = 120
     25 
     26 
     27 def wait_for_android_boot(timeout=None):
     28     """Sleep until Android has completed booting or timeout occurs."""
     29     if timeout is None:
     30         timeout = _WAIT_FOR_ANDROID_BOOT_SECONDS
     31 
     32     def _is_android_booted():
     33         output = utils.system_output(
     34             'android-sh -c "getprop sys.boot_completed"', ignore_status=True)
     35         return output.strip() == '1'
     36 
     37     logging.info('Waiting for Android to boot completely.')
     38     utils.poll_for_condition(condition=_is_android_booted,
     39                              desc='Android has booted',
     40                              timeout=timeout,
     41                              exception=error.TestFail('Android did not boot!'),
     42                              sleep_interval=_BOOT_CHECK_INTERVAL_SECONDS)
     43     logging.info('Android has booted completely.')
     44