]>
git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_zap.py
3 from ceph_volume
.api
import lvm
as api
4 from ceph_volume
.devices
.lvm
import zap
7 class TestFindAssociatedDevices(object):
9 def test_no_lvs_found_that_match_id(self
, volumes
, monkeypatch
, device_info
):
10 monkeypatch
.setattr(zap
.api
, 'Volumes', lambda: volumes
)
11 tags
= 'ceph.osd_id=9,ceph.journal_uuid=x,ceph.type=data'
13 lv_name
='volume1', lv_uuid
='y', lv_path
='/dev/VolGroup/lv', vg_name
='vg', lv_tags
=tags
)
15 with pytest
.raises(RuntimeError):
16 zap
.find_associated_devices(osd_id
=10)
18 def test_no_lvs_found_that_match_fsid(self
, volumes
, monkeypatch
, device_info
):
19 monkeypatch
.setattr(zap
.api
, 'Volumes', lambda: volumes
)
20 tags
= 'ceph.osd_id=9,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=data'
22 lv_name
='volume1', lv_uuid
='y', lv_path
='/dev/VolGroup/lv', vg_name
='vg', lv_tags
=tags
)
24 with pytest
.raises(RuntimeError):
25 zap
.find_associated_devices(osd_fsid
='aaaa-lkjh')
27 def test_no_lvs_found_that_match_id_fsid(self
, volumes
, monkeypatch
, device_info
):
28 monkeypatch
.setattr(zap
.api
, 'Volumes', lambda: volumes
)
29 tags
= 'ceph.osd_id=9,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=data'
31 lv_name
='volume1', lv_uuid
='y', lv_path
='/dev/VolGroup/lv', vg_name
='vg', lv_tags
=tags
)
33 with pytest
.raises(RuntimeError):
34 zap
.find_associated_devices(osd_id
='9', osd_fsid
='aaaa-lkjh')
36 def test_no_ceph_lvs_found(self
, volumes
, monkeypatch
):
37 monkeypatch
.setattr(zap
.api
, 'Volumes', lambda: volumes
)
39 lv_name
='volume1', lv_uuid
='y', lv_path
='/dev/VolGroup/lv', lv_tags
='')
41 with pytest
.raises(RuntimeError):
42 zap
.find_associated_devices(osd_id
=100)
44 def test_lv_is_matched_id(self
, volumes
, monkeypatch
):
45 monkeypatch
.setattr(zap
.api
, 'Volumes', lambda: volumes
)
46 tags
= 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data'
48 lv_name
='volume1', lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/lv', lv_tags
=tags
)
50 result
= zap
.find_associated_devices(osd_id
='0')
51 assert result
[0].abspath
== '/dev/VolGroup/lv'
53 def test_lv_is_matched_fsid(self
, volumes
, monkeypatch
):
54 monkeypatch
.setattr(zap
.api
, 'Volumes', lambda: volumes
)
55 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=data'
57 lv_name
='volume1', lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/lv', lv_tags
=tags
)
59 result
= zap
.find_associated_devices(osd_fsid
='asdf-lkjh')
60 assert result
[0].abspath
== '/dev/VolGroup/lv'
62 def test_lv_is_matched_id_fsid(self
, volumes
, monkeypatch
):
63 monkeypatch
.setattr(zap
.api
, 'Volumes', lambda: volumes
)
64 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=data'
66 lv_name
='volume1', lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/lv', lv_tags
=tags
)
68 result
= zap
.find_associated_devices(osd_id
='0', osd_fsid
='asdf-lkjh')
69 assert result
[0].abspath
== '/dev/VolGroup/lv'
72 class TestEnsureAssociatedLVs(object):
74 def test_nothing_is_found(self
, volumes
):
75 result
= zap
.ensure_associated_lvs(volumes
)
78 def test_data_is_found(self
, volumes
):
79 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=data'
81 lv_name
='volume1', lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/data', lv_tags
=tags
)
83 result
= zap
.ensure_associated_lvs(volumes
)
84 assert result
== ['/dev/VolGroup/data']
86 def test_block_is_found(self
, volumes
):
87 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=block'
89 lv_name
='volume1', lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/block', lv_tags
=tags
)
91 result
= zap
.ensure_associated_lvs(volumes
)
92 assert result
== ['/dev/VolGroup/block']
94 def test_success_message_for_fsid(self
, factory
, is_root
, capsys
):
96 args
= factory(devices
=[], osd_id
=None, osd_fsid
='asdf-lkjh')
99 out
, err
= capsys
.readouterr()
100 assert "Zapping successful for OSD: asdf-lkjh" in err
102 def test_success_message_for_id(self
, factory
, is_root
, capsys
):
103 cli_zap
= zap
.Zap([])
104 args
= factory(devices
=[], osd_id
='1', osd_fsid
=None)
107 out
, err
= capsys
.readouterr()
108 assert "Zapping successful for OSD: 1" in err
110 def test_block_and_partition_are_found(self
, volumes
, monkeypatch
):
111 monkeypatch
.setattr(zap
.disk
, 'get_device_from_partuuid', lambda x
: '/dev/sdb1')
112 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=block'
114 lv_name
='volume1', lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/block', lv_tags
=tags
)
116 result
= zap
.ensure_associated_lvs(volumes
)
117 assert '/dev/sdb1' in result
118 assert '/dev/VolGroup/block' in result
120 def test_journal_is_found(self
, volumes
):
121 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=journal'
123 lv_name
='volume1', lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/lv', lv_tags
=tags
)
125 result
= zap
.ensure_associated_lvs(volumes
)
126 assert result
== ['/dev/VolGroup/lv']
128 def test_multiple_journals_are_found(self
, volumes
):
129 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=journal'
132 lv_name
='volume%s' % i
, lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/lv%s' % i
, lv_tags
=tags
)
134 result
= zap
.ensure_associated_lvs(volumes
)
135 assert '/dev/VolGroup/lv0' in result
136 assert '/dev/VolGroup/lv1' in result
137 assert '/dev/VolGroup/lv2' in result
139 def test_multiple_dbs_are_found(self
, volumes
):
140 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=db'
143 lv_name
='volume%s' % i
, lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/lv%s' % i
, lv_tags
=tags
)
145 result
= zap
.ensure_associated_lvs(volumes
)
146 assert '/dev/VolGroup/lv0' in result
147 assert '/dev/VolGroup/lv1' in result
148 assert '/dev/VolGroup/lv2' in result
150 def test_multiple_wals_are_found(self
, volumes
):
151 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.wal_uuid=x,ceph.type=wal'
154 lv_name
='volume%s' % i
, lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/lv%s' % i
, lv_tags
=tags
)
156 result
= zap
.ensure_associated_lvs(volumes
)
157 assert '/dev/VolGroup/lv0' in result
158 assert '/dev/VolGroup/lv1' in result
159 assert '/dev/VolGroup/lv2' in result
161 def test_multiple_backing_devs_are_found(self
, volumes
):
162 for _type
in ['journal', 'db', 'wal']:
163 tags
= 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.wal_uuid=x,ceph.type=%s' % _type
165 lv_name
='volume%s' % _type
, lv_uuid
='y', vg_name
='', lv_path
='/dev/VolGroup/lv%s' % _type
, lv_tags
=tags
)
167 result
= zap
.ensure_associated_lvs(volumes
)
168 assert '/dev/VolGroup/lvjournal' in result
169 assert '/dev/VolGroup/lvwal' in result
170 assert '/dev/VolGroup/lvdb' in result
173 class TestWipeFs(object):
176 os
.environ
['CEPH_VOLUME_WIPEFS_INTERVAL'] = '0'
178 def test_works_on_second_try(self
, stub_call
):
179 os
.environ
['CEPH_VOLUME_WIPEFS_TRIES'] = '2'
180 stub_call([('wiping /dev/sda', '', 1), ('', '', 0)])
181 result
= zap
.wipefs('/dev/sda')
182 assert result
is None
184 def test_does_not_work_after_several_tries(self
, stub_call
):
185 os
.environ
['CEPH_VOLUME_WIPEFS_TRIES'] = '2'
186 stub_call([('wiping /dev/sda', '', 1), ('', '', 1)])
187 with pytest
.raises(RuntimeError):
188 zap
.wipefs('/dev/sda')
190 def test_does_not_work_default_tries(self
, stub_call
):
191 stub_call([('wiping /dev/sda', '', 1)]*8)
192 with pytest
.raises(RuntimeError):
193 zap
.wipefs('/dev/sda')