twnet_parser/tests/packet_with_chunks7_test.py
ChillerDragon 0988cff4c9 Refactor to prepare proper msg unpacking
Rename `name` -> `message_name`
Replaced `GameMessage` and `SysMessage` with duck typed `NetMessage`
Split up packet.py in multiple files
2023-03-25 14:22:45 +01:00

75 lines
2.9 KiB
Python

from twnet_parser.packet import *
def test_parse_7_real_map_change():
packet = parse7(b'\x00\x01\x01\x58\xeb\x9a\xf4' \
b'\x40\x38\x01' \
b'\x05BlmapChill\x00' \
b'\xde\xcf\xaa\xee\x0b' \
b'\x8b\xbe\x8a\x01' \
b'\x08' \
b'\xa8\x15' \
b'\x81\x7d\xbf\x48\xc5\xf1\x94\x37\xc4\x58\x2c\x6f\x98\xc9\xc2\x04\xc1\xf1\x69\x76\x32\xf0\x44\x58\x74\x54\x55\x89\x84\x00\xfb\x28')
assert packet.version == '0.7'
assert packet.header.token == b'\x58\xeb\x9a\xf4'
assert packet.header.num_chunks == 1
assert packet.header.ack == 1
assert packet.header.flags.control == False
assert packet.header.flags.compression == False
# TODO: uncomment
assert len(packet.messages) == 1
assert packet.messages[0].message_name == 'map_change'
# Teeworlds 0.7 Protocol packet
# Flags: none (..00 00..)
# ..0. .... = Connection-oriented
# ...0 .... = Not compressed
# .... 0... = No resend requested
# .... .0.. = Not a control message
# Acknowledged sequence number: 1 (.... ..00 0000 0001)
# Number of chunks: 1
# Token: 58eb9af4
# Payload (59 bytes)
# Teeworlds 0.7 Protocol chunk: sys.map_change
# Header (vital: 1)
# Flags: vital (01.. ....)
# Size: 56 bytes (..00 0000 ..11 1000)
# Sequence number: 1 (00.. .... 0000 0001)
# Message: sys.map_change
# Name: "BlmapChill"
# Crc: -1592087519
# Size: 1134475
# Num response chunks per request: 8
# Chunk size: 1384
# Sha256: 817dbf48c5f19437c4582c6f98c9c204c1f1697632f04458745455898400fb28
# def test_parse_7_real_multi_chunk_compressed():
# # 0.7 motd, srv settings, ready
# packet = parse7(b'\x10\x02\x03\x58\xeb\x9a\xf4\x4a\x42\x88\x4a\x6e\x16\xba\x31\x46\xa2\x84\x9e\xbf\xe2\x06')
# # ^ ^ ^ ^ ^ ^ ^
# # |ack=2 | \_____________/ \_________________________________________________________/
# # | | | |
# # | chunks=3 token huffman compressed
# # | 3 chunks:
# # compression=true game.sv_motd, game.sv_server_settings, sys.con_ready
# assert packet.version == '0.7'
#
# assert packet.header.token == b'\x58\xeb\x9a\xf4'
#
# assert packet.header.num_chunks == 3
# assert packet.header.ack == 2
#
# assert packet.header.flags.compression == True
# assert packet.header.flags.control == False
#
# # TODO: uncomment
# # assert len(packet.messages) == 3
# # assert packet.messages[0].message_name == 'sv_motd'
# # assert packet.messages[1].message_name == 'sv_server_settings'
# # assert packet.messages[2].message_name == 'con_ready'