#!/usr/bin/python2 import unittest, os import common from autotest_lib.client.common_lib.test_utils import mock from autotest_lib.client.bin import package, os_dep, utils class TestPackage(unittest.TestCase): def setUp(self): self.god = mock.mock_god() self.god.stub_function(os_dep, "command") def tearDown(self): self.god.unstub_all() def info_common_setup(self, input_package, result): self.god.stub_function(os.path, "isfile") self.god.stub_function(utils, "system_output") self.god.stub_function(utils, "system") # record os.path.isfile.expect_call(input_package).and_return(True) utils.system_output.expect_call( 'file ' + input_package).and_return(result) utils.system_output.expect_call( 'file ' + input_package).and_return(result) def test_info_rpm(self): # setup input_package = "package.rpm" file_result = "rpm" ver = '1.0' # common setup self.info_common_setup(input_package, file_result) # record package_info = {} package_info['type'] = 'rpm' os_dep.command.expect_call('rpm') s_cmd = 'rpm -qp --qf %{SOURCE} ' + input_package + ' 2>/dev/null' a_cmd = 'rpm -qp --qf %{ARCH} ' + input_package + ' 2>/dev/null' v_cmd = 'rpm -qp ' + input_package + ' 2>/dev/null' utils.system_output.expect_call(v_cmd).and_return(ver) i_cmd = 'rpm -q ' + ver + ' 2>&1 >/dev/null' package_info['system_support'] = True utils.system_output.expect_call(s_cmd).and_return('source') package_info['source'] = True utils.system_output.expect_call(v_cmd).and_return(ver) package_info['version'] = ver utils.system_output.expect_call(a_cmd).and_return('586') package_info['arch'] = '586' utils.system.expect_call(i_cmd) package_info['installed'] = True # run and check info = package.info(input_package) self.god.check_playback() self.assertEquals(info, package_info) def test_info_dpkg(self): # setup input_package = "package.deb" file_result = "debian" ver = '1.0' # common setup self.info_common_setup(input_package, file_result) # record package_info = {} package_info['type'] = 'dpkg' package_info['source'] = False os_dep.command.expect_call('dpkg') a_cmd = 'dpkg -f ' + input_package + ' Architecture 2>/dev/null' v_cmd = 'dpkg -f ' + input_package + ' Package 2>/dev/null' utils.system_output.expect_call(v_cmd).and_return(ver) i_cmd = 'dpkg -s ' + ver + ' 2>/dev/null' package_info['system_support'] = True utils.system_output.expect_call(v_cmd).and_return(ver) package_info['version'] = ver utils.system_output.expect_call(a_cmd).and_return('586') package_info['arch'] = '586' utils.system_output.expect_call(i_cmd, ignore_status=True).and_return('installed') package_info['installed'] = True # run and check info = package.info(input_package) self.god.check_playback() self.assertEquals(info, package_info) def test_install(self): # setup input_package = "package.rpm" self.god.stub_function(package, "info") self.god.stub_function(utils, "system") # record package_info = {} package_info['type'] = 'rpm' package_info['system_support'] = True package_info['source'] = True package_info['installed'] = True package.info.expect_call(input_package).and_return(package_info) install_command = 'rpm %s -U %s' % ('', input_package) utils.system.expect_call(install_command) # run and test package.install(input_package) self.god.check_playback() def test_convert(self): os_dep.command.expect_call('alien') dest_format = 'dpkg' input_package = "package.rpm" output = "package_output.deb" # record self.god.stub_function(utils, "system_output") utils.system_output.expect_call( 'alien --to-deb %s 2>/dev/null' % input_package).and_return(output) # run test package.convert(input_package, dest_format) self.god.check_playback() def test_os_support_full(self): # recording exp_support = {} for package_manager in package.KNOWN_PACKAGE_MANAGERS: os_dep.command.expect_call(package_manager) exp_support[package_manager] = True os_dep.command.expect_call('alien') exp_support['conversion'] = True # run and test support = package.os_support() self.god.check_playback() self.assertEquals(support, exp_support) def test_os_support_none(self): # recording exp_support = {} for package_manager in package.KNOWN_PACKAGE_MANAGERS: os_dep.command.expect_call(package_manager).and_raises(ValueError) exp_support[package_manager] = False os_dep.command.expect_call('alien').and_raises(ValueError) exp_support['conversion'] = False # run and test support = package.os_support() self.god.check_playback() self.assertEquals(support, exp_support) if __name__ == "__main__": unittest.main()