Adding capability to check NVDIMM_N availability

This commit adds a new capability to check NVDIMM_N
availability using the bios parameter on the ProLiant Servers.

Change-Id: I91206332562bc5929df06806884811af73738304
This commit is contained in:
kesper 2017-04-25 06:43:28 +00:00
parent 641813c18f
commit 86759d886b
3 changed files with 50 additions and 2 deletions

View File

@ -978,6 +978,8 @@ class RISOperations(rest.RestConnectorBase, operations.IloOperations):
capabilities.update(self._get_tpm_capability())
if self._get_cpu_virtualization():
capabilities['cpu_vt'] = 'true'
if self._get_nvdimm_n_status():
capabilities['nvdimm_n'] = 'true'
try:
self.get_secure_boot_mode()
capabilities['secure_boot'] = 'true'
@ -1526,3 +1528,18 @@ class RISOperations(rest.RestConnectorBase, operations.IloOperations):
else:
vt_status = False
return vt_status
def _get_nvdimm_n_status(self):
"""Get status of NVDIMM_N.
:returns: True if NVDIMM_N is present and enabled, False otherwise.
"""
try:
nvdimm_n_status = self._get_bios_setting('NvDimmNMemFunctionality')
if nvdimm_n_status == 'Enabled':
nvn_status = True
else:
nvn_status = False
except exception.IloCommandNotSupportedError:
nvn_status = False
return nvn_status

View File

@ -1276,6 +1276,7 @@ GET_BIOS_SETTINGS = """
"NmiDebugButton": "Enabled",
"NodeInterleaving": "Disabled",
"NumaGroupSizeOpt": "Clustered",
"NvDimmNMemFunctionality": "Enabled",
"OldAdminPassword": null,
"OldPowerOnPassword": null,
"PciBusPadding": "Enabled",

View File

@ -375,6 +375,7 @@ class IloRisTestCase(testtools.TestCase):
validate_mock.assert_called_once_with(ris_outputs.GET_HEADERS,
settings_uri)
@mock.patch.object(ris.RISOperations, '_get_nvdimm_n_status')
@mock.patch.object(ris.RISOperations,
'_get_cpu_virtualization')
@mock.patch.object(ris.RISOperations, '_get_tpm_capability')
@ -385,7 +386,7 @@ class IloRisTestCase(testtools.TestCase):
@mock.patch.object(ris.RISOperations, '_get_host_details')
def test_get_server_capabilities(self, get_details_mock, ilo_firm_mock,
secure_mock, gpu_mock, tpm_mock,
cpu_vt_mock):
cpu_vt_mock, nvdimm_n_mock):
host_details = json.loads(ris_outputs.RESPONSE_BODY_FOR_REST_OP)
get_details_mock.return_value = host_details
ilo_firm_mock.return_value = {'ilo_firmware_version': 'iLO 4 v2.20'}
@ -393,13 +394,15 @@ class IloRisTestCase(testtools.TestCase):
cpu_vt_mock.return_value = True
secure_mock.return_value = False
tpm_mock.return_value = {'trusted_boot': True}
nvdimm_n_mock.return_value = True
expected_caps = {'secure_boot': 'true',
'ilo_firmware_version': 'iLO 4 v2.20',
'rom_firmware_version': u'I36 v1.40 (01/28/2015)',
'server_model': u'ProLiant BL460c Gen9',
'pci_gpu_devices': 2,
'trusted_boot': True,
'cpu_vt': 'true'}
'cpu_vt': 'true',
'nvdimm_n': 'true'}
capabilities = self.client.get_server_capabilities()
self.assertEqual(expected_caps, capabilities)
@ -1820,3 +1823,30 @@ class TestRISOperationsPrivateMethods(testtools.TestCase):
expected_out = {'trusted_boot': False}
status = self.client._get_tpm_capability()
self.assertEqual(expected_out, status)
@mock.patch.object(ris.RISOperations, '_get_bios_setting')
def test___get_nvdimm_n_status_enabled(self, bios_mock):
bios_settings = json.loads(ris_outputs.GET_BIOS_SETTINGS)
bios_mock.return_value = bios_settings['NvDimmNMemFunctionality']
expected_nvdimm_n_status = True
nvdimm_n_status_return = self.client._get_nvdimm_n_status()
self.assertEqual(nvdimm_n_status_return, expected_nvdimm_n_status)
self.assertTrue(bios_mock.called)
@mock.patch.object(ris.RISOperations, '_get_bios_setting')
def test___get_nvdimm_n_status_disabled(self, bios_mock):
bios_mock.return_value = 'Disabled'
expected_nvdimm_n_status = False
nvdimm_n_status_return = self.client._get_nvdimm_n_status()
self.assertEqual(nvdimm_n_status_return, expected_nvdimm_n_status)
self.assertTrue(bios_mock.called)
@mock.patch.object(ris.RISOperations, '_get_bios_setting')
def test___get_nvdimm_n_status_not_supported_error(self, bios_mock):
msg = ("BIOS Property 'NvDimmNMemFunctionality' is not supported on"
" this system")
bios_mock.side_effect = exception.IloCommandNotSupportedError(msg)
expected_nvdimm_n_status = False
nvdimm_n_status_return = self.client._get_nvdimm_n_status()
self.assertEqual(nvdimm_n_status_return, expected_nvdimm_n_status)
self.assertTrue(bios_mock.called)