diff --git a/signing_stress_test/README.md b/signing_stress_test/README.md new file mode 100644 index 0000000..e5e0f45 --- /dev/null +++ b/signing_stress_test/README.md @@ -0,0 +1,91 @@ +# Signing Stress Test + +A Python-based stress testing tool for Porter signing endpoints. This script simulates +concurrent signing requests to measure performance metrics such as latency, success rates, +and statistical distributions. + +## Overview + +The signing stress test performs multiple concurrent requests to a Porter instance to evaluate: +- Response time distribution (mean, median, min, max, p90, p95) +- Success and failure rates +- Performance under concurrent load + +## Requirements + +- Dependencies: `click`, `requests` + +Install dependencies using: +```bash +pip install -r requirements.txt +``` + +## Usage + +```bash +python signing_stress_test.py --domain [OPTIONS] +``` + +### Required Arguments + +- `--domain` / `-d`: Porter domain to send signing requests to + - Choices: `mainnet`, `lynx` + +- `--cohort-id`: Cohort ID for the signing requests + - Choices: `1`, `3`, `4` + + _(Note that Cohort 4 is only available for mainnet)_ + + +### Optional Arguments + +- `--num-threads` / `-t`: Number of threads to use for concurrent requests + - Type: `INT` + - Default: `30` + +- `--test-executions` / `-e`: Total number of test executions to perform + - Type: `INT` + - Default: `100` + +- `--timeout`: Maximum time to wait for all threads to complete (in seconds) + - Type: `INT` + - Default: `120` + + - Default: `3` + +### Examples + +Run a basic stress test with default settings on mainnet: +```bash +python signing_stress_test.py --domain mainnet --cohort-id 4 +``` + +Run with custom parameters: +```bash +python signing_stress_test.py --domain lynx --num-threads 50 --test-executions 200 --cohort-id 1 +``` + +## Output + +Example output: +``` +[RESULTS]: Node signing stress test with 30 threads and 100 test executions + +Total time: 45.23s +Cohort ID: 3 +Num failures: 0 +Statistics for successful requests: 100 + Mean: 1.45s + Median: 1.42s + Max: 2.15s + Min: 0.98s + p90: 1.89s + p95: 2.03s +``` + +## Performance Tuning + +### For Maximum Throughput +- Increase `--num-threads` (e.g., 100-200) +- Increase `--test-executions` accordingly +- Adjust `--timeout` to accommodate longer test duration diff --git a/signing_stress_test/requirements.txt b/signing_stress_test/requirements.txt new file mode 100644 index 0000000..0d8c96e --- /dev/null +++ b/signing_stress_test/requirements.txt @@ -0,0 +1,2 @@ +click +requests diff --git a/signing_stress_test/signing_stress_test.py b/signing_stress_test/signing_stress_test.py new file mode 100644 index 0000000..44c4f73 --- /dev/null +++ b/signing_stress_test/signing_stress_test.py @@ -0,0 +1,203 @@ +import statistics +import time +from concurrent.futures import ThreadPoolExecutor, wait +from threading import Lock +from typing import Any, Dict + +import click +import requests + +###################### +# Boring setup stuff # +###################### + +PORTER_URLS = { + "mainnet": "https://porter.nucypher.io", + "lynx": "https://porter-lynx.nucypher.io", +} + +COHORT_3_SIGNING_REQUESTS = { + "encrypted_signing_requests": { + "0x210eeAC07542F815ebB6FD6689637D8cA2689392": "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": "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": "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", + }, + "threshold": 2, +} + +COHORT_1_SIGNING_REQUESTS = { + "encrypted_signing_requests": { + "0x210eeAC07542F815ebB6FD6689637D8cA2689392": "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": "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": "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", + }, + "threshold": 2, +} + +COHORT_4_MAINNET_SIGNING_REQUESTS = { + "encrypted_signing_requests": { + "0x97d065B567cc4543D20dffaa7009f9aDe64d7E26": "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", + "0xA829c2E33907Ab03d27d5dBb39eFFd8386112789": "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", + "0xb011b6794F271B1d8D2328eDf332535343CB4D44": "RVRTUgABAACTBMQggxV5N9+dIkgXmlJ5OmWi7zMQYsmQQSBRFjSMyal1gDHFDtoEr0aSjcD5fmbkCKu2YPnBCBxwMbqKu8c/0HQqrmgNIMJVtY8CqTaWw3Fkb8lPxmDWNRp/JK4n39Mwa2ysW9HAmh55isqpLSrFJuEICwOzc3NRa3BPkBKzytzsD7ng9dtZUa7wSitEsb2pEDAEc03090qqRZo09cX3RdAUrtP07JGTRP8J60sApZgVhjA5oWVVgFVTrvTN4zAJ8/jOx12SSKwywqjJEhXPkFufAePGFFz5lEeaNuqqxvA939MFFL9iL80bzSc6aDP17FqxbNGi6TT5O/E8qcnbAex82hfhJ74wZSbZkjjRJjKMKj0CUbAA+ISoaTUmTs8dYN24S/7oFdJnAnl91jG2p1ZzFLB3punHcVXA8i3f8DbW1Z9mdF9mkHmwriNF/w0ahYnnDPu1V12p+jOZmBkJPTIfhzsyq89JZiuvQ3TShrTmTpkVAD7Iu3NDxp2u85wTN7uDDN+Qhxtgv1Kw6QlejCTIN7WaKq979mG62PBDxPF+FVlqApYhuc1CCvzxQc3Lg07SWivNVTFfUlBR/N53y5WUEpuUDFWLvELKqizCGYdl0ZhKQ8tUwXS+8qOqDE1Uv9RBlNI/7OSlQJv6xaNkTQhr5PYf2Vm5LORz00vb54ET+Ujmu/5FpM3RnFKCU3EIH/hB4HELFF8e1BMoXObCIVmoGp003jquDmH5vDvwhEkz2m8oPvbGg+rU1xw9hJadBtU1v1h/+E8/755maUhvb19opZXsyag3ppn9wCjUIW67GvL+qRsRHgFjAPlkn7hINONY6LRY0wwcAlTsx6raW9v/+BVphJV8z8kutFXKeVnHB5+/DcMucAnfaVa2tvYn8IfxQPF709jN7U71M+oWv+RifAyZ/2U+zXJ5+ZCrUe/VdWYnqLBTQElIP0TtGxkWON3bdwrXsaMiYH7kRpr8zSH/2wB59e1STfcWVkZlELRIZJLdV5hTOft9M0KEeEyJtlzUqxc/u8QY4ONa7mN9WXfJZScopMhvnPaUyjfLXjhW54+HQmES8ir3PHLqvCVsag13ppCKUkJtkUwz7ksNGggr9GhV943Q4DdxLUgIgCAvjF9WeA8A1jf/XjM3gxYuvCUcIAnIt2OOS1G1camp2JmE2wvpHk8j2zI7a1przh0kf7etTkpZmEz0K9Z90t8eX2xHNY//10EtmLm6+HrlUW8L/sGbXXhyvfLYCrqqqIm8oavFTpBkPaB0cdOEU91by6+r9aJ6r1Wm4TyQQCku+dygzwAm4KgQL2AcWPNW+JAiXbCVrXKjpL5k9dkGLVhDMIt2EjUfQO2ztlDyraS1r50uDOLviSgmdRsPv/A7/uugY30IxqGGr5K3SO9ArjpXUJv6G9OIDpg6i8rXDEKr8eA9EIJSHzApVOcRUGJDkvypZMuuUBH2xB4CyJuMrOKAsWgSn7T/6WyDv54KM/dZLxJXcTYjYI1OC/W5KLNJBLrjYn1bQcbSCipyCVi86LzQUH1gya1Kd7HY/CBfpAtAx9OizHncXVAWhMvWj5Vp+ewUDSeAlGGLr8M6dPKX7vWjea8YZfKALU2fXcTz4STn//sVahOFeXkfGziP8gt3WnmVoSfKNaqHGpGKlL/CS6k1nTIPKmwhWAPFQADNNUgbPQ0us3E42LLCmh4VkzqMCI8ekvZmrjvX3yh65N9/6YG+KpdYBS/GtjG3bLhhBHuMZUk42V9bZ4JT/ysQPpn/2Kc8PX6K5+EYeEJ/fZApHtJYtzRBj9t1AXxnmMV9crjUj0EN+1dNehuC8pNsTyqjz9UHoZxCzHd6mruA+fCA8yPrOtMjcdasGKnpZ62CjkA3PpYKY+s5cQLkEuY/0WSKdoX6ceV8xNWeNJfV8XTPEe9vaQBG0bTatH4Ig/usILw46E/f8SzzSkYP1M3lO1h959akNoP62D2BjuiJw0mqMDAPYabPSqXRX1aCG0BE/mhEAw4Yf5bTZd/FY9zNmR5TIT8WxwwyO65mXTqJGp/cNqdcoqzaPXcwwdoSClcOVCOUZS2y+oav40soxNK17xJ4M4WAgsmUi61hq811fYU7cWwK51rmJ5XPO3Zi1EogwAdeDVFpOYejJ/euQJfqlStP47kJg205a/Tj6Bg8GW3+PS2DXVjIZZ9sEZlbbIZTAy/d6hoaHMV6ELLDWVgMyLZpcLaDoS56qDu2CP77WQ0DC3Zv+Mi4NPcRIJhDSUYbF4GZjmUYs6pLyoxh4HVjg7K9/HNXbhqgi3pH36aCXa5ucsFS/7BjYBZ7ZEinKwDlM+1adT1+1oa8WLiBNY4fam+Ub8F/EU+i4kGyL9rh4f/3IAkCzfpSEDHrKwYTKZCHlmwFKZymO/A1WqgHRuI77TzpTn98nz0KAkkz884zarFYsDDsTRHJ3SDY0VrTUt3UXWi+hl2c+bVfdZERhDU8AInqJT5fNHGzjWqt4knM8W3WVV6IIZ4BK29epYDpOzci+4hVmv07bGMJnvrgBeYDSOX52uAnMoq3g5AxN/bPhOzuUIav+hBSTsYxR4nikRGJyvSgn5Sx04KivRxIk4RvsNzjel5gbyAUeCifUKfeIhRhWc7THsG2j8mnMEb/8PcMM/0NfLf0reFfcSj+wLhW/ldqFB4VDfFW0IwHxSdPgg57ApqJzB7UUi9JKfHYIaA5YluuL5NPevtgeXEpnAOTs/7UB8Cw+NP6uBG2i0SFRos57WMj6tiT3XjIn7er/Ei4crnG7sXFusuzpaAZd83ssCLOgzrJAbOVSdAmo/WMVSosE5dDTCbb/0aFy+42yWqLWGLgmhPCKZ4iDR9iGwPVHJUdqTXl8qyD6XF5Yh/N+YCJ3TP89DB7dJdPXqRpVwulEH6yf6H2cVW5oro6N1t/5Umnkmo6i58UB/XDu8HSyXJgc5GbhVx1N+iqQXNFPijQA3fllKjFzrb1dOHzCXnox0kxiRUj/N/wyZP2TEZRcs2Yehvdq45emdWaSyx6ypFfKKwBZGuKYma4LAk6R1HaqprI5g9JH9UB9dHhnKw0rMM9OdmUSERoyDX7sT01fDtgq0qGlaFi16IYiNWVLVEzSShvU6RFOrsQJylSlTDdNuJYBLYJ7ZPYJGw+MJR6xSudxCNn0m0g1NV8+19bVIMvEeNCWMY/KeHj2EV0U3ZoiHeN6U3WfZFco0pVLDUKRJVWAivuLQvwx9Vt8q6Lp6jxAE29guRly7jyu6lUoeaOSCmGP9zWU7umrmQlh7nj0raeQfYqrqwUgBzqhpBOs6G0vH5ZBOQJFin0C3FFqhMv0B90zdrjuuEe9FtR6+EVrcnUwoEmiWeVGkiuPs4Izc0u8bvwu7wxtIQ/jeUT77sPUMIDn7D+DF1uiKPU26s+6hZm4j+WrhGw4MzdH8HVZDqxm+pVgvVjxSYvO67HE1rzTGJlr4wvUTWbgiINGdXw+t9bAtsIjmwHw7ASzo35CrCzZrSQwwHpWLcEcF1kLmvn3iIkozoo1dtVF//gst0XqVDkqLFaCYBMK/c7wVQhwORQw5C8Ldhcqwiz+a2GWeMXUmMNPTNj56pKsoqUsyhQQUaWVc25z1f9I5EbnnSm6Ht2FI7vH/7cRRMUB/c7PvCTuwXVOTq/F0pVV0OVBolW86UtuAtfVJ6+4N6yb0bvgJgnBKM18P5ypXVEavpyAdDYaGBkAnI9ZPAQmjGKnDmRvU2EjxBSUpAwyu1hrXURM4Wgrv4GVVe9v0Uyy88nLuhj7QBZN0jYxmazaMctFnWhFdO8EouSynaenU7nl6TwbjVz9agBFz1uTea9rw1nIZeaL/nwT0GPkPt9RlQ/HWznJvifvljQxHKMtds6BoYTU/YbaJiAHme6NADnl79gngo3Q0erbpzbZ48ACtV5B9xHa/gFWISavLX3e1WjLtGQBukusnEIr7BwzyHX4cKaaB0iikYsXgBAXykbgFg+BRH5oAsg6fsB/8H+YbpjidM7MT0LanJpYdB4620w5m14XjaDKL+dLN1h4+yCYALIXMLtVmOh/AEb1c3X7pZ59XIeTvbNDT/cZqvSmWRPQJCfz6GCyKxWY58CqTS4FQ5Lt0xF+b8DdIRd06JDY5k0+ydGP+V6okpsqeCmnnqoy6Ep8Iy6iHxYwEVYNpptbB3JtUQfl1xvJVD6PI5kySCRNy9qIb7Dn1UinV0rqLvJouj2Gv1K/qTh5vLwYeo3BzrSwEluZc1MstNkEtrnQWJTKTs/z3EG6d2MHTUqdz9fhFGXcRAIjTnFNDcLkubX2at9126O5eLwAqnrdQVVoooiVKTHWC4Q29KSEvNnOLrk8fZnKmugekEf1nlWu5EF4w6piX7FdpvSu4KpRB0LYMTrlnt7RAas3IfACJsKxLBkEpJ0TvlxxPMPDN4pK78htTIShbznzGvdT0Nc1RMfpFcZtLdQFBUsq3XeAffJonNrP/gBYhJLfrwnFEpfAL10sbBwwdJY7pTaPnGH5ojoj4pKl38nR7dzkvjLJ/NYNKSd+72c0LLqlWs+ypkFWxmTIlDcI8g4zk0nXN6NipRZoqxQ80Q7C5mfc4c76udYkdFQvbX36+Vyt5/CU/3df4dt3Z967PyACopBzUhdipcWAg2Z3PI4B9uvmI9YuvgNA+6pFO5GHwrL/eAA0A87cg6x2cXk/hfOR4N57XHMFGhk1YRhMcOsAs1G8PvIpRAVmRwClyHne2tXBcOqC63FptuZcdte7Mu1ErP0B4zo7Hztma2YXv0yRLlcLQ3BEIB5vAvFZfPYXA0i148IuMHp16seVGIC3KqhqX+APfimybGHNtG25fGiDn9Km3INZ3ZimSj1QfmISwwJlq0gGVhypnYErtuWTt4HRuK9AfYOWSv2GJ6Rwt6ytzVGnrYj24D/LO0jVjjRNeDueyu3uSOhUyISqcp6icF/3ZZRA7/Un0ODqGxIzr2zOUci1od0hSHGwSHrNkb1ApoCUqLuV6TI0IS9uS4c0j0cbQ9pisV8le14LAoZ9j+WLDGunQuUr06DsRpetuuUfmfcwGpIlMdCwmaYEoeARmykFgNT7nvgmpmjoyjEO6TeWCzfv+6rIK8uDAkNcp2nP/pVM+I1NCR0", + "0xB98a82aB97171504bf9eA0aC62A3f34BffE5F510": "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": "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", + "0xD680B01503CF95A489010dA7409980060991D096": "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": "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", + }, + "threshold": 4 +} + + +SIGNING_REQUESTS = { + 1: COHORT_1_SIGNING_REQUESTS, + 3: COHORT_3_SIGNING_REQUESTS, + 4: COHORT_4_MAINNET_SIGNING_REQUESTS, +} + + +class AtomicCounter: + def __init__(self): + self.value = 0 + self._lock = Lock() + + def increment(self): + with self._lock: + self.value += 1 + + def get_value(self): + with self._lock: + return self.value + + +class StatsCollector: + def __init__(self): + self._lock = Lock() + self.values = [] + + def add_value(self, value): + with self._lock: + self.values.append(value) + + def get_values(self): + with self._lock: + return self.values.copy() + + +def send_porter_request( + domain: str, + encrypted_signing_requests: Dict[str, Any], + failures: AtomicCounter, + stats_collector: StatsCollector, +) -> None: + porter_url = PORTER_URLS[domain] + start = time.perf_counter() + try: + response = requests.post( + f"{porter_url}/sign", json=encrypted_signing_requests + ) + time_taken = time.perf_counter() - start + response.raise_for_status() + + response_data = response.json()["result"]["signing_results"] + signing_responses = response_data.get("encrypted_signature_responses", []) + if len(signing_responses) < encrypted_signing_requests["threshold"]: + raise ValueError(f"Not enough signing results; errors: {response_data['errors']}") + + stats_collector.add_value(time_taken) + except Exception as e: + failures.increment() + click.secho(f"![FAILURE] Porter request failed: {e}", fg="red") + + +@click.command() +@click.option( + "--num-threads", + "-t", + help="Number of threads to use for the stress test.", + type=click.INT, + default=30, +) +@click.option( + "--test-executions", + "-e", + help="Number of total test executions to perform.", + type=click.INT, + default=100, +) +@click.option( + "--timeout", + help="Maximum time to wait for all threads to complete before timing out (in seconds).", + type=click.INT, + default=120, +) +@click.option( + "--cohort-id", + help="Cohort to use for the signing requests.", + type=click.Choice(list(SIGNING_REQUESTS.keys())), + required=True, +) +@click.option( + "--domain", + help="Porter domain to send signing requests to.", + type=click.Choice(["mainnet", "lynx"]), + required=True, +) +def signing_stress_test( + num_threads: int, + test_executions: int, + timeout: int, + cohort_id: int, + domain: str, +) -> None: + + if cohort_id == 4 and domain != "mainnet": + raise click.UsageError( + "Cohort 4 signing requests are only valid for the mainnet domain." + ) + if cohort_id != 4 and domain != "lynx": + raise click.UsageError( + f"Cohort {cohort_id} signing requests are only valid for the lynx domain." + ) + + failures = AtomicCounter() + stats_collector = StatsCollector() + start_time = time.perf_counter() + signing_requests = SIGNING_REQUESTS[cohort_id] + try: + # use thread pool + with ThreadPoolExecutor(num_threads) as executor: + futures = [] + for _ in range(test_executions): + f = executor.submit( + send_porter_request, domain, signing_requests, failures, stats_collector + ) + futures.append(f) + + wait(futures, timeout=timeout) # wait until done or timeout + finally: + time_taken = time.perf_counter() - start_time + + click.echo( + f"\n[RESULTS]: Node signing stress test with {num_threads} threads and {test_executions} test executions" + ) + click.echo(f"\nTotal time: {time_taken:.2f}s") + click.echo(f"Cohort ID: {cohort_id}") + click.secho( + f"Num failures: {failures.get_value()}", + fg="red" if failures.get_value() > 0 else None, + ) + values = stats_collector.get_values() + if values: + click.echo(f"Statistics for successful requests: {len(values)}") + click.echo(f"\tMean: {statistics.mean(values):.2f}s") + click.echo(f"\tMedian: {statistics.median(values):.2f}s") + click.echo(f"\tMax: {max(values):.2f}s") + click.echo(f"\tMin: {min(values):.2f}s") + if len(values) >= 2: + percentiles = statistics.quantiles(data=values, n=100, method="inclusive") + click.echo(f"\tp90: {percentiles[89]:0.2f}s") # 90% + click.echo(f"\tp95: {percentiles[94]:0.2f}s") # 95% + + +if __name__ == "__main__": + signing_stress_test()