You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
4.2 KiB
110 lines
4.2 KiB
# Copyright 2018 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import mock
|
|
import unittest
|
|
|
|
import common
|
|
from autotest_lib.server import utils
|
|
from server.hosts import cros_firmware
|
|
|
|
|
|
VERSION_OUTPUT = """
|
|
{
|
|
"any-model": {
|
|
"host": { "versions": { "ro": "Google_Kukui.12573.13.0", "rw": "Google_Kukui.12573.13.0" },
|
|
"keys": { "root": "b11d74edd286c144e1135b49e7f0bc20cf041f10", "recovery": "c14bd720b70d97394257e3e826bd8f43de48d4ed" },
|
|
"image": "images/bios-kukui.ro-12573-13-0.rw-12573-13-0.bin" },
|
|
"ec": { "versions": { "ro": "kukui_v2.0.2352-5c2c3c7a0", "rw": "kukui_v2.0.2352-5c2c3c7a0" },
|
|
"image": "images/ec-kukui.ro-2-0-2352.rw-2-0-2352.bin" },
|
|
"signature_id": "kukui"
|
|
}
|
|
}
|
|
"""
|
|
|
|
NO_VERSION_OUTPUT = """
|
|
{
|
|
}
|
|
"""
|
|
|
|
UNIBUILD_VERSION_OUTPUT = """
|
|
{
|
|
"kukui": {
|
|
"host": { "versions": { "ro": "Google_Kukui.12573.13.0", "rw": "Google_Kukui.12573.13.0" },
|
|
"keys": { "root": "b11d74edd286c144e1135b49e7f0bc20cf041f10", "recovery": "c14bd720b70d97394257e3e826bd8f43de48d4ed" },
|
|
"image": "images/bios-kukui.ro-12573-13-0.rw-12573-13-0.bin" },
|
|
"ec": { "versions": { "ro": "kukui_v2.0.2352-5c2c3c7a0", "rw": "kukui_v2.0.2352-5c2c3c7a0" },
|
|
"image": "images/ec-kukui.ro-2-0-2352.rw-2-0-2352.bin" },
|
|
"signature_id": "kukui"
|
|
},
|
|
"kodama": {
|
|
"host": { "versions": { "ro": "Google_Kodama.12573.14.0", "rw": "Google_Kodama.12573.15.0" },
|
|
"keys": { "root": "b11d74edd286c144e1135b49e7f0bc20cf041f10", "recovery": "c14bd720b70d97394257e3e826bd8f43de48d4ed" },
|
|
"image": "images/bios-kodama.ro-12573-14-0.rw-12573-15-0.bin" },
|
|
"ec": { "versions": { "ro": "kodama_v2.0.2354-8c3c92f29", "rw": "kodama_v2.0.2354-8c3c92f29" },
|
|
"image": "images/ec-kodama.ro-2-0-2354.rw-2-0-2354.bin" },
|
|
"signature_id": "kodama"
|
|
},
|
|
"krane": {
|
|
"host": { "versions": { "ro": "Google_Krane.12573.13.0", "rw": "Google_Krane.12573.13.0" },
|
|
"keys": { "root": "b11d74edd286c144e1135b49e7f0bc20cf041f10", "recovery": "c14bd720b70d97394257e3e826bd8f43de48d4ed" },
|
|
"image": "images/bios-krane.ro-12573-13-0.rw-12573-13-0.bin" },
|
|
"ec": { "versions": { "ro": "krane_v2.0.2352-5c2c3c7a0", "rw": "krane_v2.0.2352-5c2c3c7a0" },
|
|
"image": "images/ec-krane.ro-2-0-2352.rw-2-0-2352.bin" },
|
|
"signature_id": "krane"
|
|
}
|
|
}
|
|
"""
|
|
|
|
|
|
class FirmwareVersionVerifierTest(unittest.TestCase):
|
|
"""Tests for FirmwareVersionVerifier."""
|
|
|
|
def test_get_available_firmware_on_update_with_failure(self):
|
|
"""Test _get_available_firmware when update script exit_status=1."""
|
|
result = utils.CmdResult(exit_status=1)
|
|
host = mock.Mock()
|
|
host.run.return_value = result
|
|
|
|
fw = cros_firmware._get_available_firmware(host, 'lumpy')
|
|
self.assertIsNone(fw)
|
|
|
|
def test_get_available_firmware_returns_version(self):
|
|
"""_get_available_firmware returns BIOS version."""
|
|
result = utils.CmdResult(stdout=VERSION_OUTPUT, exit_status=0)
|
|
host = mock.Mock()
|
|
host.run.return_value = result
|
|
|
|
fw = cros_firmware._get_available_firmware(host, 'kukui')
|
|
self.assertEqual(fw, 'Google_Kukui.12573.13.0')
|
|
|
|
def test_get_available_firmware_returns_none(self):
|
|
"""_get_available_firmware returns None."""
|
|
result = utils.CmdResult(stdout=NO_VERSION_OUTPUT, exit_status=0)
|
|
host = mock.Mock()
|
|
host.run.return_value = result
|
|
|
|
fw = cros_firmware._get_available_firmware(host, 'kukui')
|
|
self.assertIsNone(fw)
|
|
|
|
def test_get_available_firmware_unibuild(self):
|
|
"""_get_available_firmware on unibuild board with multiple models."""
|
|
result = utils.CmdResult(stdout=UNIBUILD_VERSION_OUTPUT,
|
|
exit_status=0)
|
|
host = mock.Mock()
|
|
host.run.return_value = result
|
|
|
|
fw = cros_firmware._get_available_firmware(host, 'kukui')
|
|
self.assertEqual(fw, 'Google_Kukui.12573.13.0')
|
|
|
|
fw = cros_firmware._get_available_firmware(host, 'kodama')
|
|
self.assertEqual(fw, 'Google_Kodama.12573.15.0')
|
|
|
|
fw = cros_firmware._get_available_firmware(host, 'flapjack')
|
|
self.assertIsNone(fw)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|