xref: /aosp_15_r20/external/autotest/client/bin/package_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#!/usr/bin/python3
2*9c5db199SXin Li
3*9c5db199SXin Li
4*9c5db199SXin Liimport unittest, os
5*9c5db199SXin Liimport common
6*9c5db199SXin Lifrom autotest_lib.client.common_lib.test_utils import mock
7*9c5db199SXin Lifrom autotest_lib.client.bin import package, os_dep, utils
8*9c5db199SXin Li
9*9c5db199SXin Li
10*9c5db199SXin Liclass TestPackage(unittest.TestCase):
11*9c5db199SXin Li    def setUp(self):
12*9c5db199SXin Li        self.god = mock.mock_god()
13*9c5db199SXin Li        self.god.stub_function(os_dep, "command")
14*9c5db199SXin Li
15*9c5db199SXin Li    def tearDown(self):
16*9c5db199SXin Li        self.god.unstub_all()
17*9c5db199SXin Li
18*9c5db199SXin Li
19*9c5db199SXin Li    def info_common_setup(self, input_package, result):
20*9c5db199SXin Li        self.god.stub_function(os.path, "isfile")
21*9c5db199SXin Li        self.god.stub_function(utils, "system_output")
22*9c5db199SXin Li        self.god.stub_function(utils, "system")
23*9c5db199SXin Li
24*9c5db199SXin Li        # record
25*9c5db199SXin Li        os.path.isfile.expect_call(input_package).and_return(True)
26*9c5db199SXin Li        utils.system_output.expect_call(
27*9c5db199SXin Li            'file ' + input_package).and_return(result)
28*9c5db199SXin Li        utils.system_output.expect_call(
29*9c5db199SXin Li            'file ' + input_package).and_return(result)
30*9c5db199SXin Li
31*9c5db199SXin Li
32*9c5db199SXin Li    def test_info_rpm(self):
33*9c5db199SXin Li        # setup
34*9c5db199SXin Li        input_package = "package.rpm"
35*9c5db199SXin Li        file_result = "rpm"
36*9c5db199SXin Li        ver = '1.0'
37*9c5db199SXin Li
38*9c5db199SXin Li        # common setup
39*9c5db199SXin Li        self.info_common_setup(input_package, file_result)
40*9c5db199SXin Li
41*9c5db199SXin Li        # record
42*9c5db199SXin Li        package_info = {}
43*9c5db199SXin Li        package_info['type'] = 'rpm'
44*9c5db199SXin Li        os_dep.command.expect_call('rpm')
45*9c5db199SXin Li        s_cmd = 'rpm -qp --qf %{SOURCE} ' + input_package + ' 2>/dev/null'
46*9c5db199SXin Li        a_cmd = 'rpm -qp --qf %{ARCH} ' + input_package + ' 2>/dev/null'
47*9c5db199SXin Li        v_cmd = 'rpm -qp ' + input_package + ' 2>/dev/null'
48*9c5db199SXin Li
49*9c5db199SXin Li        utils.system_output.expect_call(v_cmd).and_return(ver)
50*9c5db199SXin Li        i_cmd = 'rpm -q ' + ver + ' 2>&1 >/dev/null'
51*9c5db199SXin Li
52*9c5db199SXin Li        package_info['system_support'] = True
53*9c5db199SXin Li        utils.system_output.expect_call(s_cmd).and_return('source')
54*9c5db199SXin Li        package_info['source'] = True
55*9c5db199SXin Li        utils.system_output.expect_call(v_cmd).and_return(ver)
56*9c5db199SXin Li        package_info['version'] = ver
57*9c5db199SXin Li        utils.system_output.expect_call(a_cmd).and_return('586')
58*9c5db199SXin Li        package_info['arch'] = '586'
59*9c5db199SXin Li        utils.system.expect_call(i_cmd)
60*9c5db199SXin Li        package_info['installed'] = True
61*9c5db199SXin Li
62*9c5db199SXin Li        # run and check
63*9c5db199SXin Li        info = package.info(input_package)
64*9c5db199SXin Li        self.god.check_playback()
65*9c5db199SXin Li        self.assertEquals(info, package_info)
66*9c5db199SXin Li
67*9c5db199SXin Li
68*9c5db199SXin Li    def test_info_dpkg(self):
69*9c5db199SXin Li        # setup
70*9c5db199SXin Li        input_package = "package.deb"
71*9c5db199SXin Li        file_result = "debian"
72*9c5db199SXin Li        ver = '1.0'
73*9c5db199SXin Li
74*9c5db199SXin Li        # common setup
75*9c5db199SXin Li        self.info_common_setup(input_package, file_result)
76*9c5db199SXin Li
77*9c5db199SXin Li        # record
78*9c5db199SXin Li        package_info = {}
79*9c5db199SXin Li        package_info['type'] = 'dpkg'
80*9c5db199SXin Li        package_info['source'] = False
81*9c5db199SXin Li        os_dep.command.expect_call('dpkg')
82*9c5db199SXin Li        a_cmd = 'dpkg -f ' + input_package + ' Architecture 2>/dev/null'
83*9c5db199SXin Li        v_cmd = 'dpkg -f ' + input_package + ' Package 2>/dev/null'
84*9c5db199SXin Li        utils.system_output.expect_call(v_cmd).and_return(ver)
85*9c5db199SXin Li        i_cmd = 'dpkg -s ' + ver + ' 2>/dev/null'
86*9c5db199SXin Li        package_info['system_support'] = True
87*9c5db199SXin Li        utils.system_output.expect_call(v_cmd).and_return(ver)
88*9c5db199SXin Li        package_info['version'] = ver
89*9c5db199SXin Li        utils.system_output.expect_call(a_cmd).and_return('586')
90*9c5db199SXin Li        package_info['arch'] = '586'
91*9c5db199SXin Li        utils.system_output.expect_call(i_cmd,
92*9c5db199SXin Li            ignore_status=True).and_return('installed')
93*9c5db199SXin Li        package_info['installed'] = True
94*9c5db199SXin Li
95*9c5db199SXin Li        # run and check
96*9c5db199SXin Li        info = package.info(input_package)
97*9c5db199SXin Li        self.god.check_playback()
98*9c5db199SXin Li        self.assertEquals(info, package_info)
99*9c5db199SXin Li
100*9c5db199SXin Li
101*9c5db199SXin Li    def test_install(self):
102*9c5db199SXin Li        # setup
103*9c5db199SXin Li        input_package = "package.rpm"
104*9c5db199SXin Li        self.god.stub_function(package, "info")
105*9c5db199SXin Li        self.god.stub_function(utils, "system")
106*9c5db199SXin Li
107*9c5db199SXin Li        # record
108*9c5db199SXin Li        package_info = {}
109*9c5db199SXin Li        package_info['type'] = 'rpm'
110*9c5db199SXin Li        package_info['system_support'] = True
111*9c5db199SXin Li        package_info['source'] = True
112*9c5db199SXin Li        package_info['installed'] = True
113*9c5db199SXin Li
114*9c5db199SXin Li        package.info.expect_call(input_package).and_return(package_info)
115*9c5db199SXin Li        install_command = 'rpm %s -U %s' % ('', input_package)
116*9c5db199SXin Li        utils.system.expect_call(install_command)
117*9c5db199SXin Li
118*9c5db199SXin Li        # run and test
119*9c5db199SXin Li        package.install(input_package)
120*9c5db199SXin Li        self.god.check_playback()
121*9c5db199SXin Li
122*9c5db199SXin Li
123*9c5db199SXin Li    def test_convert(self):
124*9c5db199SXin Li        os_dep.command.expect_call('alien')
125*9c5db199SXin Li        dest_format = 'dpkg'
126*9c5db199SXin Li        input_package = "package.rpm"
127*9c5db199SXin Li        output = "package_output.deb"
128*9c5db199SXin Li
129*9c5db199SXin Li        # record
130*9c5db199SXin Li        self.god.stub_function(utils, "system_output")
131*9c5db199SXin Li        utils.system_output.expect_call(
132*9c5db199SXin Li            'alien --to-deb %s 2>/dev/null' % input_package).and_return(output)
133*9c5db199SXin Li
134*9c5db199SXin Li        # run test
135*9c5db199SXin Li        package.convert(input_package, dest_format)
136*9c5db199SXin Li        self.god.check_playback()
137*9c5db199SXin Li
138*9c5db199SXin Li
139*9c5db199SXin Li    def test_os_support_full(self):
140*9c5db199SXin Li        # recording
141*9c5db199SXin Li        exp_support = {}
142*9c5db199SXin Li        for package_manager in package.KNOWN_PACKAGE_MANAGERS:
143*9c5db199SXin Li            os_dep.command.expect_call(package_manager)
144*9c5db199SXin Li            exp_support[package_manager] = True
145*9c5db199SXin Li
146*9c5db199SXin Li        os_dep.command.expect_call('alien')
147*9c5db199SXin Li        exp_support['conversion'] = True
148*9c5db199SXin Li
149*9c5db199SXin Li        # run and test
150*9c5db199SXin Li        support = package.os_support()
151*9c5db199SXin Li        self.god.check_playback()
152*9c5db199SXin Li        self.assertEquals(support, exp_support)
153*9c5db199SXin Li
154*9c5db199SXin Li
155*9c5db199SXin Li    def test_os_support_none(self):
156*9c5db199SXin Li        # recording
157*9c5db199SXin Li        exp_support = {}
158*9c5db199SXin Li        for package_manager in package.KNOWN_PACKAGE_MANAGERS:
159*9c5db199SXin Li            os_dep.command.expect_call(package_manager).and_raises(ValueError)
160*9c5db199SXin Li            exp_support[package_manager] = False
161*9c5db199SXin Li
162*9c5db199SXin Li        os_dep.command.expect_call('alien').and_raises(ValueError)
163*9c5db199SXin Li        exp_support['conversion'] = False
164*9c5db199SXin Li
165*9c5db199SXin Li        # run and test
166*9c5db199SXin Li        support = package.os_support()
167*9c5db199SXin Li        self.god.check_playback()
168*9c5db199SXin Li        self.assertEquals(support, exp_support)
169*9c5db199SXin Li
170*9c5db199SXin Li
171*9c5db199SXin Liif __name__ == "__main__":
172*9c5db199SXin Li    unittest.main()
173