]> git.proxmox.com Git - ceph.git/blame - ceph/src/ceph-volume/ceph_volume/tests/devices/raw/test_prepare.py
import ceph quincy 17.2.1
[ceph.git] / ceph / src / ceph-volume / ceph_volume / tests / devices / raw / test_prepare.py
CommitLineData
f6b5b4d7
TL
1import pytest
2from ceph_volume.devices import raw
3from mock.mock import patch
4
5
6class TestRaw(object):
7
8 def test_main_spits_help_with_no_arguments(self, capsys):
9 raw.main.Raw([]).main()
10 stdout, stderr = capsys.readouterr()
11 assert 'Manage a single-device OSD on a raw block device.' in stdout
12
13 def test_main_shows_activate_subcommands(self, capsys):
14 raw.main.Raw([]).main()
15 stdout, stderr = capsys.readouterr()
16 assert 'activate ' in stdout
17 assert 'Discover and prepare' in stdout
18
19 def test_main_shows_prepare_subcommands(self, capsys):
20 raw.main.Raw([]).main()
21 stdout, stderr = capsys.readouterr()
22 assert 'prepare ' in stdout
23 assert 'Format a raw device' in stdout
24
25
26class TestPrepare(object):
27
28 def test_main_spits_help_with_no_arguments(self, capsys):
29 raw.prepare.Prepare([]).main()
30 stdout, stderr = capsys.readouterr()
31 assert 'Prepare an OSD by assigning an ID and FSID' in stdout
32
33 def test_main_shows_full_help(self, capsys):
34 with pytest.raises(SystemExit):
35 raw.prepare.Prepare(argv=['--help']).main()
36 stdout, stderr = capsys.readouterr()
37 assert 'a raw device to use for the OSD' in stdout
38 assert 'Crush device class to assign this OSD to' in stdout
39 assert 'Use BlueStore backend' in stdout
40 assert 'Path to bluestore block.db block device' in stdout
41 assert 'Path to bluestore block.wal block device' in stdout
42 assert 'Enable device encryption via dm-crypt' in stdout
43
33c7a0ef 44 @patch('ceph_volume.util.arg_validators.ValidRawDevice.__call__')
f6b5b4d7
TL
45 def test_prepare_dmcrypt_no_secret_passed(self, m_valid_device, capsys):
46 m_valid_device.return_value = '/dev/foo'
47 with pytest.raises(SystemExit):
48 raw.prepare.Prepare(argv=['--bluestore', '--data', '/dev/foo', '--dmcrypt']).main()
49 stdout, stderr = capsys.readouterr()
50 assert 'CEPH_VOLUME_DMCRYPT_SECRET is not set, you must set' in stderr
51
52 @patch('ceph_volume.util.encryption.luks_open')
53 @patch('ceph_volume.util.encryption.luks_format')
54 @patch('ceph_volume.util.disk.lsblk')
55 def test_prepare_dmcrypt_block(self, m_lsblk, m_luks_format, m_luks_open):
56 m_lsblk.return_value = {'KNAME': 'foo'}
57 m_luks_format.return_value = True
58 m_luks_open.return_value = True
59 result = raw.prepare.prepare_dmcrypt('foo', '/dev/foo', 'block', '123')
60 m_luks_open.assert_called_with('foo', '/dev/foo', 'ceph-123-foo-block-dmcrypt')
61 m_luks_format.assert_called_with('foo', '/dev/foo')
62 assert result == '/dev/mapper/ceph-123-foo-block-dmcrypt'
63
64 @patch('ceph_volume.util.encryption.luks_open')
65 @patch('ceph_volume.util.encryption.luks_format')
66 @patch('ceph_volume.util.disk.lsblk')
67 def test_prepare_dmcrypt_db(self, m_lsblk, m_luks_format, m_luks_open):
68 m_lsblk.return_value = {'KNAME': 'foo'}
69 m_luks_format.return_value = True
70 m_luks_open.return_value = True
71 result = raw.prepare.prepare_dmcrypt('foo', '/dev/foo', 'db', '123')
72 m_luks_open.assert_called_with('foo', '/dev/foo', 'ceph-123-foo-db-dmcrypt')
73 m_luks_format.assert_called_with('foo', '/dev/foo')
74 assert result == '/dev/mapper/ceph-123-foo-db-dmcrypt'
75
76 @patch('ceph_volume.util.encryption.luks_open')
77 @patch('ceph_volume.util.encryption.luks_format')
78 @patch('ceph_volume.util.disk.lsblk')
79 def test_prepare_dmcrypt_wal(self, m_lsblk, m_luks_format, m_luks_open):
80 m_lsblk.return_value = {'KNAME': 'foo'}
81 m_luks_format.return_value = True
82 m_luks_open.return_value = True
83 result = raw.prepare.prepare_dmcrypt('foo', '/dev/foo', 'wal', '123')
84 m_luks_open.assert_called_with('foo', '/dev/foo', 'ceph-123-foo-wal-dmcrypt')
85 m_luks_format.assert_called_with('foo', '/dev/foo')
86 assert result == '/dev/mapper/ceph-123-foo-wal-dmcrypt'
87
88 @patch('ceph_volume.devices.raw.prepare.rollback_osd')
89 @patch('ceph_volume.devices.raw.prepare.Prepare.prepare')
33c7a0ef 90 @patch('ceph_volume.util.arg_validators.ValidRawDevice.__call__')
f6b5b4d7
TL
91 def test_safe_prepare_exception_raised(self, m_valid_device, m_prepare, m_rollback_osd):
92 m_valid_device.return_value = '/dev/foo'
93 m_prepare.side_effect=Exception('foo')
94 m_rollback_osd.return_value = 'foobar'
95 with pytest.raises(Exception):
96 raw.prepare.Prepare(argv=['--bluestore', '--data', '/dev/foo']).main()
97 m_rollback_osd.assert_called()