kiwi-el8/test/unit/system_root_init_test.py
2017-03-07 13:03:10 +01:00

147 lines
4.8 KiB
Python

from mock import patch
from mock import call
import mock
from .test_helper import raises
from kiwi.exceptions import (
KiwiRootDirExists,
KiwiRootInitCreationError
)
from kiwi.system.root_init import RootInit
class TestRootInit(object):
@raises(KiwiRootDirExists)
@patch('os.path.exists')
def test_init_raises_error(self, mock_path):
mock_path.return_value = True
RootInit('root_dir')
@raises(KiwiRootInitCreationError)
@patch('os.path.exists')
@patch('os.makedirs')
@patch('os.chown')
@patch('os.mknod')
@patch('os.symlink')
@patch('shutil.rmtree')
@patch('kiwi.system.root_init.DataSync')
@patch('kiwi.system.root_init.mkdtemp')
def test_create_raises_error(
self, mock_temp, mock_data_sync, mock_rmtree, mock_symlink,
mock_mknod, mock_chwon, mock_makedirs, mock_path
):
mock_path.return_value = False
mock_temp.return_value = 'tmpdir'
mock_data_sync.side_effect = Exception
root = RootInit('root_dir')
root.create()
@patch('os.path.exists')
@patch('os.makedirs')
@patch('os.chown')
@patch('os.mknod')
@patch('os.symlink')
@patch('os.makedev')
@patch('kiwi.system.root_init.rmtree')
@patch('kiwi.system.root_init.DataSync')
@patch('kiwi.system.root_init.mkdtemp')
@patch('kiwi.system.root_init.Command.run')
def test_create(
self, mock_command, mock_temp, mock_data_sync, mock_rmtree,
mock_makedev, mock_symlink, mock_mknod, mock_chwon, mock_makedirs,
mock_path
):
data_sync = mock.Mock()
mock_data_sync.return_value = data_sync
mock_makedev.return_value = 'makedev'
mock_path_return = [
True, True, True, False, False, False, False, False, False, False
]
def path_exists(self):
return mock_path_return.pop()
mock_path.side_effect = path_exists
mock_path.return_value = False
mock_temp.return_value = 'tmpdir'
root = RootInit('root_dir', True)
root.create()
assert mock_makedirs.call_args_list == [
call('tmpdir/var/cache/kiwi'),
call('tmpdir/dev/pts'),
call('tmpdir/proc'),
call('tmpdir/etc/sysconfig'),
call('tmpdir/run'),
call('tmpdir/sys'),
call('tmpdir/var')
]
assert mock_chwon.call_args_list == [
call('tmpdir/var/cache/kiwi', 0, 0),
call('tmpdir/dev/pts', 0, 0),
call('tmpdir/proc', 0, 0),
call('tmpdir/etc/sysconfig', 0, 0),
call('tmpdir/run', 0, 0),
call('tmpdir/sys', 0, 0),
call('tmpdir/var', 0, 0)
]
assert mock_mknod.call_args_list == [
call('tmpdir/dev/null', 8630, 'makedev'),
call('tmpdir/dev/zero', 8630, 'makedev'),
call('tmpdir/dev/full', 8594, 'makedev'),
call('tmpdir/dev/random', 8630, 'makedev'),
call('tmpdir/dev/urandom', 8612, 'makedev'),
call('tmpdir/dev/tty', 8630, 'makedev'),
call('tmpdir/dev/ptmx', 8630, 'makedev'),
call('tmpdir/dev/loop0', 24992, 'makedev'),
call('tmpdir/dev/loop1', 24992, 'makedev'),
call('tmpdir/dev/loop2', 24992, 'makedev'),
call('tmpdir/dev/loop3', 25014, 'makedev'),
call('tmpdir/dev/loop4', 25014, 'makedev')
]
assert mock_symlink.call_args_list == [
call('/proc/self/fd', 'tmpdir/dev/fd'),
call('fd/2', 'tmpdir/dev/stderr'),
call('fd/0', 'tmpdir/dev/stdin'),
call('fd/1', 'tmpdir/dev/stdout'),
call('/run', 'tmpdir/var/run')
]
assert mock_command.call_args_list == [
call([
'cp',
'/var/adm/fillup-templates/group.aaa_base',
'tmpdir/etc/group'
]),
call([
'cp',
'/var/adm/fillup-templates/passwd.aaa_base',
'tmpdir/etc/passwd'
]),
call([
'cp',
'/var/adm/fillup-templates/sysconfig.proxy',
'tmpdir/etc/sysconfig/proxy'
])
]
mock_data_sync.assert_called_once_with(
'tmpdir/', 'root_dir'
)
data_sync.sync_data.assert_called_once_with(
options=['-a', '--ignore-existing']
)
mock_rmtree.assert_called_once_with(
'tmpdir', ignore_errors=True
)
@patch('kiwi.command.Command.run')
@patch('os.path.exists')
def test_delete(self, mock_path, mock_command):
mock_path.return_value = False
root = RootInit('root_dir')
root.delete()
mock_command.assert_called_once_with(
['rm', '-r', '-f', 'root_dir']
)