]>
Commit | Line | Data |
---|---|---|
f6b5b4d7 TL |
1 | import pytest |
2 | from ceph_volume.devices import raw | |
3 | from mock.mock import patch | |
4 | ||
5 | ||
6 | class 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 | ||
26 | class 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() |