kiwi-el8/test/unit/tasks_image_resize_test.py
Marcus Schäfer a4e582eb6d
Resize partition table after image resize
The command 'kiwi image resize' allows to resize the size
of a disk image. Depending on the partition table type it
is also required to resize the partition table inside of
the image to let the file size change become effective
This Fixes #534
2018-03-06 11:24:25 +01:00

157 lines
5.5 KiB
Python

import sys
import mock
from mock import call
import os
import kiwi
from .test_helper import raises, patch, argv_kiwi_tests
from kiwi.exceptions import (
KiwiImageResizeError,
KiwiSizeError,
KiwiConfigFileNotFound
)
from kiwi.tasks.image_resize import ImageResizeTask
class TestImageResizeTask(object):
def setup(self):
sys.argv = [
sys.argv[0], '--type', 'vmx', 'image', 'resize',
'--target-dir', 'target_dir', '--size', '20g',
'--root', '../data/root-dir'
]
self.abs_root_dir = os.path.abspath('../data/root-dir')
kiwi.tasks.image_resize.Help = mock.Mock(
return_value=mock.Mock()
)
self.firmware = mock.Mock()
self.firmware.get_partition_table_type = mock.Mock(
return_value='gpt'
)
self.partitioner = mock.Mock()
self.loop_provider = mock.Mock()
self.image_format = mock.Mock()
self.image_format.has_raw_disk = mock.Mock()
self.image_format.diskname = 'some-disk.raw'
kiwi.tasks.image_resize.DiskFormat = mock.Mock(
return_value=self.image_format
)
kiwi.tasks.image_resize.FirmWare = mock.Mock(
return_value=self.firmware
)
kiwi.tasks.image_resize.LoopDevice = mock.Mock(
return_value=self.loop_provider
)
kiwi.tasks.image_resize.Partitioner = mock.Mock(
return_value=self.partitioner
)
self.task = ImageResizeTask()
def teardown(self):
sys.argv = argv_kiwi_tests
def _init_command_args(self):
self.task.command_args = {}
self.task.command_args['help'] = False
self.task.command_args['resize'] = False
self.task.command_args['--target-dir'] = 'target_dir'
self.task.command_args['--size'] = '42g'
self.task.command_args['--root'] = '../data/root-dir'
@raises(KiwiConfigFileNotFound)
def test_process_no_root_directory_specified(self):
self.task.command_args['--root'] = None
self.task.process()
@raises(KiwiImageResizeError)
def test_process_no_raw_disk_found(self):
self._init_command_args()
self.image_format.has_raw_disk.return_value = False
self.task.command_args['resize'] = True
self.task.process()
@raises(KiwiSizeError)
def test_process_unsupported_size_format(self):
self._init_command_args()
self.task.command_args['--size'] = '20x'
self.image_format.has_raw_disk.return_value = True
self.task.command_args['resize'] = True
self.task.process()
def test_process_image_resize_gb(self):
self._init_command_args()
self.task.command_args['resize'] = True
self.image_format.resize_raw_disk.return_value = True
self.task.process()
self.loop_provider.create.assert_called_once_with(overwrite=False)
self.partitioner.resize_table.assert_called_once_with()
self.image_format.resize_raw_disk.assert_called_once_with(
42 * 1024 * 1024 * 1024
)
self.image_format.create_image_format.assert_called_once_with()
def test_process_image_resize_mb(self):
self._init_command_args()
self.task.command_args['resize'] = True
self.task.command_args['--size'] = '42m'
self.image_format.resize_raw_disk.return_value = True
self.task.process()
self.loop_provider.create.assert_called_once_with(overwrite=False)
self.partitioner.resize_table.assert_called_once_with()
self.image_format.resize_raw_disk.assert_called_once_with(
42 * 1024 * 1024
)
self.image_format.create_image_format.assert_called_once_with()
def test_process_image_resize_bytes(self):
self._init_command_args()
self.task.command_args['resize'] = True
self.task.command_args['--size'] = '42'
self.image_format.resize_raw_disk.return_value = True
self.task.process()
self.loop_provider.create.assert_called_once_with(overwrite=False)
self.partitioner.resize_table.assert_called_once_with()
self.image_format.resize_raw_disk.assert_called_once_with(
42
)
self.image_format.create_image_format.assert_called_once_with()
@patch('kiwi.logger.log.info')
def test_process_image_resize_not_needed(self, mock_log_info):
self._init_command_args()
self.task.command_args['resize'] = True
self.task.command_args['--size'] = '42'
self.image_format.resize_raw_disk.return_value = False
self.task.process()
self.loop_provider.create.assert_called_once_with(overwrite=False)
self.partitioner.resize_table.assert_called_once_with()
self.image_format.resize_raw_disk.assert_called_once_with(
42
)
assert mock_log_info.call_args_list == [
call('Loading XML description'),
call(
'--> loaded %s',
os.sep.join([self.abs_root_dir, 'image', 'config.xml'])
),
call('--> Selected build type: %s', 'vmx'),
call('--> Selected profiles: %s', 'vmxFlavour'),
call('Resizing raw disk to 42 bytes'),
call('Raw disk is already at 42 bytes')
]
def test_process_image_resize_help(self):
self._init_command_args()
self.task.command_args['help'] = True
self.task.command_args['resize'] = True
self.task.process()
self.task.manual.show.assert_called_once_with(
'kiwi::image::resize'
)