From 43b06cd00891056130ea7b4537e94d16972a5aff Mon Sep 17 00:00:00 2001 From: Jonas Pfefferle Date: Fri, 4 Jun 2021 13:14:54 +0200 Subject: [PATCH] ceph-volume: data_allocate_fraction: batch tests lvm batch tests with data allocate fraction Signed-off-by: Jonas Pfefferle --- src/ceph-volume/ceph_volume/tests/conftest.py | 4 ++++ .../tests/devices/lvm/test_batch.py | 23 +++++++++++++------ .../tests/util/test_arg_validators.py | 4 ++++ .../ceph_volume/util/arg_validators.py | 2 +- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/ceph-volume/ceph_volume/tests/conftest.py b/src/ceph-volume/ceph_volume/tests/conftest.py index afea4504d36..80f194d4933 100644 --- a/src/ceph-volume/ceph_volume/tests/conftest.py +++ b/src/ceph-volume/ceph_volume/tests/conftest.py @@ -293,3 +293,7 @@ def device_info(monkeypatch, patch_bluestore_label): monkeypatch.setattr("ceph_volume.util.device.disk.blkid", lambda path: blkid) monkeypatch.setattr("ceph_volume.util.disk.udevadm_property", lambda *a, **kw: udevadm) return apply + +@pytest.fixture(params=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.999, 1.0]) +def data_allocate_fraction(request): + return request.param diff --git a/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py b/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py index 7c968ae81d5..35c1fd2f8c2 100644 --- a/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py +++ b/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py @@ -49,6 +49,7 @@ class TestBatch(object): bluestore=True, block_db_size="1G", dmcrypt=True, + data_allocate_fraction=1.0, ) b = batch.Batch([]) plan = b.get_plan(args) @@ -71,6 +72,7 @@ class TestBatch(object): bluestore=True, block_db_size="1G", dmcrypt=True, + data_allocate_fraction=1.0, ) b = batch.Batch([]) plan = b.get_plan(args) @@ -96,6 +98,7 @@ class TestBatch(object): bluestore=True, block_db_size="1G", dmcrypt=True, + data_allocate_fraction=1.0, ) b = batch.Batch([]) plan = b.get_plan(args) @@ -123,6 +126,7 @@ class TestBatch(object): bluestore=True, block_db_size="1G", dmcrypt=True, + data_allocate_fraction=1.0, ) b = batch.Batch([]) plan = b.get_plan(args) @@ -170,30 +174,35 @@ class TestBatch(object): osds_per_device): conf_ceph_stub('[global]\nfsid=asdf-lkjh') args = factory(data_slots=1, osds_per_device=osds_per_device, - osd_ids=[], dmcrypt=False) + osd_ids=[], dmcrypt=False, + data_allocate_fraction=1.0) osds = batch.get_physical_osds(mock_devices_available, args) assert len(osds) == len(mock_devices_available) * osds_per_device def test_get_physical_osds_rel_size(self, factory, mock_devices_available, conf_ceph_stub, - osds_per_device): + osds_per_device, + data_allocate_fraction): args = factory(data_slots=1, osds_per_device=osds_per_device, - osd_ids=[], dmcrypt=False) + osd_ids=[], dmcrypt=False, + data_allocate_fraction=data_allocate_fraction) osds = batch.get_physical_osds(mock_devices_available, args) for osd in osds: - assert osd.data[1] == 1.0 / osds_per_device + assert osd.data[1] == data_allocate_fraction / osds_per_device def test_get_physical_osds_abs_size(self, factory, mock_devices_available, conf_ceph_stub, - osds_per_device): + osds_per_device, + data_allocate_fraction): conf_ceph_stub('[global]\nfsid=asdf-lkjh') args = factory(data_slots=1, osds_per_device=osds_per_device, - osd_ids=[], dmcrypt=False) + osd_ids=[], dmcrypt=False, + data_allocate_fraction=data_allocate_fraction) osds = batch.get_physical_osds(mock_devices_available, args) for osd, dev in zip(osds, mock_devices_available): - assert osd.data[2] == int(dev.vg_size[0] / osds_per_device) + assert osd.data[2] == int(dev.vg_size[0] * (data_allocate_fraction / osds_per_device)) def test_get_physical_osds_osd_ids(self, factory, mock_devices_available, diff --git a/src/ceph-volume/ceph_volume/tests/util/test_arg_validators.py b/src/ceph-volume/ceph_volume/tests/util/test_arg_validators.py index 6666f318b4f..c4181d7678f 100644 --- a/src/ceph-volume/ceph_volume/tests/util/test_arg_validators.py +++ b/src/ceph-volume/ceph_volume/tests/util/test_arg_validators.py @@ -98,6 +98,10 @@ class TestValidFraction(object): result = self.validator('0.8') assert result == 0.8 + def test_fraction_not_float(self, fake_call): + with pytest.raises(ValueError): + self.validator('xyz') + def test_fraction_is_nan(self, fake_call): with pytest.raises(argparse.ArgumentError): self.validator('NaN') diff --git a/src/ceph-volume/ceph_volume/util/arg_validators.py b/src/ceph-volume/ceph_volume/util/arg_validators.py index e04e2018834..39ad6384f2d 100644 --- a/src/ceph-volume/ceph_volume/util/arg_validators.py +++ b/src/ceph-volume/ceph_volume/util/arg_validators.py @@ -158,5 +158,5 @@ class ValidFraction(object): def __call__(self, fraction): fraction_float = float(fraction) if math.isnan(fraction_float) or fraction_float <= 0.0 or fraction_float > 1.0: - raise argparse.ArgumentTypeError('Fraction not in (0,1.0]') + raise argparse.ArgumentError(None, 'Fraction %f not in (0,1.0]' % fraction_float) return fraction_float -- 2.39.5