diff --git a/pcapkit/protocols/internet/hip.py b/pcapkit/protocols/internet/hip.py index 83d480545f..332bb2b746 100644 --- a/pcapkit/protocols/internet/hip.py +++ b/pcapkit/protocols/internet/hip.py @@ -5033,10 +5033,10 @@ def _make_param_echo_request_unsigned(self, code: 'Enum_Parameter', param: 'Opti opaque=opaque, ) - def _make_param_echo_response_unsigned(self, code: 'Enum_Parameter', param: 'Optional[Data_EchoRequestUnsignedParameter]' = None, *, # pylint: disable=unused-argument + def _make_param_echo_response_unsigned(self, code: 'Enum_Parameter', param: 'Optional[Data_EchoResponseUnsignedParameter]' = None, *, # pylint: disable=unused-argument version: 'int', opaque: 'bytes' = b'', - **kwargs: 'Any') -> 'Schema_EchoRequestUnsignedParameter': + **kwargs: 'Any') -> 'Schema_EchoResponseUnsignedParameter': """Make HIP ``ECHO_RESPONSE_UNSIGNED`` parameter. Args: @@ -5053,7 +5053,7 @@ def _make_param_echo_response_unsigned(self, code: 'Enum_Parameter', param: 'Opt if param is not None: opaque = param.opaque - return Schema_EchoRequestUnsignedParameter( + return Schema_EchoResponseUnsignedParameter( type=code, len=len(opaque), opaque=opaque, diff --git a/tests/protocols/internet/test_hip_unit.py b/tests/protocols/internet/test_hip_unit.py index 8662d077c8..e36f994f64 100644 --- a/tests/protocols/internet/test_hip_unit.py +++ b/tests/protocols/internet/test_hip_unit.py @@ -3514,6 +3514,31 @@ def rfc_total(length: int) -> int: with self.assertRaisesRegex(FieldValueError, 'invalid parameter length'): hip_schema.encrypted_data_len({'len': 19, 'iv': b'\x11' * 16}) + def test_hip_echo_response_unsigned_maker_builds_the_response_schema(self) -> None: + # #2170: the maker built the ECHO_REQUEST_UNSIGNED schema class, and its + # ``param`` and return annotations named the Request classes. + from pcapkit.const.hip.parameter import Parameter + from pcapkit.protocols.data.internet import hip as hip_data + from pcapkit.protocols.internet.hip import HIP + from pcapkit.protocols.schema.internet import hip as hip_schema + + proto = object.__new__(HIP) + param = hip_data.EchoResponseUnsignedParameter(type=Parameter.ECHO_RESPONSE_UNSIGNED, + critical=False, length=4, opaque=b'abcd') + for name, schema in ( + ('keywords', proto._make_param_echo_response_unsigned( + Parameter.ECHO_RESPONSE_UNSIGNED, version=2, opaque=b'abcd')), + ('data', proto._make_param_echo_response_unsigned( + Parameter.ECHO_RESPONSE_UNSIGNED, param, version=2)), + ): + with self.subTest(source=name): + self.assertIs(type(schema), hip_schema.EchoResponseUnsignedParameter) + self.assertEqual(schema.opaque, b'abcd') + + hints = HIP._make_param_echo_response_unsigned.__annotations__ + self.assertEqual(hints['param'], 'Optional[Data_EchoResponseUnsignedParameter]') + self.assertEqual(hints['return'], 'Schema_EchoResponseUnsignedParameter') + if __name__ == '__main__': unittest.main()