|
| 1 | +import logging |
| 2 | +import os |
| 3 | +import subprocess |
| 4 | +import time |
| 5 | +from datetime import datetime |
| 6 | + |
| 7 | +from scripts.python.smoke_test.notifications_smoke_test import ( |
| 8 | + mesh_client, |
| 9 | + populate_mesh_env_vars, |
| 10 | +) |
| 11 | + |
| 12 | +WORK_DIR = os.path.dirname(os.path.realpath(__file__)) |
| 13 | +STARTUP_SCRIPT_PATH = f"{WORK_DIR}/../../bash/run_container_app_job.sh" |
| 14 | +NUMBER_OF_ROWS = os.getenv("NUMBER_OF_ROWS", "1000") |
| 15 | +NUMBER_OF_FILES = os.getenv("NUMBER_OF_ROWS", "1000") |
| 16 | + |
| 17 | + |
| 18 | +def test_load(): |
| 19 | + logging.info("Running notifications load test") |
| 20 | + |
| 21 | + environment = os.getenv("ENVIRONMENT") |
| 22 | + resource_group_name = f"rg-manbrs-{environment}-container-app-uks" |
| 23 | + |
| 24 | + if environment == "prod": |
| 25 | + return |
| 26 | + |
| 27 | + add_load_test_data_to_mesh(environment, resource_group_name) |
| 28 | + |
| 29 | + for job in ["smm", "cap"]: |
| 30 | + logging.info( |
| 31 | + "Starting notifications container app job manbrs-%s-%s", job, environment |
| 32 | + ) |
| 33 | + |
| 34 | + job_result = subprocess.run( |
| 35 | + [STARTUP_SCRIPT_PATH, environment, job], |
| 36 | + check=True, |
| 37 | + capture_output=True, |
| 38 | + text=True, |
| 39 | + ) |
| 40 | + assert job_result.returncode == 0 |
| 41 | + |
| 42 | + logging.info("Finished notifications load test") |
| 43 | + |
| 44 | + |
| 45 | +def add_load_test_data_to_mesh(environment: str, resource_group_name: str): |
| 46 | + populate_mesh_env_vars(environment, resource_group_name) |
| 47 | + for number in range(int(NUMBER_OF_FILES)): |
| 48 | + mesh_client().send_message( |
| 49 | + os.getenv("NBSS_MESH_INBOX_NAME"), |
| 50 | + generate_load_test_data(number).encode("ASCII"), |
| 51 | + subject="Load test data", |
| 52 | + ) |
| 53 | + |
| 54 | + |
| 55 | +def generate_load_test_data(file_sequence_number: int) -> str: |
| 56 | + data = open(f"{WORK_DIR}/load_test_data.dat").read() |
| 57 | + data = data.replace("20250101", datetime.now().strftime("%Y%m%d")) |
| 58 | + data = data.replace("88888888", f"{file_sequence_number:06d}") |
| 59 | + data = data.replace("SM0K3-0000000000", f"SM0K3-{time.time_ns()}") |
| 60 | + |
| 61 | + rows = data.split("\n") |
| 62 | + _header = rows[0] |
| 63 | + _footer = rows[3] |
| 64 | + first_data_row = rows[2] |
| 65 | + |
| 66 | + for number in range(2, int(NUMBER_OF_ROWS)): |
| 67 | + new_data = first_data_row.replace("000001", f"{number:06d}") |
| 68 | + new_data = new_data.replace("SM0K3-0000000000", f"SM0K3-{time.time_ns()}") |
| 69 | + rows.insert((number + 1), new_data) |
| 70 | + |
| 71 | + return "\n".join(rows) |
0 commit comments