from __future__ import annotations import socket import threading from app.executors.tcp_probe_executor import TcpProbeExecutor def test_tcp_probe_executor_success() -> None: server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("127.0.0.1", 0)) server.listen(1) host, port = server.getsockname() def accept_once() -> None: conn, _ = server.accept() conn.close() server.close() thread = threading.Thread(target=accept_once, daemon=True) thread.start() success, message, data, evidence = TcpProbeExecutor().execute({"host": host, "port": port, "timeout_ms": 1000}) thread.join(timeout=1) assert success is True assert message == "tcp probe succeeded" assert data["connected"] is True assert data["latency_ms"] is not None assert evidence == {} def test_tcp_probe_executor_failure() -> None: success, message, data, evidence = TcpProbeExecutor().execute({"host": "127.0.0.1", "port": 9, "timeout_ms": 100}) assert success is False assert data["connected"] is False assert isinstance(message, str) assert evidence == {}