普通文本  |  73行  |  2.6 KB

# Copyright (c) 2015 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 time

from autotest_lib.client.common_lib import error
from autotest_lib.server.cros.faft.firmware_test import FirmwareTest


class firmware_FastbootReboot(FirmwareTest):
    """
    Reboot testing through Fastboot.
    Testing:
      fastboot reboot
      fastboot reboot-bootloader

    This needs to be only enabled for Android tests.
    """
    version = 1

    def initialize(self, host, cmdline_args, dev_mode=False):
        super(firmware_FastbootReboot, self).initialize(host, cmdline_args)
        self.switcher.setup_mode('dev' if dev_mode else 'normal')

    def in_fastboot_mode(self):
        # make sure that we're in fastboot mode
        result = self.faft_client.host.run_shell_command_get_output(
            'fastboot devices')
        if not result:
            return False
        else:
            return True

    def run_once(self, dev_mode=False):
        if not self.faft_client.system.has_host():
            raise error.TestNAError('DUT is not Android device.  Skipping test')

        self.faft_client.host.run_shell_command('adb reboot bootloader')
        # make sure that DUT goes offline first
        self.switcher.wait_for_client_offline()
        self.switcher.wait_for_client_fastboot()

        if not self.in_fastboot_mode():
            raise error.TestFail("DUT not in fastboot mode!")

        # try rebooting into OS
        logging.info("Testing fastboot reboot")
        self.faft_client.host.run_shell_command('fastboot reboot')
        # make sure that DUT goes offline first
        self.switcher.wait_for_client_offline()
        self.switcher.wait_for_client()

        # now reboot into fastboot again
        self.faft_client.host.run_shell_command('adb reboot bootloader')
        # make sure that DUT goes offline first
        self.switcher.wait_for_client_offline()
        self.switcher.wait_for_client_fastboot()
        if not self.in_fastboot_mode():
            raise error.TestFail("DUT not in fastboot mode!")

        logging.info("Testing fastboot reboot-bootloader")
        self.faft_client.host.run_shell_command('fastboot reboot-bootloader')
        # make sure that DUT goes offline first
        self.switcher.wait_for_client_offline()
        self.switcher.wait_for_client_fastboot()
        if not self.in_fastboot_mode():
            raise error.TestFail("DUT not in fastboot mode!")

        self.faft_client.host.run_shell_command('fastboot continue')
        self.switcher.wait_for_client()