Skip to content

Commit 842f6fa

Browse files
committed
tests: mctpenv: allow parsing VDMTypes from a dbus response, use for comparisons
Now that we have a VDM type, construct a set from dbus responses, and use this to copmpare against expected values. Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
1 parent 11d6613 commit 842f6fa

2 files changed

Lines changed: 28 additions & 19 deletions

File tree

tests/mctpenv/__init__.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,11 @@ class VDMType:
357357
TYPE_PCI: ("PCI", FORMAT_PCI, 2),
358358
TYPE_IANA: ("IANA", FORMAT_IANA, 4),
359359
}
360+
# format to (type, dbus type)
361+
fmt_map = {
362+
FORMAT_PCI: (TYPE_PCI, 'q'),
363+
FORMAT_IANA: (TYPE_IANA, 'u'),
364+
}
360365

361366
def __init__(self, msgtype, vdmtype, subtype=0):
362367
self.msgtype = msgtype
@@ -367,6 +372,15 @@ def __repr__(self):
367372
(name, _, _) = self.type_map.get(self.msgtype)
368373
return f"<VDMType {name}: {self.vdmtype:x} {self.subtype:x}>"
369374

375+
def _key(self):
376+
return (self.msgtype, self.vdmtype, self.subtype)
377+
378+
def __eq__(self, value):
379+
return self._key() == value._key()
380+
381+
def __hash__(self):
382+
return hash(self._key())
383+
370384
def format(self):
371385
"""Convert to the Get Vendor Defined Message Support response format"""
372386
(_, vid_fmt, vid_size) = self.type_map.get(self.msgtype)
@@ -377,6 +391,17 @@ def format(self):
377391
+ self.subtype.to_bytes(2, 'big')
378392
)
379393

394+
@classmethod
395+
def parse_dbus(cls, dbus_res):
396+
"""Convert from a dbus GetVendorDefinedMessageTypes reply"""
397+
types = []
398+
for t in dbus_res:
399+
fmt, var, subtype = t
400+
(msgtype, dbus_type) = cls.fmt_map.get(fmt)
401+
assert var.signature == dbus_type
402+
types.append(cls(msgtype, var.value, subtype))
403+
return types
404+
380405

381406
class Endpoint:
382407
def __init__(

tests/test_mctpd.py

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -660,25 +660,9 @@ async def test_query_vdm_types(dbus, mctpd):
660660

661661
ep_obj = await mctpd_mctp_endpoint_common_obj(dbus, path)
662662

663-
# Query VendorDefinedMessageTypes property
664-
vdm_types = list(await ep_obj.get_vendor_defined_message_types())
665-
666-
# Verify we got 2 VDM types
667-
assert len(vdm_types) == 2
668-
669-
# Verify first VDM type: PCIe format (0), VID 0x1234, cmd_set 0x5678
670-
assert vdm_types[0][0] == 0 # format: PCIe
671-
assert (
672-
vdm_types[0][1].value == 0x1234
673-
) # vendor_id (variant containing uint16)
674-
assert vdm_types[0][2] == 0x5678 # cmd_set
675-
676-
# Verify second VDM type: IANA format (1), VID 0xabcdef12, cmd_set 0x3456
677-
assert vdm_types[1][0] == 1 # format: IANA
678-
assert (
679-
vdm_types[1][1].value == 0xABCDEF12
680-
) # vendor_id (variant containing uint32)
681-
assert vdm_types[1][2] == 0x3456 # cmd_set
663+
r = await ep_obj.get_vendor_defined_message_types()
664+
ret_vdm_types = VDMType.parse_dbus(r)
665+
assert set(vdm_types) == set(ret_vdm_types)
682666

683667

684668
class InvalidVDMEndpointBase(Endpoint):

0 commit comments

Comments
 (0)