kiwi-el8/test/unit/container/appx_test.py
Marcus Schäfer 44a1d78e96
Added new image type: wsl
Support for building appx container images for
Windows Subsystem Linux (WSL). This Fixes #1235
2020-03-26 19:42:25 +01:00

79 lines
2.9 KiB
Python

import io
from pytest import raises
from mock import (
patch, Mock, MagicMock, call
)
from kiwi.container.appx import ContainerImageAppx
from kiwi.exceptions import KiwiContainerSetupError
class TestContainerImageAppx:
@patch('kiwi.container.appx.RuntimeConfig')
@patch('os.path.exists')
def setup(self, mock_os_path_exists, mock_RuntimeConfig):
mock_os_path_exists.return_value = True
self.appx = ContainerImageAppx(
'root_dir', {
'metadata_path': 'meta/data'
}
)
@patch('kiwi.container.appx.RuntimeConfig')
@patch('os.path.exists')
def test_init_raises(self, mock_os_path_exists, mock_RuntimeConfig):
mock_os_path_exists.return_value = True
with raises(KiwiContainerSetupError):
ContainerImageAppx('root_dir', custom_args=None)
mock_os_path_exists.return_value = False
with raises(KiwiContainerSetupError):
ContainerImageAppx(
'root_dir', custom_args={
'metadata_path': 'meta/data'
}
)
@patch('kiwi.container.appx.ArchiveTar')
@patch('kiwi.container.appx.Compress')
@patch('kiwi.container.appx.Defaults.get_exclude_list_for_root_data_sync')
@patch('kiwi.container.appx.NamedTemporaryFile')
@patch('kiwi.container.appx.Command.run')
@patch('os.walk')
def test_create(
self, mock_os_walk, mock_Command_run, mock_NamedTemporaryFile,
mock_get_exclude_list_for_root_data_sync,
mock_Compress, mock_ArchiveTar
):
mock_os_walk.return_value = [
('source', ['bar', 'baz'], []),
('source/bar', [], []),
('source/baz', [], ['baz_file'])
]
tempfile = Mock()
tempfile.name = 'tempfile'
mock_NamedTemporaryFile.return_value = tempfile
archive = Mock()
mock_ArchiveTar.return_value = archive
compress = Mock()
mock_Compress.return_value = compress
with patch('builtins.open', create=True) as mock_open:
mock_open.return_value = MagicMock(spec=io.IOBase)
file_handle = mock_open.return_value.__enter__.return_value
self.appx.create('target_dir/image.appx')
assert file_handle.write.call_args_list == [
call('[Files]\n'),
call('"source/baz/baz_file" "baz_file"\n')
]
mock_ArchiveTar.assert_called_once_with('meta/data/install.tar')
archive.create.assert_called_once_with(
'root_dir',
exclude=mock_get_exclude_list_for_root_data_sync.return_value
)
mock_Compress.assert_called_once_with(
archive.create.return_value
)
compress.gzip.assert_called_once_with()
mock_Command_run.assert_called_once_with(
['appx', '-o', 'target_dir/image.appx', '-f', 'tempfile']
)