]> git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_prepare.py
dd902866884ba2785e12b2acea194191f06eda07
[ceph.git] / ceph / src / ceph-volume / ceph_volume / tests / devices / lvm / test_prepare.py
1 import pytest
2 from ceph_volume.devices import lvm
3 from mock.mock import patch, Mock
4
5
6 class TestLVM(object):
7
8 def test_main_spits_help_with_no_arguments(self, capsys):
9 lvm.main.LVM([]).main()
10 stdout, stderr = capsys.readouterr()
11 assert 'Use LVM and LVM-based technologies like dmcache to deploy' in stdout
12
13 def test_main_shows_activate_subcommands(self, capsys):
14 lvm.main.LVM([]).main()
15 stdout, stderr = capsys.readouterr()
16 assert 'activate ' in stdout
17 assert 'Discover and mount' in stdout
18
19 def test_main_shows_prepare_subcommands(self, capsys):
20 lvm.main.LVM([]).main()
21 stdout, stderr = capsys.readouterr()
22 assert 'prepare ' in stdout
23 assert 'Format an LVM device' in stdout
24
25
26 class TestPrepareDevice(object):
27
28 def test_cannot_use_device(self, factory):
29 args = factory(data='/dev/var/foo')
30 with pytest.raises(RuntimeError) as error:
31 p = lvm.prepare.Prepare([])
32 p.args = args
33 p.prepare_data_device( 'data', '0')
34 assert 'Cannot use device (/dev/var/foo)' in str(error.value)
35 assert 'A vg/lv path or an existing device is needed' in str(error.value)
36
37
38 class TestGetClusterFsid(object):
39
40 def test_fsid_is_passed_in(self, factory):
41 args = factory(cluster_fsid='aaaa-1111')
42 prepare_obj = lvm.prepare.Prepare([])
43 prepare_obj.args = args
44 assert prepare_obj.get_cluster_fsid() == 'aaaa-1111'
45
46 def test_fsid_is_read_from_ceph_conf(self, factory, conf_ceph_stub):
47 conf_ceph_stub('[global]\nfsid = bbbb-2222')
48 prepare_obj = lvm.prepare.Prepare([])
49 prepare_obj.args = factory(cluster_fsid=None)
50 assert prepare_obj.get_cluster_fsid() == 'bbbb-2222'
51
52
53 class TestPrepare(object):
54
55 def test_main_spits_help_with_no_arguments(self, capsys):
56 lvm.prepare.Prepare([]).main()
57 stdout, stderr = capsys.readouterr()
58 assert 'Prepare an OSD by assigning an ID and FSID' in stdout
59
60 def test_main_shows_full_help(self, capsys):
61 with pytest.raises(SystemExit):
62 lvm.prepare.Prepare(argv=['--help']).main()
63 stdout, stderr = capsys.readouterr()
64 assert 'Use the filestore objectstore' in stdout
65 assert 'Use the bluestore objectstore' in stdout
66 assert 'A physical device or logical' in stdout
67
68 def test_excludes_filestore_bluestore_flags(self, capsys, device_info):
69 device_info()
70 with pytest.raises(SystemExit):
71 lvm.prepare.Prepare(argv=['--data', '/dev/sdfoo', '--filestore', '--bluestore']).main()
72 stdout, stderr = capsys.readouterr()
73 expected = 'Cannot use --filestore (filestore) with --bluestore (bluestore)'
74 assert expected in stderr
75
76 def test_excludes_other_filestore_bluestore_flags(self, capsys, device_info):
77 device_info()
78 with pytest.raises(SystemExit):
79 lvm.prepare.Prepare(argv=[
80 '--bluestore', '--data', '/dev/sdfoo',
81 '--journal', '/dev/sf14',
82 ]).main()
83 stdout, stderr = capsys.readouterr()
84 expected = 'Cannot use --bluestore (bluestore) with --journal (filestore)'
85 assert expected in stderr
86
87 def test_excludes_block_and_journal_flags(self, capsys, device_info):
88 device_info()
89 with pytest.raises(SystemExit):
90 lvm.prepare.Prepare(argv=[
91 '--bluestore', '--data', '/dev/sdfoo', '--block.db', 'vg/ceph1',
92 '--journal', '/dev/sf14',
93 ]).main()
94 stdout, stderr = capsys.readouterr()
95 expected = 'Cannot use --block.db (bluestore) with --journal (filestore)'
96 assert expected in stderr
97
98 def test_journal_is_required_with_filestore(self, is_root, monkeypatch, device_info):
99 monkeypatch.setattr("os.path.exists", lambda path: True)
100 device_info()
101 with pytest.raises(SystemExit) as error:
102 lvm.prepare.Prepare(argv=['--filestore', '--data', '/dev/sdfoo']).main()
103 expected = '--journal is required when using --filestore'
104 assert expected in str(error.value)
105
106 @patch('ceph_volume.devices.lvm.prepare.api.is_ceph_device')
107 def test_safe_prepare_osd_already_created(self, m_is_ceph_device):
108 m_is_ceph_device.return_value = True
109 with pytest.raises(RuntimeError) as error:
110 prepare = lvm.prepare.Prepare(argv=[])
111 prepare.args = Mock()
112 prepare.args.data = '/dev/sdfoo'
113 prepare.get_lv = Mock()
114 prepare.safe_prepare()
115 expected = 'skipping {}, it is already prepared'.format('/dev/sdfoo')
116 assert expected in str(error.value)
117
118 class TestActivate(object):
119
120 def test_main_spits_help_with_no_arguments(self, capsys):
121 lvm.activate.Activate([]).main()
122 stdout, stderr = capsys.readouterr()
123 assert 'Activate OSDs by discovering them with' in stdout
124
125 def test_main_shows_full_help(self, capsys):
126 with pytest.raises(SystemExit):
127 lvm.activate.Activate(argv=['--help']).main()
128 stdout, stderr = capsys.readouterr()
129 assert 'optional arguments' in stdout
130 assert 'positional arguments' in stdout