# Copyright (c) 2014 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.client.common_lib import error from autotest_lib.server import autotest from autotest_lib.server import test from autotest_lib.server.cros.faft.rpc_proxy import RPCProxy class firmware_CompareInstalledToShellBall(test.test): """Compare the installed BIOS and EC versions to those in the shellball.""" version = 1 def run_once(self, host): # Make sure the client library is on the device so that the proxy # code is there when we try to call it. client_at = autotest.Autotest(host) client_at.install() self.faft_client = RPCProxy(host) installed_ec = self.faft_client.ec.get_version() installed_bios = self.faft_client.system.get_crossystem_value('fwid') # Chromeboxes do not have an EC if 'mosys' in installed_ec: installed_ec = None available_ec = None available_bios = None shellball = host.run('/usr/sbin/chromeos-firmwareupdate -V').stdout for line in shellball.splitlines(): if line.startswith('BIOS version:'): parts = line.split() available_bios = parts[2].strip() if line.startswith('EC version:'): parts = line.split() available_ec = parts[2].strip() error_message = None if installed_bios != available_bios: error_message = str('BIOS versions do not match! Installed: %s ' 'Available %s' % (installed_bios, available_bios)) if installed_ec != available_ec: ec_message = str('EC versions do not match! Installed: %s ' 'Available %s ' % (installed_ec, available_ec)) if error_message: error_message += '\n' + ec_message else: error_message = ec_message if error_message: raise error.TestFail(error_message)