1*800a58d9SAndroid Build Coastguard Worker# Copyright 2018 - 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_setup_runner.""" 15*800a58d9SAndroid Build Coastguard Workerimport subprocess 16*800a58d9SAndroid Build Coastguard Workerimport unittest 17*800a58d9SAndroid Build Coastguard Worker 18*800a58d9SAndroid Build Coastguard Workerfrom acloud import errors 19*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import driver_test_lib 20*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import utils 21*800a58d9SAndroid Build Coastguard Workerfrom acloud.setup import setup_common 22*800a58d9SAndroid Build Coastguard Worker 23*800a58d9SAndroid Build Coastguard Worker 24*800a58d9SAndroid Build Coastguard Workerclass SetupCommonTest(driver_test_lib.BaseDriverTest): 25*800a58d9SAndroid Build Coastguard Worker """Test HostPkgTaskRunner.""" 26*800a58d9SAndroid Build Coastguard Worker PKG_INFO_INSTALLED = """fake_pkg: 27*800a58d9SAndroid Build Coastguard Worker Installed: 0.7 28*800a58d9SAndroid Build Coastguard Worker Candidate: 0.7 29*800a58d9SAndroid Build Coastguard Worker Version table: 30*800a58d9SAndroid Build Coastguard Worker""" 31*800a58d9SAndroid Build Coastguard Worker PKG_INFO_NONE_INSTALL = """fake_pkg: 32*800a58d9SAndroid Build Coastguard Worker Installed: (none) 33*800a58d9SAndroid Build Coastguard Worker Candidate: 0.7 34*800a58d9SAndroid Build Coastguard Worker Version table: 35*800a58d9SAndroid Build Coastguard Worker""" 36*800a58d9SAndroid Build Coastguard Worker PKG_INFO_OLD_VERSION = """fake_pkg: 37*800a58d9SAndroid Build Coastguard Worker Installed: 0.2 38*800a58d9SAndroid Build Coastguard Worker Candidate: 0.7 39*800a58d9SAndroid Build Coastguard Worker Version table: 40*800a58d9SAndroid Build Coastguard Worker""" 41*800a58d9SAndroid Build Coastguard Worker 42*800a58d9SAndroid Build Coastguard Worker def setUp(self): 43*800a58d9SAndroid Build Coastguard Worker """Create mock objects.""" 44*800a58d9SAndroid Build Coastguard Worker super().setUp() 45*800a58d9SAndroid Build Coastguard Worker self._mock_checkoutput = self.Patch(utils, "CheckOutput") 46*800a58d9SAndroid Build Coastguard Worker 47*800a58d9SAndroid Build Coastguard Worker def testCheckCmdOutput(self): 48*800a58d9SAndroid Build Coastguard Worker """Test CheckCmdOutput.""" 49*800a58d9SAndroid Build Coastguard Worker cmd = "fake_command" 50*800a58d9SAndroid Build Coastguard Worker setup_common.CheckCmdOutput(cmd) 51*800a58d9SAndroid Build Coastguard Worker self._mock_checkoutput.assert_called_once_with(cmd) 52*800a58d9SAndroid Build Coastguard Worker 53*800a58d9SAndroid Build Coastguard Worker def testInstallPackage(self): 54*800a58d9SAndroid Build Coastguard Worker """Test InstallPackage.""" 55*800a58d9SAndroid Build Coastguard Worker package = "fake_pkg" 56*800a58d9SAndroid Build Coastguard Worker self.Patch(setup_common, "PackageInstalled", return_value=True) 57*800a58d9SAndroid Build Coastguard Worker setup_common.InstallPackage(package) 58*800a58d9SAndroid Build Coastguard Worker self._mock_checkoutput.assert_called_once_with( 59*800a58d9SAndroid Build Coastguard Worker "sudo apt-get --assume-yes install fake_pkg", 60*800a58d9SAndroid Build Coastguard Worker shell=True, stderr=subprocess.STDOUT) 61*800a58d9SAndroid Build Coastguard Worker 62*800a58d9SAndroid Build Coastguard Worker self.Patch(setup_common, "PackageInstalled", return_value=False) 63*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.PackageInstallError): 64*800a58d9SAndroid Build Coastguard Worker setup_common.InstallPackage(package) 65*800a58d9SAndroid Build Coastguard Worker 66*800a58d9SAndroid Build Coastguard Worker # pylint: disable=invalid-name 67*800a58d9SAndroid Build Coastguard Worker def testPackageNotInstalled(self): 68*800a58d9SAndroid Build Coastguard Worker """"Test PackageInstalled return False when Installed status is (None). """ 69*800a58d9SAndroid Build Coastguard Worker self.Patch( 70*800a58d9SAndroid Build Coastguard Worker setup_common, 71*800a58d9SAndroid Build Coastguard Worker "CheckCmdOutput", 72*800a58d9SAndroid Build Coastguard Worker return_value=self.PKG_INFO_NONE_INSTALL) 73*800a58d9SAndroid Build Coastguard Worker 74*800a58d9SAndroid Build Coastguard Worker self.assertFalse( 75*800a58d9SAndroid Build Coastguard Worker setup_common.PackageInstalled("fake_package")) 76*800a58d9SAndroid Build Coastguard Worker 77*800a58d9SAndroid Build Coastguard Worker # Test with the package didn't install in host. 78*800a58d9SAndroid Build Coastguard Worker self.Patch( 79*800a58d9SAndroid Build Coastguard Worker setup_common, 80*800a58d9SAndroid Build Coastguard Worker "CheckCmdOutput", 81*800a58d9SAndroid Build Coastguard Worker return_value="") 82*800a58d9SAndroid Build Coastguard Worker self.assertFalse( 83*800a58d9SAndroid Build Coastguard Worker setup_common.PackageInstalled("fake_package")) 84*800a58d9SAndroid Build Coastguard Worker 85*800a58d9SAndroid Build Coastguard Worker def testUnableToLocatePackage(self): 86*800a58d9SAndroid Build Coastguard Worker """"Test PackageInstalled return False if unable to locate package.""" 87*800a58d9SAndroid Build Coastguard Worker self.Patch( 88*800a58d9SAndroid Build Coastguard Worker setup_common, 89*800a58d9SAndroid Build Coastguard Worker "CheckCmdOutput", 90*800a58d9SAndroid Build Coastguard Worker side_effect=subprocess.CalledProcessError( 91*800a58d9SAndroid Build Coastguard Worker None, "This error means unable to locate package on repository.")) 92*800a58d9SAndroid Build Coastguard Worker 93*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.UnableToLocatePkgOnRepositoryError): 94*800a58d9SAndroid Build Coastguard Worker setup_common.PackageInstalled("fake_package") 95*800a58d9SAndroid Build Coastguard Worker 96*800a58d9SAndroid Build Coastguard Worker # pylint: disable=invalid-name 97*800a58d9SAndroid Build Coastguard Worker def testPackageInstalledForOldVersion(self): 98*800a58d9SAndroid Build Coastguard Worker """Test PackageInstalled should return True when pkg is out-of-date.""" 99*800a58d9SAndroid Build Coastguard Worker self.Patch( 100*800a58d9SAndroid Build Coastguard Worker setup_common, 101*800a58d9SAndroid Build Coastguard Worker "CheckCmdOutput", 102*800a58d9SAndroid Build Coastguard Worker return_value=self.PKG_INFO_OLD_VERSION) 103*800a58d9SAndroid Build Coastguard Worker 104*800a58d9SAndroid Build Coastguard Worker self.assertTrue(setup_common.PackageInstalled("fake_package", 105*800a58d9SAndroid Build Coastguard Worker compare_version=True)) 106*800a58d9SAndroid Build Coastguard Worker 107*800a58d9SAndroid Build Coastguard Worker def testPackageInstalled(self): 108*800a58d9SAndroid Build Coastguard Worker """Test PackageInstalled should return True when pkg is installed.""" 109*800a58d9SAndroid Build Coastguard Worker self.Patch( 110*800a58d9SAndroid Build Coastguard Worker setup_common, 111*800a58d9SAndroid Build Coastguard Worker "CheckCmdOutput", 112*800a58d9SAndroid Build Coastguard Worker return_value=self.PKG_INFO_INSTALLED) 113*800a58d9SAndroid Build Coastguard Worker 114*800a58d9SAndroid Build Coastguard Worker self.assertTrue(setup_common.PackageInstalled("fake_package")) 115*800a58d9SAndroid Build Coastguard Worker 116*800a58d9SAndroid Build Coastguard Worker 117*800a58d9SAndroid Build Coastguard Workerif __name__ == "__main__": 118*800a58d9SAndroid Build Coastguard Worker unittest.main() 119