• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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