]>
git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/raw/test_prepare.py
2 from ceph_volume
.devices
import raw
3 from mock
.mock
import patch
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
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
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
26 class TestPrepare(object):
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
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
44 @patch('ceph_volume.util.arg_validators.ValidRawDevice.__call__')
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
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'
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'
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'
88 @patch('ceph_volume.devices.raw.prepare.rollback_osd')
89 @patch('ceph_volume.devices.raw.prepare.Prepare.prepare')
90 @patch('ceph_volume.util.arg_validators.ValidRawDevice.__call__')
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()