diff --git a/tests/e2e/test_e2e.py b/tests/e2e/test_e2e.py index 0aef1e738..410be28bd 100644 --- a/tests/e2e/test_e2e.py +++ b/tests/e2e/test_e2e.py @@ -503,3 +503,54 @@ class TestE2E(StepsFilter, StepsStore, StepsRelay, StepsLightPush): pubsub_topic=self.test_pubsub_topic, content_topics=self.test_content_topic, page_size=5, ascending="true" ) assert len(store_response["messages"]) == 1, "Can't find stored message!!" + + @pytest.mark.timeout(60 * 4) + def test_relay_2_nodes_bandwidth_high_vs_low(self): + self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}") + self.node2 = WakuNode(NODE_2, f"node2_{self.test_id}") + + self.node1.start(relay="true") + self.node2.start(relay="true", discv5_bootstrap_node=self.node1.get_enr_uri()) + + self.node1.set_relay_subscriptions([self.test_pubsub_topic]) + self.node2.set_relay_subscriptions([self.test_pubsub_topic]) + + self.wait_for_autoconnection([self.node1, self.node2], hard_wait=10) + + msg_count = 120 + window_s = 20 + + self.tc.add_bandwidth(self.node2, rate="10mbit") + + for _ in range(msg_count): + self.node1.send_relay_message( + self.create_message(), + self.test_pubsub_topic, + ) + + deadline = time() + window_s + high_bw_msgs = 0 + while time() < deadline: + msgs = self.node2.get_relay_messages(self.test_pubsub_topic) or [] + high_bw_msgs = max(high_bw_msgs, len(msgs)) + sleep(0.5) + + self.tc.add_bandwidth(self.node2, rate="256kbit") + + for _ in range(msg_count): + self.node1.send_relay_message( + self.create_message(), + self.test_pubsub_topic, + ) + + deadline = time() + window_s + low_bw_msgs = 0 + while time() < deadline: + msgs = self.node2.get_relay_messages(self.test_pubsub_topic) or [] + low_bw_msgs = max(low_bw_msgs, len(msgs)) + sleep(0.5) + + logger.info(f"high_bw_msgs={high_bw_msgs} low_bw_msgs={low_bw_msgs} " f"msg_count={msg_count} window={window_s}s") + + assert high_bw_msgs > 0 + assert high_bw_msgs >= low_bw_msgs