kiwi-el8/test/unit/package_manager_apt_test.py
David Cassany 435ab2651a Extend --signing-key to Apt package manager
This commit extends support for --siging-key to the Apt package
manager. However it has only been included for the chrooted
operations, as current implementation of the bootstrap procedure does
not provide signature check capabilities.

Related to #342
2017-05-24 13:30:25 +02:00

181 lines
6.3 KiB
Python

from mock import patch
from mock import call
import mock
from .test_helper import raises
from kiwi.package_manager.apt import PackageManagerApt
from kiwi.exceptions import KiwiDebootstrapError
class TestPackageManagerApt(object):
def setup(self):
repository = mock.Mock()
repository.root_dir = 'root-dir'
repository.signing_keys = ['key-file.asc']
repository.unauthenticated = 'false'
root_bind = mock.Mock()
root_bind.move_to_root = mock.Mock(
return_value=['root-moved-arguments']
)
repository.root_bind = root_bind
repository.runtime_config = mock.Mock(
return_value={
'apt_get_args': ['-c', 'apt.conf', '-y'],
'command_env': ['env'],
'distribution': 'xenial',
'distribution_path': 'xenial_path'
}
)
self.manager = PackageManagerApt(repository)
def test_request_package(self):
self.manager.request_package('name')
assert self.manager.package_requests == ['name']
@patch('kiwi.logger.log.warning')
def test_request_collection(self, mock_log_warn):
self.manager.request_collection('name')
assert self.manager.collection_requests == []
assert mock_log_warn.called
@patch('kiwi.logger.log.warning')
def test_request_product(self, mock_log_warn):
self.manager.request_product('name')
assert self.manager.product_requests == []
assert mock_log_warn.called
@patch('kiwi.logger.log.warning')
def test_request_package_exclusion(self, mock_log_warn):
self.manager.request_package_exclusion('name')
assert self.manager.exclude_requests == []
assert mock_log_warn.called
@raises(KiwiDebootstrapError)
def test_process_install_requests_bootstrap_no_dist(self):
self.manager.distribution = None
self.manager.process_install_requests_bootstrap()
@patch('os.path.exists')
@raises(KiwiDebootstrapError)
def test_process_install_requests_bootstrap_no_debootstrap_script(
self, mock_exists
):
mock_exists.return_value = False
self.manager.process_install_requests_bootstrap()
@patch('kiwi.command.Command.run')
@patch('os.path.exists')
@patch('kiwi.package_manager.apt.Path.wipe')
@raises(KiwiDebootstrapError)
def test_process_install_requests_bootstrap_failed_debootstrap(
self, mock_wipe, mock_exists, mock_run
):
self.manager.request_package('apt-get')
mock_run.side_effect = Exception
mock_exists.return_value = True
self.manager.process_install_requests_bootstrap()
@patch('kiwi.logger.log.warning')
@patch('kiwi.command.Command.call')
@patch('kiwi.command.Command.run')
@patch('os.path.exists')
@patch('kiwi.package_manager.apt.DataSync')
def test_process_install_requests_bootstrap(
self, mock_sync, mock_exists, mock_run, mock_call, mock_warn
):
self.manager.request_package('apt-get')
self.manager.request_package('vim')
data = mock.Mock()
mock_sync.return_value = data
mock_exists.return_value = True
self.manager.process_install_requests_bootstrap()
mock_sync.assert_called_once_with(
'root-dir.debootstrap/', 'root-dir'
)
data.sync_data.assert_called_once_with(
options=['-a', '-H', '-X', '-A']
)
assert mock_run.call_args_list == [
call(command=['mountpoint', 'root-dir/dev'], raise_on_error=False),
call([
'debootstrap', '--no-check-gpg', 'xenial',
'root-dir.debootstrap', 'xenial_path'],
['env']),
call([
'chroot', 'root-dir', 'apt-key', 'add', 'key-file.asc'
], ['env']),
call(['rm', '-r', '-f', 'root-dir.debootstrap']),
call([
'chroot', 'root-dir', 'apt-get',
'root-moved-arguments', 'update'
], ['env'])
]
mock_call.assert_called_once_with([
'chroot', 'root-dir', 'apt-get',
'root-moved-arguments', 'install', 'vim'],
['env']
)
assert mock_warn.called
@patch('kiwi.command.Command.call')
@patch('kiwi.command.Command.run')
def test_process_install_requests(self, mock_run, mock_call):
self.manager.request_package('vim')
self.manager.process_install_requests()
self.manager.root_bind.move_to_root(
self.manager.apt_get_args
)
mock_call.assert_called_once_with([
'chroot', 'root-dir', 'apt-get',
'root-moved-arguments', 'install', 'vim'],
['env']
)
@patch('kiwi.command.Command.call')
@patch('kiwi.command.Command.run')
def test_process_delete_requests(self, mock_run, mock_call):
self.manager.request_package('vim')
self.manager.process_delete_requests()
mock_call.assert_called_once_with([
'chroot', 'root-dir', 'apt-get',
'root-moved-arguments', 'remove', 'vim'],
['env']
)
@patch('kiwi.command.Command.call')
def test_update(self, mock_call):
self.manager.update()
self.manager.root_bind.move_to_root(
self.manager.apt_get_args
)
mock_call.assert_called_once_with([
'chroot', 'root-dir', 'apt-get',
'root-moved-arguments', 'upgrade'],
['env']
)
def test_process_only_required(self):
self.manager.process_only_required()
assert self.manager.custom_args == ['--no-install-recommends']
def test_process_plus_recommended(self):
self.manager.process_only_required()
assert self.manager.custom_args == ['--no-install-recommends']
self.manager.process_plus_recommended()
assert '--no-install-recommends' not in self.manager.custom_args
def test_match_package_installed(self):
assert self.manager.match_package_installed('foo', 'Unpacking foo')
def test_match_package_deleted(self):
assert self.manager.match_package_deleted('foo', 'Removing foo')
def test_database_consistent(self):
self.manager.database_consistent()
def test_dump_reload_package_database(self):
self.manager.dump_reload_package_database()