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