xref: /aosp_15_r20/external/autotest/site_utils/deployment/install_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 Li"""Test the install module."""
6*9c5db199SXin Li
7*9c5db199SXin Liimport unittest
8*9c5db199SXin Lifrom unittest import mock
9*9c5db199SXin Li
10*9c5db199SXin Liimport common
11*9c5db199SXin Lifrom autotest_lib.site_utils.deployment import install
12*9c5db199SXin Lifrom autotest_lib.site_utils.stable_images import build_data
13*9c5db199SXin Li
14*9c5db199SXin Li
15*9c5db199SXin Liclass AFEMock(object):
16*9c5db199SXin Li    """Mock frontend.AFE."""
17*9c5db199SXin Li    CROS_IMAGE_TYPE = 'cros'
18*9c5db199SXin Li    FIRMWARE_IMAGE_TYPE = 'firmware'
19*9c5db199SXin Li
20*9c5db199SXin Li    def __init__(self, cros_version=None, fw_version=None):
21*9c5db199SXin Li        self.cros_version_map = mock.Mock()
22*9c5db199SXin Li        self.cros_version_map.get_version.return_value = cros_version
23*9c5db199SXin Li        self.fw_version_map = mock.Mock()
24*9c5db199SXin Li        self.fw_version_map.get_version.return_value = fw_version
25*9c5db199SXin Li
26*9c5db199SXin Li    def get_stable_version_map(self, image_type):
27*9c5db199SXin Li        if image_type == self.CROS_IMAGE_TYPE:
28*9c5db199SXin Li            return self.cros_version_map
29*9c5db199SXin Li        elif image_type == self.FIRMWARE_IMAGE_TYPE:
30*9c5db199SXin Li             return self.fw_version_map
31*9c5db199SXin Li
32*9c5db199SXin Li
33*9c5db199SXin Liclass UpdateBuildTests(unittest.TestCase):
34*9c5db199SXin Li    """Tests for _update_build."""
35*9c5db199SXin Li
36*9c5db199SXin Li    OMAHA_VERSION = 'R64-10176.65.0'
37*9c5db199SXin Li    CROS_VERSION = 'R64-10175.65.0'
38*9c5db199SXin Li
39*9c5db199SXin Li    WOLF_BOARD = 'wolf'
40*9c5db199SXin Li    WOLF_FW_VERSION = 'Google_Wolf.4389.24.62'
41*9c5db199SXin Li    WOLF_NEW_FW_VERSION = 'Google_Wolf.4390.24.62'
42*9c5db199SXin Li    WOLF_FW_VERSION_MAP = {WOLF_BOARD: WOLF_NEW_FW_VERSION}
43*9c5db199SXin Li
44*9c5db199SXin Li    CORAL_BOARD = 'coral'
45*9c5db199SXin Li    CORAL_FW_VERSION = 'Google_Coral.10068.37.0'
46*9c5db199SXin Li    CORAL_FW_VERSION_MAP = {
47*9c5db199SXin Li            'blue': 'Google_Coral.10068.39.0',
48*9c5db199SXin Li            'robo360': 'Google_Coral.10068.34.0',
49*9c5db199SXin Li            'porbeagle': None,
50*9c5db199SXin Li    }
51*9c5db199SXin Li
52*9c5db199SXin Li    def setUp(self):
53*9c5db199SXin Li        self.report_log_mock = mock.Mock()
54*9c5db199SXin Li        self.patchers = []
55*9c5db199SXin Li
56*9c5db199SXin Li    def _set_patchers(self,
57*9c5db199SXin Li                      omaha_version=OMAHA_VERSION,
58*9c5db199SXin Li                      firmware_versions=WOLF_FW_VERSION_MAP):
59*9c5db199SXin Li        patcher1 = mock.patch.object(
60*9c5db199SXin Li                install, '_get_omaha_build',
61*9c5db199SXin Li                return_value=omaha_version)
62*9c5db199SXin Li        patcher2 = mock.patch.object(
63*9c5db199SXin Li                build_data, 'get_firmware_versions',
64*9c5db199SXin Li                return_value=firmware_versions)
65*9c5db199SXin Li
66*9c5db199SXin Li        self.patchers.extend([patcher1, patcher2])
67*9c5db199SXin Li
68*9c5db199SXin Li        for p in self.patchers:
69*9c5db199SXin Li            p.start()
70*9c5db199SXin Li
71*9c5db199SXin Li    def tearDown(self):
72*9c5db199SXin Li        for p in self.patchers:
73*9c5db199SXin Li            p.stop()
74*9c5db199SXin Li
75*9c5db199SXin Li    def test_update_build_cros_and_fw_version_on_non_unibuild(self):
76*9c5db199SXin Li        """Update non-unibuild with old cros_version and fw_version in AFE."""
77*9c5db199SXin Li        afe_mock = AFEMock(
78*9c5db199SXin Li                cros_version=self.CROS_VERSION, fw_version=self.WOLF_FW_VERSION)
79*9c5db199SXin Li
80*9c5db199SXin Li        self._set_patchers()
81*9c5db199SXin Li        arguments = mock.Mock(board=self.WOLF_BOARD, dry_run=False, build=None)
82*9c5db199SXin Li
83*9c5db199SXin Li        afe_mock.cros_version_map.set_version.assert_not_called()
84*9c5db199SXin Li        afe_mock.fw_version_map.set_version.assert_not_called()
85*9c5db199SXin Li
86*9c5db199SXin Li    def test_update_build_without_omaha_version_on_non_unibuild(self):
87*9c5db199SXin Li        """Do not update non-unibuild as no OMAHA_VERSION found."""
88*9c5db199SXin Li        afe_mock = AFEMock(
89*9c5db199SXin Li                cros_version=self.CROS_VERSION, fw_version=self.WOLF_FW_VERSION)
90*9c5db199SXin Li
91*9c5db199SXin Li        self._set_patchers(omaha_version=None)
92*9c5db199SXin Li        arguments = mock.Mock(board=self.WOLF_BOARD, dry_run=False, build=None)
93*9c5db199SXin Li
94*9c5db199SXin Li        afe_mock.cros_version_map.set_version.assert_not_called()
95*9c5db199SXin Li        afe_mock.cros_version_map.delete_version.assert_not_called()
96*9c5db199SXin Li        afe_mock.fw_version_map.set_version.assert_not_called()
97*9c5db199SXin Li        afe_mock.fw_version_map.delete_version.assert_not_called()
98*9c5db199SXin Li
99*9c5db199SXin Li    def test_update_build_cros_on_non_unibuild(self):
100*9c5db199SXin Li        """Update non-unibuild with old cros_version in AFE."""
101*9c5db199SXin Li        afe_mock = AFEMock(
102*9c5db199SXin Li                cros_version=self.CROS_VERSION, fw_version=self.WOLF_FW_VERSION)
103*9c5db199SXin Li        self._set_patchers(
104*9c5db199SXin Li                firmware_versions={self.WOLF_BOARD: self.WOLF_FW_VERSION})
105*9c5db199SXin Li        arguments = mock.Mock(board=self.WOLF_BOARD, dry_run=False, build=None)
106*9c5db199SXin Li
107*9c5db199SXin Li        afe_mock.cros_version_map.set_version.assert_not_called()
108*9c5db199SXin Li        afe_mock.fw_version_map.set_version.assert_not_called()
109*9c5db199SXin Li        afe_mock.fw_version_map.delete_version.assert_not_called()
110*9c5db199SXin Li
111*9c5db199SXin Li    def test_update_build_none_cros_and_fw_version_on_non_unibuild(self):
112*9c5db199SXin Li        """Update Non-unibuild with None cros_version & fw_version in AFE."""
113*9c5db199SXin Li        afe_mock = AFEMock(cros_version=None, fw_version=None)
114*9c5db199SXin Li        self._set_patchers()
115*9c5db199SXin Li        arguments = mock.Mock(board=self.WOLF_BOARD, dry_run=False, build=None)
116*9c5db199SXin Li
117*9c5db199SXin Li        afe_mock.cros_version_map.set_version.assert_not_called()
118*9c5db199SXin Li        afe_mock.fw_version_map.set_version.assert_not_called()
119*9c5db199SXin Li
120*9c5db199SXin Li    def test_update_build_cros_and_fw_version_on_unibuild(self):
121*9c5db199SXin Li        """Update unibuild with old cros_version and fw_versions."""
122*9c5db199SXin Li        afe_mock = AFEMock(
123*9c5db199SXin Li                cros_version=self.CROS_VERSION,
124*9c5db199SXin Li                fw_version=self.CORAL_FW_VERSION)
125*9c5db199SXin Li        self._set_patchers(
126*9c5db199SXin Li                firmware_versions=self.CORAL_FW_VERSION_MAP)
127*9c5db199SXin Li        arguments = mock.Mock(board=self.CORAL_BOARD, dry_run=False,
128*9c5db199SXin Li                              build=None)
129*9c5db199SXin Li
130*9c5db199SXin Li        afe_mock.cros_version_map.set_version.assert_not_called()
131*9c5db199SXin Li        afe_mock.fw_version_map.set_version.assert_not_called()
132*9c5db199SXin Li        afe_mock.fw_version_map.set_version.assert_not_called()
133*9c5db199SXin Li        afe_mock.fw_version_map.delete_version.assert_not_called()
134*9c5db199SXin Li
135*9c5db199SXin Li
136*9c5db199SXin Liif __name__ == '__main__':
137*9c5db199SXin Li    unittest.main()
138