kiwi-el8/test/unit/utils/rpm_database_test.py
Marcus Schäfer 9c9250ebc4
Support nose and xunit style tests
The modifications in this commit allows the unit tests
to run on both, pytest 6.x (nose test layout) and the new
pytest 7.x (xunit test layout). This Fixes #2072 in a
much nicer way. Thanks much to @smarlowucf
2022-02-26 20:26:18 +01:00

150 lines
5.2 KiB
Python

from mock import (
patch, Mock, call
)
from kiwi.utils.rpm_database import RpmDataBase
class TestRpmDataBase:
def setup(self):
self.rpmdb = RpmDataBase('root_dir')
self.rpmdb.rpmdb_host = Mock()
self.rpmdb.rpmdb_image = Mock()
def setup_method(self, cls):
self.setup()
@patch('kiwi.utils.rpm_database.Path.which')
def test_has_rpm(self, mock_Path_which):
mock_Path_which.return_value = None
assert self.rpmdb.has_rpm() is False
mock_Path_which.assert_called_once_with(
'rpmdb', access_mode=1, root_dir='root_dir'
)
mock_Path_which.return_value = 'rpm'
assert self.rpmdb.has_rpm() is True
@patch('kiwi.command.Command.run')
def test_rebuild_database(self, mock_Command_run):
self.rpmdb.rebuild_database()
mock_Command_run.assert_called_once_with(
['chroot', 'root_dir', 'rpmdb', '--rebuilddb']
)
@patch('kiwi.command.Command.run')
def test_init_database(self, mock_Command_run):
self.rpmdb.init_database()
mock_Command_run.assert_called_once_with(
['rpm', '--root', 'root_dir', '--initdb']
)
def test_set_database_to_host_path(self):
self.rpmdb.set_database_to_host_path()
self.rpmdb.rpmdb_image.set_config_value.assert_called_once_with(
'_dbpath', self.rpmdb.rpmdb_host.get_query.return_value
)
self.rpmdb.rpmdb_image.write_config.assert_called_once_with()
self.rpmdb.rpmdb_host.get_query.assert_called_once_with('_dbpath')
@patch('kiwi.command.Command.run')
@patch('os.path.exists')
def test_link_database_to_host_path(self, mock_exists, mock_Command_run):
self.rpmdb.rpmdb_image.expand_query.return_value = \
'/var/lib/rpm'
self.rpmdb.rpmdb_host.expand_query.return_value = \
'/usr/lib/sysimage/rpm'
mock_exists.return_value = False
self.rpmdb.link_database_to_host_path()
assert mock_Command_run.call_args_list == [
call(['mkdir', '-p', 'root_dir/usr/lib/sysimage']),
call(
[
'ln', '-s', '../../../var/lib/rpm',
'root_dir/usr/lib/sysimage/rpm'
]
)
]
@patch('kiwi.utils.rpm_database.Path.wipe')
@patch('kiwi.command.Command.run')
@patch('os.path.islink')
@patch('os.path.exists')
@patch('os.unlink')
def test_set_database_to_image_path(
self, mock_os_unlink, mock_os_exists, mock_os_islink,
mock_Command_run, mock_Path_wipe
):
mock_os_exists.return_value = True
link = [False, False]
def mocked_islink(path):
return link.pop()
mock_os_islink.side_effect = mocked_islink
self.rpmdb.rpmdb_image.expand_query.return_value = \
'/var/lib/rpm'
self.rpmdb.rpmdb_host.expand_query.return_value = \
'/usr/lib/sysimage/rpm'
self.rpmdb.set_database_to_image_path()
self.rpmdb.rpmdb_image.expand_query.assert_called_once_with('%_dbpath')
assert self.rpmdb.rpmdb_image.set_config_value.call_args_list == [
call(
'_dbpath', self.rpmdb.rpmdb_host.expand_query.return_value
),
call(
'_dbpath_rebuild', self.rpmdb.rpmdb_image.get_query.return_value
)
]
assert mock_Path_wipe.call_args_list == [
call('root_dir/var/lib/rpm'),
call('root_dir/usr/lib/sysimage/rpm')
]
self.rpmdb.rpmdb_image.write_config.assert_called_once_with()
assert mock_Command_run.call_args_list == [
call(
[
'chroot', 'root_dir', 'rpmdb', '--rebuilddb'
]
),
call(
[
'mv', 'root_dir/usr/lib/sysimage/rpm/alternatives',
'root_dir/var/lib/rpm'
]
)
]
assert self.rpmdb.rpmdb_image.wipe_config.call_count == 2
link = [True, False]
mock_os_islink.side_effect = mocked_islink
self.rpmdb.set_database_to_image_path()
mock_os_unlink.assert_called_once_with(
'root_dir/var/lib/rpm'
)
link = [True, True]
mock_os_islink.side_effect = mocked_islink
self.rpmdb.set_database_to_image_path()
assert mock_Command_run.call_args_list[-1] == call(
['chroot', 'root_dir', 'rpmdb', '--rebuilddb']
)
def test_set_macro_from_string(self):
self.rpmdb.set_macro_from_string('_install_langs%en_US:de_DE')
self.rpmdb.rpmdb_image.set_config_value.assert_called_once_with(
'_install_langs', 'en_US:de_DE'
)
def test_write_config(self):
self.rpmdb.write_config()
self.rpmdb.rpmdb_image.write_config.assert_called_once_with()
@patch('kiwi.command.Command.run')
def test_import_signing_key_to_image(self, mock_Command_run):
self.rpmdb.import_signing_key_to_image('key')
mock_Command_run.assert_called_once_with(
[
'rpm', '--root', 'root_dir', '--import', 'key',
'--dbpath', self.rpmdb.rpmdb_host.expand_query.return_value
]
)