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