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 5import mock 6import unittest 7 8import common 9from autotest_lib.server import utils 10from server.hosts import cros_firmware 11 12 13VERSION_OUTPUT = """ 14{ 15 "any-model": { 16 "host": { "versions": { "ro": "Google_Kukui.12573.13.0", "rw": "Google_Kukui.12573.13.0" }, 17 "keys": { "root": "b11d74edd286c144e1135b49e7f0bc20cf041f10", "recovery": "c14bd720b70d97394257e3e826bd8f43de48d4ed" }, 18 "image": "images/bios-kukui.ro-12573-13-0.rw-12573-13-0.bin" }, 19 "ec": { "versions": { "ro": "kukui_v2.0.2352-5c2c3c7a0", "rw": "kukui_v2.0.2352-5c2c3c7a0" }, 20 "image": "images/ec-kukui.ro-2-0-2352.rw-2-0-2352.bin" }, 21 "signature_id": "kukui" 22 } 23} 24""" 25 26NO_VERSION_OUTPUT = """ 27{ 28} 29""" 30 31UNIBUILD_VERSION_OUTPUT = """ 32{ 33 "kukui": { 34 "host": { "versions": { "ro": "Google_Kukui.12573.13.0", "rw": "Google_Kukui.12573.13.0" }, 35 "keys": { "root": "b11d74edd286c144e1135b49e7f0bc20cf041f10", "recovery": "c14bd720b70d97394257e3e826bd8f43de48d4ed" }, 36 "image": "images/bios-kukui.ro-12573-13-0.rw-12573-13-0.bin" }, 37 "ec": { "versions": { "ro": "kukui_v2.0.2352-5c2c3c7a0", "rw": "kukui_v2.0.2352-5c2c3c7a0" }, 38 "image": "images/ec-kukui.ro-2-0-2352.rw-2-0-2352.bin" }, 39 "signature_id": "kukui" 40 }, 41 "kodama": { 42 "host": { "versions": { "ro": "Google_Kodama.12573.14.0", "rw": "Google_Kodama.12573.15.0" }, 43 "keys": { "root": "b11d74edd286c144e1135b49e7f0bc20cf041f10", "recovery": "c14bd720b70d97394257e3e826bd8f43de48d4ed" }, 44 "image": "images/bios-kodama.ro-12573-14-0.rw-12573-15-0.bin" }, 45 "ec": { "versions": { "ro": "kodama_v2.0.2354-8c3c92f29", "rw": "kodama_v2.0.2354-8c3c92f29" }, 46 "image": "images/ec-kodama.ro-2-0-2354.rw-2-0-2354.bin" }, 47 "signature_id": "kodama" 48 }, 49 "krane": { 50 "host": { "versions": { "ro": "Google_Krane.12573.13.0", "rw": "Google_Krane.12573.13.0" }, 51 "keys": { "root": "b11d74edd286c144e1135b49e7f0bc20cf041f10", "recovery": "c14bd720b70d97394257e3e826bd8f43de48d4ed" }, 52 "image": "images/bios-krane.ro-12573-13-0.rw-12573-13-0.bin" }, 53 "ec": { "versions": { "ro": "krane_v2.0.2352-5c2c3c7a0", "rw": "krane_v2.0.2352-5c2c3c7a0" }, 54 "image": "images/ec-krane.ro-2-0-2352.rw-2-0-2352.bin" }, 55 "signature_id": "krane" 56 } 57} 58""" 59 60 61class FirmwareVersionVerifierTest(unittest.TestCase): 62 """Tests for FirmwareVersionVerifier.""" 63 64 def test_get_available_firmware_on_update_with_failure(self): 65 """Test _get_available_firmware when update script exit_status=1.""" 66 result = utils.CmdResult(exit_status=1) 67 host = mock.Mock() 68 host.run.return_value = result 69 70 fw = cros_firmware._get_available_firmware(host, 'lumpy') 71 self.assertIsNone(fw) 72 73 def test_get_available_firmware_returns_version(self): 74 """_get_available_firmware returns BIOS version.""" 75 result = utils.CmdResult(stdout=VERSION_OUTPUT, exit_status=0) 76 host = mock.Mock() 77 host.run.return_value = result 78 79 fw = cros_firmware._get_available_firmware(host, 'kukui') 80 self.assertEqual(fw, 'Google_Kukui.12573.13.0') 81 82 def test_get_available_firmware_returns_none(self): 83 """_get_available_firmware returns None.""" 84 result = utils.CmdResult(stdout=NO_VERSION_OUTPUT, exit_status=0) 85 host = mock.Mock() 86 host.run.return_value = result 87 88 fw = cros_firmware._get_available_firmware(host, 'kukui') 89 self.assertIsNone(fw) 90 91 def test_get_available_firmware_unibuild(self): 92 """_get_available_firmware on unibuild board with multiple models.""" 93 result = utils.CmdResult(stdout=UNIBUILD_VERSION_OUTPUT, 94 exit_status=0) 95 host = mock.Mock() 96 host.run.return_value = result 97 98 fw = cros_firmware._get_available_firmware(host, 'kukui') 99 self.assertEqual(fw, 'Google_Kukui.12573.13.0') 100 101 fw = cros_firmware._get_available_firmware(host, 'kodama') 102 self.assertEqual(fw, 'Google_Kodama.12573.15.0') 103 104 fw = cros_firmware._get_available_firmware(host, 'flapjack') 105 self.assertIsNone(fw) 106 107 108if __name__ == '__main__': 109 unittest.main() 110