Files
cariflex/tools/shapeshifter-library-python-main/test/test_client_with_workers.py
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

74 lines
2.9 KiB
Python

from concurrent.futures import Future
from functools import partial
from time import sleep
from shapeshifter_uftp.uftp import AgrPortfolioUpdate
from .helpers.messages import messages_by_type
from .helpers.services import DummyAgrService, DummyCroService
def callback(response, future):
future.set_result(response)
def test_client_with_workers():
with DummyAgrService() as agr_service:
with DummyCroService() as cro_service:
with agr_service.cro_client(cro_service.sender_domain) as client:
message = messages_by_type[AgrPortfolioUpdate]
main_future = Future()
client._queue_message(message, partial(callback, future=main_future))
result = main_future.result()
assert result is None
def test_client_with_workers_retries():
with DummyAgrService() as agr_service:
with DummyCroService() as cro_service:
with agr_service.cro_client(cro_service.sender_domain) as client:
client.exponential_retry_base = 1.1
client.exponential_retry_factor = 0.1
old_endpoint_url = client.recipient_endpoint
client.recipient_endpoint = "http://example.com"
message = messages_by_type[AgrPortfolioUpdate]
main_future = Future()
client._queue_message(message, partial(callback, future=main_future))
sleep(1.0)
print("Left sleep")
client.recipient_endpoint = old_endpoint_url
assert main_future.result() is None
def test_client_with_workers_retries_never_finishes():
with DummyAgrService() as agr_service:
with DummyCroService() as cro_service:
with agr_service.cro_client(cro_service.sender_domain) as client:
client.num_delivery_attempts = 2
client.exponential_retry_base = 1.1
client.exponential_retry_factor = 0.1
old_endpoint_url = client.recipient_endpoint
client.recipient_endpoint = "http://example.com"
message = messages_by_type[AgrPortfolioUpdate]
main_future = Future()
client._queue_message(message, partial(callback, future=main_future))
sleep(2.0)
client.recipient_endpoint = old_endpoint_url
assert main_future.done() is False
def test_client_with_workers_error_in_callback():
def faulty_callback(response, future):
future.set_result(response)
raise ValueError("BOOM")
with DummyAgrService() as agr_service:
with DummyCroService() as cro_service:
with agr_service.cro_client(cro_service.sender_domain) as client:
message = messages_by_type[AgrPortfolioUpdate]
main_future = Future()
client._queue_message(message, partial(faulty_callback, future=main_future))
assert main_future.result() is None