|  | # 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. | 
|  |  | 
|  | from autotest_lib.server import utils | 
|  |  | 
|  | AUTHOR = "Chrome OS Team" | 
|  | NAME = "firmware_UpdateFirmwareVersion" | 
|  | PURPOSE = "Servo based firmware update test which checks the firmware version." | 
|  | CRITERIA = """ | 
|  | Prerequirement is as follow: | 
|  | 1. This test should run in normal mode. | 
|  | 2. Fwid should match shellball's (/usr/sbin/chromeos-firmwareupdate) fwid, | 
|  | unless this test use a given shellball. | 
|  | 3. A USB disk should be plugged-in, which contains a Chrome OS test image. | 
|  |  | 
|  | This test will fail if one of the following conditions is met: | 
|  | 1. Firmware update fails. | 
|  | 2. After firmware update, device restart with firmware A. | 
|  | 3. Firmware version does not increase after firmware update. | 
|  | 4. Firmware version does not recover to original version after recovery. | 
|  | """ | 
|  | ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_normal, suite:faft_lv5, suite:faft_bios_ec3po, suite:faft_bios_tot, suite:faft_smoke" | 
|  | DEPENDENCIES = "servo_state:WORKING" | 
|  | TIME = "SHORT" | 
|  | TEST_CATEGORY = "Functional" | 
|  | TEST_CLASS = "firmware" | 
|  | TEST_TYPE = "server" | 
|  |  | 
|  | DOC = """ | 
|  | This test requires a USB test image plugged in. The firmware id | 
|  | the current running firmware must matches the system shellball's, or user | 
|  | can provide a shellball to do this test. In this way, the client will be | 
|  | update with the given shellball first. On runtime, this test modifies the | 
|  | firmware version of the shellball and runs autoupdate. Check firmware | 
|  | version after boot with firmware B, and then recover firmware A and B to | 
|  | original shellball. | 
|  | """ | 
|  |  | 
|  | args_dict = utils.args_to_dict(args) | 
|  | servo_args = hosts.CrosHost.get_servo_arguments(args_dict) | 
|  |  | 
|  | def run_updatefirmwareversion(machine): | 
|  | host = hosts.create_host(machine, servo_args=servo_args) | 
|  | job.run_test("firmware_UpdateFirmwareVersion", host=host, cmdline_args=args, | 
|  | disable_sysinfo=True) | 
|  |  | 
|  | parallel_simple(run_updatefirmwareversion, machines) |