Skip to content

Commit

Permalink
test_: test rate limiting (#6332)
Browse files Browse the repository at this point in the history
  • Loading branch information
fbarbu15 authored Feb 14, 2025
1 parent 088e351 commit 9e0956b
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 11 deletions.
16 changes: 7 additions & 9 deletions tests-functional/clients/status_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,25 +200,23 @@ def extract_data(self, path: str):

return temp_dir

def create_account_and_login(
self,
data_dir=USER_DIR,
display_name=None,
password=user_1.password,
):
self.display_name = (
display_name if display_name else f"DISP_NAME_{''.join(random.choices(string.ascii_letters + string.digits + '_-', k=10))}"
def create_account_and_login(self, data_dir=USER_DIR, **kwargs):
self.display_name = kwargs.get(
"display_name",
f"DISP_NAME_{''.join(random.choices(string.ascii_letters + string.digits + '_-', k=10))}",
)
method = "CreateAccountAndLogin"
data = {
"rootDataDir": data_dir,
"kdfIterations": 256000,
"displayName": self.display_name,
"password": password,
"password": kwargs.get("password", user_1.password),
"customizationColor": "primary",
"logEnabled": True,
"logLevel": "DEBUG",
"wakuV2LightClient": kwargs.get("wakuV2LightClient", False),
}

data = self._set_proxy_credentials(data)
resp = self.api_valid_request(method, data)
self.node_login_event = self.find_signal_containing_pattern(SignalType.NODE_LOGIN.value, event_pattern=self.display_name)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from time import sleep, time
from uuid import uuid4
import pytest

from tests.test_cases import MessengerTestCase
from clients.signals import SignalType
from resources.enums import MessageContentType


@pytest.mark.reliability
class TestLightClientRateLimiting(MessengerTestCase):

def test_light_client_rate_limiting(self):
self.sender = self.initialize_backend(await_signals=self.await_signals, wakuV2LightClient=True)
self.receiver = self.initialize_backend(await_signals=self.await_signals, wakuV2LightClient=True)
sent_messages = []

for i in range(200):
message_text = f"test_message_{i+1}_{uuid4()}"
response = self.sender.wakuext_service.send_message(self.receiver.public_key, message_text)
expected_message = self.get_message_by_content_type(response, content_type=MessageContentType.TEXT_PLAIN.value)[0]
sent_messages.append(expected_message)
sleep(0.01)

start_time = time()
for i, expected_message in enumerate(sent_messages):
messages_new_event = self.receiver.find_signal_containing_pattern(
SignalType.MESSAGES_NEW.value,
event_pattern=expected_message.get("id"),
timeout=60,
)
self.validate_signal_event_against_response(
signal_event=messages_new_event,
fields_to_validate={"text": "text"},
expected_message=expected_message,
)
elapsed_time = time() - start_time

assert elapsed_time >= 30, f"Message sending was too fast: {elapsed_time:.2f} seconds. Rate limiting is not applied"
assert elapsed_time <= 60, f"Message sending took too long: {elapsed_time:.2f} seconds. Rate limiting is too high"
4 changes: 2 additions & 2 deletions tests-functional/tests/test_cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,10 +219,10 @@ def setup_two_unprivileged_nodes(self, request):
request.cls.sender = self.sender = self.initialize_backend(self.await_signals, False)
request.cls.receiver = self.receiver = self.initialize_backend(self.await_signals, False)

def initialize_backend(self, await_signals, privileged=True):
def initialize_backend(self, await_signals, privileged=True, **kwargs):
backend = StatusBackend(await_signals, privileged)
backend.init_status_backend()
backend.create_account_and_login()
backend.create_account_and_login(**kwargs)
backend.find_public_key()
backend.wakuext_service.start_messenger()
return backend
Expand Down

0 comments on commit 9e0956b

Please sign in to comment.