mqtt切换为远程服务器部署,优化简单指令解析时长

This commit is contained in:
Miayui
2026-09-11 10:22:24 +08:00
parent 51ca12b624
commit 3fc6f2c2a4
34 changed files with 4290 additions and 484 deletions
+59
View File
@@ -42,10 +42,22 @@ class _FakeMqttClient:
self.on_message = None
self.subscriptions: list[tuple[str, int]] = []
self.published: list[tuple[str, str, int, bool]] = []
self.websocket_options: list[dict[str, object]] = []
self.credentials: tuple[str, str | None] | None = None
self.tls_configured = False
def reconnect_delay_set(self, **_kwargs) -> None:
return None
def ws_set_options(self, **kwargs: object) -> None:
self.websocket_options.append(kwargs)
def username_pw_set(self, username: str, password: str | None) -> None:
self.credentials = (username, password)
def tls_set(self) -> None:
self.tls_configured = True
def connect_async(self, host: str, port: int, keepalive: int) -> None:
self.connection = (host, port, keepalive)
@@ -89,6 +101,8 @@ def _settings():
"password": None,
"tls_enabled": False,
"feedback_timeout_ms": 100,
"transport": "tcp",
"websocket_path": "/mqtt",
}
values["public_info"] = lambda: {
"enabled": True,
@@ -109,9 +123,31 @@ class MqttCanPayloadTests(unittest.TestCase):
self.assertEqual(settings.condition_topic, "n7/n7-headunit/can/state")
self.assertEqual(settings.control_topic, "n7/n7-headunit/can/command")
self.assertFalse(settings.approval_required)
self.assertEqual(settings.transport, "tcp")
self.assertEqual(settings.websocket_path, "/mqtt")
self.assertEqual(info["state_contract"], "n7-can-signals/v1")
self.assertEqual(info["control_contract"], "n7-headunit-can-command/v1")
def test_websocket_transport_settings_are_loaded_from_environment(self) -> None:
with patch.dict(
"os.environ",
{
"COGNITIVE_AGENT_VEHICLE_MQTT_HOST": "mqtt.example.test",
"COGNITIVE_AGENT_VEHICLE_MQTT_PORT": "443",
"COGNITIVE_AGENT_VEHICLE_MQTT_TRANSPORT": "websocket",
"COGNITIVE_AGENT_VEHICLE_MQTT_WEBSOCKET_PATH": "/mqtt",
"COGNITIVE_AGENT_VEHICLE_MQTT_TLS": "true",
},
clear=True,
):
settings = VehicleMqttSettings.from_env()
self.assertTrue(settings.adapter_configured)
self.assertEqual(settings.transport, "websockets")
self.assertEqual(settings.websocket_path, "/mqtt")
self.assertTrue(settings.tls_enabled)
self.assertEqual(settings.public_info()["transport"], "websockets")
def test_explicit_shared_approval_policy_still_locks_mqtt_control(self) -> None:
with patch.dict(
"os.environ",
@@ -461,6 +497,29 @@ class MqttCanTransportTests(unittest.TestCase):
def tearDown(self) -> None:
self.transport.close()
def test_websocket_client_applies_transport_path_authentication_and_tls(self) -> None:
client = _FakeMqttClient()
settings = _settings()
settings.transport = "websockets"
settings.websocket_path = "/mqtt"
settings.username = "n7web"
settings.password = "secret"
settings.tls_enabled = True
transport = MqttCanTransport(settings)
with patch("paho.mqtt.client.Client", return_value=client) as constructor:
transport.start()
try:
self.assertEqual(
constructor.call_args.kwargs["transport"], "websockets"
)
self.assertEqual(client.websocket_options, [{"path": "/mqtt"}])
self.assertEqual(client.credentials, ("n7web", "secret"))
self.assertTrue(client.tls_configured)
self.assertEqual(client.connection, ("127.0.0.1", 1883, 30))
finally:
transport.close()
def test_condition_frames_use_existing_decoder_and_snapshot_contract(self) -> None:
self.client.emit(
"n7/n7-headunit/can/state",