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