blob: e96af084f44d26d8f35826bfa5ed5ec8500abb38 [file] [log] [blame]
# Copyright (c) 2011 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
from autotest_lib.server.cros.faftsequence import FAFTSequence
class firmware_ShellBall(FAFTSequence):
"""
chromeos-firmwareupdate functional tests.
Checks the mode condition and enables or disables developement mode
accordingly and runs all shellball functioanl tests.
"""
version = 1
_shellball_name = None
def update_firmware(self, mode):
self.faft_client.system.run_shell_command('%s --mode %s' %
(self._shellball_name, mode))
# Enalbe dev mode if the mode is todev.
if mode == 'todev':
self.servo.enable_development_mode()
# Disable dev mode if the mode is tonormal.
elif mode == 'tonormal':
self.servo.disable_development_mode()
def install_original_firmware(self):
self.faft_client.system.run_shell_command(
'sudo chromeos-firmwareupdate --mode=factory_install')
self.invalidate_firmware_setup()
def setup(self, host=None, shellball_path=None, shellball_name=None):
super(firmware_ShellBall, self).setup()
self._shellball_name = "/home/chronos/%s" % self._shellball_name
host.send_file("%s/%s" %(shellball_path, shellball_name),
self._shellball_name)
self.faft_client.system.run_shell_command('chmod +x %s' %
self._shellball_name)
self.setup_dev_mode(dev_mode=False)
# Get crossystem fwid.
[self._current_fwid] = (
self.faft_client.system.run_shell_command_get_output(
'crossystem fwid'))
# Get BIOS version from shellball.
[self._shellball_fwid] = self.faft_client. \
system.run_shell_command_get_output(
'%s -V | grep "BIOS version"' \
' | sed "s/BIOS version: ' \
'\(.*\)/\\1/" '
% self._shellball_name)
def cleanup(self):
if os.path.exists(self._shellball_name):
os.remove(self._shellball_name)
super(firmware_ShellBall, self).cleanup()
def run_once(self):
self.register_faft_sequence((
{ # Step 1, change to devmode.
'state_checker': (self.checkers.crossystem_checker, {
'dev_boot_usb': '0',
}),
'userspace_action': (self.update_firmware, 'todev'),
'firmware_action': (self.wait_fw_screen_and_ctrl_d),
},
{ # Step 2, check mainfw_type and run autoupdate.
'state_checker': (self.checkers.crossystem_checker, {
'mainfw_type': 'developer'
}),
'userspace_action': (self.update_firmware, 'autoupdate'),
'firmware_action': (self.wait_fw_screen_and_ctrl_d),
},
{ # Step 3, verify fwid and install system firmware.
'state_checker': (self.checkers.crossystem_checker, {
'fwid': self._shellball_fwid
}),
'userspace_action': (self.install_original_firmware),
'firmware_action': (self.wait_fw_screen_and_ctrl_d),
},
{ # Step 4, verify the old firmware id and test factory_install.
'state_checker': (self.checkers.crossystem_checker, {
'fwid': self._current_fwid
}),
'userspace_action': (self.update_firmware, 'factory_install'),
'firmware_action': (self.wait_fw_screen_and_ctrl_d),
},
{ # Step 5, verify fwid and install original firmware.
'state_checker': (self.checkers.crossystem_checker, {
'fwid': self._shellball_fwid
}),
'userspace_action': (self.install_original_firmware),
'firmware_action': (self.wait_fw_screen_and_ctrl_d),
},
{ # Step 6, verify old fwid.
'state_checker': (self.checkers.crossystem_checker, {
'fwid': self._current_fwid
}),
}
))
self.run_faft_sequence()