summaryrefslogtreecommitdiff
path: root/ironic
diff options
context:
space:
mode:
authorMark Goddard <mark@stackhpc.com>2019-03-15 10:40:15 +0000
committerMark Goddard <mark@stackhpc.com>2019-03-15 10:40:15 +0000
commitc11f45bddae308ce92e36f404c0bd02797741112 (patch)
treefb0c3c2e670c48167408fcbee76c4bb3a90b18ea /ironic
parentf5a983e04e50d4ef4df74cfa56161a565fc399eb (diff)
downloadironic-c11f45bddae308ce92e36f404c0bd02797741112.tar.gz
Fix idrac driver unit test backwards compat issue
Since commit 8bd3c531a0ef7282cc8a0daac9f71bb18b6a9532, the idrac driver unit tests use real named tuple objects from the dracclient library, if available. This added a coupling to a specific set of versions of that library, since the correct set of fields for each object must be specified. This change uses the namedtuple._fields field to build a list of fields appropriate to the library version. Missing fields are filled in with None, and unsupported fields are ignored. Change-Id: I5b9b64e5aa4fe96e056c8b010bf8a448c72f996f
Diffstat (limited to 'ironic')
-rw-r--r--ironic/tests/unit/drivers/modules/drac/utils.py39
1 files changed, 21 insertions, 18 deletions
diff --git a/ironic/tests/unit/drivers/modules/drac/utils.py b/ironic/tests/unit/drivers/modules/drac/utils.py
index 825b2c05a..b65260924 100644
--- a/ironic/tests/unit/drivers/modules/drac/utils.py
+++ b/ironic/tests/unit/drivers/modules/drac/utils.py
@@ -43,13 +43,20 @@ class DictToObj(object):
setattr(self, key, dictionary[key])
-def dict_to_namedtuple(name='GenericNamedTuple', values=None):
+def dict_to_namedtuple(name='GenericNamedTuple', values=None,
+ tuple_class=None):
"""Converts a dict to a collections.namedtuple"""
if values is None:
values = {}
- return collections.namedtuple(name, list(values))(**values)
+ if tuple_class is None:
+ tuple_class = collections.namedtuple(name, list(values))
+ else:
+ # Support different versions of the driver as fields change.
+ values = {field: values.get(field) for field in tuple_class._fields}
+
+ return tuple_class(**values)
def dict_of_object(data):
@@ -63,28 +70,24 @@ def dict_of_object(data):
def make_job(job_dict):
- if dracclient_job:
- return dracclient_job.Job(**job_dict)
- else:
- return dict_to_namedtuple(values=job_dict)
+ tuple_class = dracclient_job.Job if dracclient_job else None
+ return dict_to_namedtuple(values=job_dict,
+ tuple_class=tuple_class)
def make_raid_controller(raid_controller_dict):
- if dracclient_raid:
- return dracclient_raid.RAIDController(**raid_controller_dict)
- else:
- return dict_to_namedtuple(values=raid_controller_dict)
+ tuple_class = dracclient_raid.RAIDController if dracclient_raid else None
+ return dict_to_namedtuple(values=raid_controller_dict,
+ tuple_class=tuple_class)
def make_virtual_disk(virtual_disk_dict):
- if dracclient_raid:
- return dracclient_raid.VirtualDisk(**virtual_disk_dict)
- else:
- return dict_to_namedtuple(values=virtual_disk_dict)
+ tuple_class = dracclient_raid.VirtualDisk if dracclient_raid else None
+ return dict_to_namedtuple(values=virtual_disk_dict,
+ tuple_class=tuple_class)
def make_physical_disk(physical_disk_dict):
- if dracclient_raid:
- return dracclient_raid.PhysicalDisk(**physical_disk_dict)
- else:
- return dict_to_namedtuple(values=physical_disk_dict)
+ tuple_class = dracclient_raid.PhysicalDisk if dracclient_raid else None
+ return dict_to_namedtuple(values=physical_disk_dict,
+ tuple_class=tuple_class)