From c877ca21f9daaf54f8e4e1a30d410fd7d44c53ab Mon Sep 17 00:00:00 2001 From: seaspotter Date: Mon, 14 Sep 2026 21:19:41 +0200 Subject: [PATCH] fix: Tronity SoC-Abruf ohne Timeout kann unbegrenzt haengen create_session() nutzte eine rohe requests.Session ohne Timeout, statt wie jedes andere Fahrzeugmodul (renault, tesla, myskoda, ovms, ...) req.get_http_session() zu verwenden (5s Default-Timeout). Erklaert vermutlich https://github.com/openWB/core/discussions/3938: das Log zeigt fuer betroffene Fahrzeuge "Starting new HTTPS connection" ohne jede Folgezeile - der Request haengt am Socket fest statt nach 5s mit einem Fehler abzubrechen, wodurch der SoC-Abruf fuer dieses Fahrzeug dauerhaft blockiert. Regressionstest prueft, dass create_session() die timeout-behaftete CustomSession liefert, ohne echte Tronity-Zugangsdaten oder einen MQTT-Broker zu benoetigen. --- packages/modules/vehicles/tronity/api.py | 2 +- packages/modules/vehicles/tronity/api_test.py | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 packages/modules/vehicles/tronity/api_test.py diff --git a/packages/modules/vehicles/tronity/api.py b/packages/modules/vehicles/tronity/api.py index 8696a12a05..c3eb804027 100644 --- a/packages/modules/vehicles/tronity/api.py +++ b/packages/modules/vehicles/tronity/api.py @@ -48,7 +48,7 @@ def write_token_mqtt(topic: str, token: str, config: TronityVehicleSocConfigurat def create_session(config: TronityVehicleSocConfiguration, vehicle: int) -> req.Session: - session = req.Session() + session = req.get_http_session() data = {'grant_type': 'app', 'client_id': str(config.client_id), 'client_secret': str(config.client_secret)} diff --git a/packages/modules/vehicles/tronity/api_test.py b/packages/modules/vehicles/tronity/api_test.py new file mode 100644 index 0000000000..b7beee9874 --- /dev/null +++ b/packages/modules/vehicles/tronity/api_test.py @@ -0,0 +1,25 @@ +import time + +import jwt + +from modules.common import req +from modules.vehicles.tronity.api import create_session +from modules.vehicles.tronity.config import TronityVehicleSocConfiguration + + +def test_create_session_uses_session_with_default_timeout(): + # Ein bereits gueltiger Token vermeidet den Token-Request-Zweig (der wuerde ueber + # write_token_mqtt() einen echten Pub()/MQTT-Broker ansprechen). + valid_token = jwt.encode({"exp": time.time() + 3600}, "test-secret-key-that-is-at-least-32-bytes-long", + algorithm="HS256") + config = TronityVehicleSocConfiguration( + vehicle_id="vid", client_id="id", client_secret="secret", access_token=valid_token) + + session = create_session(config, vehicle=1) + + # Regression: create_session nutzte frueher eine rohe requests.Session ohne Timeout - + # dadurch konnte ein haengender Tronity-Request den SoC-Abruf dauerhaft blockieren + # (https://github.com/openWB/core/discussions/3938). Jedes andere Fahrzeugmodul nutzt + # bereits req.get_http_session() (5s Default-Timeout). + assert isinstance(session, req.CustomSession) + assert session.default_timeout == 5