- 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
74 lines
2.9 KiB
Python
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
|