| #!/usr/bin/python |
| |
| |
| 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() |