This commit creates the .append file for PXE images. This file is only created for initrd based images and includes the UUID of the rootfs and any parameter added by the user within the 'kernelcmdline' attribute. Fixes #1327
161 lines
5.2 KiB
Python
161 lines
5.2 KiB
Python
from collections import namedtuple
|
|
from mock import (
|
|
patch, Mock, MagicMock, mock_open
|
|
)
|
|
from pytest import (
|
|
raises, fixture
|
|
)
|
|
import kiwi
|
|
|
|
from kiwi.builder.pxe import PxeBuilder
|
|
from kiwi.exceptions import KiwiPxeBootImageError
|
|
|
|
|
|
class TestPxeBuilder:
|
|
@fixture(autouse=True)
|
|
def inject_fixtures(self, caplog):
|
|
self._caplog = caplog
|
|
|
|
@patch('kiwi.builder.pxe.FileSystemBuilder')
|
|
@patch('kiwi.builder.pxe.BootImage')
|
|
def setup(self, mock_boot, mock_filesystem):
|
|
self.setup = Mock()
|
|
kiwi.builder.pxe.SystemSetup = Mock(
|
|
return_value=self.setup
|
|
)
|
|
self.boot_image_task = MagicMock()
|
|
self.boot_image_task.boot_root_directory = 'initrd_dir'
|
|
self.boot_image_task.initrd_filename = 'initrd_file_name'
|
|
mock_boot.return_value = self.boot_image_task
|
|
self.filesystem = MagicMock()
|
|
self.filesystem.filename = 'myimage.fs'
|
|
self.filesystem.root_uuid = 'some_uuid'
|
|
mock_filesystem.return_value = self.filesystem
|
|
self.xml_state = Mock()
|
|
self.xml_state.get_image_version = Mock(
|
|
return_value='1.2.3'
|
|
)
|
|
self.xml_state.get_initrd_system = Mock(
|
|
return_value='dracut'
|
|
)
|
|
self.xml_state.xml_data.get_name = Mock(
|
|
return_value='some-image'
|
|
)
|
|
self.xml_state.build_type = Mock()
|
|
self.xml_state.build_type.get_kernelcmdline = Mock(
|
|
return_value='console=hvc0'
|
|
)
|
|
kernel_type = namedtuple(
|
|
'kernel', ['filename', 'version']
|
|
)
|
|
xen_type = namedtuple(
|
|
'xen', ['filename', 'name']
|
|
)
|
|
self.kernel = Mock()
|
|
self.kernel.get_kernel = Mock(
|
|
return_value=kernel_type(filename='some-kernel', version='42')
|
|
)
|
|
self.kernel.get_xen_hypervisor = Mock(
|
|
return_value=xen_type(filename='hypervisor', name='xen.gz')
|
|
)
|
|
kiwi.builder.pxe.Kernel = Mock(
|
|
return_value=self.kernel
|
|
)
|
|
self.pxe = PxeBuilder(
|
|
self.xml_state, 'target_dir', 'root_dir',
|
|
custom_args={'signing_keys': ['key_file_a', 'key_file_b']}
|
|
)
|
|
self.pxe.image_name = 'myimage'
|
|
self.pxe.compressed = True
|
|
|
|
@patch('kiwi.builder.pxe.Checksum')
|
|
@patch('kiwi.builder.pxe.Compress')
|
|
@patch('kiwi.builder.pxe.ArchiveTar')
|
|
@patch('os.rename')
|
|
def test_create(
|
|
self, mock_rename, mock_tar, mock_compress, mock_checksum
|
|
):
|
|
tar = Mock()
|
|
mock_tar.return_value = tar
|
|
compress = Mock()
|
|
mock_compress.return_value = compress
|
|
compress.compressed_filename = 'compressed-file-name'
|
|
checksum = Mock()
|
|
mock_checksum.return_value = checksum
|
|
self.boot_image_task.required = Mock(
|
|
return_value=True
|
|
)
|
|
|
|
m_open = mock_open()
|
|
with patch('builtins.open', m_open, create=True):
|
|
self.pxe.create()
|
|
|
|
m_open.assert_called_once_with(
|
|
'target_dir/some-image.x86_64-1.2.3.append', 'w'
|
|
)
|
|
m_open.return_value.write.assert_called_once_with(
|
|
'root=UUID=some_uuid console=hvc0'
|
|
)
|
|
|
|
self.filesystem.create.assert_called_once_with()
|
|
mock_rename.assert_called_once_with(
|
|
'myimage.fs', 'myimage'
|
|
)
|
|
compress.xz.assert_called_once_with(None)
|
|
checksum.md5.assert_called_once_with(
|
|
'target_dir/some-image.x86_64-1.2.3.md5'
|
|
)
|
|
self.boot_image_task.prepare.assert_called_once_with()
|
|
self.setup.export_modprobe_setup.assert_called_once_with(
|
|
'initrd_dir'
|
|
)
|
|
self.boot_image_task.create_initrd.assert_called_once_with()
|
|
self.setup.export_package_list.assert_called_once_with(
|
|
'target_dir'
|
|
)
|
|
self.setup.export_package_verification.assert_called_once_with(
|
|
'target_dir'
|
|
)
|
|
|
|
tar.create.assert_called_once_with('target_dir')
|
|
|
|
self.pxe.compressed = False
|
|
|
|
m_open = mock_open()
|
|
with patch('builtins.open', m_open, create=True):
|
|
self.pxe.create()
|
|
|
|
m_open.return_value.write.assert_called_once_with(
|
|
'root=UUID=some_uuid console=hvc0'
|
|
)
|
|
|
|
tar.create_xz_compressed.assert_called_once_with(
|
|
'target_dir', xz_options=['--threads=0']
|
|
)
|
|
|
|
@patch('kiwi.builder.pxe.Checksum')
|
|
@patch('kiwi.builder.pxe.Compress')
|
|
@patch('os.rename')
|
|
def test_create_no_kernel_found(
|
|
self, mock_rename, mock_compress, mock_checksum
|
|
):
|
|
compress = Mock()
|
|
mock_compress.return_value = compress
|
|
compress.compressed_filename = 'compressed-file-name'
|
|
self.kernel.get_kernel.return_value = False
|
|
with raises(KiwiPxeBootImageError):
|
|
self.pxe.create()
|
|
|
|
@patch('kiwi.builder.pxe.Checksum')
|
|
@patch('kiwi.builder.pxe.Compress')
|
|
@patch('os.rename')
|
|
def test_create_no_hypervisor_found(
|
|
self, mock_rename, mock_compress, mock_checksum
|
|
):
|
|
compress = Mock()
|
|
mock_compress.return_value = compress
|
|
compress.compressed_filename = 'compressed-file-name'
|
|
self.kernel.get_xen_hypervisor.return_value = False
|
|
with raises(KiwiPxeBootImageError):
|
|
self.pxe.create()
|