]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: add mock test to validate lsm_data field
authorPaul Cuzner <pcuzner@redhat.com>
Fri, 14 Aug 2020 23:47:04 +0000 (11:47 +1200)
committerJan Fajerski <jfajerski@suse.com>
Thu, 27 Aug 2020 12:30:28 +0000 (14:30 +0200)
The lsm_data field (dict) is now checked for format and
content as part of tox tests

Signed-off-by: Paul Cuzner <pcuzner@redhat.com>
(cherry picked from commit 158927caeab8e18505af0a7f1583597eeee242e9)

src/ceph-volume/ceph_volume/tests/test_inventory.py

index 9721fccdb6434b8e510a47c25784a99d7b67ba1c..a2490e3d7fe919dfecc30383b539940b3c6786ef 100644 (file)
@@ -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)
+