# 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 logging, os, re, time

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-install 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)
        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')
