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