From 235b19eb66b9ba9beab99508f2fdf7b6afe26f31 Mon Sep 17 00:00:00 2001 From: Jan Fajerski Date: Tue, 25 Feb 2020 16:18:57 +0100 Subject: [PATCH] ceph-volume: don't create Volume/VolumeGroup objects with empty name Signed-off-by: Jan Fajerski --- src/ceph-volume/ceph_volume/api/lvm.py | 4 +++ .../ceph_volume/tests/api/test_lvm.py | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/ceph-volume/ceph_volume/api/lvm.py b/src/ceph-volume/ceph_volume/api/lvm.py index 9c9c2ff61d62d..30746805f651e 100644 --- a/src/ceph-volume/ceph_volume/api/lvm.py +++ b/src/ceph-volume/ceph_volume/api/lvm.py @@ -563,6 +563,8 @@ class VolumeGroup(object): for k, v in kw.items(): setattr(self, k, v) self.name = kw['vg_name'] + if not self.name: + raise ValueError('VolumeGroup must have a non-empty name') self.tags = parse_tags(kw.get('vg_tags', '')) def __str__(self): @@ -908,6 +910,8 @@ class Volume(object): setattr(self, k, v) self.lv_api = kw self.name = kw['lv_name'] + if not self.name: + raise ValueError('Volume must have a non-empty name') self.tags = parse_tags(kw['lv_tags']) self.encrypted = self.tags.get('ceph.encrypted', '0') == '1' self.used_by_ceph = 'ceph.osd_id' in self.tags diff --git a/src/ceph-volume/ceph_volume/tests/api/test_lvm.py b/src/ceph-volume/ceph_volume/tests/api/test_lvm.py index c0f8e3f53917d..8525965a374fc 100644 --- a/src/ceph-volume/ceph_volume/tests/api/test_lvm.py +++ b/src/ceph-volume/ceph_volume/tests/api/test_lvm.py @@ -230,6 +230,10 @@ class TestVolume(object): def test_is_not_ceph_device(self, dev): assert not api.is_ceph_device(dev) + def test_no_empty_lv_name(self): + with pytest.raises(ValueError): + api.Volume(lv_name='', lv_tags='') + class TestVolumes(object): @@ -328,6 +332,13 @@ class TestVolumes(object): volumes.filter() +class TestVolumeGroup(object): + + def test_volume_group_no_empty_name(self): + with pytest.raises(ValueError): + api.VolumeGroup(vg_name='') + + class TestVolumeGroups(object): def test_volume_get_has_no_volume_groups(self, volume_groups): @@ -961,3 +972,23 @@ class TestIsLV(object): splitname = {'LV_NAME': 'data', 'VG_NAME': 'ceph'} monkeypatch.setattr(api, 'dmsetup_splitname', lambda x, **kw: splitname) assert api.is_lv('/dev/sda1', lvs=volumes) is True + +class TestGetDeviceVgs(object): + + @patch('ceph_volume.process.call') + @patch('ceph_volume.api.lvm._output_parser') + def test_get_device_vgs_with_empty_pv(self, patched_output_parser, pcall): + patched_output_parser.return_value = [{'vg_name': ''}] + pcall.return_value = ('', '', '') + vgs = api.get_device_vgs('/dev/foo') + assert vgs == [] + +class TestGetDeviceLvs(object): + + @patch('ceph_volume.process.call') + @patch('ceph_volume.api.lvm._output_parser') + def test_get_device_lvs_with_empty_vg(self, patched_output_parser, pcall): + patched_output_parser.return_value = [{'lv_name': ''}] + pcall.return_value = ('', '', '') + vgs = api.get_device_lvs('/dev/foo') + assert vgs == [] -- 2.39.5