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