73 lines
2.6 KiB
Python
73 lines
2.6 KiB
Python
# 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])
|