Home | History | Annotate | Download | only in hosts
      1 # Copyright 2018 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 import mock
      6 import unittest
      7 
      8 import common
      9 from autotest_lib.server import utils
     10 from server.hosts import cros_firmware
     11 
     12 
     13 RW_VERSION_OUTPUT = """
     14 flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
     15              ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...
     16 
     17 BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
     18 BIOS version: Google_Lumpy.2.111.0
     19 BIOS (RW) version: Google_Lumpy.2.112.0
     20 EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
     21 EC version:02WQA015
     22 
     23 Package Content:
     24 4de2580173772216cf37fdb8921a12e0 *./bin/mosys
     25 """
     26 
     27 VERSION_OUTPUT = """
     28 flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
     29              ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...
     30 
     31 BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
     32 BIOS version: Google_Lumpy.2.111.0
     33 EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
     34 EC version:02WQA015
     35 
     36 Package Content:
     37 4de2580173772216cf37fdb8921a12e0 *./bin/mosys
     38 """
     39 
     40 NO_VERSION_OUTPUT = """
     41 flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
     42              ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...
     43 
     44 BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
     45 EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
     46 EC version:02WQA015
     47 
     48 Package Content:
     49 4de2580173772216cf37fdb8921a12e0 *./bin/mosys
     50 """
     51 
     52 UNIBUILD_VERSION_OUTPUT = """
     53 flashrom(8): 3a788e16b939f290e25771dcb1b6b542 */build/coral/usr/sbin/flashrom
     54              ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...
     55 
     56 Model:        astronaut
     57 BIOS image:   2abe9c3470e784c457ec9ee8e9f5cddf */models/astronaut/...
     58 BIOS version: Google_Coral.10068.37.0
     59 EC image:     6f084f024aa4f9f9981aeaa4935bca96 */models/astronaut/ec.bin
     60 EC version:   coral_v1.1.7267-b7254f389
     61 
     62 Model:        blue
     63 BIOS image:   2abe9c3470e784c457ec9ee8e9f5cddf */models/blue/image-coral.bin
     64 BIOS version: Google_Coral.10068.37.0
     65 BIOS (RW) image:   e81aa62869e57cbe4a4baf7b4059778c */models/blue/...
     66 BIOS (RW) version: Google_Coral.10068.39.0
     67 EC image:     6f084f024aa4f9f9981aeaa4935bca96 */models/blue/ec.bin
     68 EC version:   coral_v1.1.7267-b7254f389
     69 EC (RW) version: coral_v1.1.7269-3fc31d6e2
     70 
     71 Package Content:
     72 61392084c8b80d805ad68e1b6019e188 *./updater4.sh
     73 """
     74 
     75 
     76 class FirmwareVersionVerifierTest(unittest.TestCase):
     77     """Tests for FirmwareVersionVerifier."""
     78 
     79     def test_get_firmware_version_returns_rw_version(self):
     80         """Test _get_firmware_version which returns BIOS RW version."""
     81         fw = cros_firmware._get_firmware_version(RW_VERSION_OUTPUT)
     82         self.assertEqual(fw, 'Google_Lumpy.2.112.0')
     83 
     84     def test_get_firmware_version_returns_version(self):
     85         """Test _get_firmware_version which returns BIOS version."""
     86         fw = cros_firmware._get_firmware_version(VERSION_OUTPUT)
     87         self.assertEqual(fw, 'Google_Lumpy.2.111.0')
     88 
     89     def test_get_firmware_version_returns_none(self):
     90         """Test _get_firmware_version which returns None."""
     91         fw = cros_firmware._get_firmware_version(NO_VERSION_OUTPUT)
     92         self.assertIsNone(fw)
     93 
     94     def test_get_available_firmware_on_update_with_failure(self):
     95         """Test _get_available_firmware when update script exit_status=1."""
     96         result = utils.CmdResult(exit_status=1)
     97         host = mock.Mock()
     98         host.run.return_value = result
     99 
    100         fw = cros_firmware._get_available_firmware(host, 'lumpy')
    101         self.assertIsNone(fw)
    102 
    103     def test_get_available_firmware_returns_rw_version(self):
    104         """_get_available_firmware returns BIOS (RW) version."""
    105         result = utils.CmdResult(stdout=RW_VERSION_OUTPUT, exit_status=0)
    106         host = mock.Mock()
    107         host.run.return_value = result
    108 
    109         fw = cros_firmware._get_available_firmware(host, 'lumpy')
    110         self.assertEqual(fw, 'Google_Lumpy.2.112.0')
    111 
    112     def test_get_available_firmware_returns_version(self):
    113         """_get_available_firmware returns BIOS version."""
    114         result = utils.CmdResult(stdout=VERSION_OUTPUT, exit_status=0)
    115         host = mock.Mock()
    116         host.run.return_value = result
    117 
    118         fw = cros_firmware._get_available_firmware(host, 'lumpy')
    119         self.assertEqual(fw, 'Google_Lumpy.2.111.0')
    120 
    121     def test_get_available_firmware_returns_none(self):
    122         """_get_available_firmware returns None."""
    123         result = utils.CmdResult(stdout=NO_VERSION_OUTPUT, exit_status=0)
    124         host = mock.Mock()
    125         host.run.return_value = result
    126 
    127         fw = cros_firmware._get_available_firmware(host, 'lumpy')
    128         self.assertIsNone(fw)
    129 
    130     def test_get_available_firmware_unibuild(self):
    131         """_get_available_firmware on unibuild board with multiple models."""
    132         result = utils.CmdResult(stdout=UNIBUILD_VERSION_OUTPUT,
    133                                  exit_status=0)
    134         host = mock.Mock()
    135         host.run.return_value = result
    136 
    137         fw = cros_firmware._get_available_firmware(host, 'astronaut')
    138         self.assertEqual(fw, 'Google_Coral.10068.37.0')
    139 
    140         fw = cros_firmware._get_available_firmware(host, 'blue')
    141         self.assertEqual(fw, 'Google_Coral.10068.39.0')
    142 
    143         fw = cros_firmware._get_available_firmware(host, 'bruce')
    144         self.assertIsNone(fw)
    145 
    146 
    147 if __name__ == '__main__':
    148     unittest.main()
    149