]>
git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/test_inventory.py
1 # -*- coding: utf-8 -*-
4 from ceph_volume
.util
.device
import Devices
5 from ceph_volume
.util
.lsmdisk
import LSMDisk
6 from mock
.mock
import patch
7 import ceph_volume
.util
.lsmdisk
as lsmdisk
11 @patch("ceph_volume.util.disk.has_bluestore_label", lambda x
: False)
12 def device_report_keys(device_info
):
14 # example output of disk.get_devices()
15 '/dev/sdb': {'human_readable_size': '1.82 TB',
26 'sas_device_handle': '',
27 'scheduler_mode': 'cfq',
30 'size': 1999844147200.0,
31 'support_discard': '',
33 'device_id': 'Vendor-Model-Serial',
34 'device_nodes': 'sdb'}
37 report
= Devices().json_report()[0]
38 return list(report
.keys())
41 @patch("ceph_volume.util.disk.has_bluestore_label", lambda x
: False)
42 def device_sys_api_keys(device_info
):
44 # example output of disk.get_devices()
45 '/dev/sdb': {'human_readable_size': '1.82 TB',
56 'sas_device_handle': '',
57 'scheduler_mode': 'cfq',
60 'size': 1999844147200.0,
61 'support_discard': '',
63 'device_nodes': 'sdb'}
66 report
= Devices().json_report()[0]
67 return list(report
['sys_api'].keys())
70 @patch("ceph_volume.util.disk.has_bluestore_label", lambda x
: False)
71 def device_data(device_info
):
74 # example output of disk.get_devices()
76 'human_readable_size': '1.82 TB',
87 'sas_device_handle': '',
88 'scheduler_mode': 'cfq',
91 'size': 1999844147200.0,
92 'support_discard': '',
99 dev
= Devices().devices
[0]
101 "serialNum": 'S2X9NX0H935283',
108 "IDENTsupport": 'Supported',
109 "IDENTstatus": 'Off',
110 "FAILsupport": 'Supported',
115 return dev
.json_report()
118 class TestInventory(object):
131 expected_sys_api_keys
= [
132 'human_readable_size',
153 expected_lsm_keys
= [
164 def test_json_inventory_keys_unexpected(self
, fake_call
, device_report_keys
):
165 for k
in device_report_keys
:
166 assert k
in self
.expected_keys
, "unexpected key {} in report".format(k
)
168 def test_json_inventory_keys_missing(self
, fake_call
, device_report_keys
):
169 for k
in self
.expected_keys
:
170 assert k
in device_report_keys
, "expected key {} in report".format(k
)
172 def test_sys_api_keys_unexpected(self
, fake_call
, device_sys_api_keys
):
173 for k
in device_sys_api_keys
:
174 assert k
in self
.expected_sys_api_keys
, "unexpected key {} in sys_api field".format(k
)
176 def test_sys_api_keys_missing(self
, fake_call
, device_sys_api_keys
):
177 for k
in self
.expected_sys_api_keys
:
178 assert k
in device_sys_api_keys
, "expected key {} in sys_api field".format(k
)
180 def test_lsm_data_type_unexpected(self
, fake_call
, device_data
):
181 assert isinstance(device_data
['lsm_data'], dict), "lsm_data field must be of type dict"
183 def test_lsm_data_keys_unexpected(self
, fake_call
, device_data
):
184 for k
in device_data
['lsm_data'].keys():
185 assert k
in self
.expected_lsm_keys
, "unexpected key {} in lsm_data field".format(k
)
187 def test_lsm_data_keys_missing(self
, fake_call
, device_data
):
188 lsm_keys
= device_data
['lsm_data'].keys()
190 for k
in self
.expected_lsm_keys
:
191 assert k
in lsm_keys
, "expected key {} in lsm_data field".format(k
)
195 def lsm_info(monkeypatch
):
196 def mock_query_lsm(_
, func
, path
):
198 'serial_num_get': "S2X9NX0H935283",
201 'link_speed_get': 6000,
202 'health_status_get': 2,
203 'led_status_get': 36,
205 return query_map
.get(func
, 'Unknown')
207 # mocked states and settings taken from the libstoragemgmt code base
208 # c_binding/include/libstoragemgmt/libstoragemgmt_types.h at
209 # https://github.com/libstorage/libstoragemgmt/
216 mock_transport_map
= {
227 10: "SCSI over PCI-E",
230 class MockLEDStates():
231 LED_STATUS_UNKNOWN
= 1
232 LED_STATUS_IDENT_ON
= 2
233 LED_STATUS_IDENT_OFF
= 4
234 LED_STATUS_IDENT_UNKNOWN
= 8
235 LED_STATUS_FAULT_ON
= 16
236 LED_STATUS_FAULT_OFF
= 32
237 LED_STATUS_FAULT_UNKNOWN
= 64
239 monkeypatch
.setattr(LSMDisk
, '_query_lsm', mock_query_lsm
)
240 monkeypatch
.setattr(lsmdisk
, 'health_map', mock_health_map
)
241 monkeypatch
.setattr(lsmdisk
, 'transport_map', mock_transport_map
)
242 monkeypatch
.setattr(lsmdisk
, 'lsm_Disk', MockLEDStates
)
244 return LSMDisk('/dev/sda')
247 class TestLSM(object):
248 def test_lsmdisk_health(self
, lsm_info
):
249 assert lsm_info
.health
== "Good"
250 def test_lsmdisk_transport(self
, lsm_info
):
251 assert lsm_info
.transport
== 'SAS'
252 def test_lsmdisk_mediatype(self
, lsm_info
):
253 assert lsm_info
.media_type
== 'Flash'
254 def test_lsmdisk_led_ident_support(self
, lsm_info
):
255 assert lsm_info
.led_ident_support
== 'Supported'
256 def test_lsmdisk_led_ident(self
, lsm_info
):
257 assert lsm_info
.led_ident_state
== 'Off'
258 def test_lsmdisk_led_fault_support(self
, lsm_info
):
259 assert lsm_info
.led_fault_support
== 'Supported'
260 def test_lsmdisk_led_fault(self
, lsm_info
):
261 assert lsm_info
.led_fault_state
== 'Off'
262 def test_lsmdisk_report(self
, lsm_info
):
263 assert isinstance(lsm_info
.json_report(), dict)