kiwi-el8/test/unit/storage/luks_device_test.py
David Cassany 4b3a105026
Re-structure unit tests folders
This commit relocates unit tests to a folder structure that matches
the source code structure.

Fixes #1128
2019-10-21 14:00:05 +02:00

128 lines
4.7 KiB
Python

import io
from mock import (
patch, call, MagicMock, Mock
)
from pytest import raises
from kiwi.exceptions import KiwiLuksSetupError
from kiwi.storage.luks_device import LuksDevice
class TestLuksDevice:
def setup(self):
storage_device = Mock()
storage_device.get_byte_size = Mock(
return_value=1048576
)
storage_device.get_uuid = Mock(
return_value='0815'
)
storage_device.get_device = Mock(
return_value='/dev/some-device'
)
storage_device.is_loop = Mock(
return_value=True
)
self.luks = LuksDevice(storage_device)
def test_create_crypto_luks_empty_passphrase(self):
with raises(KiwiLuksSetupError):
self.luks.create_crypto_luks('')
def test_create_crypto_luks_unsupported_os_options(self):
with raises(KiwiLuksSetupError):
self.luks.create_crypto_luks('passphrase', 'some-os')
@patch('os.path.exists')
def test_get_device(self, mock_path):
mock_path.return_value = True
self.luks.luks_device = '/dev/mapper/luksRoot'
assert self.luks.get_device().get_device() == '/dev/mapper/luksRoot'
self.luks.luks_device = None
@patch('kiwi.storage.luks_device.Command.run')
@patch('kiwi.storage.luks_device.NamedTemporaryFile')
def test_create_crypto_luks(self, mock_tmpfile, mock_command):
tmpfile = Mock()
tmpfile.name = 'tmpfile'
mock_tmpfile.return_value = tmpfile
with patch('builtins.open', create=True):
self.luks.create_crypto_luks(
passphrase='passphrase', os='sle12', keyfile='some-keyfile'
)
assert mock_command.call_args_list == [
call(
[
'dd', 'if=/dev/urandom', 'bs=1M', 'count=1',
'of=/dev/some-device'
]
),
call(
[
'cryptsetup', '-q', '--key-file', 'tmpfile',
'--cipher', 'aes-xts-plain64',
'--key-size', '256', '--hash', 'sha1',
'luksFormat', '/dev/some-device'
]
),
call(
[
'cryptsetup', '--key-file', 'tmpfile', 'luksAddKey',
'/dev/some-device', 'some-keyfile'
]
),
call(
[
'cryptsetup', '--key-file', 'tmpfile', 'luksOpen',
'/dev/some-device', 'luksRoot'
]
)
]
self.luks.luks_device = None
def test_create_crypttab(self):
self.luks.luks_device = '/dev/mapper/luksRoot'
self.luks.luks_keyfile = None
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.luks.create_crypttab('crypttab')
file_handle.write.assert_called_once_with(
'luks UUID=0815\n'
)
self.luks.luks_device = None
self.luks.luks_keyfile = 'some-keyfile'
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.luks.create_crypttab('crypttab')
file_handle.write.assert_called_once_with(
'luks UUID=0815 /some-keyfile\n'
)
self.luks.luks_device = None
@patch('os.urandom')
def test_create_random_keyfile(self, mock_os_urandom):
secret = b'secret'
mock_os_urandom.return_value = secret
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
LuksDevice.create_random_keyfile('some-file')
file_handle.write.assert_called_once_with(secret)
def test_is_loop(self):
assert self.luks.is_loop() is True
@patch('kiwi.storage.luks_device.Command.run')
@patch('kiwi.storage.luks_device.log.warning')
def test_destructor(self, mock_log_warn, mock_command):
self.luks.luks_device = '/dev/mapper/luksRoot'
mock_command.side_effect = Exception
self.luks.__del__()
mock_command.assert_called_once_with(
['cryptsetup', 'luksClose', 'luksRoot']
)
assert mock_log_warn.called
self.luks.luks_device = None