Check inspection data and abortion in the standalone tests

Depends-On: https://review.opendev.org/c/openstack/ironic/+/930279
Change-Id: Iff8d1243d350a9e91910b2a3ebd1db92637d4a0f
This commit is contained in:
Dmitry Tantsur 2024-09-04 14:15:14 +02:00
parent dd0f879695
commit f915c62e98
No known key found for this signature in database
GPG Key ID: 315B2AF9FD216C60
2 changed files with 69 additions and 1 deletions

View File

@ -1008,3 +1008,19 @@ class BaremetalClient(base.BaremetalClient):
}
return self._create_request_no_response_body('heartbeat', kwargs)
@base.handle_errors
def show_inventory(self, uuid, api_version='1.81'):
"""Gets hardware inventory for the specific node.
:param uuid: Unique identifier of the node in UUID format.
:param api_version: Ironic API version to use.
:return: Inventory as a dictionary.
"""
extra_headers, headers = self._get_headers(api_version)
resp, body = self._show_request(
'inventory', uuid, headers=headers, extra_headers=extra_headers,
uri=f'{self.uri_prefix}/nodes/{uuid}/inventory')
self.expected_success(http_client.OK, resp.status)
return body

View File

@ -70,8 +70,60 @@ class BaremetalRedfishAgentInspect(BaremetalInspectBase,
driver = 'redfish'
inspect_interface = 'agent'
wait_provisioning_state_interval = 15
# 1.81 adds support for inventory API
api_microversion = '1.81'
# TODO(dtantsur): test aborting inspection and fetching inspection data
def _verify_node_inspection_data(self, node):
super()._verify_node_inspection_data(node)
inspection_data = self.baremetal_client.show_inventory(
self.node['uuid'])
self.assertEqual({'inventory', 'plugin_data'}, set(inspection_data))
# Inventory sanity check
inventory = inspection_data['inventory']
self.assertGreater(inventory['cpu']['count'], 0)
self.assertGreater(inventory['memory']['physical_mb'], 256)
self.assertGreater(len(inventory['disks']), 0)
self.assertGreater(len(inventory['interfaces']), 0)
@decorators.idempotent_id('82670a85-49b7-4d28-b8a8-6e18b0d4c8d1')
def test_inspect_abort(self):
_, node = self.baremetal_client.show_node(self.node['uuid'])
current_state = node['provision_state']
def cleanup():
nonlocal current_state
if current_state == 'inspect failed':
self.baremetal_client.set_node_provision_state(
self.node['uuid'], 'manage')
self.wait_provisioning_state(self.node['uuid'], 'manageable')
current_state = 'manageable'
if current_state == 'manageable':
self.baremetal_client.set_node_provision_state(
self.node['uuid'], 'provide')
self.wait_provisioning_state(self.node['uuid'], 'available')
self.addCleanup(cleanup)
if current_state != 'manageable':
self.baremetal_client.set_node_provision_state(self.node['uuid'],
'manage')
current_state = 'manageable'
self.baremetal_client.set_node_provision_state(self.node['uuid'],
'inspect')
self.wait_provisioning_state(
self.node['uuid'], 'inspect wait',
timeout=300, interval=5)
self.baremetal_client.set_node_provision_state(self.node['uuid'],
'abort')
self.wait_provisioning_state(
self.node['uuid'], 'inspect failed',
timeout=60, interval=1)
current_state = 'inspect failed'
class BaremetalIdracInspect(BaremetalInspectBase,