Annotation of embedaddon/strongswan/src/libcharon/plugins/vici/python/test/test_protocol.py, revision 1.1

1.1     ! misho       1: import pytest
        !             2: 
        !             3: from vici.protocol import Packet, Message, FiniteStream
        !             4: from vici.exception import DeserializationException
        !             5: 
        !             6: 
        !             7: class TestPacket(object):
        !             8:     # test data definitions for outgoing packet types
        !             9:     cmd_request = b"\x00\x0c" b"command_type"
        !            10:     cmd_request_msg = b"\x00\x07" b"command" b"payload"
        !            11:     event_register = b"\x03\x0a" b"event_type"
        !            12:     event_unregister = b"\x04\x0a" b"event_type"
        !            13: 
        !            14:     # test data definitions for incoming packet types
        !            15:     cmd_response = b"\x01" b"reply"
        !            16:     cmd_unknown = b"\x02"
        !            17:     event_confirm = b"\x05"
        !            18:     event_unknown = b"\x06"
        !            19:     event = b"\x07\x03" b"log" b"message"
        !            20: 
        !            21:     def test_request(self):
        !            22:         assert Packet.request("command_type") == self.cmd_request
        !            23:         assert Packet.request("command", b"payload") == self.cmd_request_msg
        !            24: 
        !            25:     def test_register_event(self):
        !            26:         assert Packet.register_event("event_type") == self.event_register
        !            27: 
        !            28:     def test_unregister_event(self):
        !            29:         assert Packet.unregister_event("event_type") == self.event_unregister
        !            30: 
        !            31:     def test_parse(self):
        !            32:         parsed_cmd_response = Packet.parse(self.cmd_response)
        !            33:         assert parsed_cmd_response.response_type == Packet.CMD_RESPONSE
        !            34:         assert parsed_cmd_response.payload.getvalue() == self.cmd_response
        !            35: 
        !            36:         parsed_cmd_unknown = Packet.parse(self.cmd_unknown)
        !            37:         assert parsed_cmd_unknown.response_type == Packet.CMD_UNKNOWN
        !            38:         assert parsed_cmd_unknown.payload.getvalue() == self.cmd_unknown
        !            39: 
        !            40:         parsed_event_confirm = Packet.parse(self.event_confirm)
        !            41:         assert parsed_event_confirm.response_type == Packet.EVENT_CONFIRM
        !            42:         assert parsed_event_confirm.payload.getvalue() == self.event_confirm
        !            43: 
        !            44:         parsed_event_unknown = Packet.parse(self.event_unknown)
        !            45:         assert parsed_event_unknown.response_type == Packet.EVENT_UNKNOWN
        !            46:         assert parsed_event_unknown.payload.getvalue() == self.event_unknown
        !            47: 
        !            48:         parsed_event = Packet.parse(self.event)
        !            49:         assert parsed_event.response_type == Packet.EVENT
        !            50:         assert parsed_event.payload.getvalue() == self.event
        !            51: 
        !            52: 
        !            53: class TestMessage(object):
        !            54:     """Message (de)serialization test."""
        !            55: 
        !            56:     # data definitions for test of de(serialization)
        !            57:     # serialized messages holding a section
        !            58:     ser_sec_unclosed = b"\x01\x08unclosed"
        !            59:     ser_sec_single = b"\x01\x07section\x02"
        !            60:     ser_sec_nested = b"\x01\x05outer\x01\x0asubsection\x02\x02"
        !            61: 
        !            62:     # serialized messages holding a list
        !            63:     ser_list_invalid = b"\x04\x07invalid\x05\x00\x02e1\x02\x03sec\x06"
        !            64:     ser_list_0_item = b"\x04\x05empty\x06"
        !            65:     ser_list_1_item = b"\x04\x01l\x05\x00\x02e1\x06"
        !            66:     ser_list_2_item = b"\x04\x01l\x05\x00\x02e1\x05\x00\x02e2\x06"
        !            67: 
        !            68:     # serialized messages with key value pairs
        !            69:     ser_kv_pair = b"\x03\x03key\x00\x05value"
        !            70:     ser_kv_zero = b"\x03\x0azerolength\x00\x00"
        !            71: 
        !            72:     # deserialized messages holding a section
        !            73:     des_sec_single = {"section": {}}
        !            74:     des_sec_nested = {"outer": {"subsection": {}}}
        !            75: 
        !            76:     # deserialized messages holding a list
        !            77:     des_list_0_item = {"empty": []}
        !            78:     des_list_1_item = {"l": [b"e1"]}
        !            79:     des_list_2_item = {"l": [b"e1", b"e2"]}
        !            80: 
        !            81:     # deserialized messages with key value pairs
        !            82:     des_kv_pair = {"key": b"value"}
        !            83:     des_kv_zero = {"zerolength": b""}
        !            84: 
        !            85:     def test_section_serialization(self):
        !            86:         assert Message.serialize(self.des_sec_single) == self.ser_sec_single
        !            87:         assert Message.serialize(self.des_sec_nested) == self.ser_sec_nested
        !            88: 
        !            89:     def test_list_serialization(self):
        !            90:         assert Message.serialize(self.des_list_0_item) == self.ser_list_0_item
        !            91:         assert Message.serialize(self.des_list_1_item) == self.ser_list_1_item
        !            92:         assert Message.serialize(self.des_list_2_item) == self.ser_list_2_item
        !            93: 
        !            94:     def test_key_serialization(self):
        !            95:         assert Message.serialize(self.des_kv_pair) == self.ser_kv_pair
        !            96:         assert Message.serialize(self.des_kv_zero) == self.ser_kv_zero
        !            97: 
        !            98:     def test_section_deserialization(self):
        !            99:         single = Message.deserialize(FiniteStream(self.ser_sec_single))
        !           100:         nested = Message.deserialize(FiniteStream(self.ser_sec_nested))
        !           101: 
        !           102:         assert single == self.des_sec_single
        !           103:         assert nested == self.des_sec_nested
        !           104: 
        !           105:         with pytest.raises(DeserializationException):
        !           106:             Message.deserialize(FiniteStream(self.ser_sec_unclosed))
        !           107: 
        !           108:     def test_list_deserialization(self):
        !           109:         l0 = Message.deserialize(FiniteStream(self.ser_list_0_item))
        !           110:         l1 = Message.deserialize(FiniteStream(self.ser_list_1_item))
        !           111:         l2 = Message.deserialize(FiniteStream(self.ser_list_2_item))
        !           112: 
        !           113:         assert l0 == self.des_list_0_item
        !           114:         assert l1 == self.des_list_1_item
        !           115:         assert l2 == self.des_list_2_item
        !           116: 
        !           117:         with pytest.raises(DeserializationException):
        !           118:             Message.deserialize(FiniteStream(self.ser_list_invalid))
        !           119: 
        !           120:     def test_key_deserialization(self):
        !           121:         pair = Message.deserialize(FiniteStream(self.ser_kv_pair))
        !           122:         zerolength = Message.deserialize(FiniteStream(self.ser_kv_zero))
        !           123: 
        !           124:         assert pair == self.des_kv_pair
        !           125:         assert zerolength == self.des_kv_zero
        !           126: 
        !           127:     def test_roundtrip(self):
        !           128:         message = {
        !           129:             "key1": "value1",
        !           130:             "section1": {
        !           131:                 "sub-section": {
        !           132:                     "key2": b"value2",
        !           133:                 },
        !           134:                 "list1": ["item1", "item2"],
        !           135:             },
        !           136:         }
        !           137:         serialized_message = FiniteStream(Message.serialize(message))
        !           138:         deserialized_message = Message.deserialize(serialized_message)
        !           139: 
        !           140:         # ensure that list items and key values remain as undecoded bytes
        !           141:         deserialized_section = deserialized_message["section1"]
        !           142:         assert deserialized_message["key1"] == b"value1"
        !           143:         assert deserialized_section["sub-section"]["key2"] == b"value2"
        !           144:         assert deserialized_section["list1"] == [b"item1", b"item2"]

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>