Files
SDR-Rover/Projects/SDR_Rover/tests/lab004_protocol_module.py
LittleSam129 acf7a76546 initial commit
2026-07-20 13:58:58 +03:00

120 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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 успешно выполнены.")