From: Paul Cuzner Date: Fri, 14 Aug 2020 23:47:04 +0000 (+1200) Subject: ceph-volume: add mock test to validate lsm_data field X-Git-Tag: v15.2.9~122^2~116^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=959c83a71ff1fea076266daed92ba469fc9e0211;p=ceph.git ceph-volume: add mock test to validate lsm_data field The lsm_data field (dict) is now checked for format and content as part of tox tests Signed-off-by: Paul Cuzner (cherry picked from commit 158927caeab8e18505af0a7f1583597eeee242e9) --- diff --git a/src/ceph-volume/ceph_volume/tests/test_inventory.py b/src/ceph-volume/ceph_volume/tests/test_inventory.py index 9721fccdb64..a2490e3d7fe 100644 --- a/src/ceph-volume/ceph_volume/tests/test_inventory.py +++ b/src/ceph-volume/ceph_volume/tests/test_inventory.py @@ -59,6 +59,52 @@ def device_sys_api_keys(device_info): report = Devices().json_report()[0] return list(report['sys_api'].keys()) +@pytest.fixture +def device_data(device_info): + device_info( + devices={ + # example output of disk.get_devices() + '/dev/sdb': { + 'human_readable_size': '1.82 TB', + 'locked': 0, + 'model': 'PERC H700', + 'nr_requests': '128', + 'partitions': {}, + 'path': '/dev/sdb', + 'removable': '0', + 'rev': '2.10', + 'ro': '0', + 'rotational': '1', + 'sas_address': '', + 'sas_device_handle': '', + 'scheduler_mode': 'cfq', + 'sectors': 0, + 'sectorsize': '512', + 'size': 1999844147200.0, + 'support_discard': '', + 'vendor': 'DELL', + } + } + ) + + dev = Devices().devices[0] + dev.lsm_data = { + "serialNum": 'S2X9NX0H935283', + "transport": 'SAS', + "mediaType": 'HDD', + "rpm": 10000, + "linkSpeed": 6000, + "health": 'Good', + "ledSupport": { + "IDENTsupport": 'Supported', + "IDENTstatus": 'Off', + "FAILsupport": 'Supported', + "FAILstatus": 'Off', + }, + "errors": [], + } + return dev.json_report() + class TestInventory(object): @@ -69,6 +115,7 @@ class TestInventory(object): 'available', 'lvs', 'device_id', + 'lsm_data', ] expected_sys_api_keys = [ @@ -92,6 +139,17 @@ class TestInventory(object): 'vendor', ] + expected_lsm_keys = [ + 'serialNum', + 'transport', + 'mediaType', + 'rpm', + 'linkSpeed', + 'health', + 'ledSupport', + 'errors', + ] + def test_json_inventory_keys_unexpected(self, device_report_keys): for k in device_report_keys: assert k in self.expected_keys, "unexpected key {} in report".format(k) @@ -108,3 +166,16 @@ class TestInventory(object): for k in self.expected_sys_api_keys: assert k in device_sys_api_keys, "expected key {} in sys_api field".format(k) + def test_lsm_data_type_unexpected(self, device_data): + assert isinstance(device_data['lsm_data'], dict), "lsm_data field must be of type dict" + + def test_lsm_data_keys_unexpected(self, device_data): + for k in device_data['lsm_data'].keys(): + assert k in self.expected_lsm_keys, "unexpected key {} in lsm_data field".format(k) + + def test_lsm_data_keys_missing(self, device_data): + lsm_keys = device_data['lsm_data'].keys() + assert lsm_keys + for k in self.expected_lsm_keys: + assert k in lsm_keys, "expected key {} in lsm_data field".format(k) +