From 9e11ccb6bd68b75e733e3894e241cfc525897bd6 Mon Sep 17 00:00:00 2001 From: Aya Hassan Date: Sun, 26 Apr 2026 16:49:41 +0200 Subject: [PATCH] Adding S24 --- tests/wrappers_tests/test_send_e2e.py | 68 +++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/tests/wrappers_tests/test_send_e2e.py b/tests/wrappers_tests/test_send_e2e.py index 5b4e480ff..1b73ead77 100644 --- a/tests/wrappers_tests/test_send_e2e.py +++ b/tests/wrappers_tests/test_send_e2e.py @@ -101,7 +101,6 @@ class TestSendBeforeRelay(StepsStore): """ S23: non-ephemeral message, reliability enabled, no store peer ever reachable. - Expected: Ok(RequestId), Propagated event only, no Sent and no terminal error. - - Purpose: regression detector — current implementation does not convert """ sender_collector = EventCollector() @@ -188,8 +187,6 @@ class TestSendBeforeRelay(StepsStore): """ sender_collector = EventCollector() - sender_collector = EventCollector() - node_config.update( { "relay": True, @@ -388,6 +385,71 @@ class TestSendBeforeRelay(StepsStore): f"Collected events: {sender_collector.events}" ) + def test_s24_ephemeral_message_with_reachable_store(self, node_config): + """ + S24: ephemeral message, reliability enabled, reachable store peer. + - Setup: propagation path exists, relay peer has store=True (reachable), + - Expected: Ok(RequestId), Propagated event only, no Sent event. + """ + + sender_collector = EventCollector() + + node_config.update( + { + "relay": True, + "store": False, + "discv5Discovery": False, + "numShardsInNetwork": 1, + "reliabilityEnabled": True, + } + ) + + sender_result = WrapperManager.create_and_start( + config=node_config, + event_cb=sender_collector.event_callback, + ) + assert sender_result.is_ok(), f"Failed to start sender: {sender_result.err()}" + + with sender_result.ok_value as sender_node: + relay_config = { + **node_config, + "staticnodes": [get_node_multiaddr(sender_node)], + "portsshift": 1, + "store": True, + } + + relay_result = WrapperManager.create_and_start(config=relay_config) + assert relay_result.is_ok(), f"Failed to start relay peer: {relay_result.err()}" + + with relay_result.ok_value: + message = create_message_bindings(ephemeral=True) + send_result = sender_node.send_message(message=message) + assert send_result.is_ok(), f"send() must return Ok(RequestId), got: {send_result.err()}" + + request_id = send_result.ok_value + assert request_id, "send() returned an empty RequestId" + + propagated_event = wait_for_propagated( + collector=sender_collector, + request_id=request_id, + timeout_s=PROPAGATED_TIMEOUT_S, + ) + assert propagated_event is not None, ( + f"No MessagePropagatedEvent received within {PROPAGATED_TIMEOUT_S}s. " f"Collected events: {sender_collector.events}" + ) + + sent_event = wait_for_sent( + collector=sender_collector, + request_id=request_id, + timeout_s=NO_STORE_OBSERVATION_S, + ) + assert sent_event is None, ( + f"Unexpected MessageSentEvent for an ephemeral message. " + f"Ephemeral messages must never be store-validated.\n" + f"Sent event: {sent_event}\n" + f"Collected events: {sender_collector.events}" + ) + class TestS06CoreSenderRelayOnly(StepsCommon): """