Home | History | Annotate | Download | only in firmware_CompareInstalledToShellBall
      1 # Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 from autotest_lib.client.common_lib import error
      6 from autotest_lib.server import autotest
      7 from autotest_lib.server import test
      8 from autotest_lib.server.cros.faft.rpc_proxy import RPCProxy
      9 
     10 class firmware_CompareInstalledToShellBall(test.test):
     11     """Compare the installed BIOS and EC versions to those in the shellball."""
     12     version = 1
     13 
     14     def run_once(self, host):
     15         # Make sure the client library is on the device so that the proxy
     16         # code is there when we try to call it.
     17         client_at = autotest.Autotest(host)
     18         client_at.install()
     19 
     20         self.faft_client = RPCProxy(host)
     21         installed_ec = self.faft_client.ec.get_version()
     22         installed_bios = self.faft_client.system.get_crossystem_value('fwid')
     23 
     24         # Chromeboxes do not have an EC
     25         if 'mosys' in installed_ec:
     26             installed_ec = None
     27 
     28         available_ec = None
     29         available_bios = None
     30         shellball = host.run('/usr/sbin/chromeos-firmwareupdate -V').stdout
     31         for line in shellball.splitlines():
     32             if line.startswith('BIOS version:'):
     33                 parts = line.split()
     34                 available_bios = parts[2].strip()
     35             if line.startswith('EC version:'):
     36                 parts = line.split()
     37                 available_ec = parts[2].strip()
     38 
     39         error_message = None
     40         if installed_bios != available_bios:
     41             error_message = str('BIOS versions do not match! Installed: %s '
     42                                  'Available %s' % (installed_bios,
     43                                  available_bios))
     44         if installed_ec != available_ec:
     45             ec_message = str('EC versions do not match! Installed: %s '
     46                              'Available %s ' % (installed_ec, available_ec))
     47             if error_message:
     48                 error_message += '\n' + ec_message
     49             else:
     50                 error_message = ec_message
     51 
     52         if error_message:
     53             raise error.TestFail(error_message)
     54