1*800a58d9SAndroid Build Coastguard Worker# Copyright 2021 - The Android Open Source Project 2*800a58d9SAndroid Build Coastguard Worker# 3*800a58d9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*800a58d9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*800a58d9SAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*800a58d9SAndroid Build Coastguard Worker# 7*800a58d9SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*800a58d9SAndroid Build Coastguard Worker# 9*800a58d9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*800a58d9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*800a58d9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*800a58d9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*800a58d9SAndroid Build Coastguard Worker# limitations under the License. 14*800a58d9SAndroid Build Coastguard Worker"""Tests for host_cleanup_runner.""" 15*800a58d9SAndroid Build Coastguard Workerimport os 16*800a58d9SAndroid Build Coastguard Workerimport platform 17*800a58d9SAndroid Build Coastguard Workerimport unittest 18*800a58d9SAndroid Build Coastguard Workerimport subprocess 19*800a58d9SAndroid Build Coastguard Worker 20*800a58d9SAndroid Build Coastguard Workerfrom unittest import mock 21*800a58d9SAndroid Build Coastguard Worker 22*800a58d9SAndroid Build Coastguard Workerfrom acloud.hostcleanup import host_cleanup_runner 23*800a58d9SAndroid Build Coastguard Workerfrom acloud.hostcleanup.host_cleanup_runner import PackagesUninstaller 24*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import driver_test_lib 25*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import utils 26*800a58d9SAndroid Build Coastguard Workerfrom acloud.setup import setup_common 27*800a58d9SAndroid Build Coastguard Worker 28*800a58d9SAndroid Build Coastguard Worker# pylint: disable=no-member 29*800a58d9SAndroid Build Coastguard Workerclass PackagesUninstallerTest(driver_test_lib.BaseDriverTest): 30*800a58d9SAndroid Build Coastguard Worker """Test PackagesUninstallerTest.""" 31*800a58d9SAndroid Build Coastguard Worker 32*800a58d9SAndroid Build Coastguard Worker # pylint: disable=invalid-name 33*800a58d9SAndroid Build Coastguard Worker def setUp(self): 34*800a58d9SAndroid Build Coastguard Worker """Set up the test.""" 35*800a58d9SAndroid Build Coastguard Worker super().setUp() 36*800a58d9SAndroid Build Coastguard Worker mock_stty = mock.MagicMock() 37*800a58d9SAndroid Build Coastguard Worker mock_stty.read.return_value = "20 80" 38*800a58d9SAndroid Build Coastguard Worker self.Patch(os, "popen", return_value=mock_stty) 39*800a58d9SAndroid Build Coastguard Worker 40*800a58d9SAndroid Build Coastguard Worker self.Patch(setup_common, "PackageInstalled", return_value=True) 41*800a58d9SAndroid Build Coastguard Worker self.PackagesUninstaller = PackagesUninstaller() 42*800a58d9SAndroid Build Coastguard Worker 43*800a58d9SAndroid Build Coastguard Worker def testShouldRun(self): 44*800a58d9SAndroid Build Coastguard Worker """Test ShouldRun.""" 45*800a58d9SAndroid Build Coastguard Worker self.Patch(platform, "system", return_value="Linux") 46*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.PackagesUninstaller.ShouldRun()) 47*800a58d9SAndroid Build Coastguard Worker 48*800a58d9SAndroid Build Coastguard Worker self.Patch(platform, "system", return_value="Mac") 49*800a58d9SAndroid Build Coastguard Worker self.assertFalse(self.PackagesUninstaller.ShouldRun()) 50*800a58d9SAndroid Build Coastguard Worker 51*800a58d9SAndroid Build Coastguard Worker self.Patch(platform, "system", return_value="Linux") 52*800a58d9SAndroid Build Coastguard Worker self.Patch(setup_common, "PackageInstalled", return_value=False) 53*800a58d9SAndroid Build Coastguard Worker self.PackagesUninstaller = PackagesUninstaller() 54*800a58d9SAndroid Build Coastguard Worker self.assertFalse(self.PackagesUninstaller.ShouldRun()) 55*800a58d9SAndroid Build Coastguard Worker 56*800a58d9SAndroid Build Coastguard Worker def testRun(self): 57*800a58d9SAndroid Build Coastguard Worker """Test Run.""" 58*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "InteractWithQuestion", return_value="y") 59*800a58d9SAndroid Build Coastguard Worker self.Patch(PackagesUninstaller, "ShouldRun", return_value=True) 60*800a58d9SAndroid Build Coastguard Worker self.Patch(setup_common, "CheckCmdOutput") 61*800a58d9SAndroid Build Coastguard Worker self.PackagesUninstaller.Run() 62*800a58d9SAndroid Build Coastguard Worker setup_common.CheckCmdOutput.assert_called() 63*800a58d9SAndroid Build Coastguard Worker setup_common.CheckCmdOutput.reset_mock() 64*800a58d9SAndroid Build Coastguard Worker 65*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "InteractWithQuestion", return_value="n") 66*800a58d9SAndroid Build Coastguard Worker self.PackagesUninstaller.Run() 67*800a58d9SAndroid Build Coastguard Worker setup_common.CheckCmdOutput.assert_not_called() 68*800a58d9SAndroid Build Coastguard Worker 69*800a58d9SAndroid Build Coastguard Worker def testRun_RaiseException(self): 70*800a58d9SAndroid Build Coastguard Worker """Test raise exception.""" 71*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "InteractWithQuestion", return_value="y") 72*800a58d9SAndroid Build Coastguard Worker self.Patch(PackagesUninstaller, "ShouldRun", return_value=True) 73*800a58d9SAndroid Build Coastguard Worker self.Patch(subprocess, "check_output", 74*800a58d9SAndroid Build Coastguard Worker side_effect=subprocess.CalledProcessError( 75*800a58d9SAndroid Build Coastguard Worker None, "raise err.")) 76*800a58d9SAndroid Build Coastguard Worker self.Patch(host_cleanup_runner.logger, "error") 77*800a58d9SAndroid Build Coastguard Worker self.PackagesUninstaller.Run() 78*800a58d9SAndroid Build Coastguard Worker host_cleanup_runner.logger.error.assert_called() 79*800a58d9SAndroid Build Coastguard Worker 80*800a58d9SAndroid Build Coastguard Worker 81*800a58d9SAndroid Build Coastguard Workerif __name__ == "__main__": 82*800a58d9SAndroid Build Coastguard Worker unittest.main() 83