普通文本  |  52行  |  1.92 KB

# Copyright (c) 2013 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 os, re

from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error

class hardware_DiskFirmwareUpgrade(test.test):
    """
    Run the disk firmware upgrade script.
    """
    TEST_SCRIPT = '/usr/sbin/chromeos-disk-firmware-update.sh'
    UPGRADED_RE = r'^Upgraded.*'
    version = 1

    def run_once(self,
                 disk_firmware_package='/opt/google/disk/firmware',
                 expected_result=0,
                 upgrade_required=True):
        """
        Runs the shell script that upgrade disk firmware.

        @param disk_firmware_package: pre-installed firmware package location.
        @param expected_result:       expected results of the upgrade.
        @param upgrade_required:      if True, the firmware must change on the
                                      device.
        """
        status_file = os.path.join(self.resultsdir, 'status')
        cmd = [self.TEST_SCRIPT,
               '--status %s' % (status_file),
               '--fw_package_dir %s' % (disk_firmware_package)]
        fw_upgrade = utils.run(' '.join(cmd), ignore_status=True)

        # Check the result of the upgrade.
        upgrade_happened = False
        try:
            with open(status_file) as sf:
                for l in sf:
                    if re.match(self.UPGRADED_RE, l):
                        upgrade_happened = True
        except IOError:
            pass
        if fw_upgrade.exit_status != expected_result:
            raise error.TestError(
                'Expected %d Result is %d' % (
                    expected_result, fw_upgrade.exit_status))
        if (fw_upgrade.exit_status == 0 and
            upgrade_required and not upgrade_happened):
            raise error.TestError('Expected upgrade did not happened')