@@ -1269,6 +1269,14 @@ async def test_get_message_types(dbus, mctpd, routed_ep):
12691269 mctp = await mctpd_mctp_base_iface_obj (dbus )
12701270 await mctp .call_register_type_support (5 , [0xF1F2F3F4 ])
12711271
1272+ # Verify invalid msg type causes error
1273+ with pytest .raises (asyncdbus .errors .DBusError ) as ex :
1274+ await mctp .call_register_type_support (0x0 , [0xF1F2F3F4 ])
1275+ assert str (ex .value ) == "Invalid message type 0"
1276+ with pytest .raises (asyncdbus .errors .DBusError ) as ex :
1277+ await mctp .call_register_type_support (0x7e , [0xF1F2F3F4 ])
1278+ assert str (ex .value ) == "Invalid message type 126"
1279+
12721280 # Verify get message type response includes spdm
12731281 cmd = MCTPControlCommand (True , 0 , 0x05 , bytes ([0x00 ]))
12741282 rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
@@ -1297,6 +1305,11 @@ async def test_register_vdm_type_support_pcie_only(dbus, mctpd, routed_ep):
12971305 v_type = asyncdbus .Variant ('q' , 0xABCD )
12981306 await mctp .call_register_vdm_type_support (0x00 , v_type , 0x0001 )
12991307
1308+ # Verify Get Message Type Support response includes PCI VDM type
1309+ cmd = MCTPControlCommand (True , 0 , 0x05 , bytes ([0x00 ]))
1310+ rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1311+ assert rsp .hex (' ' ) == '00 05 00 02 00 7e'
1312+
13001313 # Verify PCIe VDM (selector 0)
13011314 cmd = MCTPControlCommand (True , 0 , 0x06 , bytes ([0x00 ]))
13021315 rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
@@ -1316,11 +1329,46 @@ async def test_register_vdm_type_support_iana_only(dbus, mctpd, routed_ep):
13161329 v_type = asyncdbus .Variant ('u' , 0x1234ABCD )
13171330 await mctp .call_register_vdm_type_support (0x01 , v_type , 0x5678 )
13181331
1332+ # Verify Get Message Type Support response includes IANA VDM type
1333+ cmd = MCTPControlCommand (True , 0 , 0x05 , bytes ([0x00 ]))
1334+ rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1335+ assert rsp .hex (' ' ) == '00 05 00 02 00 7f'
1336+
13191337 # Verify IANA VDM (selector 0)
13201338 cmd = MCTPControlCommand (True , 0 , 0x06 , bytes ([0x00 ]))
13211339 rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
13221340 assert rsp .hex (' ' ) == '00 06 00 ff 01 12 34 ab cd 56 78'
13231341
1342+ """ Test RegisterVDMTypeSupport when both IANA and PCI types are registered """
1343+ async def test_register_vdm_type_support_both (dbus , mctpd , routed_ep ):
1344+ ep = routed_ep
1345+ mctp = await mctpd_mctp_base_iface_obj (dbus )
1346+
1347+ # Register IANA VDM: format=0x01, VID=0x1234ABCD, command_set=0x5678
1348+ v_type = asyncdbus .Variant ('u' , 0x1234ABCD )
1349+ await mctp .call_register_vdm_type_support (0x01 , v_type , 0x5678 )
1350+
1351+ # Register PCI VDM: format=0x00, VID=0xABCD, command_set=0x5678
1352+ v_type = asyncdbus .Variant ('q' , 0xABCD )
1353+ await mctp .call_register_vdm_type_support (0x00 , v_type , 0x5678 )
1354+
1355+ # Verify Get Message Type Support response includes both VDM types
1356+ cmd = MCTPControlCommand (True , 0 , 0x05 , bytes ([0x00 ]))
1357+ rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1358+ assert rsp .hex (' ' ) == '00 05 00 03 00 7e 7f'
1359+
1360+ # we assume ordering of IANA vs PCI here, but current mctpd will
1361+ # preserve that.
1362+ # Verify IANA VDM (selector 0)
1363+ cmd = MCTPControlCommand (True , 0 , 0x06 , bytes ([0x00 ]))
1364+ rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1365+ assert rsp .hex (' ' ) == '00 06 00 01 01 12 34 ab cd 56 78'
1366+
1367+ # Verify PCI VDM (selector 1)
1368+ cmd = MCTPControlCommand (True , 0 , 0x06 , bytes ([0x01 ]))
1369+ rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1370+ assert rsp .hex (' ' ) == '00 06 00 ff 00 ab cd 56 78'
1371+
13241372""" Test RegisterVDMTypeSupport with dbus disconnect """
13251373async def test_register_vdm_type_support_dbus_disconnect (mctpd , routed_ep ):
13261374 ep = routed_ep
@@ -1333,14 +1381,24 @@ async def test_register_vdm_type_support_dbus_disconnect(mctpd, routed_ep):
13331381 async with asyncdbus .MessageBus ().connect () as temp_bus :
13341382 mctp = await mctpd_mctp_base_iface_obj (temp_bus )
13351383
1336- # Register PCIe VDM: format=0x00, VID=0xABCD, command_set=0x0001
1384+ # Register PCIe VDM: format=0x00, VID=0xABCD, command_set=1 and 2
13371385 v_type = asyncdbus .Variant ('q' , 0xABCD )
13381386 await mctp .call_register_vdm_type_support (0x00 , v_type , 0x0001 )
1387+ await mctp .call_register_vdm_type_support (0x00 , v_type , 0x0002 )
13391388
13401389 # Verify PCIe VDM (selector 0)
13411390 cmd = MCTPControlCommand (True , 0 , 0x06 , bytes ([0x00 ]))
13421391 rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1343- assert rsp .hex (' ' ) == '00 06 00 ff 00 ab cd 00 01'
1392+ assert rsp .hex (' ' ) == '00 06 00 01 00 ab cd 00 01'
1393+ # Verify PCIe VDM (selector 1)
1394+ cmd = MCTPControlCommand (True , 0 , 0x06 , bytes ([0x01 ]))
1395+ rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1396+ assert rsp .hex (' ' ) == '00 06 00 ff 00 ab cd 00 02'
1397+
1398+ # Verify GetMsgType includes VDM
1399+ cmd = MCTPControlCommand (True , 0 , 0x05 )
1400+ rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1401+ assert rsp .hex (' ' ) == '00 05 00 02 00 7e'
13441402
13451403 # Give mctpd a moment to process the disconnection
13461404 await trio .sleep (0.1 )
@@ -1350,6 +1408,11 @@ async def test_register_vdm_type_support_dbus_disconnect(mctpd, routed_ep):
13501408 rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
13511409 assert rsp .hex (' ' ) == '00 06 02' # Should be error again
13521410
1411+ # Verify GetMsgType has only control command
1412+ cmd = MCTPControlCommand (True , 0 , 0x05 )
1413+ rsp = await ep .send_control (mctpd .network .mctp_socket , cmd )
1414+ assert rsp .hex (' ' ) == '00 05 00 01 00'
1415+
13531416""" Test RegisterVDMTypeSupport error handling """
13541417async def test_register_vdm_type_support_errors (dbus , mctpd ):
13551418 mctp = await mctpd_mctp_base_iface_obj (dbus )
0 commit comments