From 27bd05e916c26d29f8e8429e1f87b9fe20b19dd5 Mon Sep 17 00:00:00 2001 From: Rishabh Dave Date: Wed, 4 Dec 2019 12:58:19 +0530 Subject: [PATCH] ceph-volume: update tests since listing.py got heavily modified Signed-off-by: Rishabh Dave (cherry picked from commit d1ae6d1a8b495adfc0c512f08359e0db1590272d) --- src/ceph-volume/ceph_volume/tests/conftest.py | 2 + .../tests/devices/lvm/test_listing.py | 232 +++++++++++------- 2 files changed, 142 insertions(+), 92 deletions(-) diff --git a/src/ceph-volume/ceph_volume/tests/conftest.py b/src/ceph-volume/ceph_volume/tests/conftest.py index 1c2e5203bdbbd..700dc6c6b53d9 100644 --- a/src/ceph-volume/ceph_volume/tests/conftest.py +++ b/src/ceph-volume/ceph_volume/tests/conftest.py @@ -166,12 +166,14 @@ def stub_vgs(monkeypatch, volume_groups): return apply +# TODO: allow init-ing pvolumes to list we want @pytest.fixture def pvolumes(monkeypatch): monkeypatch.setattr('ceph_volume.process.call', lambda x, **kw: ('', '', 0)) pvolumes = lvm_api.PVolumes() pvolumes._purge() return pvolumes + @pytest.fixture def pvolumes_empty(monkeypatch): monkeypatch.setattr('ceph_volume.process.call', lambda x, **kw: ('', '', 0)) diff --git a/src/ceph-volume/ceph_volume/tests/devices/lvm/test_listing.py b/src/ceph-volume/ceph_volume/tests/devices/lvm/test_listing.py index efbb460f96033..bd460cc0e817d 100644 --- a/src/ceph-volume/ceph_volume/tests/devices/lvm/test_listing.py +++ b/src/ceph-volume/ceph_volume/tests/devices/lvm/test_listing.py @@ -2,6 +2,11 @@ import pytest from ceph_volume.devices import lvm from ceph_volume.api import lvm as api +# TODO: add tests for following commands - +# ceph-volume list +# ceph-volume list +# ceph-volume list +# ceph-volume list class TestReadableTag(object): @@ -57,13 +62,15 @@ class TestPrettyReport(object): class TestList(object): - def test_empty_full_json_zero_exit_status(self, is_root, volumes, factory, capsys): + def test_empty_full_json_zero_exit_status(self, is_root, volumes, + factory, capsys): args = factory(format='json', device=None) lvm.listing.List([]).list(args) stdout, stderr = capsys.readouterr() assert stdout == '{}\n' - def test_empty_device_json_zero_exit_status(self, is_root, volumes, factory, capsys): + def test_empty_device_json_zero_exit_status(self, is_root, volumes, + factory, capsys): args = factory(format='json', device='/dev/sda1') lvm.listing.List([]).list(args) stdout, stderr = capsys.readouterr() @@ -101,31 +108,49 @@ class TestFullReport(object): def test_no_ceph_lvs(self, volumes, monkeypatch): # ceph lvs are detected by looking into its tags - osd = api.Volume(lv_name='volume1', lv_path='/dev/VolGroup/lv', lv_tags={}) + osd = api.Volume(lv_name='volume1', lv_path='/dev/VolGroup/lv', + lv_tags={}) volumes.append(osd) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).full_report() assert result == {} - def test_ceph_data_lv_reported(self, volumes, monkeypatch): + def test_ceph_data_lv_reported(self, pvolumes, volumes, monkeypatch): tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data' - osd = api.Volume( - lv_name='volume1', lv_uuid='y', lv_path='/dev/VolGroup/lv', lv_tags=tags) + pv = api.PVolume(pv_name='/dev/sda1', pv_tags={}, pv_uuid="0000", + vg_name='VolGroup', lv_uuid="aaaa") + osd = api.Volume(lv_name='volume1', lv_uuid='y', lv_tags=tags, + lv_path='/dev/VolGroup/lv', vg_name='VolGroup') + pvolumes.append(pv) volumes.append(osd) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_pvs', lambda **kwargs: + pvolumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).full_report() assert result['0'][0]['name'] == 'volume1' - def test_ceph_journal_lv_reported(self, volumes, monkeypatch): + def test_ceph_journal_lv_reported(self, pvolumes, volumes, monkeypatch): tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data' journal_tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=journal' - osd = api.Volume( - lv_name='volume1', lv_uuid='y', lv_path='/dev/VolGroup/lv', lv_tags=tags) + pv = api.PVolume(pv_name='/dev/sda1', pv_tags={}, pv_uuid="0000", + vg_name="VolGroup", lv_uuid="aaaa") + osd = api.Volume(lv_name='volume1', lv_uuid='y', lv_tags=tags, + lv_path='/dev/VolGroup/lv', vg_name='VolGroup') journal = api.Volume( - lv_name='journal', lv_uuid='x', lv_path='/dev/VolGroup/journal', lv_tags=journal_tags) + lv_name='journal', lv_uuid='x', lv_tags=journal_tags, + lv_path='/dev/VolGroup/journal', vg_name='VolGroup') + pvolumes.append(pv) volumes.append(osd) volumes.append(journal) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_pvs', lambda **kwargs: + pvolumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).full_report() assert result['0'][0]['name'] == 'volume1' assert result['0'][1]['name'] == 'journal' @@ -133,36 +158,50 @@ class TestFullReport(object): def test_ceph_wal_lv_reported(self, volumes, monkeypatch): tags = 'ceph.osd_id=0,ceph.wal_uuid=x,ceph.type=data' wal_tags = 'ceph.osd_id=0,ceph.wal_uuid=x,ceph.type=wal' - osd = api.Volume( - lv_name='volume1', lv_uuid='y', lv_path='/dev/VolGroup/lv', lv_tags=tags) - wal = api.Volume( - lv_name='wal', lv_uuid='x', lv_path='/dev/VolGroup/wal', lv_tags=wal_tags) + osd = api.Volume(lv_name='volume1', lv_uuid='y', lv_tags=tags, + lv_path='/dev/VolGroup/lv', vg_name='VolGroup') + wal = api.Volume(lv_name='wal', lv_uuid='x', lv_tags=wal_tags, + lv_path='/dev/VolGroup/wal', vg_name='VolGroup') volumes.append(osd) volumes.append(wal) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).full_report() assert result['0'][0]['name'] == 'volume1' assert result['0'][1]['name'] == 'wal' - def test_physical_journal_gets_reported(self, volumes, monkeypatch): - tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data' - osd = api.Volume( - lv_name='volume1', lv_uuid='y', lv_path='/dev/VolGroup/lv', lv_tags=tags) + def test_physical_journal_gets_reported(self, pvolumes, volumes, monkeypatch): + tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=journal' + pv = api.PVolume(vg_name="VolGroup", pv_name='/dev/sda1', pv_tags={}, + pv_uuid="0000", lv_uuid="aaaa") + osd = api.Volume(lv_name='volume1', lv_uuid='y', lv_tags=tags, + vg_name='VolGroup', lv_path='/dev/VolGroup/lv') + pvolumes.append(pv) volumes.append(osd) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) - monkeypatch.setattr(lvm.listing.disk, 'get_device_from_partuuid', lambda x: '/dev/sda1') + monkeypatch.setattr(lvm.listing.api, 'get_pvs', lambda **kwargs: + pvolumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).full_report() assert result['0'][1]['path'] == '/dev/sda1' assert result['0'][1]['tags'] == {'PARTUUID': 'x'} assert result['0'][1]['type'] == 'journal' - def test_physical_wal_gets_reported(self, volumes, monkeypatch): - tags = 'ceph.osd_id=0,ceph.wal_uuid=x,ceph.type=data' - osd = api.Volume( - lv_name='volume1', lv_uuid='y', lv_path='/dev/VolGroup/lv', lv_tags=tags) + def test_physical_wal_gets_reported(self, pvolumes, volumes, monkeypatch): + tags = 'ceph.osd_id=0,ceph.wal_uuid=x,ceph.type=wal' + pv = api.PVolume(pv_name='/dev/sda1', pv_tags={}, pv_uuid="0000", + vg_name="VolGroup", lv_uuid="aaaa") + osd = api.Volume(lv_name='volume1', lv_uuid='y', lv_tags=tags, + lv_path='/dev/VolGroup/lv', vg_name="VolGroup") + pvolumes.append(pv) volumes.append(osd) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) - monkeypatch.setattr(lvm.listing.disk, 'get_device_from_partuuid', lambda x: '/dev/sda1') + monkeypatch.setattr(lvm.listing.api, 'get_pvs', lambda **kwargs: + pvolumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).full_report() assert result['0'][1]['path'] == '/dev/sda1' assert result['0'][1]['tags'] == {'PARTUUID': 'x'} @@ -173,116 +212,125 @@ class TestSingleReport(object): def test_not_a_ceph_lv(self, volumes, monkeypatch): # ceph lvs are detected by looking into its tags - lv = api.Volume( - lv_name='lv', vg_name='VolGroup', lv_path='/dev/VolGroup/lv', lv_tags={}) + lv = api.Volume(lv_name='lv', lv_tags={}, lv_path='/dev/VolGroup/lv', + vg_name='VolGroup') volumes.append(lv) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).single_report('VolGroup/lv') assert result == {} - def test_report_a_ceph_lv(self, volumes, monkeypatch): + def test_report_a_ceph_lv(self, pvolumes, volumes, monkeypatch): # ceph lvs are detected by looking into its tags tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data' - lv = api.Volume( - lv_name='lv', vg_name='VolGroup', - lv_uuid='aaaa', lv_path='/dev/VolGroup/lv', lv_tags=tags - ) + lv = api.Volume(lv_name='lv', vg_name='VolGroup', lv_uuid='aaaa', + lv_path='/dev/VolGroup/lv', lv_tags=tags) volumes.append(lv) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_pvs', lambda **kwargs: + pvolumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).single_report('VolGroup/lv') assert result['0'][0]['name'] == 'lv' assert result['0'][0]['lv_tags'] == tags assert result['0'][0]['path'] == '/dev/VolGroup/lv' assert result['0'][0]['devices'] == [] - def test_report_a_ceph_journal_device(self, volumes, monkeypatch): + def test_report_a_ceph_journal_device(self, volumes, pvolumes, monkeypatch): # ceph lvs are detected by looking into its tags - tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data,ceph.journal_device=/dev/sda1' - lv = api.Volume( - lv_name='lv', vg_name='VolGroup', lv_path='/dev/VolGroup/lv', - lv_uuid='aaa', lv_tags=tags) + tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=journal,' + \ + 'ceph.journal_device=/dev/sda1' + pv = api.PVolume(pv_name='/dev/sda1', pv_uuid="0000", pv_tags={}, + vg_name="VolGroup", lv_uuid="aaaa") + lv = api.Volume(lv_name='lv', lv_uuid='aaa', lv_tags=tags, + lv_path='/dev/VolGroup/lv', vg_name='VolGroup') + pvolumes.append(pv) volumes.append(lv) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_pvs', lambda **kwargs: + pvolumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + result = lvm.listing.List([]).single_report('/dev/sda1') assert result['0'][0]['tags'] == {'PARTUUID': 'x'} assert result['0'][0]['type'] == 'journal' assert result['0'][0]['path'] == '/dev/sda1' - def test_report_a_ceph_lv_with_devices(self, volumes, monkeypatch): - tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data' - lv = api.Volume( - lv_name='lv', vg_name='VolGroup', - lv_uuid='aaaa', lv_path='/dev/VolGroup/lv', lv_tags=tags - ) + def test_report_a_ceph_lv_with_devices(self, volumes, pvolumes, monkeypatch): + tags = 'ceph.osd_id=0,ceph.type=data' + pv1 = api.PVolume(vg_name="VolGroup", pv_name='/dev/sda1', + pv_uuid='', pv_tags={}, lv_uuid="aaaa") + pv2 = api.PVolume(vg_name="VolGroup", pv_name='/dev/sdb1', + pv_uuid='', pv_tags={}, lv_uuid="aaaa") + lv = api.Volume(lv_name='lv', vg_name='VolGroup',lv_uuid='aaaa', + lv_path='/dev/VolGroup/lv', lv_tags=tags) + pvolumes.append(pv1) + pvolumes.append(pv2) volumes.append(lv) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_pvs', lambda **kwargs: + pvolumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + listing = lvm.listing.List([]) listing._pvs = [ {'lv_uuid': 'aaaa', 'pv_name': '/dev/sda1', 'pv_tags': '', 'pv_uuid': ''}, {'lv_uuid': 'aaaa', 'pv_name': '/dev/sdb1', 'pv_tags': '', 'pv_uuid': ''}, ] + result = listing.single_report('VolGroup/lv') assert result['0'][0]['name'] == 'lv' assert result['0'][0]['lv_tags'] == tags assert result['0'][0]['path'] == '/dev/VolGroup/lv' assert result['0'][0]['devices'] == ['/dev/sda1', '/dev/sdb1'] - def test_report_a_ceph_lv_with_multiple_pvs_of_same_name(self, pvolumes, monkeypatch): - tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data' - lv = api.Volume( - lv_name='lv', vg_name='VolGroup', - lv_uuid='aaaa', lv_path='/dev/VolGroup/lv', lv_tags=tags - ) + def test_report_a_ceph_lv_with_multiple_pvs_of_same_name(self, pvolumes, + volumes, + monkeypatch): + tags = 'ceph.osd_id=0,ceph.type=data' + lv = api.Volume(lv_name='lv', vg_name='VolGroup', lv_uuid='aaaa', + lv_path='/dev/VolGroup/lv', lv_tags=tags) + volumes.append(lv) monkeypatch.setattr(api, 'get_lv_from_argument', lambda device: None) monkeypatch.setattr(api, 'get_lv', lambda vg_name: lv) - FooPVolume = api.PVolume(vg_name="vg", pv_name='/dev/sda', pv_uuid="0000", pv_tags={}, lv_uuid="aaaa") - BarPVolume = api.PVolume(vg_name="vg", pv_name='/dev/sda', pv_uuid="0000", pv_tags={}) + FooPVolume = api.PVolume(vg_name="vg", pv_name='/dev/sda', + pv_uuid="0000", pv_tags={}, lv_uuid="aaaa") + BarPVolume = api.PVolume(vg_name="vg", pv_name='/dev/sda', + pv_uuid="0000", pv_tags={}) pvolumes.append(FooPVolume) pvolumes.append(BarPVolume) - monkeypatch.setattr(api, 'PVolumes', lambda: pvolumes) listing = lvm.listing.List([]) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + monkeypatch.setattr(lvm.listing.api, 'get_pvs', lambda **kwargs: + pvolumes) + result = listing.single_report('/dev/sda') assert result['0'][0]['name'] == 'lv' assert result['0'][0]['lv_tags'] == tags assert result['0'][0]['path'] == '/dev/VolGroup/lv' assert len(result) == 1 - def test_report_a_ceph_lv_with_no_matching_devices(self, volumes, monkeypatch): - tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data' - lv = api.Volume( - lv_name='lv', vg_name='VolGroup', - lv_uuid='aaaa', lv_path='/dev/VolGroup/lv', lv_tags=tags - ) + def test_report_a_ceph_lv_with_no_matching_devices(self, volumes, + monkeypatch): + tags = 'ceph.osd_id=0,ceph.type=data' + lv = api.Volume(lv_name='lv', vg_name='VolGroup', lv_uuid='aaaa', + lv_path='/dev/VolGroup/lv', lv_tags=tags) volumes.append(lv) - monkeypatch.setattr(lvm.listing.api, 'Volumes', lambda: volumes) + monkeypatch.setattr(lvm.listing.api, 'get_lvs', lambda **kwargs: + volumes) + listing = lvm.listing.List([]) listing._pvs = [ - {'lv_uuid': 'ffff', 'pv_name': '/dev/sda1', 'pv_tags': '', 'pv_uuid': ''}, - {'lv_uuid': 'ffff', 'pv_name': '/dev/sdb1', 'pv_tags': '', 'pv_uuid': ''}, - ] + {'lv_uuid': 'ffff', 'pv_name': '/dev/sda1', 'pv_tags': '', + 'pv_uuid': ''}, + {'lv_uuid': 'ffff', 'pv_name': '/dev/sdb1', 'pv_tags': '', + 'pv_uuid': ''}] + result = listing.single_report('VolGroup/lv') assert result['0'][0]['name'] == 'lv' assert result['0'][0]['lv_tags'] == tags assert result['0'][0]['path'] == '/dev/VolGroup/lv' assert result['0'][0]['devices'] == [] - - -class TestListingPVs(object): - - def setup(self): - self.default_pvs = [ - {'lv_uuid': 'ffff', 'pv_name': '/dev/sda1', 'pv_tags': '', 'pv_uuid': ''}, - {'lv_uuid': 'ffff', 'pv_name': '/dev/sdb1', 'pv_tags': '', 'pv_uuid': ''}, - ] - - def test_pvs_is_unset(self, monkeypatch): - monkeypatch.setattr(lvm.listing.api, 'get_api_pvs', lambda: self.default_pvs) - listing = lvm.listing.List([]) - assert listing.pvs == self.default_pvs - - def test_pvs_is_set(self, monkeypatch): - # keep it patched so that we can fail if this gets returned - monkeypatch.setattr(lvm.listing.api, 'get_api_pvs', lambda: self.default_pvs) - listing = lvm.listing.List([]) - listing._pvs = [] - assert listing.pvs == [] -- 2.39.5