• 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
13RW_VERSION_OUTPUT = """
14flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
15             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...
16
17BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
18BIOS version: Google_Lumpy.2.111.0
19BIOS (RW) version: Google_Lumpy.2.112.0
20EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
21EC version:02WQA015
22
23Package Content:
244de2580173772216cf37fdb8921a12e0 *./bin/mosys
25"""
26
27VERSION_OUTPUT = """
28flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
29             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...
30
31BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
32BIOS version: Google_Lumpy.2.111.0
33EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
34EC version:02WQA015
35
36Package Content:
374de2580173772216cf37fdb8921a12e0 *./bin/mosys
38"""
39
40NO_VERSION_OUTPUT = """
41flashrom(8): ed90a62cc9129d0215b4f5e4ecee8558 */build/lumpy/usr/sbin/flashrom
42             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...
43
44BIOS image:   366248dc6d3a3d34ad62119738df721a */build/lumpy/tmp/...
45EC image:     a5cdb921edc46a48ca64e9250b4f7a1f */build/lumpy/tmp/...
46EC version:02WQA015
47
48Package Content:
494de2580173772216cf37fdb8921a12e0 *./bin/mosys
50"""
51
52UNIBUILD_VERSION_OUTPUT = """
53flashrom(8): 3a788e16b939f290e25771dcb1b6b542 */build/coral/usr/sbin/flashrom
54             ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)...
55
56Model:        astronaut
57BIOS image:   2abe9c3470e784c457ec9ee8e9f5cddf */models/astronaut/...
58BIOS version: Google_Coral.10068.37.0
59EC image:     6f084f024aa4f9f9981aeaa4935bca96 */models/astronaut/ec.bin
60EC version:   coral_v1.1.7267-b7254f389
61
62Model:        blue
63BIOS image:   2abe9c3470e784c457ec9ee8e9f5cddf */models/blue/image-coral.bin
64BIOS version: Google_Coral.10068.37.0
65BIOS (RW) image:   e81aa62869e57cbe4a4baf7b4059778c */models/blue/...
66BIOS (RW) version: Google_Coral.10068.39.0
67EC image:     6f084f024aa4f9f9981aeaa4935bca96 */models/blue/ec.bin
68EC version:   coral_v1.1.7267-b7254f389
69EC (RW) version: coral_v1.1.7269-3fc31d6e2
70
71Package Content:
7261392084c8b80d805ad68e1b6019e188 *./updater4.sh
73"""
74
75
76class FirmwareVersionVerifierTest(unittest.TestCase):
77    """Tests for FirmwareVersionVerifier."""
78
79    def test_get_firmware_version_returns_rw_version(self):
80        """Test _get_firmware_version which returns BIOS RW version."""
81        fw = cros_firmware._get_firmware_version(RW_VERSION_OUTPUT)
82        self.assertEqual(fw, 'Google_Lumpy.2.112.0')
83
84    def test_get_firmware_version_returns_version(self):
85        """Test _get_firmware_version which returns BIOS version."""
86        fw = cros_firmware._get_firmware_version(VERSION_OUTPUT)
87        self.assertEqual(fw, 'Google_Lumpy.2.111.0')
88
89    def test_get_firmware_version_returns_none(self):
90        """Test _get_firmware_version which returns None."""
91        fw = cros_firmware._get_firmware_version(NO_VERSION_OUTPUT)
92        self.assertIsNone(fw)
93
94    def test_get_available_firmware_on_update_with_failure(self):
95        """Test _get_available_firmware when update script exit_status=1."""
96        result = utils.CmdResult(exit_status=1)
97        host = mock.Mock()
98        host.run.return_value = result
99
100        fw = cros_firmware._get_available_firmware(host, 'lumpy')
101        self.assertIsNone(fw)
102
103    def test_get_available_firmware_returns_rw_version(self):
104        """_get_available_firmware returns BIOS (RW) version."""
105        result = utils.CmdResult(stdout=RW_VERSION_OUTPUT, exit_status=0)
106        host = mock.Mock()
107        host.run.return_value = result
108
109        fw = cros_firmware._get_available_firmware(host, 'lumpy')
110        self.assertEqual(fw, 'Google_Lumpy.2.112.0')
111
112    def test_get_available_firmware_returns_version(self):
113        """_get_available_firmware returns BIOS version."""
114        result = utils.CmdResult(stdout=VERSION_OUTPUT, exit_status=0)
115        host = mock.Mock()
116        host.run.return_value = result
117
118        fw = cros_firmware._get_available_firmware(host, 'lumpy')
119        self.assertEqual(fw, 'Google_Lumpy.2.111.0')
120
121    def test_get_available_firmware_returns_none(self):
122        """_get_available_firmware returns None."""
123        result = utils.CmdResult(stdout=NO_VERSION_OUTPUT, exit_status=0)
124        host = mock.Mock()
125        host.run.return_value = result
126
127        fw = cros_firmware._get_available_firmware(host, 'lumpy')
128        self.assertIsNone(fw)
129
130    def test_get_available_firmware_unibuild(self):
131        """_get_available_firmware on unibuild board with multiple models."""
132        result = utils.CmdResult(stdout=UNIBUILD_VERSION_OUTPUT,
133                                 exit_status=0)
134        host = mock.Mock()
135        host.run.return_value = result
136
137        fw = cros_firmware._get_available_firmware(host, 'astronaut')
138        self.assertEqual(fw, 'Google_Coral.10068.37.0')
139
140        fw = cros_firmware._get_available_firmware(host, 'blue')
141        self.assertEqual(fw, 'Google_Coral.10068.39.0')
142
143        fw = cros_firmware._get_available_firmware(host, 'bruce')
144        self.assertIsNone(fw)
145
146
147if __name__ == '__main__':
148    unittest.main()
149