]>
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 import ceph_volume
.util
.lsmdisk
as lsmdisk
10 def device_report_keys(device_info
):
12 # example output of disk.get_devices()
13 '/dev/sdb': {'human_readable_size': '1.82 TB',
24 'sas_device_handle': '',
25 'scheduler_mode': 'cfq',
28 'size': 1999844147200.0,
29 'support_discard': '',
31 'device_id': 'Vendor-Model-Serial'}
34 report
= Devices().json_report()[0]
35 return list(report
.keys())
38 def device_sys_api_keys(device_info
):
40 # example output of disk.get_devices()
41 '/dev/sdb': {'human_readable_size': '1.82 TB',
52 'sas_device_handle': '',
53 'scheduler_mode': 'cfq',
56 'size': 1999844147200.0,
57 'support_discard': '',
61 report
= Devices().json_report()[0]
62 return list(report
['sys_api'].keys())
65 def device_data(device_info
):
68 # example output of disk.get_devices()
70 'human_readable_size': '1.82 TB',
81 'sas_device_handle': '',
82 'scheduler_mode': 'cfq',
85 'size': 1999844147200.0,
86 'support_discard': '',
92 dev
= Devices().devices
[0]
94 "serialNum": 'S2X9NX0H935283',
101 "IDENTsupport": 'Supported',
102 "IDENTstatus": 'Off',
103 "FAILsupport": 'Supported',
108 return dev
.json_report()
111 class TestInventory(object):
124 expected_sys_api_keys
= [
125 'human_readable_size',
145 expected_lsm_keys
= [
156 def test_json_inventory_keys_unexpected(self
, fake_call
, device_report_keys
):
157 for k
in device_report_keys
:
158 assert k
in self
.expected_keys
, "unexpected key {} in report".format(k
)
160 def test_json_inventory_keys_missing(self
, fake_call
, device_report_keys
):
161 for k
in self
.expected_keys
:
162 assert k
in device_report_keys
, "expected key {} in report".format(k
)
164 def test_sys_api_keys_unexpected(self
, fake_call
, device_sys_api_keys
):
165 for k
in device_sys_api_keys
:
166 assert k
in self
.expected_sys_api_keys
, "unexpected key {} in sys_api field".format(k
)
168 def test_sys_api_keys_missing(self
, fake_call
, device_sys_api_keys
):
169 for k
in self
.expected_sys_api_keys
:
170 assert k
in device_sys_api_keys
, "expected key {} in sys_api field".format(k
)
172 def test_lsm_data_type_unexpected(self
, fake_call
, device_data
):
173 assert isinstance(device_data
['lsm_data'], dict), "lsm_data field must be of type dict"
175 def test_lsm_data_keys_unexpected(self
, fake_call
, device_data
):
176 for k
in device_data
['lsm_data'].keys():
177 assert k
in self
.expected_lsm_keys
, "unexpected key {} in lsm_data field".format(k
)
179 def test_lsm_data_keys_missing(self
, fake_call
, device_data
):
180 lsm_keys
= device_data
['lsm_data'].keys()
182 for k
in self
.expected_lsm_keys
:
183 assert k
in lsm_keys
, "expected key {} in lsm_data field".format(k
)
187 def lsm_info(monkeypatch
):
188 def mock_query_lsm(_
, func
, path
):
190 'serial_num_get': "S2X9NX0H935283",
193 'link_speed_get': 6000,
194 'health_status_get': 2,
195 'led_status_get': 36,
197 return query_map
.get(func
, 'Unknown')
199 # mocked states and settings taken from the libstoragemgmt code base
200 # c_binding/include/libstoragemgmt/libstoragemgmt_types.h at
201 # https://github.com/libstorage/libstoragemgmt/
208 mock_transport_map
= {
219 10: "SCSI over PCI-E",
222 class MockLEDStates():
223 LED_STATUS_UNKNOWN
= 1
224 LED_STATUS_IDENT_ON
= 2
225 LED_STATUS_IDENT_OFF
= 4
226 LED_STATUS_IDENT_UNKNOWN
= 8
227 LED_STATUS_FAULT_ON
= 16
228 LED_STATUS_FAULT_OFF
= 32
229 LED_STATUS_FAULT_UNKNOWN
= 64
231 monkeypatch
.setattr(LSMDisk
, '_query_lsm', mock_query_lsm
)
232 monkeypatch
.setattr(lsmdisk
, 'health_map', mock_health_map
)
233 monkeypatch
.setattr(lsmdisk
, 'transport_map', mock_transport_map
)
234 monkeypatch
.setattr(lsmdisk
, 'lsm_Disk', MockLEDStates
)
236 return LSMDisk('/dev/sda')
239 class TestLSM(object):
240 def test_lsmdisk_health(self
, lsm_info
):
241 assert lsm_info
.health
== "Good"
242 def test_lsmdisk_transport(self
, lsm_info
):
243 assert lsm_info
.transport
== 'SAS'
244 def test_lsmdisk_mediatype(self
, lsm_info
):
245 assert lsm_info
.media_type
== 'Flash'
246 def test_lsmdisk_led_ident_support(self
, lsm_info
):
247 assert lsm_info
.led_ident_support
== 'Supported'
248 def test_lsmdisk_led_ident(self
, lsm_info
):
249 assert lsm_info
.led_ident_state
== 'Off'
250 def test_lsmdisk_led_fault_support(self
, lsm_info
):
251 assert lsm_info
.led_fault_support
== 'Supported'
252 def test_lsmdisk_led_fault(self
, lsm_info
):
253 assert lsm_info
.led_fault_state
== 'Off'
254 def test_lsmdisk_report(self
, lsm_info
):
255 assert isinstance(lsm_info
.json_report(), dict)