# -*- coding: utf-8 -*- """ Created on Fri Jul 10 17:19:11 2026 @author: user """ """ Lab004. Проверка модуля protocol.packet. Проверяем: 1. Формирование пакета. 2. Разбор исправного пакета. 3. Восстановление текста. 4. Обнаружение повреждения CRC. """ from protocol.packet import ( CRCError, HEADER_SIZE, MESSAGE_TYPE_TEXT, build_packet, parse_packet, ) # ============================================================ # Формирование пакета # ============================================================ message = "ПРИВЕТ SDR" payload = message.encode("utf-8") sequence_number = 7 packet = build_packet( payload=payload, message_type=MESSAGE_TYPE_TEXT, sequence_number=sequence_number, ) print("Исходное сообщение:") print(message) print("\nСформированный пакет:") print(packet.hex(" ")) print("\nРазмер пакета:") print(len(packet), "байт") # ============================================================ # Разбор исправного пакета # ============================================================ parsed_packet = parse_packet(packet) restored_message = parsed_packet.payload.decode("utf-8") print("\n--- Разобранный пакет ---") print("Версия:") print(parsed_packet.version) print("\nТип сообщения:") print(parsed_packet.message_type) print("\nПорядковый номер:") print(parsed_packet.sequence_number) print("\nПолезная нагрузка:") print(parsed_packet.payload) print("\nВосстановленное сообщение:") print(restored_message) assert parsed_packet.message_type == MESSAGE_TYPE_TEXT assert parsed_packet.sequence_number == sequence_number assert restored_message == message print("\nИсправный пакет успешно разобран.") # ============================================================ # Повреждение одного бита # ============================================================ corrupted_packet = bytearray(packet) # В строке "ПРИВЕТ SDR" буква S находится # по индексу 13 внутри полезной нагрузки. payload_byte_index = 13 packet_byte_index = ( HEADER_SIZE + payload_byte_index ) corrupted_packet[packet_byte_index] ^= 0x01 print("\n--- Проверка повреждённого пакета ---") try: parse_packet(corrupted_packet) except CRCError as error: print("Повреждение обнаружено.") print(error) else: raise AssertionError( "Ошибка: повреждённый пакет был принят как исправный" ) print("\nВсе проверки Lab004 успешно выполнены.")