def test_encode_varint(self): tmp = Message() self.assertEqual(tmp._encode_varint(0), b'\x00') self.assertEqual(tmp._encode_varint(1), b'\x01') self.assertEqual(tmp._encode_varint(150), b'\x96\x01') self.assertEqual(tmp._encode_varint(300), b'\xAC\x02')
def test_encode_field_signature(self): tmp = Message() self.assertEqual(tmp._encode_field_signature(0, 1), b'\x08') self.assertEqual(tmp._encode_field_signature(2, 2, 7), b'\x12\x07') self.assertRaises(ValueError, tmp._encode_field_signature, 10, 1) self.assertRaises(AssertionError, tmp._encode_field_signature, 2, 2)
def test_parse_from_bytes(self): tmp = Message() data = [0x08, 0x96, 0x01] expected_message = {1: [WireField(type=FIELD_VARINT, value=150)]} tmp.parse_from_bytes(data) self.assertDictEqual(tmp._Message__wire_message, expected_message)
def test_encode_field_signature(self): tmp = Message() self.assertEqual(tmp._encode_field_signature(0, 1), b"\x08") self.assertEqual(tmp._encode_field_signature(2, 2, 7), b"\x12\x07") self.assertRaises(ValueError, tmp._encode_field_signature, 10, 1) self.assertRaises(AssertionError, tmp._encode_field_signature, 2, 2)
def test_get_wire_values(self): tmp = Message() data = [0x08, 0x96, 0x01] tmp.parse_from_bytes(data) self.assertEqual(tmp._get_wire_values(1), [WireField(type=FIELD_VARINT, value=150)])
def test_decode_varint(self): tmp = Message() data = [0b00000001] self.assertEqual(tmp._decode_varint(iter(data)), 1) data = [0b10010110, 0b00000001] self.assertEqual(tmp._decode_varint(iter(data)), 150) data = [0b10101100, 0b00000010] self.assertEqual(tmp._decode_varint(iter(data)), 300)
def test_decode_field_signature(self): tmp = Message() data = [0b0001000] self.assertEqual(tmp._decode_field_signature(iter(data)), (0, 1, None)) data = [0x12, 0x07] self.assertEqual(tmp._decode_field_signature(iter(data)), (2, 2, 7)) data = [0b00001011] self.assertRaises(NotImplementedError, tmp._decode_field_signature, iter(data)) data = [0b00001111] self.assertRaises(ValueError, tmp._decode_field_signature, iter(data))
def test_create_from_bytes(self): data = bytes([0x08, 0x96, 0x01]) expected_message = {1: [WireField(type=FIELD_VARINT, value=150)]} tmp = Message.create_from_bytes(data) self.assertTrue(isinstance(tmp, Message)) self.assertDictEqual(tmp._Message__wire_message, expected_message)
def test_create_from_bytes(self): data = [0x08, 0x96, 0x01] expected_message = {1: [WireField(type=FIELD_VARINT, value=150)]} tmp = Message.create_from_bytes(data) self.assertTrue(isinstance(tmp, Message)) self.assertDictEqual(tmp._Message__wire_message, expected_message)
def test_decode_varint(self): tmp = Message() data = bytes([0b00000000]) self.assertEqual(tmp._decode_varint(data), 0) tmp = Message() data = bytes([0b00000001]) self.assertEqual(tmp._decode_varint(data), 1) tmp = Message() data = bytes([0b10010110, 0b00000001]) self.assertEqual(tmp._decode_varint(data), 150) tmp = Message() data = bytes([0b10101100, 0b00000010]) self.assertEqual(tmp._decode_varint(data), 300)
def test_decode_repeated_field_with_different_types(self): raw_message = [0x08, 0x96, 0x01, 0x0D, 0x01, 0x02, 0x03, 0x04] msg = Message() self.assertRaises(ValueError, msg.parse_from_bytes, raw_message)
def test_set_wire_values(self): tmp = Message() tmp._set_wire_values(1, FIELD_VARINT, 150) self.assertDictEqual(tmp._Message__wire_message, {1: [WireField(type=FIELD_VARINT, value=150)]})
def test_encode_to_bytes_varint(self): msg = Message() msg.parse_from_bytes(b"\x08\x96\x01") self.assertEqual(msg.encode_to_bytes(), b"\x08\x96\x01")
def test_encode_to_bytes_varint(self): msg = Message() msg.parse_from_bytes(b'\x08\x96\x01') self.assertEqual(msg.encode_to_bytes(), b'\x08\x96\x01')
def test_decode_raw_message(self): # FIELD_VARINT tmp = Message() data = [0x08, 0x96, 0x01] expected_message = {1: [WireField(type=FIELD_VARINT, value=150)]} tmp._decode_raw_message(iter(data)) self.assertDictEqual(tmp._Message__wire_message, expected_message) # FIELD_FIXED64 tmp = Message() data = [0x09, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08] expected_message = { 1: [ WireField(type=FIELD_FIXED64, value=b'\x01\x02\x03\x04\x05\x06\x07\x08') ] } tmp._decode_raw_message(iter(data)) self.assertDictEqual(tmp._Message__wire_message, expected_message) # FIELD_VARIABLE_LENGTH tmp = Message() data = [0x12, 0x07, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6E, 0x67] expected_message = { 2: [WireField(type=FIELD_VARIABLE_LENGTH, value=b'testing')] } tmp._decode_raw_message(iter(data)) self.assertDictEqual(tmp._Message__wire_message, expected_message) # FIELD_FIXED32 tmp = Message() data = [0x0D, 0x01, 0x02, 0x03, 0x04] expected_message = { 1: [WireField(type=FIELD_FIXED32, value=b'\x01\x02\x03\x04')] } tmp._decode_raw_message(iter(data)) self.assertDictEqual(tmp._Message__wire_message, expected_message)
def test_encode_varint(self): tmp = Message() self.assertEqual(tmp._encode_varint(1), b"\x01") self.assertEqual(tmp._encode_varint(150), b"\x96\x01") self.assertEqual(tmp._encode_varint(300), b"\xAC\x02")
def test_decode_raw_message(self): # FIELD_VARINT tmp = Message() data = [0x08, 0x96, 0x01] expected_message = {1: [WireField(type=FIELD_VARINT, value=150)]} tmp._decode_raw_message(iter(data)) self.assertDictEqual(tmp._Message__wire_message, expected_message) # FIELD_FIXED64 tmp = Message() data = [0x09, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08] expected_message = {1: [WireField(type=FIELD_FIXED64, value=b"\x01\x02\x03\x04\x05\x06\x07\x08")]} tmp._decode_raw_message(iter(data)) self.assertDictEqual(tmp._Message__wire_message, expected_message) # FIELD_VARIABLE_LENGTH tmp = Message() data = [0x12, 0x07, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6E, 0x67] expected_message = {2: [WireField(type=FIELD_VARIABLE_LENGTH, value=b"testing")]} tmp._decode_raw_message(iter(data)) self.assertDictEqual(tmp._Message__wire_message, expected_message) # FIELD_FIXED32 tmp = Message() data = [0x0D, 0x01, 0x02, 0x03, 0x04] expected_message = {1: [WireField(type=FIELD_FIXED32, value=b"\x01\x02\x03\x04")]} tmp._decode_raw_message(iter(data)) self.assertDictEqual(tmp._Message__wire_message, expected_message)
class SocketFamily(Enum): INET = 1 INET6 = 2 class SocketProtocol(Enum): UDP = 1 TCP = 2 Dnstap.add_field('identity', BytesField(field_number=1, optional=True)) Dnstap.add_field('version', BytesField(field_number=2, optional=True)) Dnstap.add_field('extra', BytesField(field_number=3, optional=True)) Dnstap.add_field('type', EnumField(field_number=15, required=True, enum_cls=Dnstap.Type)) Dnstap.add_field('message', MessageField(field_number=14, optional=True, message_cls=Message)) Message.add_field('type', EnumField(field_number=1, required=True, enum_cls=Message.Type)) Message.add_field('socket_family', EnumField(field_number=2, optional=True, enum_cls=SocketFamily)) Message.add_field('socket_protocol', EnumField(field_number=3, optional=True, enum_cls=SocketProtocol)) Message.add_field('query_address', BytesField(field_number=4, optional=True)) Message.add_field('response_address', BytesField(field_number=5, optional=True)) Message.add_field('query_port', UInt32Field(field_number=6, optional=True)) Message.add_field('response_port', UInt32Field(field_number=7, optional=True)) Message.add_field('query_time_sec', UInt64Field(field_number=8, optional=True)) Message.add_field('query_time_nsec', Fixed32Field(field_number=9, optional=True)) Message.add_field('query_message', BytesField(field_number=10, optional=True)) Message.add_field('query_zone', BytesField(field_number=11, optional=True)) Message.add_field('response_time_sec', UInt64Field(field_number=12, optional=True)) Message.add_field('response_time_nsec', Fixed32Field(field_number=13, optional=True)) Message.add_field('response_message', BytesField(field_number=14, optional=True))
'state', MessageField(field_number=2, optional=True, message_cls=GameState)) SrvGameMessage.add_field( 'action', MessageField(field_number=4, optional=True, message_cls=GameAction)) SrvGameMessage.add_field( 'effect', MessageField(field_number=5, optional=True, message_cls=GameEffect)) SrvGameMessage.add_field('error', StringField(field_number=7, optional=True)) SrvGameMessage.add_field( 'your_side', EnumField(field_number=6, optional=True, enum_cls=Side)) SrvGameEnded.add_field('game_id', StringField(field_number=1, optional=True)) SrvGameEnded.add_field('interrupted', BoolField(field_number=2, optional=True)) SrvPlayerLeft.add_field('game_id', StringField(field_number=1, optional=True)) SrvPlayerLeft.add_field('player_id', Int32Field(field_number=2, optional=True)) Message.add_field('domain', EnumField(field_number=1, optional=True, enum_cls=Domain)) Message.add_field('head', EnumField(field_number=2, optional=True, enum_cls=Head)) Message.add_field('status', StringField(field_number=3, optional=True)) Message.add_field('error', StringField(field_number=4, optional=True)) Message.add_field( 'hello', MessageField(field_number=5, optional=True, message_cls=SrvHello)) Message.add_field( 'game_created', MessageField(field_number=6, optional=True, message_cls=SrvQueueGameCreated)) Message.add_field( 'game_ended', MessageField(field_number=8, optional=True, message_cls=SrvGameEnded)) Message.add_field(