173 lines
5.4 KiB
Python
Executable File
173 lines
5.4 KiB
Python
Executable File
#!/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()
|