kiwi-el8/test/unit/utils/rpm_database_test.py
David Cassany 1466a6c69a
Make use of Path.which including root_dir parameter
This commit refactors the use of Path.which in several parts of the
code. Since dd4d2ed78 the Path utility is capable to run Path.which
on certain chroot env, thus no need to adapt the PATH environment
variable.

Fixes #1281
2020-01-22 16:12:08 +01:00

147 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()
@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
]
)