# Copyright (c) 2012 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. """ The autotest performing FW update, both EC and AP.""" from __future__ import print_function import logging import sys import six from autotest_lib.client.common_lib import error from autotest_lib.server import test class provision_FirmwareUpdate(test.test): """A test that can provision a machine to the correct firmware version.""" version = 1 def stage_image_to_usb(self, host): """Stage the current ChromeOS image on the USB stick connected to the servo. @param host: a CrosHost object of the machine to update. """ info = host.host_info_store.get() if not info.build: logging.warning('Failed to get build label from the DUT, skip ' 'staging ChromeOS image on the servo USB stick.') else: _, update_url = host.stage_image_for_servo(info.build) host.servo.image_to_servo_usb(update_url) logging.debug('ChromeOS image %s is staged on the USB stick.', info.build) def run_once(self, host, value, rw_only=False, stage_image_to_usb=False, fw_path=None): """The method called by the control file to start the test. @param host: a CrosHost object of the machine to update. @param value: the provisioning value, which is the build version to which we want to provision the machine, e.g. 'link-firmware/R22-2695.1.144'. @param rw_only: True to only update the RW firmware. @param stage_image_to_usb: True to stage the current ChromeOS image on the USB stick connected to the servo. Default is False. @param fw_path: Path to local firmware image for installing without devserver. @raise TestFail: if the firmware version remains unchanged. """ try: host.repair_servo() # Stage the current CrOS image to servo USB stick. if stage_image_to_usb: self.stage_image_to_usb(host) host.firmware_install(build=value, rw_only=rw_only, dest=self.resultsdir, local_tarball=fw_path, verify_version=True, try_scp=True) except Exception as e: logging.error(e) six.reraise(error.TestFail, str(e), sys.exc_info()[2])