普通文本  |  149行  |  5.35 KB

# 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


RW_VERSION_OUTPUT = """
flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...

BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
BIOS version: Google_Lumpy.2.111.0
BIOS (RW) version: Google_Lumpy.2.112.0
EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
EC version:02WQA015

Package Content:
4de2580173772216cf37fdb8921a12e0 *./bin/mosys
"""

VERSION_OUTPUT = """
flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...

BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
BIOS version: Google_Lumpy.2.111.0
EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
EC version:02WQA015

Package Content:
4de2580173772216cf37fdb8921a12e0 *./bin/mosys
"""

NO_VERSION_OUTPUT = """
flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...

BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
EC version:02WQA015

Package Content:
4de2580173772216cf37fdb8921a12e0 *./bin/mosys
"""

UNIBUILD_VERSION_OUTPUT = """
flashrom(8): 3a788e16b939f290e25771dcb1b6b542 */build/coral/usr/sbin/flashrom
             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...

Model:        astronaut
BIOS image:   2abe9c3470e784c457ec9ee8e9f5cddf */models/astronaut/...
BIOS version: Google_Coral.10068.37.0
EC image:     6f084f024aa4f9f9981aeaa4935bca96 */models/astronaut/ec.bin
EC version:   coral_v1.1.7267-b7254f389

Model:        blue
BIOS image:   2abe9c3470e784c457ec9ee8e9f5cddf */models/blue/image-coral.bin
BIOS version: Google_Coral.10068.37.0
BIOS (RW) image:   e81aa62869e57cbe4a4baf7b4059778c */models/blue/...
BIOS (RW) version: Google_Coral.10068.39.0
EC image:     6f084f024aa4f9f9981aeaa4935bca96 */models/blue/ec.bin
EC version:   coral_v1.1.7267-b7254f389
EC (RW) version: coral_v1.1.7269-3fc31d6e2

Package Content:
61392084c8b80d805ad68e1b6019e188 *./updater4.sh
"""


class FirmwareVersionVerifierTest(unittest.TestCase):
    """Tests for FirmwareVersionVerifier."""

    def test_get_firmware_version_returns_rw_version(self):
        """Test _get_firmware_version which returns BIOS RW version."""
        fw = cros_firmware._get_firmware_version(RW_VERSION_OUTPUT)
        self.assertEqual(fw, 'Google_Lumpy.2.112.0')

    def test_get_firmware_version_returns_version(self):
        """Test _get_firmware_version which returns BIOS version."""
        fw = cros_firmware._get_firmware_version(VERSION_OUTPUT)
        self.assertEqual(fw, 'Google_Lumpy.2.111.0')

    def test_get_firmware_version_returns_none(self):
        """Test _get_firmware_version which returns None."""
        fw = cros_firmware._get_firmware_version(NO_VERSION_OUTPUT)
        self.assertIsNone(fw)

    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_rw_version(self):
        """_get_available_firmware returns BIOS (RW) version."""
        result = utils.CmdResult(stdout=RW_VERSION_OUTPUT, exit_status=0)
        host = mock.Mock()
        host.run.return_value = result

        fw = cros_firmware._get_available_firmware(host, 'lumpy')
        self.assertEqual(fw, 'Google_Lumpy.2.112.0')

    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, 'lumpy')
        self.assertEqual(fw, 'Google_Lumpy.2.111.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, 'lumpy')
        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, 'astronaut')
        self.assertEqual(fw, 'Google_Coral.10068.37.0')

        fw = cros_firmware._get_available_firmware(host, 'blue')
        self.assertEqual(fw, 'Google_Coral.10068.39.0')

        fw = cros_firmware._get_available_firmware(host, 'bruce')
        self.assertIsNone(fw)


if __name__ == '__main__':
    unittest.main()