Files
Igor Sirotin b7ba8e52d6 refactor: move test suites under test/
tests-functional/    -> test/functional/
  tests-unit-network/  -> test/unit-network/

No Go code changes beyond the two package paths. Every reference follows:
Makefile targets, the pytest-lint and reliability workflows, the three
Jenkinsfiles, the root Dockerfile, pyrightconfig.json, .gitignore, the
benchmark and functional-test scripts, and the docs.

All paths inside the moved directories are self-contained (docker compose
uses `context: .`, the Python helpers resolve from __file__), so the extra
level of nesting does not reach outside.

refs #7067
2026-08-20 20:59:45 +02:00

81 lines
3.0 KiB
Python

import time
import pytest
from clients.status_backend import StatusBackend
from steps import messenger
from utils import fake
from utils.config import Config
from waku_params import parametrize_waku_light_client
@pytest.mark.benchmark
@parametrize_waku_light_client
class TestBasicBenchmark:
"""Test StatusBackend performance.
This test suite contains a few test cases that track CPU, RAM and network usage via Docker API.
"""
@pytest.fixture(scope="function", autouse=False)
def aut(self, request, backend_factory, waku_light_client):
"""Creates a AUT (Application Under Test) - a StatusBackend instance initialized for performance testing."""
# Create a new user
status_backend = backend_factory("AUT", pprof_enabled=True)
status_backend.start_performance_monitoring()
self.sleep(status_backend, 5) # Keep idle for a short time
status_backend.init_status_backend()
status_backend.events.append("CreateAccountAndLogin")
status_backend.create_account_and_login(password=fake.profile_password(), waku_light_client=waku_light_client)
status_backend.wait_for_login()
status_backend.events.append("Logged in")
status_backend.wakuext_service.start_messenger()
yield status_backend
status_backend.events.append("FreeOSMemory")
status_backend.free_os_memory()
time.sleep(20)
# Finalize
test_name = request.node.name
filename = f"{Config.benchmark_results_dir}/{test_name}-{time.strftime('%Y%m%d-%H%M%S')}"
metrics = status_backend.gather_metrics()
metrics.save_to_file(f"{filename}.json")
metrics.save_performance_chart(test_name, f"{filename}.png")
def sleep(self, backend: StatusBackend, duration: int):
backend.events.append(f"Sleep for {duration} seconds")
time.sleep(duration)
def test_idle(self, aut):
"""Benchmark StatusBackend in idle state after creating a new profile"""
self.sleep(aut, 60)
def test_one_to_one_messages(self, aut, backend_new_profile):
"""Benchmark StatusBackend during receiving 1-1 messages."""
# Create a message sender
sender = backend_new_profile("sender")
messenger.make_contacts(sender, aut)
messages_count = 200
post_sleep_duration = 30
# Benchmark receiving many messages.
# Don't verify reception, because it might be 1-2 messages flaky at the moment.
aut.events.append(f"Send {messages_count} messages to AUT")
messenger.send_multiple_one_to_one_messages(messages_count, sender=sender, receiver=aut)
self.sleep(aut, post_sleep_duration)
# Benchmark sending many messages
aut.events.append(f"Send {messages_count} messages from AUT")
messenger.send_multiple_one_to_one_messages(messages_count, sender=aut, receiver=sender)
self.sleep(aut, post_sleep_duration)
# Extra sleep after the test
self.sleep(aut, 60)