xref: /aosp_15_r20/tools/acloud/setup/setup_common_test.py (revision 800a58d989c669b8eb8a71d8df53b1ba3d411444)
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