kiwi-el8/test/unit/utils/rpm_database_test.py
Alexandre Detiste fb69627ad3
Use unittest.mock from core python everywhere
mock was an independent module that has been merged into the Python standard library.
2024-02-18 22:15:30 +01:00

150 lines
5.2 KiB
Python

from unittest.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
]
)