xref: /aosp_15_r20/external/autotest/server/hosts/cros_firmware_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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