10This test verifies that logging via a UDP connection works as expected.
25 "message":
"This is a INFO message",
28 "package":
"steering",
29 "function":
"send_basf2_messages",
36 "message":
"And this is a WARNING message",
39 "package":
"steering",
40 "function":
"send_basf2_messages",
47stop_server = threading.Event()
52 """UDP server that collects messages."""
53 with socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
as server_socket:
54 server_socket.bind((HOST, PORT))
55 server_socket.settimeout(0.5)
56 print(f
"[Server] Started listening on {HOST}:{PORT}")
57 while not stop_server.is_set():
59 data, addr = server_socket.recvfrom(1024)
60 except socket.timeout:
62 message = data.decode()
63 print(f
"[Server] Received from {addr}: {message}")
64 received_messages.append(message)
65 print(f
'[Server] Stopped listening on {HOST}:{PORT}')
68def send_basf2_messages():
69 """Send basf2 log messages via UDP."""
72 basf2.logging.add_udp(HOST, PORT)
73 basf2.B2INFO(
"This is a INFO message")
74 basf2.B2WARNING(
"And this is a WARNING message")
77def remove_fields(message_dict, fields):
78 """Return a copy of the dict without the specified fields."""
79 return {k: v
for k, v
in message_dict.items()
if k
not in fields}
82server_thread = threading.Thread(target=udp_server, daemon=
True)
92for received_message
in received_messages:
93 received_dict = json.loads(received_message)
94 normalized_received = remove_fields(received_dict, [
"file",
"line",
"timestamp"])
95 matched = any(normalized_received == expected
for expected
in EXPECTED_MESSAGES)
96 assert matched, f
"Received message not in expected messages: {normalized_received}"
def run_in_subprocess(*args, target, **kwargs)