From f36242530129780f24df48a54a99e771ab257847 Mon Sep 17 00:00:00 2001 From: ivcantero Date: Wed, 30 Oct 2024 16:42:11 +0100 Subject: [PATCH 1/4] Update README-Linux.md (#310) Signed-off-by: ivcantero --- chromium/README-Linux.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chromium/README-Linux.md b/chromium/README-Linux.md index 8ab2662c..5cb23bfd 100644 --- a/chromium/README-Linux.md +++ b/chromium/README-Linux.md @@ -26,8 +26,8 @@ git checkout -b oqs-bssl-master 0599bb559d3be76a98f0940d494411b6a8e0b18e Choose a directory to store the liboqs source code and use the `cd` command to move to that directory. We will use ninja to build liboqs. ```shellscript -git clone https://github.com/open-quantum-safe/liboqs.git && git checkout 9aa2e1481cd0c242658ec8e92776741feabec163 -cd liboqs && mkdir build && cd build +git clone https://github.com/open-quantum-safe/liboqs.git && cd liboqs && git checkout 9aa2e1481cd0c242658ec8e92776741feabec163 +mkdir build && cd build cmake .. -G"Ninja" -DCMAKE_INSTALL_PREFIX=$CHROMIUM_ROOT/third_party/boringssl/src/oqs -DOQS_USE_OPENSSL=OFF -DCMAKE_BUILD_TYPE=Release ninja && ninja install ``` From 0220068ddca60fee2012c35f9a5e580e872e9839 Mon Sep 17 00:00:00 2001 From: ivcantero Date: Wed, 30 Oct 2024 16:42:59 +0100 Subject: [PATCH 2/4] Update README-Windows.md (#309) Signed-off-by: ivcantero --- chromium/README-Windows.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chromium/README-Windows.md b/chromium/README-Windows.md index 7a60eea7..7561182b 100644 --- a/chromium/README-Windows.md +++ b/chromium/README-Windows.md @@ -32,8 +32,8 @@ Choose a directory to store the liboqs source code and use the `cd` command to m Start _x64 Native Tools Command Prompt for VS 2022_ (usually it's in _C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2022\Visual Studio Tools\VC_) and run following commands: ```bat -git clone https://github.com/open-quantum-safe/liboqs.git && git checkout 9aa2e1481cd0c242658ec8e92776741feabec163 -cd liboqs && mkdir build && cd build +git clone https://github.com/open-quantum-safe/liboqs.git && cd liboqs && git checkout 9aa2e1481cd0c242658ec8e92776741feabec163 +mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=%CHROMIUM_ROOT%/third_party/boringssl/src/oqs -DOQS_USE_OPENSSL=OFF -DCMAKE_BUILD_TYPE=Release msbuild ALL_BUILD.vcxproj msbuild INSTALL.vcxproj @@ -73,4 +73,4 @@ If the build completes successfully, it will create _chrome.exe_ in _%CHROMIUM_R ### 6. Miscellaneous - BIKE key exchange is not supported. -- This guide was initially published on October 10, 2024, and may be outdated. \ No newline at end of file +- This guide was initially published on October 10, 2024, and may be outdated. From 7c913f834b44562a99437a00410bbc500c2539d3 Mon Sep 17 00:00:00 2001 From: ivcantero Date: Wed, 30 Oct 2024 16:46:59 +0100 Subject: [PATCH 3/4] Update oqs-Linux.patch (#311) Removing whitespace so that it works in Mac also. Signed-off-by: ivcantero --- chromium/oqs-Linux.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chromium/oqs-Linux.patch b/chromium/oqs-Linux.patch index eb66a59e..72adf56b 100644 --- a/chromium/oqs-Linux.patch +++ b/chromium/oqs-Linux.patch @@ -7,7 +7,7 @@ index d3a3436e3d..d7e949a474 100644 const int kEcdsaKeySizes[] = {163, 192, 224, 233, 256, 283, 384, 409, 521, 571}; +template -+bool ArrayContains(C && c, T t) { ++bool ArrayContains(C && c, T t) { + return std::find(std::begin(c), std::end(c), t) != std::end(c); +} +const X509Certificate::PublicKeyType OqsSigTypes[] = { From 22966f6ffbf14303bb4e21ccc487fb79914d8444 Mon Sep 17 00:00:00 2001 From: davidgca Date: Thu, 31 Oct 2024 08:31:22 +0100 Subject: [PATCH 4/4] Adding Locust as performance OQS tool (#304) * Adding Locust as performance OQS tool Signed-off-by: davidgca * Add contributor in oqs-demo README Signed-off-by: davidgca * Modify USAGE.md to add a basic Locust example Signed-off-by: davidgca * Changes some version numbers as suggested by @ajbozarth and style changes Signed-off-by: davidgca * Refactor curve to group Signed-off-by: davidgca * Moved CI DockerHub image push to a future PR Signed-off-by: davidgca --------- Signed-off-by: davidgca Signed-off-by: davidgca --- README.md | 37 ++++++----- locust/Dockerfile | 115 +++++++++++++++++++++++++++++++++ locust/README.md | 32 +++++++++ locust/USAGE.md | 56 ++++++++++++++++ locust/docker-compose.yaml | 29 +++++++++ locust/images/img.png | Bin 0 -> 70541 bytes locust/images/img_charts.png | Bin 0 -> 98124 bytes locust/requirements.txt | 3 + locust/scenarios/locustfile.py | 88 +++++++++++++++++++++++++ 9 files changed, 343 insertions(+), 17 deletions(-) create mode 100644 locust/Dockerfile create mode 100644 locust/README.md create mode 100644 locust/USAGE.md create mode 100644 locust/docker-compose.yaml create mode 100644 locust/images/img.png create mode 100644 locust/images/img_charts.png create mode 100644 locust/requirements.txt create mode 100644 locust/scenarios/locustfile.py diff --git a/README.md b/README.md index a01c377d..60921a61 100644 --- a/README.md +++ b/README.md @@ -17,23 +17,25 @@ We are explicitly soliciting contributors to maintain those integrations labelle Currently available integrations at their respective support level: -| | **Build instructions** | **Pre-built Docker image or binary files** | Support? | -| ---------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------- | -| **curl** | [Github: oqs-demos/curl](curl) | [Dockerhub: openquantumsafe/curl](https://hub.docker.com/repository/docker/openquantumsafe/curl), [Dockerhub: openquantumsafe/curl-quic](https://hub.docker.com/repository/docker/openquantumsafe/curl-quic) | @baentsch, @pi-314159 -| **Apache httpd** | [Github: oqs-demos/httpd](httpd) | [Dockerhub: openquantumsafe/httpd](https://hub.docker.com/repository/docker/openquantumsafe/httpd) | @baentsch -| **nginx** | [Github: oqs-demos/nginx](nginx) | [Dockerhub: openquantumsafe/nginx](https://hub.docker.com/repository/docker/openquantumsafe/nginx), [Dockerhub: openquantumsafe/nginx-quic](https://hub.docker.com/repository/docker/openquantumsafe/nginx-quic) | @baentsch, @bhess, @pi-314159 -| **Chromium** | [Github: oqs-demos/chromium](chromium) (limited support) | - | @pi-314159 | -| **OpenSSH** | [Github: oqs-demos/openssh](openssh) | [Dockerhub: openquantumsafe/openssh](https://hub.docker.com/repository/docker/openquantumsafe/openssh) | unsupported -| **Wireshark** | [Github: oqs-demos/wireshark](wireshark) | [Dockerhub: openquantumsafe/wireshark](https://hub.docker.com/repository/docker/openquantumsafe/wireshark) | unsupported -| **Epiphany** | [Github: oqs-demos/epiphany](epiphany) | [Dockerhub: openquantumsafe/epiphany](https://hub.docker.com/repository/docker/openquantumsafe/epiphany) | unsupported -| **OpenVPN** | [Github: oqs-demos/openvpn](openvpn) | [Dockerhub: openquantumsafe/openvpn](https://hub.docker.com/repository/docker/openquantumsafe/openvpn) | unsupported -| **ngtcp2** | [Github: oqs-demos/ngtcp2](ngtcp2) | Dockerhub: [Server: openquantumsafe/ngtcp2-server](https://hub.docker.com/repository/docker/openquantumsafe/ngtcp2-server), [Client: openquantumsafe/ngtcp2-client](https://hub.docker.com/repository/docker/openquantumsafe/ngtcp2-client) | unsupported -| **OpenLiteSpeed** | [Github: oqs-demos/openlitespeed](openlitespeed) | [ Dockerhub: openquantumsafe/openlitespeed](https://hub.docker.com/repository/docker/openquantumsafe/openlitespeed) | unsupported -| **h2load** | [Github: oqs-demos/h2load](h2load) | [ Dockerhub: openquantumsafe/h2load](https://hub.docker.com/repository/docker/openquantumsafe/h2load) | unsupported -| **HAproxy** | [Github: oqs-demos/haproxy](haproxy) | [Dockerhub: openquantumsafe/haproxy](https://hub.docker.com/repository/docker/openquantumsafe/haproxy) | unsupported -| **Mosquitto** | [Github: oqs-demos/mosquitto](mosquitto) | [Dockerhub: openquantumsafe/mosquitto](https://hub.docker.com/repository/docker/openquantumsafe/mosquitto) | unsupported -| **Envoy** | [Github: oqs-demos/envoy](envoy) | [ Dockerhub: openquantumsafe/envoy](https://hub.docker.com/repository/docker/openquantumsafe/envoy) | unsupported -| **Unbound** | [Github: oqs-demos/unbound](unbound) | [ Dockerhub: openquantumsafe/unbound](https://hub.docker.com/repository/docker/openquantumsafe/unbound) | unsupported +| | **Build instructions** | **Pre-built Docker image or binary files** | Support? | +|-------------------|----------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- | +| **curl** | [Github: oqs-demos/curl](curl) | [Dockerhub: openquantumsafe/curl](https://hub.docker.com/repository/docker/openquantumsafe/curl), [Dockerhub: openquantumsafe/curl-quic](https://hub.docker.com/repository/docker/openquantumsafe/curl-quic) | @baentsch, @pi-314159 +| **Apache httpd** | [Github: oqs-demos/httpd](httpd) | [Dockerhub: openquantumsafe/httpd](https://hub.docker.com/repository/docker/openquantumsafe/httpd) | @baentsch +| **nginx** | [Github: oqs-demos/nginx](nginx) | [Dockerhub: openquantumsafe/nginx](https://hub.docker.com/repository/docker/openquantumsafe/nginx), [Dockerhub: openquantumsafe/nginx-quic](https://hub.docker.com/repository/docker/openquantumsafe/nginx-quic) | @baentsch, @bhess, @pi-314159 +| **Chromium** | [Github: oqs-demos/chromium](chromium) (limited support) | - | @pi-314159 | +| **Locust** | [Github: oqs-demos/locust](locust) | - | @davidgca| +| **OpenSSH** | [Github: oqs-demos/openssh](openssh) | [Dockerhub: openquantumsafe/openssh](https://hub.docker.com/repository/docker/openquantumsafe/openssh) | unsupported +| **Wireshark** | [Github: oqs-demos/wireshark](wireshark) | [Dockerhub: openquantumsafe/wireshark](https://hub.docker.com/repository/docker/openquantumsafe/wireshark) | unsupported +| **Epiphany** | [Github: oqs-demos/epiphany](epiphany) | [Dockerhub: openquantumsafe/epiphany](https://hub.docker.com/repository/docker/openquantumsafe/epiphany) | unsupported +| **OpenVPN** | [Github: oqs-demos/openvpn](openvpn) | [Dockerhub: openquantumsafe/openvpn](https://hub.docker.com/repository/docker/openquantumsafe/openvpn) | unsupported +| **ngtcp2** | [Github: oqs-demos/ngtcp2](ngtcp2) | Dockerhub: [Server: openquantumsafe/ngtcp2-server](https://hub.docker.com/repository/docker/openquantumsafe/ngtcp2-server), [Client: openquantumsafe/ngtcp2-client](https://hub.docker.com/repository/docker/openquantumsafe/ngtcp2-client) | unsupported +| **OpenLiteSpeed** | [Github: oqs-demos/openlitespeed](openlitespeed) | [ Dockerhub: openquantumsafe/openlitespeed](https://hub.docker.com/repository/docker/openquantumsafe/openlitespeed) | unsupported +| **h2load** | [Github: oqs-demos/h2load](h2load) | [ Dockerhub: openquantumsafe/h2load](https://hub.docker.com/repository/docker/openquantumsafe/h2load) | unsupported +| **HAproxy** | [Github: oqs-demos/haproxy](haproxy) | [Dockerhub: openquantumsafe/haproxy](https://hub.docker.com/repository/docker/openquantumsafe/haproxy) | unsupported +| **Mosquitto** | [Github: oqs-demos/mosquitto](mosquitto) | [Dockerhub: openquantumsafe/mosquitto](https://hub.docker.com/repository/docker/openquantumsafe/mosquitto) | unsupported +| **Envoy** | [Github: oqs-demos/envoy](envoy) | [ Dockerhub: openquantumsafe/envoy](https://hub.docker.com/repository/docker/openquantumsafe/envoy) | unsupported +| **Unbound** | [Github: oqs-demos/unbound](unbound) | [ Dockerhub: openquantumsafe/unbound](https://hub.docker.com/repository/docker/openquantumsafe/unbound) | unsupported + It should be possible to use the openssl (s_client), curl and GNOME Web/epiphany clients with all algorithm combinations available at the Open Quantum Safe TLS/X.509 interoperability test server at https://test.openquantumsafe.org (set up using `oqs-provider v0.6.1` and `liboqs v0.10.1`) but no guarantees are given for software not explicitly labelled with the name of a person offering support for it. Since [OQS-BoringSSL](https://github.com/open-quantum-safe/boringssl) no longer maintains the same set of algorithms, software that depends on OQS-BoringSSL (e.g., nginx-quic and curl-quic) may not fully (inter)operate with the test server. @@ -62,6 +64,7 @@ All modifications to this repository are released under the same terms as [liboq Dindyal Jeevesh Rishi (University of Mauritius / cyberstorm.mu) Dan Rouhana (University of Washington) JT (Henan Raytonne Trading Company) + David Gomez-Cambronero (Telefonica Innovacion digital) ## Acknowledgments diff --git a/locust/Dockerfile b/locust/Dockerfile new file mode 100644 index 00000000..c35abc68 --- /dev/null +++ b/locust/Dockerfile @@ -0,0 +1,115 @@ +# define the liboqs tag to be used +ARG LIBOQS_TAG=0.11.0 + +# define the oqsprovider tag to be used +ARG OQSPROVIDER_TAG=0.7.0 + +# define the openssl version to be baked in +ARG OPENSSL_BRANCH=openssl-3.3.2 + +# Default location where all binaries wind up: +ARG INSTALLDIR=/opt/oqssa + +# Default Python version to be used +ARG PYTHON_VERSION=3.12.6 + +# liboqs build type variant; maximum portability of image: +ARG LIBOQS_BUILD_DEFINES="-DOQS_DIST_BUILD=ON" + +# Default root CA signature algorithm; can be set to any listed at https://github.com/open-quantum-safe/oqs-provider#algorithms +ARG SIG_ALG="dilithium3" + +# Default KEM algorithms; can be set to any listed at https://github.com/open-quantum-safe/oqs-provider#algorithms +ARG DEFAULT_GROUPS="x25519:x448:kyber512:p256_kyber512:kyber768:p384_kyber768:kyber1024:p521_kyber1024" + +# Define the degree of parallelism when building the image; leave the number away only if you know what you are doing +ARG MAKE_DEFINES="-j 16" + +# Define the Alpine version to be used +ARG ALPINE_VERSION=3.20.3 + +FROM alpine:${ALPINE_VERSION} +# Take in all global args +ARG LIBOQS_TAG +ARG OQSPROVIDER_TAG +ARG INSTALLDIR +ARG LIBOQS_BUILD_DEFINES +ARG SIG_ALG +ARG DEFAULT_GROUPS +ARG MAKE_DEFINES +ARG PYTHON_VERSION +ARG OPENSSL_BRANCH + +LABEL version="1" + +ENV DEBIAN_FRONTEND noninteractive +ENV LD_LIBRARY_PATH=${INSTALLDIR}/lib + +RUN apk update && apk upgrade + +# Get all software packages required for builing all components: +RUN apk add build-base linux-headers \ + libtool automake autoconf cmake ninja \ + make \ + git wget vim nano zlib-dev py3-pip tcpdump python3-dev + +# get all sources +WORKDIR /opt +RUN git clone --depth 1 --branch ${LIBOQS_TAG} https://github.com/open-quantum-safe/liboqs && \ + git clone --depth 1 --branch ${OPENSSL_BRANCH} https://github.com/openssl/openssl.git && \ + git clone --depth 1 --branch ${OQSPROVIDER_TAG} https://github.com/open-quantum-safe/oqs-provider.git + +# build OpenSSL3 +WORKDIR /opt/openssl +RUN LDFLAGS="-Wl,-rpath -Wl,${INSTALLDIR}/lib64" ./config shared enable-zlib no-comp --prefix=${INSTALLDIR} && \ + make ${MAKE_DEFINES} && make install_sw install_ssldirs install_dev && \ + if [ -d ${INSTALLDIR}/lib64 ]; then ln -s ${INSTALLDIR}/lib64 ${INSTALLDIR}/lib; fi && \ + if [ -d ${INSTALLDIR}/lib ]; then ln -s ${INSTALLDIR}/lib ${INSTALLDIR}/lib64; fi + + +# build liboqs +WORKDIR /opt/liboqs +RUN mkdir build && \ + cd build && \ + cmake -G"Ninja" .. ${LIBOQS_BUILD_DEFINES} -DCMAKE_INSTALL_PREFIX=${INSTALLDIR} && \ + ninja install + +# set path to use 'new' openssl. Dyn libs have been properly linked in to match +ENV PATH="${INSTALLDIR}/bin:${PATH}" +ENV LD_LIBRARY_PATH=${INSTALLDIR}/lib + +# build & install provider (and activate by default) +WORKDIR /opt/oqs-provider +RUN ln -s ../openssl . && \ + cmake -DOPENSSL_ROOT_DIR=${INSTALLDIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${INSTALLDIR} -S . -B _build && \ + cmake --build _build && \ + cp _build/lib/oqsprovider.so ${INSTALLDIR}/lib64/ossl-modules && \ + sed -i "s/default = default_sect/default = default_sect\noqsprovider = oqsprovider_sect/g" /opt/oqssa/ssl/openssl.cnf && \ + sed -i "s/\[default_sect\]/\[default_sect\]\nactivate = 1\n\[oqsprovider_sect\]\nactivate = 1\n/g" /opt/oqssa/ssl/openssl.cnf && \ + sed -i "s/providers = provider_sect/providers = provider_sect\nssl_conf = ssl_sect\n\n\[ssl_sect\]\nsystem_default = system_default_sect\n\n\[system_default_sect\]\nGroups = \$ENV\:\:DEFAULT_GROUPS\n/g" /opt/oqssa/ssl/openssl.cnf && \ + sed -i "s/\# Use this in order to automatically load providers/\# Set default KEM groups if not set via environment variable\nKDEFAULT_GROUPS = $DEFAULT_GROUPS\n\n# Use this in order to automatically load providers/g" /opt/oqssa/ssl/openssl.cnf && \ + sed -i "s/HOME\t\t\t= ./HOME\t\t= .\nDEFAULT_GROUPS\t= ${DEFAULT_GROUPS}/g" /opt/oqssa/ssl/openssl.cnf + +# generate certificates for openssl s_server +ENV OPENSSL=${INSTALLDIR}/bin/openssl +ENV OPENSSL_CNF=${INSTALLDIR}/ssl/openssl.cnf + +WORKDIR ${INSTALLDIR}/bin +# generate CA key and cert +RUN set -x; \ + ${OPENSSL} req -x509 -new -newkey ${SIG_ALG} -keyout CA.key -out CA.crt -nodes -subj "/CN=oqstest CA" -days 365 -config ${OPENSSL_CNF} + +# Download current test.openquantumsafe.org test CA cert +WORKDIR ${INSTALLDIR} +RUN wget --no-check-certificate https://test.openquantumsafe.org/CA.crt && \ + mv CA.crt oqs-testca.pem + +# Install Locust +RUN mkdir /home/locust && cd /home/locust +ENV CFLAGS="-I/opt/python-${PYTHON_VERSION}-custom/include/${PYTHON_VERSION}" +ENV LDFLAGS="-L/opt/python-${PYTHON_VERSION}-custom/lib" +COPY requirements.txt /home/locust +RUN pip3 install --break-system-packages --upgrade pip +RUN pip3 install --break-system-packages -r /home/locust/requirements.txt +ADD / /mnt/locust + diff --git a/locust/README.md b/locust/README.md new file mode 100644 index 00000000..dd104bdc --- /dev/null +++ b/locust/README.md @@ -0,0 +1,32 @@ +## Purpose +This directory contains a Dockerfile that builds Locust using OpenSSL v3 using the [OQS provider](https://github.com/open-quantum-safe/oqs-provider) and Python3, which allows `Locust` to negotiate quantum-safe keys and use quantum-safe authentication in TLS 1.3. + +For more information on `Locust`, see the [official Locust project](https://github.com/locustio/locust). + +## Quick start + +1) Be sure to have [docker installed](https://docs.docker.com/install). +2) Run `docker build -t oqs-locust:0.0.1 .` to create a post quantum-enabled Locust docker image. +3) In order to configure endpoints and their weight, modify the file [scenarios/locustfile.py](scenarios/locustfile.py), more information can be found in [USAGE.md](USAGE.md) +4) To verify all components perform quantum-safe operations, first start the container with docker compose + +``` +LOGGER_LEVEL=DEBUG HOST=https://YOUR_QS_HOST:4433 docker compose up --scale worker=8 +``` +4) Connect to the locust web interface at `http://localhost:8189` and start a load test. + + +## Notes on this Version: + +In this version, we utilize the subprocess module to execute the oqs-openssl command within Locust. Ideally, the objective should be to leverage native Python libraries. However, as of now, there are no Python libraries that support quantum-safe (QS) group for TLS 1.3. Once such libraries become available, we should prioritize recompiling Python (for add the OQS-openssl version) and using the appropriate Python libraries for this functionality. + +For further reference on the Locust API, please refer to the official documentation [here](https://docs.locust.io/en/stable/). + +## Usage + +Information how to use locust: [available in the separate file USAGE.md](USAGE.md). + +## Disclaimer + +[THIS IS NOT FIT FOR PRODUCTION USE] + diff --git a/locust/USAGE.md b/locust/USAGE.md new file mode 100644 index 00000000..aa03fddd --- /dev/null +++ b/locust/USAGE.md @@ -0,0 +1,56 @@ +## Purpose +This directory contains a Dockerfile that builds the [OpenSSL v3](https://github.com/openssl/openssl) [OQS provider](https://github.com/open-quantum-safe/oqs-provider), and Python3 which allows locust to negotiate quantum-safe keys in TLS 1.3. + +## Start +1) Run `docker build -t oqs-locust:0.0.1 .` to create a post quantum-enabled Locust docker image. +2) To verify all components perform quantum-safe operations, first start the container with docker compose, setting all environment variables as needed. For example: +``` +LOGGER_LEVEL=DEBUG HOST=https://YOUR_QS_HOST:4433 GROUP=kyber1024 docker compose up --scale worker=8 +``` +3) Connect to the locust web interface at `http://localhost:8189` and start a load test. + +By default, Locust supports all algorithms supported by the OQS openssl. + +Some environments variables you need to know +- LOGGER_LEVEL: Set the log level for the locust master and worker. Default is ERROR. +- HOST: Set the host to test. Default is https://test:4433 +- WORKERS: Set the number of workers. Default is 8. Ideally, the number of workers should be the same as the number of cores in the machine. +- MASTER_PORT: Set the port for the master. Default is 8189. +- GROUP: Set the key exchange scheme for openssl. Default is kyber768. + +In Locust web server, you need to set 2 variables: +- Number of users to simulate: The number of users to simulate that will hit the server. +- Hatch rate: The rate per second in which users are spawned. + +After that, you can start the test: + +STATISTICS +![img.png](images/img.png) + +CHARTS +![img.png](images/img_charts.png) + +### HOW TO CREATE A PERFORMANCE SCENARIO IN LOCUST + +Using Locust, you can configure a performance scenario. For this, you can use the following structure. Note: This is just a basic example, and the real implementation might use subprocess and openssl to handle post-quantum cryptographic curves, as in the actual [locustfile.py](scenarios/locustfile.py). + +```python +from locust import HttpUser, TaskSet, task, between +class UserBehavior(TaskSet): + # on_start is called when a Locust starts, before any task is scheduled + def on_start(self): + self.index() + self.about() + + # tasks is a list of tasks that a Locust will choose from to execute + # tasks are chosen with the weighted_task_set attribute + @task(1) + def index(self): + self.client.get("/") + + # in this case the about task is twice as likely to be chosen as the index task + @task(2) + def about(self): + self.client.get("/about/") + + diff --git a/locust/docker-compose.yaml b/locust/docker-compose.yaml new file mode 100644 index 00000000..02e47e65 --- /dev/null +++ b/locust/docker-compose.yaml @@ -0,0 +1,29 @@ +version: '3' + +services: + master: + image: oqs-locust:0.0.1 + volumes: + - .:/mnt/locust + ports: + - ${MASTER_HTTP_PORT:-8189}:8089 + environment: + - LOGGER_LEVEL=${LOGGER_LEVEL:-ERROR} + - GROUP=${GROUP:-kyber768} + logging: + options: + max-size: "50m" + command: locust -f /mnt/locust/scenarios/locustfile.py --master --host ${HOST:-https://test:4433} + + worker: + image: oqs-locust:0.0.1 + volumes: + - .:/mnt/locust + environment: + - LOGGER_LEVEL=${LOGGER_LEVEL:-ERROR} + - GROUP=${GROUP:-kyber768} + - HOST=${HOST:-https://test:4433} + logging: + options: + max-size: "50m" + command: locust -f /mnt/locust/scenarios/locustfile.py --worker --master-host ${MASTER_HOST:-master} diff --git a/locust/images/img.png b/locust/images/img.png new file mode 100644 index 0000000000000000000000000000000000000000..42f432a60badad385777e5f5afd143c0dab32c6b GIT binary patch literal 70541 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 literal 0 HcmV?d00001 diff --git a/locust/images/img_charts.png b/locust/images/img_charts.png new file mode 100644 index 0000000000000000000000000000000000000000..c18ad2dc10a0723cc04ebf0878c9a7d33c931f09 GIT binary patch literal 98124 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

;nS*}elyx+{q^7~LXY#Na;ud@R?XD#xODD|a z$e0Ly3z-|FX3F*%LEljCm5-o3tWVBDuGuw~x7L3}%cCguED63fW2}4xis&95xp4Vc zUtNy!u0-xO-Rw*C6f|%xv?C|rsdTE7<0I&wg{?!`m!_LcgXxJnqiXFvo;nP>`j%Z0 zAM(ZC|3T&W^w!rFgo3AWlV>chYh$#z2_Sm0eBNOCB~N%m2RL{;B?Cu8RV;$&!%l%S z4EwKkfsbTH)KtrFIQIxbiJQjC`}eF#=`yJeD-uO zaO7Pffb!7dnbU+$@ChBWkESm5c7duq=bdsfM~IGAP_Q+v3|>cTrH41SieJHf#rPSf zt=A)+h2b8mZ(SkZ==)^U6Ayu7`H~g3Z(Z=06cs!JEOYha;*mvIziQpB3BoyY_^fc1 zqzl4lY*#)L#XcOc*`gj4mE-|XZYnC4ficBq|1SaA4(6wq6mO;QybksjKfgF-BncCAi{;TraSH6HJ*^)B^tq;JJP#=*<6SANIQ5nWf7(&p)C3enzBNBWGIvbfH zmm5FNa-9d(y$nbDxG(}-ES+r>-NpQh{~r9H#2Knnx*QN;_8DLe)BWj#w;vk7D8KCR z(y?c30y`K*-uyIgO1pr6t--ElG>#K{zYkcz9Kxi8z}}RNwV97|m{sTTGZB}f;oD#d zlvQCs)s74@ub5mU)R-uiQaMBKrKV3`r&=bCmvplv;}-X8x%x>L9Cc}c<^f0HEuEr951x>|tV$3@_fy0FoK~h;8IC%SaUlIh7G353o1j$5?|9?&$aIPIocS}CbhS@s zjkQc+;^ChDnl6TC^I@(kF=D^piDp%q#PF&p(<#kPPB=(%$EtlBye-0ncN=7xE8gl{ zV8b6MHv@)XR8a%D$uAc9oq0}CQyLtbro^F#e^A%Jb(hc6aQZJ4Ox4J6x5PnIqhNCY3p_!M?G{IO< zXs5LqHw(heHFcH*4htMz=#;R&>{e04n7Q7Hqdegg_e*s>NPfti8Y^g)T|XOs>zPG| zaTI7FT5D}b>o6+e2J%cY-{YId_Z?8@sY@1-8z3P_Gq?|Wt7S#A*twu0Dxn{%9(Dpd zIh~y_7Zxk*5Zn1O+!^dH!lUAju5cs1%%VWo;JmiQcE4R|Te+v+&)x4j$bHp!xTN@6 z(YF7)!2RL%X=?|I{Z$CxZ1_*w`{}PjxP#Vf!JdH~^{+}eC*AA5oPZY;`1-+*|9@3L z2fT#;`r04+|NnNcqxt`Z!93(;hw}fKXJph(POeFFykMIDef|&==l^2wEu*6BzQ6I? zL_noMMd|MD5Ew#Iq+3E#KteiHKtLF}Q$b3Q?wFBok(QPQ>1JkN<~ieif8+OC>%aal zp102%)&gd(>zsXdeD-JWa}H&4LRM5~SXemk1GQ?)aSoU-y5_8wEF4LblG*8tC&$ePvP$oQLyJA$Lm;0k`#ASI zmx44V0x!IdvLzahjE2TxwGuQ2;#1db_>AiI?D(WV4l(8~FV*c$nP_W%^8XMP){}+R z-&aEo6{w!Sh)J6ftut3-TJJ6IF3ySj-Lt%@{-~x=vgfnFP6H9|d8USR*VW_O1mJFp zU`6?2nDcF1dOkv z#Mfyp%(^em71Np%c|CkUG&MVA&1X;(KlgTgaJgp7xuL<=F1wKc<X9Ciiam1q58m7Ic+ zp&+bw0Z?n5UEnH>MS~UL;&C|xs@w=x5djHFX6CYbk>ZaubZlMYRzw;h!HU120AfhC z_$|e2@yO^~Reuq=X{TaDpJT~)bjWiBopbayq}2=a?PFh~q2|y0D4_v1KBiMC*W8GR z``jJVJ>0ClTr5h;Dg?LiG?`8h@E?aiEuGD2tM6baA>pOkQZ5mY#(WFg&`-F!rL3Br zmKq}8slw;#R&J8_Cb=2ZSNm-*i=wl3zcAKpkXypOJZqLop%*~mT@sDCVyAaoV${E4S<+{4J zxEY_88qRATt6BJsll%0FkI=z%0iwGQAsOKFe)`^-ZF$Qmo#f z%{<-A7pMR9l$qMJ-X*WdKfC9xm-0Zv^3w%SFfzqVgrD2 z#f4l(PltsrCp2jI;#u#fDSG(udxgb=xxnph*O?)+Sjsv9p^s{~ck#isZJ-?s;o5$m zkks|p1`kz2St*uY)V`f<9yhF$4X6nm{kw7P-)U}2GCix^y?aA35j%93`>@6s&jG_9GiXG8^L9%S@hS4hIxlw4%*k%E%+c> zyig}6$l=3)9a8d}i#+t)1dgqMwtR}$JO`Xr#fpBdq{)ub7o}#-xkp~Kd{)}3B_4MO ziH4751@CHV@`9T!y=Y+O#Pp7KW`(zKar=9F@8C!5pAn3?!ngP>wuObWU>81Gis@m` zsIrg^2eUJteb6@?p{%i69dKvAS1miwhqm@i+m~DUyZtY&f?9CPa-wkU_H=jxBbT6Y z)9WgkU2+=t#f2>T%MF}u+bO6G(U1iR@g0%|qL?W|0(WO;C)urHHg!YYBoPv_JBY4F zC!puUQx450NXNv)!a%x5w^m+OSDXWiCajxMFz4p|T^-)gA?cw^z0 z+QC@3%6dd!fAQp3`Li3C(y|5na=?qHph@VBC@CkLrZTkjX(-km7{?Q*ZrpGXa(o_}GMkc_9r)`fQ8NnR$(74{czEC@XaI;2KvW(b zAIhkFSOHefvj(cO59VnWq(1rk8s z<(pxA8=jkc8*95Y<|thWg?+gRS><3XO~z{y6na~zp~CvoP=}QibQ(GJEZF2sb-`_W zqk2vu_EPD>C$&}GC(Oxl0<@Od6BpP-%Sfx6*Ek-~2(l+}R zV@%A&$YMe#+}PlI3cdSvs#<2HYvi{*!xK>IWh4G5^Br2qf9KE}tp`7VdF_BwUuRN~tM@W~X3_wf zAcB~L8|za%cO4ZTl3_rX%j@H_`ztEEvHV2Fo;9^J>^Yk4zO6_{BSIfd481T@zH*uD zNfhpc?Cl z+z)o?gmcX3m~4OB>L{E(+=SDvD-eiAtdWw#PKKNAxt*j_8(;j|;n(BN;eNLUug*7Y zT6yO#vj%bEU}4u<+g{!R*ddnE^>>#9_iX*U`MC4X8DSfrmaR^F{m!TzmX`)+y*3t- zag^_ba>Y^}(ELqPVJq!h=~?kr=Dsa5rM}T-5;o^KvtFxPdt^EZ>4Q$Mfh_gOx2(!$$EIp6HLy1&rhq z$*8iVh7ZDRuUZfjbNhQ;JCcdl)HaP`R2-xx;>?WvvZ7Gc$q9OOzB)cLMD9k_;=Eqa zqoeaF-+kquo18q9>6R-4JEdi1HSq0^;~s!cO^Kq>Z7ps}@j(ey?>5k8zyFXw-Oc^<@lX61=MOZl%Yai`SoFBM zG}Awtyg=wV+Iki4u|wSTFe!e8VoibLXeL`}ebAz)<6(L4uvP=Di5{Z#{N+70DKU27 z$c)k-?0f9_ArGdul7Eo(3=ER-53#X4C7spEFG-9e*{>< z4$cYCm{t8~d#>4G9R_m>@~iOqba5pkxo)oqF=~OFR-*)nXt<9`>b1LD`zZ(;LN6DX zxXf-t!(_z;{dO6qD?k2t#n66oVwA{ENk*i}tCV6J86yPc8VT*d_Ly*blcod?B5N+0 z6_C*c$rIYScNO1v41fm9jr&xDi$6yD>&*AET1UG<*Jah=(QQ}C2alLD=YFrPO${#y zyPtZkf4kyB@`#SEQqI=DdVw6zEQL~y#PfIz**0riG-XF8JRvN+WET8H!l=q=E`(CABIsW&tKv!i3b&{m+)i;dH$@y5d3O4sk#uSZUx*#VE-)Q5Uw zlP)AM!{-sP{rxqYCDQbTKm%Y#~I#;Z!+v2GX6T#%v$zYgh}cO<8-qFP9I(8 zuMP%J0_T$Js@@wNN}!OF)oFID-hohWY~W?!xEi9YtS0w_=yT_j29`39B5b&eSehIV zKQEi^VDX>&iJ4;ecAQQoBqEw3GXp*WAt3h^==hT-taVMd7xCTby}Z2gK7W4y{yi-_ zoiLr`jqBH6SXm*F%AOyF)dR(`n(tRMYa0VM6@QJm6Z(0N8L`iR^4kgSKCDNM743~cc}3E#kBa6LK)r39O!{a_jn`~ zT*6`^e13A);rRO0y_P=V!7i8Z&6}ZFjTgu}2tJhxFCO=``a?@vFLEM7j(Hu#&96Wq zBv!K-z_qdPi-RUFTJ(~^Md#J+olSvRCSj09E^*EymD2QQHEwYe!G~lZ$2_hc6)^3w zf;-Tvr~vfKxe)PL)kKh^sr#iKY2)MJIiKM_^o*yxb6A&YXSeC%f(z)Y9|wyqlBh)9%_-4)*FcH2bDV;UYYpTU-`@tIPz0n2i6F%Z$8B59)+m{2 z#*H>2P%0ph8J`xrXez7gr^ERg_XTfr3g%=bw9>WIr;J!A1+6upEl{%kn)s;@J3Q(| z%%rx0le!iPHow@8!nq52X%kYDnZHL5vT}4d+GMQC@yZOy0+Qkx$??#2G%iF zExs_59M*&8RGmJDv=!kDxL8`2i<1q}L_8&^;t88IoK0+ZfA16Ao`41aAqm5%Xt4H~&o6v4B$zQjKg$=z z$tbJ<>Arp)Y@Gp+ybfeyh5opIXh|Z;$5vd^oHP!X|Xn;jI=f1bBGN*e_kjQPdtU;V#zC#d1O$Tn$aW4)Md+{sbBKHHD7O zUqAM%Cb?+u(D7QRnm%zseKG~T4OLTWk;8ls)WEO^ZdAKZHOOz?_x}5}SwiIhp2k4W z;Ld|>3cS9)ams8k@CH?r=h)R!UOV zpYiml7ygUV6)=e8TI>7$x-)P5&x`*4)}L)p@gZ1Bc02puG;TZ#9UYSZhq8DU)`kA( z5#a;Yo?z(z`_BfE3R>naFVvkXPFVqKC;sVQo2G`X7Ei#wDl5#tZ8;5GFke(+p(djl z^1naJfOq@$3Bj%5C?MBLlK&67nF+tl88FhQg8#h2-06S)LB^@1(9lTxS>7L(?!SjW zJJ&Kh+fw}>q5VDmPFsPHV93oIA%956zuyg%s9Jxv#s9+Z@@fLFt=Zgci{HgniDo}z z~-`D*pPG(v>zOPyd*-?fiuKCH#gPgmvX%~Jb*GFF$m!z&PQZKSi zS)?mJ9#OBIUF?T^FlWY5($a8-@s{nGk#A#~^t6N=vNO%IjNCi|_6XL`{4kwyayN6I zh_~LZ8lhiFy`!heDLryJSC+r`L!GBxqGeMIFJk$u*lvcXxSC{uVQ4%DaB zXK*{yJI`~aYK!}cWvtGM#_5F`n_2kKHAi8=rXvox8s}~B`ktcSWUW5-HNV%T| zd-!0}>z9Z6tK{V)>=t&m-z|MH-51N2>dt;qaPF6lr^-$$oY!fQIvnpT+B4Yt-oN&M%hO&#vob zXSux`@H#kRR*#aLMi6k5o!Awm@|qSt%=CAEx!5q2Egb|!#Z$0F+ZUvoXO)Rb`K|~j zsXU9N-b73Pd4hxbpcGS$%+FNnJ;VYx1@)LZzh(1NUcN1sFRVp|S;FULKYxJtN7_ub zgxh;hZCSExli&n=-uWQGf;E?)MozQYDQWLb=GnD>h8TsXd#g$9PV zIb8%*Olx$LKcx1xI!?xlOq3oTu+s5!!?Rm8xohna%5Oe$K7Kvw0*|&~_pFO}o;p3y z?=}W2m{r%=X`jmFu$K%8<&fHj{V(*Mj804pq~@JwshnQzftKU7$*{x3dYN&s;-YLt&0F2st@8JyV^HeVngCoChj@ zMKZ=R;>Qa$YmcF}8zVFXE*CGds0SWg&S6D&|DwpLL~7? zCbpYCwekVcg&u2>w`Z z392#ic{62AkX3u;`l`@fn21V_a`u$_<#<>0U@9e3S&)S^d7g8i&$_VQn3)IO;14PB zc8;iGZ>KGB6_1v^gr|A_9&0W_-dxHvNXYUY_q=PbsE9n)|M0xt(h`TkzAQF69N#WW zGIvoOKQfv(ZQi<8(D7iWia)%ncX|A?+R*N~t-+<`vB}}ZL z-}^93N|{c2pRA0^xf}LMI@|mQ=V(+$5fIeF#pS<@&I0$Pf*(5AD5$MI6+dDSuK#Da z40LG^nQ-m(bG<_}28y3hnibyjc3o%27MCVA)~lkTdZm)7q64HnfAK@Q*X`8<1^rQn z-$)g=cu4@T`d68jK$y9B0dJu`?^8pBg@dWu*TAB}JrFChedIR^|b2f7)$rVSM|cICL{Cf&l5IMuAg`T0M+y_0Hv1n;?va7 zSN}`IZxVJtiLPjH6qz!){2%>8)5d2%*aP6N}EHI}K=aSaW zoJ`u`_OSJ${}v2Yd14kV;3p(nR!xH2XQQQukV?q82DQwQDgI|?CJ)4 zgJT(!vnjDb<*f8@@9%<4+~I*gncC^!dtwyme0VYj=F9S(yuYC3HX}zrWe+{Le6+L_ zVbg6Y#=fc`XS~T)ES(=4@Gg}(Ew26f{{Vz@%r+ET%6mO|=H6v1HIfa>>25azg?!KT zj(h|5_4_d>zmtQI@U5(=S1)ANr6r~jb?hFnul}O3^gIvLT4`h7%9#I8yzD-dgu?`n zn>##Sqm14~MF4L+C?8?@CUU60P0?+>k|yq_IuunhGz;Q5hb}ir%LM!aBWxHJe!nOTfTd$ z0C0+mASA|XAP8CQF-nA6G~Q3c=S= zRiS~RHv90bS;W`mBk?3`?j8kjslAyz#1M;|1q5NL?*IC_@g0Tus$R=Pqi;(oeKwP3 zX)_pV04an~J=|-LkY@$8ffx3_b!Sw_L6&0MRloOH#$#0_tLh5?@|U(lleOb7Z|VBH|6(Q! zIb&gA;h>>`U=x##D@eX!O>F)S(zcKnF9463W3ddjVa`=onTlT_k|ZpakcFiU?~hFo zkh@>*HC)Rcq(bam%u`Dkogs71r^#S0>blbC4!YrM<^pMbY!jrUI=0wu1fMq#*@Y*Z zruFqr-|K>N3|jJR;2u}$8l}INIu%R2OTLlc5;ueFC|$_rKRyB&QFQMYTyh$jJfxSc zPprAIy_D}yM&$pb83ugOl>hbHl}1sCl=L|k(|6sS9j3>9K8o{8n~A@Ti0B*~Ob7Yr z_~?QtowND(tn~@l!Otw|Y`1e}x2TJy-cz{Gi=**X`JMMa`HDTuL2du|W4-S=80X3g zIW~t$Gu17o(C47C!ho|hrma3(q*Lw*ihTh<8Jy?g;(s~e*yMTR`c1uwall^NGMDSm z%E{8n%F=~zd~c3pPb!tXgiJ0B%IQ8tkC)_TOV1t5kvS;%#VKFS9eLNjT+L0J(@RK2 zb#3|p0vTna6VYGVqEtE^vOgJPq9^O_gMw{=mH2qK6(%?8&(S2g)3{+99vLOD{%djM zos&}Fo^Ncl5JWZs%UNvII-zcftMUxdhy*E#zzsS&OS$$OY>JjY*OHH4X``;LfYS$M zy?-CTda#zKryjavr4#CpA#Cc_dz}^I+zHg!ScXkwPJ5i!PBGo_;;@5fntM4v?Yrc2 zHnIBNlQrkiNaMSv4~j7+t+pPoYkrjt+m1+qtD!pD3WVYOzUPxzUEKn~P%!{CR!cz6 zG$z`l?=7rNC*BGgqE5F>M{i8=hxS7upNDJ>Hy<^KRIVg8p8~yf-2D`o9NO=@^z>BR{bZG`nda#P=$@h2f{aJT22?pr{hn3!T9MJm zkBov6MCT0X_OLZ$#EY7eeg2B2OMgxRbbc%oJ9AMcUAHW6tmdY`iX*BjqO*6qW<>lD zh_w6k0=Pg+tf|{`}Fo#(py;^Jn|!?1I! zbjsLdP!T%#OM@2QfMeI9Sw8KVSlv}~TyDs2+93_k6bm$gO160HC-;uO46erCxh6me<<`C}UAsQC zc7`6!0AX14Frqshy|LO>3P2%yOIxPeat$q!q&rwuU~_7XPgfPJXjjF%0145PqJIDo z^7!E8n)B^>Pyh%C?qp_W$M|@o*fv#S)CC3yj$=oOD#uZ&8srLfb%_KdqkM2lXOLA{Qm!OH4?*YvE^YniUq(lhZTOcRUqx zV`)ZqrK@_IBTP;8*|So>88-U*s66>OD2FW&swFTA(c-RJfO(Os>%uA66sR08ivjTE z##c6aXmT){R&~?_mv%Vzbi0dj4_J_vY&c3c>z!^Hp@*Oh>3r^e@{P@iyPy4W)EhWk z56^h6T_$0=N3`2hfVXboU7g_P1l>%RSKlQBLb>umClKS8B3F7ouse>_rW7=R;FHA1 zu&ntBHvqPq#LP0sR>_}Sw4b)p$7jwpSq5w+y?!q~Blc}bM^MMu!Brn0M18$7g%uFm zhma2O_rdZ%O=pVk!C}1oB)D3D)2BT6i`Ph0F}WeOM^gg0*XCtQ6>dOo0HDJ*M_99$ z4Z!Fig$fREYG3!mm-cK32PK@GvKq6wNPt&rdP3nTrXd(`Au;~u<1bLun$g=_Q&{;H znPEIr1>9FIDP-UNl&TiZo9K>tr+B1;3$W>8BV%#6NX%APfvV9W4z z&Ka+8!orNIFL$7AgQ%q*8O_LyTTtYg|5N{kFwg3ijA!MI(ClXso!>B}MbH?1qJ%ady~PhU_dkK*^qN2f@E z^O=t7E+5?;Fh-C;-8WTwjOdEN*1?Uo^fb=jduL0;@i7bghMz4M!>3Fa!eYJ1%gCG= zoH9S)j#O6e@3PjR(V?#Xx#mmT1{~#w;t$UwLMWUmvNM*}0#u|(cVj3WdBJ?FROH;U z=e_)$FgBpVbNb~iACjt-`y z^JrC7V&EcCMzx_tZuGzu{%4B!55wcV@f$O(V-7 z(9SLeiPnRxq<~1{@-IxKk{9ua7R<55)Gt@K*Ny-L@;B7{BN*^vaU{wo>UOXKq;$R< zR@9;+er34YtrAJg@_h#rZIBE1_ZdAQ3vl_)6_1LqfgJAx_ekgKvF={M^T|om7+Q6_ zH97*1uw>KqnZ+R96wh9xP)v5{4)g~0ACINMr zPoFdw7b_rI+zed(RfU^HyYOtc6$*`7w1!*j?tYlajuiwVEZ;FvI`>Sc%2YBd%oZ6O z(#djhDd*H}TtD;d#|D`m4Z3D+!dEfhfw@UViimY0!*Tk+j6s`UVUWLKfWAmpaD{$|dJc;BJCM@5()S#9ln@PR!c3))w`vIi=XcP}p9aVBxY z?)6o;TAF)L)y_dnnTqShqdczW4qNdVgy*MC`5Rd5@QcGm0d%3Z!)%pV3yGm1UkYgH zM(B4VazO$p&;lU2XDx$wOMKvV+~?O^Ou`pU9I)vr@rMMu@2$V$DHDyB;3*jsB?aN! zEF)Acr;~8Dv)CC49>00^hAj4mS7fY0adgUaJHNpXVOJ$0aBdDg=fw%K`BC}vL*Bu? zhUqC`hjKh%1pk5+> z*7iU)Ht#Iav}Sr^mz!LnXYH90TtQ__j)serxrS7{!W_{8 z6~oOUjea4~0(TU+2$XcyyhD$)DHQcsm`gqsLqVO!oXO%gUXv;p(Hd)JzC(3b!zaj6 zv(^O}K@x;?DWvbh(Y&^Hy=ZCYsp;xer{)Xx7W(QkWE@BuiKh}1=VL*=A~o<=_Bs{1 zchqQs;)IlFcy1Zg$E=2SGq@m5z%)2j^|!W{PD2`8G*uJth4&_?+}HDY&l%40Ae*LC zAyt%)&KfqtPs(pbY`~#3iEhAoumXUZHj^$#R1qo3U+-4q%Kh3~*1KN3wPV5mKoj>> zU}gi4qg?-er)Hi?Ti%pK7TsfYRV^4p^K(GkC^gW0%?R&iGs~cC0f5c=x=sAL9=`|Z zjSl=SdUynY-L0DNQOKYy#Qp4VKqqPffFVx*JN|E=3uA5o8i1?p)SOBt`7RdLMeX~Z zE;1aKyz}>p!hr7mq8QiQ`P9^iT`}RdwvH2Za_ZFuy?7z9)UH4^iexVcUEwD-L;V1DMd z>EV8iHf2@CO+F9ka+)j!()jp}w4PN}|H-n%3-B3*#hU7YFe3uxO$`@Gssse|RI5P7 zw(FMbm-Qt9`Ep3BGb0i8v9uCt{(14VK~qdaC%^#^ES2IJ1$ZiLN1c`TKgZm!WAV74 zmta&a-H$RPHn51HUs@{UbNSA;#-Z$(PMHZMce%>Rac7Xcpnwh~n(Dmv%;*c~o`G3% znC!A&zNEy97%1`YP41pm5_p}2lLve1?f(7O(Avr6(NVF+k=}hQ5puK1t??;1G81-{ zP)2D*q2m)HQHWBIO8X&U&aRX&S5%SygSZg*p|fUW;9_mx@91!fPF>nbbLH3?r)0|5 zg{1du&z1GbMW}v*Uo%bSDuPEe%sRd*NNF!E0bQ`W%bTeGytzprueF+kM<>gXEa{H- z2snbk-Su^HfV^A)`3s8mAM?9N1;~$(gBpF4^WqYm1M!FVf>KpS2KlgpzsgpY{DI*6 z9s&z~K*DI7U)I)SGX2v$QUqHq5D8JclL;(>qcfE zoX0#;mCQkVL7f10;B|^vFR=GQOCePlz3GmW|FJjsvs!2QZ|O zg46unFI`_@i|>aqb+)! zkcbudB6ZUz3i-$QmY`U=_V4FghL~Ldl0g*98bn0_(x+=Ck9e5$*Wb4M&!CZ&NvKY^ z{@Tw?NhM>ppZ;9U!6me_PW(_{JTh+kk)@mt$g2F@hj&WKSb&fEK7*b7P}i ze5WlQ9^Mf_OaNHN*|S$_mjcBr%|tm7P0=Q%&@Vyu@&5o9%7naI&!$zt&K6Xk}} z3igcI^~dl2YW?fo^~WnpS0Q%?WEdEq8PsM>Y@K}nDIPem?PcxhZ#}ubJ>cWvCqXq+ zRhxI;NPQ_lhk%9ri!z^M#Gu8Q=g{81fEj$Z^laY$Y_9CL&LZp}(5u8Jph+Vbc9%9- zN=p*rt~K>w#e*`FSm_kUD=yIjCO;)khA1iK{XcJx zxX~7gOEw>m-=ggheJV^WJ1{^^%M)hjB0jePdQ}g9=aCd71C)HcM|>!={pz~Ype@{a z$(J%Iz#H?!Gb@~JWRfR%DLIi9`#Tu+GmF7t=Bsr^NX%MzbJinM+G(+1Lf6n+cy|eIuVjA!(;$V; zKmA$Jt~?MO@C$uw*tUW4wWYm+^;YYpZZWhmc9w1^NuHv4gDI~X=Xa2kq-2@dw;i~oWS7&p4Sa&7+nh4_Pug?WB`r7Y$z zF%6BfH*aFTeS0d~oHJ54G2oPSIq6F=?_GkToOkg?Vh3h}i+6WsbYl4DY<^$_p{(lF zN{2_S9je!-cIJKjZNp5>=kN?~*jlZPKwmd`3fI&M)$AJhEE+31N6#&OE&8>&2{sK( zcni63U$iaNO=fx7UIaSoBUgbG(8fLy&aWb24`_pDy|2m{84?Hy)YxH1u1eF&l;1hT z{nPqrM5QAd!i!gp_oHVZkMgT7<^F#8nObBQGvgLJ;i0PgK@to;Uw*Nrb|f9h=Y~;F zFT?6X%5^D?L_*iePZSIt0~?C_(U1R@Kx_=b;#AnIqKC)@H%#j+&x0^D=Scc>%5mYq;GEPPQ)2RwdF@$aXnBp1Xz zkn-MVe;Rp4fSFrn%oTqbfEBidbs;4#cp&vZ4^+s)@ArDON11LD04{Xzj@B8Jq)xD{ zu*b0AV?R|qo)nv!9ha1cU6@Gz10u_#AxKb2EG>-KFs!*KG#Wr{)f8Js3G;#>($;!fANQJk$7Ao<7jt_ zx!e<*te!ppW-E74PtcI=hcV_(QsWy;nLF)^c2?A${qa|o4*X)}&?v7FcyIq}o^W|{YWtb(V zevn&vh8bw=B(ODL)EBm7A7eFz)56we`KgLC5MFy`PWp&DD@$m2{Xvn6FcszHjD`+( zJr6-m3-Vh7<@iE<#YrEOGYI3@q>%!%0qWq?X&(VqiTa@aBZ&lzDPQK#`VEsxP-GlF zox$4QT>0V5ATwxcTvGw-PQ58RJ3vs^N%|z3__c|L$W?|SzeCUTq<{nWd7_BU{5@*$ z6rgE6jMu7@ThIvjProI_Xdx3X zu}{`bdgU-C+TfTbiur~Al8o5>nY+Hf=m)u98hf2(Y3(^@p^3(FOM&?iQpij|ImvWR zkagJc#(&g#qo6Ri!BC5kcT{uqF5Ee}qXPdafWm-vnXth_)*elL3MO3o-NF31ql4); zFyViH$!lh6k?eT0a@pu6+GF%$NOuR;QZ*J!ao9#ZLzJu4$grRCz*T`NEij&f5s&v^*rc4TKu{$lu{$ez>M)9@m30QHR z#Y-rV?m)Eel?SN}?v{SfT=gLd?fo{+Hr=JCLjEC5?;e@9VwHRvg@3;uf2-|)dn1v`OIg>xjcsjPug|Sby6J;!j&Ob3kXbz?EiF-N>mt$>Eb9vS!G8Hx;;>@a-?ParD98oQJBL?{%M`=) zxGW?@J~XsDB{(KUV5kztOc01bZw5})AJ4Z-F8IJK2DpnLX7RwhedFSdG7?P+xq)fO zIzernoda9=khic#&!6nX!NyIQDz!^Zc-{ZjouabmvD~6*R|!z@2uW&6j4z@>81C~5 zGcyDs-*vyP|JB1$4UBB}Luf&6?WervN>dCuSZUX-jTiqOrlmvoTatpL>rH2S<9hYW z+sDWLLL6HMm6m5vO#A!1vt3HmLbL#U-&jAX)77^-4j9AStvzR;2NnVUIQhW=_4K`o zu_O(u^O2Tr%-;J|Gszz(>l!Q6{#*4M@R+qko%#?Z9aG2|+FV_1-~X-3$< zD8JSY$tO$HV|E6$FwN$xlV=2h>*3A2>(`b%4WSqx2JFaiz+HLgAK^->;I%1NurcOr z96ICQmaS~(^J_nQ&JFk~>%hhrznp9H>kL>Zz{LIBfuzT(Gd{1}{x3<)Q@t3?^rW!JZLD7#F<$DCO3MA9o}+w zF73|*cW(0hsZPM{kJYLbjnKweu#^a_X1ZMiFK|4H2w*E(jK_i9Zm9Q0b`!Y!A61EF zif^N*)4&^g6hDA4{A5s7Np%!1kDbzW?35@bp+h*#(z=38d3$gt^&OFaUgOyI+q~@S zf{AIb^bH`nj%I9JX-IRLU886btXXY6tpfq=<71Mdxgwc#v z5q9~?3hPqhooK3DYJX`X4a_xQ7_huYqA#?LC33D8T~OU z;3Zz}h&&w~v#ptS#lySF%sl42Q;m>H_5KCsE|u=vv9##b{BjBX2~**M&Qx=g_V=0` zx1o3a+&#Ymivdd75cFKWxX_-3t!U)G777dyZJE0{HS(e>tT3fB!p0f)qDF=V#OT4K zDq*2aScMCs<&MhUocKwQ;?|G^b;?H!71oGv|CfPbQSGmDeQ+ASX|SRKcgrhv)&&r6 z!oQa}i=3dBJm=5q1C|l^d-_J!7yKXOa&j^>ykw2N{7PW6jJVM7C}s5@$xT$BhKG6W zdXcV^3}S3-qC`Q(oSvF=pG7GPxIHD?EG#YNx}b~Sc#EDOT}O#X=6pU@6**?tUJ%Hp zRpC1E*;KUAJ>Kj$i7T(acV^)8>)WtrXT~K{qN{so?v@CurTIgp zxV*W)j=4!97)^aW#+g1nH`m_qjm`{>9jAH;%MnFk`T+lx1f0Be&<1 zU*GbYwm|s$Twj}Cm~Uu?#(8R>JG;W=MqX7@-=K^A{Frvqu1j(r&Rt{I zb_Y1E1+ZEgQGVTN!zGxK(OVHvTxirtaudTmEZ|8)DiB1w_1X7Q4ls5GT>@VV_4jlA zikKu7Vk!#CB`UWGVIH1>Mr|-Ek!Jr-mZ_Aj~HJc-Z2>GxP3&wQjM?o)`II39`hjjIg9T;D1=P{ z#qWL-;;_P%tD6B{p5NL>sp7M?nHqU{I7mh7u#>rSOVurXl=`mo0_04D#4+}>w(L`{ zdhj1yDDSLqJ9JOt&p(E@4)YTfn26=fZDi6(#{lh_S z)*|~t#ZSp~*=S~PhxuVPhDP&xNHD1h1OnGXN9#Qo7&n4%vk=tCnk z{ENw18+-A94I3jkz9Mg2=bmu_rN{RjdJeiTpTAUk=v9?%Tc4kNt`^9vxJUH*1?Y0< zU8khXS$3KaCL|)ehErHl7NMc8>1U*->L>f;MV>9i#dUvnlwU>r;!EMK+nupvLc*+> zk!vi_!Jb|ny{=Ez6r_dB^|PWQ{B?cy_CM?glh?_~KkTu7DcnygsG3`h&&)O({~42& zY59}Cj^Lrag)&=|R%+0OqkEHx>}^l`u13mW(D)BFUi{#X9WLH!yTY8G{{;HA^nJW7 zjM~k>PeIS{mtOt z-c^pIha!g|1j|oBkx3q$_io23TWI~@y#j<>PxqT$qD+FU?h{_vm7qKW;bE@TVm{Zr zhUimpG-GQhuM3@}Mdo%_&lNtmqc7lT+Jco^H}PG_-cq<3h^k}W&~S|E zKu=OoX>aH)D3DjAO0Ju7yn1!}%?%}!DO{yq4Le-J0uII=-ZALO!HM2vw1zSlkQxpf zV)|)1Hw`}b+a&{AWkE6KZ=0L(W8;%aAFtO zpq(r~wF4yx=|hS_U3v%lweY}!9u*t+gvgyTV&jAK6SVX{`)PP-3ovm!pp1|CwIUjE z9^PeP)p=XijfY&>GM4-c`?5(SE3wMSQUt^>El5z1c5zxX>(=Mc!ArVDEcqK{Wf9<^9Lb zHi6uJg}zpV)Wcp9ZLKSZZA*Dow|LK;J!ArQN|{Pl=i0A@BBQ=Ih+Tm!=GRU%xG`6x zeIUMmV_4s7e|w7TwU_L*2=+d9dj|@xj01uM^wZn27aeV?{{37XVX6G=4GzRASBiZx z6&3uG-1LmZjD*>iRihEf-}6c|US&R(b!Fp=vy7-BB+Fr7V^S9&mlJZczAu+s8r^p< zfrOc&GqA$TGJ#0#Fd`zFbC7m#%nzQez4+6?3=?D^p_WKc{0#+rYbM>T zI`p?{7YkQS5%7fE%^%e~L_;&5cjM5@3gA|e`_ zxHndy`|+(llu)N@yWN1ClO*f)Z(h+W`Q3e$(G&hQ_-AnnDAJj&6ht3K@6qp`o=v(a!=0D;qb>+}&7k#l9q zSdK4jKm2i&l76(V5stAaap4h>P@*SYdNZCFt2VJSFW4XveO*3*rbO*42MuYv2~JdW z@io#mL2F^QUo$z&pBV<)M~4IIt2|%cL*Oyozgn~Q+=)HKBE>)Kp6}gl5=MRF4*fTY z?CXLy*TD@zg#V|#?|f^bd)K8Z(nBYJKqw-;1PCA~ErbrzTab>@BSAolGzo-Iq=+EB zcY+`_NCy!S5JXUVKtOs?LD4nZoT@3&b<*wd`` zj(a;wZM;R7F7CTF?wdrWbTmcYI(X(Kb;o(NrkIGPn*ys9SlLJK1Z@t;-~!th3h~*Q zc^9fYgqq<53yUQ24L*(LjigIjppNyHKR<+o?!$tcJFCzPOkaDe60%`R`3+I~y}VV7J4U*Ih(nHjbF9~ybX63z95RMKp8W@c6J-%1(sP%j!TcA?RbAb?&|OhPHJ%( zj?u06`g&I$vkGw@b);vt>`huy=`kO_w+RWk+>z28w4;+C2^}f>2F_$oCbJ~0a$R07)`+DB;23_UgU{QYPURGP)(OA1PjeQD* z@V*^5kG3fH3MLU7H}u$4LLHuZB@+F?2hb!wdZeii{xG2!Z*8FCUOvr950Mc4o}5Bk z029_*KBm&sUUwTQOob*MKcYshcpItn_sO$~V_BLsfP6LPW?^dflWo@pj;Glam(@;J zX_Vro$U%o+L6i7md^od!rWcOs4qY6@qou3cyKF)bnV}Aw+ZJ)O1GD?(ELu`6LEJFe z=@jn}l-pH9O{e2Ug+RWpi(Bu~_EyxdeMxLh{+mw7-G-CK#y+tW~mcIUDSGB&#rbu`9I)I5?-Cj+`GIb~MFRrb8|_1dV}kaof>(OF%GS6W$eP+Fz*B6&7#I%^q6&vfW0@A6kb; zGlVX0e`>&8wlY6pvO z!|N=^a0z^HaZRB;;VB{}qN_Dd^wmm6SGHdEE7~}-LdM?j zD+86sj=>&W=tTtJr>y1kE(qt$nnon?)thii5yIL13N6{FX}MNUG`xgj4!BoXmA31S-)D^76Nx`YDNbP?xLXn(IpYTUv=PpRM zRJ$Xa`{KyzW&?55giphqPh?jGH3IRVv7npcEUqt#h?T|G;v9dia#{N(iiu5{uD$@K zYJ|r0&24V!*^DwRQZnP`w+B|Ee|_}WRSwY#9Q*O>$|2Z~a5AVEts%(oVC&HS>ZkNC zB{?YuPDrf~$4NB{H{o$HI-SymY&KHr>eoGL zmtzxs$0S8K3JO5$6Z)O=-))Jz5~*pyGRkrm){=x<#V~*GF=kxL`~<7Z3p1+O@mXAS z{-pZbEHs-c`X@xoZC772|w@bD&wS0#>U8! zVE@R#z#V!tp7-qz5Mhi~tHF;Y4cU#$C^f`Koz87VrK zUbAA0{h0pkvAjZXL*C2jO}N%Qq9i71?fCt(rs%$k0R zP+pvTrmw;45m*39T`NfItom`NoBHjq@Fb}|3brdhF8yXjPskNN1@Z}$uWTE6Xyq z{%`iu)H}P{D@&Vh+po+K{D68!|Hudf!wEmL_N@Ag1gIpx(&>?1LuKTo(k5B}?zEI< zG{AVcgsJ4%)YM#{Vi*p)IX(McMJ@XL2cK=T*AkMSr8E9=Va_t1%4GX^iOLe=es0)h zbgO|YV9e0xVa~i@+MTp;DIXt|7`S4eSZW`HQvH54UfRyb*`r&#n>u!*|Fz6&aMV^3 zuku8Asm3D4S9AfRo~DrXhM7*1N2*}9aWhZ=9^@PWE(*Sb>I(7W5*8Qbi{@X1EU5EE z6JfF+Q`oOgy{vhjZY9;{k@}oplOO;P6XK>4^2^$D+;ypJh&cbEY6oPZF9jo$*)?`) zf5h5A9R>cVoeA4T-u~w!$NY?nOmw#Ui--CZ)KTa{vU zh7S*T0jB&AA|yu>KpX88X!OK7K=(DkA;aMq+zER}Io=&6q@+r|_At27IHRW^?wh|X z(EVkh36)DMnCebL3(>lctB7%&5GJpB?XuCQxk#4$Bn4omO%OAh%3_-%4Ga4v)g2^p z1BK32g>z&59NtKtN-5J30L26Kk-l@xEWm%p5y~L2fPqUOl`mhWN@bU#fMB~!5r~U) zD@n}zPV2{|yWT;5g694tM0XCy<4w3o&?&NR^jz7kBE}YA6&&cr#YFcrrhB~0zX9nK zfk^bRpA(P1II=FdrInxE_6#Nhj&$~X9na;)ojyD0!`|mHNX0(Zm2}Gxr@=I=nF3jh zuK_~0SHvY+AdG*^ot^j)@zA66#XHo8=1?EDE3e~bk$qS|TaB1FQZ+$L>;Sv1=FkKdaFK?xfSErXepvYtipfBp3%X4_y1b*RNrot)sXK z1LanOXML=#Oui1KHXgjrq#QWOIH3(pZt}EojY~S^!jfj)(pDVLw~5-+=sGxM;LcGl z|4g<5rA4pRe(f zo9CKC&%n9IkBe4Tg71KgI8r&r+rV+I38@H)bm$HP5U3JjH;wJ9OlAit4x5!yhwngF zlor(@CcK@YhiO>9&r#{0Ll-z$m>$=j$0#gUp8`*u^ zg%H+gEB0X9ne_(x)VcWm{v<14mXK{=QK=26qy8dumJM zsxH!Gj0Z)B!s9bet`GuT8y&sx42?M77J2f}&qL=;R8artu`8SCwY`hoi{W9~k}_Mx z)klES1B#to?0uau{u_xltbL^+=#t0Ufe$d&&;P|u2UrM{G+ttSV9WF?+&Gv0sJ~4A z%Y-%2eDt~zHf(rfy%lL{lr#1mIWz)!9eb?=Z+$OKEukU`#z_G9AHxuN>(xLY?J z|Hj{-8t(kAQAE8ssmw}gAvu#nKy0yP^rv^G>dovK^7OUE#R$wJRRPU16eO92A_f}) zdkMn^y)C$TF{Idy3Jm0sz0^cJxFv;B>4Lw5{Q*&Oux!GK2HQiBtn0I4JM{a@EnhsW z%e-K9XfFnro_UfMsj|$g-@f(pAUaKxhn!E+`mQ?W$1{}RrMfRJA!D_*oDMbR>W<9p z#*wdTm)3(j)ir1rF#Tp=nvlr7^_tOkj%J4o3XqLrz0rZ{oj?tKgo7tZdp^Qqq}=1){$~GyJLvL*4T#yUU@UeCFu2xoh#r8+@hMt964~ zR8N%e07x`0p{fc|%EGIuSER+%>>TE+EO1SSd$+g5VTxzts)8WzFj4GXc8Z3=t%n%8 zZ&YpvA4{79PiXsC+z+35J#7fzdb>gJfov+#aldHGG~K$_^>KD4L`%Nu0KRVHb?^=- zAB;{UjTr!bWUow#2cNVvF+oZxA)Y4=F*kTi;H68`U%3RfwNDfLRAxRrQZ8S~xv+m;R%QsoE!!15Gxyq%fT7Xg)k#3C4QotHj^|Uk{v=7|)|nGww9wC&((LU8 z{L92KC6tM0d)M?P!zBTs+f>sDNy)v%35QIlaT~+E z`}@k#MlVKuSQI58X>mL8a>D~c_MvOa-4x@m{12hZ6sI~K!h@3G9?qGP5=J8W2_n5| z)4NE*RZI|NT>xd{>jr51P56R@KrXG;I#*t5f4|YFc>k+RM&c$(J`F)_UEFhr5ZU5!bnofC6*7djQrqKvU9>z4U zm^x$M2bAfR!v(6$d?|ojsp}~;39!OyFGBdQ^29FF#)Db|dpV_ZeB$X}@@(I#0pwd( zjPz1~=XdaVF1=klPR}L49FdrD9O!SpZc2r6$yH7c63Z-;Ys{ywRe=QyB1FC)GxXgU zY|d;@))L^>ZIz`vDW0Dyd%@w>ZnV5Q_+tFkkU#dH0$i2vz%m+05Zu3zb!7;%aupn@ zXROGO9~+h;3CV5CBUJgk+Z>xdvvSn9bX~H1rgaAlQ%kDc>{tGxa#lI4 z#b<@a9s3Y=^htc+PmI1nU*Yri2+FhJsFsJD_la2A(Gh@$$XR@#++HyGg@(v0?l#~-=4~^?Cs7^ z>lKK(Agl?1Oed*AE{7)bEnZ*47*NJYuDalUiO`1uv~F$Z?d9YAN)qAz_g3ehE@@dk zoteHf6cRkY@(f*le-YTH;_M+%zT2BG>G~ym*;77@LyQz0y~Dk$EjG{v@1MNMwiS3p za)Vnw?OTGn@!PS1cc)48iOiDcYwdOB@(Q#@$&SIh;Eh7my1m+$@Z&y>d+uzv{gY@O zGsU3J>Z|}~jpfsFiSz0N8w-SdlZPwq#LZuXiKo_sG>ZSg2g)Xp{2)fNPt^xG;k{Xj zR8m$_GQ*FyzFDns{JqUCEjH+G&SI2jFWyjRQQd+L!swSEAOWdQ7lS#U*&Hug2FtUM z4N(bTrS2-VF(9KjsTp+Kf~798ydA)_^6vGVWEgWJCa&1{>83}}M_q}s(4&4FTFnMYsF6FI-s~+JK*0xqpfk<#8Oxi6c5)LW#^A)4AysJrB;M*_Ggn(kY01_ytQ<7 zZ=Y~5uTR5n)XM$wnkAv~;}0*#P_vL<49XNuOE*mt%Mhs()?+qFd2QYn_BIIf-4~U!c6dcLz;c&EQVy9tPPFeNw}RheC-D27@Hb z8RrBxYL9u>>9pgw?gNYCMDS>MI0w6Ud49DRVTugQlE|c0eRfGlx=3M-AqS7Z7HG5MlZ1)uJ)GqlOifCz#!|BoD zV51c6#CM$mJ$f#3$E9y+R!@N?ZX{2-Hx2SwN4K>V(R!9dR}x`^W>t$mxgw(kY#5ZZ zHL;Cma2_9xvQiFkv^R~)u*;%ty7sx~r&8p9*X<;ZgkV~BcOD?fdLRWBwu)J(ZSlpv zCP7i`{pV}}?v!x|^$*)UTQg?*=NWJHyW&vmYew{kZ0!!C#$xlj_jbKkB15VQ-FvHDfXTa+&qqYl=+UT8? z7-!~;%9x?*{??O#(~?%zvJ2c3_Jy<|QQvlj9GLg%$f!$e=;NQ|T($BaG?zZgSFj?I z@!xzx3myn>4~fRRrte#u&4TDaE~V42wmvqwo7h`%&dmfVmGXqIO2`NZ7Ch)^Zmcbc zQB1MSG5HD>OEv`C41SsAw)5_^0E=x~uODA{;WF#}Fr%Y>N*~I*YFaOb!8iWerfp3Ph7!QuC#8wPLVlRddD2+PXE zF};unE#o}81?Kln<_1fyf}^I`?uI6wdokP7W_94V{Y#;iXVn(QZDyQg(Z8;^9-2Um1|d62I~Ac+nS6@?6pD=-15q$d=N z`+L~)p2q#>>)*pq=@Q@4|MMqwJ{~|U{L}8=Hfm#)TzCJc`8Ov3-|#=zYG#nzhW~rn yf7*m+n<`HI_drnaZa)Ct{=bIib^m{c{`u#~?vb*5jgTz~@X^&a(yG_E6a8QDbgNka literal 0 HcmV?d00001 diff --git a/locust/requirements.txt b/locust/requirements.txt new file mode 100644 index 00000000..72131424 --- /dev/null +++ b/locust/requirements.txt @@ -0,0 +1,3 @@ +locust==2.31.6 +liboqs==0.9.1 +psutil==6.0.0 diff --git a/locust/scenarios/locustfile.py b/locust/scenarios/locustfile.py new file mode 100644 index 00000000..9d1d3cfa --- /dev/null +++ b/locust/scenarios/locustfile.py @@ -0,0 +1,88 @@ +import logging +import os +import subprocess +import time + +from locust import HttpUser, task, between +from urllib.parse import urlparse + + +url = str(os.environ.get("HOST")) +parsed_url = urlparse(url) +host = parsed_url.hostname +port = parsed_url.port + +logger_level = str(os.environ.get("LOGGER_LEVEL")) +logger = logging.getLogger(__name__) +logger.setLevel(logger_level) + +group = str(os.environ.get("GROUP")) + +class QscNginxUser(HttpUser): + wait_time = between(1, 2) + + def on_start(self): + self.client.base_url = host + logger.info("Starting Locust test using OpenSSL for TLS connection") + + def make_post_quantum_request_with_openssl(self, endpoint): + try: + logger.debug(f"Making request to {url}{endpoint} with group {group}") + host_and_port = host + ":" + str(port) + http_headers="Post-quantum" + request_name = f"Group {group} {endpoint}" + + start = time.time() + result = subprocess.run( + ["openssl", "s_client", "-groups", group, "-connect", host_and_port, "-ign_eof"], + input=f"GET {endpoint} HTTP/1.1\r\n" + f"Host: {host}\r\n" + f"User-Agent: {http_headers}\r\n" + f"Connection: close\r\n\r\n", + capture_output=True, text=True + ) + total = int((time.time() - start) * 1000) + logger.debug(f"result: {result.stdout}") + response_output = result.stdout + content_length = 0 + headers, _, body = response_output.partition("\r\n\r\n") + for line in headers.splitlines(): + if line.lower().startswith("content-length:"): + content_length = int(line.split(":")[1].strip()) + break + if result.returncode == 0: + logger.debug(f"Request to {endpoint} succeeded") + logger.debug(f"Response:\n{result.stdout}") + self.environment.events.request.fire( + request_type="GET", + name=request_name, + response_time=total, + response_length=content_length, + exception=None, + ) + else: + logger.error(f"Request to {endpoint} failed with return code {result.returncode}") + logger.error(f"Error:\n{result.stderr}") + self.environment.events.request.fire( + request_type="GET", + name=host+endpoint, + response_time=total, + response_length=content_length, + exception=f"Error Code: {result.returncode} - {result.stderr}" + ) + + except subprocess.CalledProcessError as e: + logger.error(f"Error executing OpenSSL command: {e}") + + # Change the following methods to use the make_post_quantum_request_with_openssl method where + # first parameter is the endpoint and the second parameter is the group (kyber768 by default) + @task(1) + def post_quantum_customers(self): + self.make_post_quantum_request_with_openssl("/customers") + + @task(1) + def post_quantum_devices(self): + self.make_post_quantum_request_with_openssl("/devices") + + +