Ejemplo n.º 1
0
    def test_encode_header_invalid_length(self):
        method = 0x0001
        message_class = MessageClass.Request
        transaction_id = 123
        invalid_message_lengths = [-1, 0x1FFFF]

        for message_length in invalid_message_lengths:
            data_description = f"case for message_length={message_length}"

            with self.assertRaises(AssertionError, msg=data_description):
                _encode_message_header(
                    message_class,
                    method,
                    message_length,
                    transaction_id
                )
Ejemplo n.º 2
0
    def test_encode_zero_header(self):
        method = 0x0
        message_class = 0x0
        transaction_id = 0x0
        message_length = 0x0

        encoded_header = _encode_message_header(message_class, method, message_length, transaction_id)

        self.assertIsInstance(encoded_header, bytes)
        self.assertEqual(len(encoded_header), 20)
        self.assertEqual(encoded_header, b"\x00" * 4 + MAGIC_COOKIE.to_bytes(4, "big") + b"\x00" * 12)
Ejemplo n.º 3
0
    def test_encode_header_valid_message_class(self):
        method = 0x0001
        message_classes = list(MessageClass)
        message_length = 12 
        transaction_id = 0

        for message_class in message_classes:
            case_message = f"for message_class={message_class}" 
            encoded_header = _encode_message_header(message_class, method, message_length, transaction_id)
            message_type = int.from_bytes(encoded_header[0:2], case_message)
            self.assertEqual(len(encoded_header), 20, case_message)
            self.assertEqual(message_class, message_type & 0x0110, case_message) 
Ejemplo n.º 4
0
    def test_encode_header_valid_transaction_id(self):
        transaction_ids = [0, 1, 2**96 - 1]
        method = 0x0001
        message_class = MessageClass.Request
        message_length = 12

        for transaction_id in transaction_ids:
            data_description = f"case for transaction_id={transaction_id}"

            encoded_header = _encode_message_header(
                message_class,
                method,
                message_length,
                transaction_id
            )

            transaction_id_bytes = encoded_header[8:]
            transaction_id_decoded = int.from_bytes(transaction_id_bytes, "big")
            self.assertEqual(len(encoded_header), 20, data_description)
            self.assertIsInstance(encoded_header, bytes, data_description)
            self.assertEqual(transaction_id_decoded, transaction_id, data_description)
Ejemplo n.º 5
0
    def test_encode_header_valid_method(self):
        method_type_pairs = [
            (0b0, 0b0),
            (0b111111111111, 0b11111011101111),
            (0b101010101010, 0b10101001001010),
            (0b010101010101, 0b01010010100101),
        ]
        message_class = MessageClass.Request
        message_length = 13
        transaction_id = 123

        for method, message_type in method_type_pairs:
            encoded_header = _encode_message_header(
                message_class,
                method,
                message_length,
                transaction_id
            )

            message_type_decoded = int.from_bytes(encoded_header[0:2], "big")
            self.assertEqual(len(encoded_header), 20)
            self.assertIsInstance(encoded_header, bytes)
            self.assertEqual(message_type_decoded, message_type)
Ejemplo n.º 6
0
    def test_encode_testcase_header(self):
        testcases = [
            "bind-request-packet.json",
            "bind-response-success-packet.json",
            "bind-response-error-401-packet.json"
        ]

        for testcase in testcases:
            header, payload, message_fields = load_message_testcase(testcase)
            method = message_fields["method"]
            message_class = message_fields["message_class"]
            message_length = len(payload)
            transaction_id = message_fields["transaction_id"] 

            encoded_header = _encode_message_header(
                message_class, 
                method, 
                message_length, 
                transaction_id
            )
            
            self.assertIsInstance(encoded_header, bytes)
            self.assertEqual(len(encoded_header), 20)
            self.assertEqual(encoded_header, header)