diff --git a/.gitignore b/.gitignore index ba1c1ed94b1a2a741482af5f1ec7528c9d34296c..4ff652cf4d6a72f1063869b602ca50d598149c94 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,5 @@ gostructs.go *.out .gosdnc.toml + +longevity-tests/akms* diff --git a/Makefile b/Makefile index 4d554001ddb60402aa822e2c138458a277722410..dcaf532967db8f281baf95ee45badbe40ba0c949 100644 --- a/Makefile +++ b/Makefile @@ -118,6 +118,8 @@ integration-test-debug-compose-down: longevity-test: generate-gokms-certs build-images install-gosdnc + rm -r longevity-tests/akms1-logs + rm -r longevity-tests/akms2-logs docker compose -f longevity-tests/docker-compose.yml down docker compose -f longevity-tests/docker-compose.yml up -d echo "Will add devices, can take a while" diff --git a/longevity-tests/docker-compose.yml b/longevity-tests/docker-compose.yml index b23c3a0767c1b5b464923254c534fed5b0e0af94..e7eb5af43f1faa83a22450d32cec7e5fc615c251 100644 --- a/longevity-tests/docker-compose.yml +++ b/longevity-tests/docker-compose.yml @@ -87,9 +87,17 @@ services: akms-receiver01: image: akms-simulator + ports: + - "127.0.0.1:4444:4444" + volumes: + - ./akms1-logs:/logs akms-receiver02: image: akms-simulator + ports: + - "127.0.0.1:4445:4444" + volumes: + - ./akms2-logs:/logs qkdn-controller: image: registry.code.fbi.h-da.de/demoquandt/qkdn-controller:qkdn-main @@ -111,7 +119,7 @@ services: plugin-registry: image: registry.code.fbi.h-da.de/demoquandt/qkdn-controller/plugin-registry:qkdn-main - mongo: + mongodb: image: mongo:7 environment: MONGO_INITDB_ROOT_USERNAME: root diff --git a/longevity-tests/longevity.py b/longevity-tests/longevity.py new file mode 100644 index 0000000000000000000000000000000000000000..d2fa36a21aff770bf6a0f2b62b56840a125f4c62 --- /dev/null +++ b/longevity-tests/longevity.py @@ -0,0 +1,115 @@ +import http.client +import json +import time +import argparse +import random + +def sleepRandomTime(min_time: int, max_time: int): + time.sleep(random.randint(min_time, max_time)) + + +def requestMode(baseURL: str, min_time: int, max_time: int): + endpoint = "/api/v1/keys/ksa_key_req" + request_id = 0 + while True: + request_id += 1 + print(f"requestId: {request_id}") + data = { + "receiving_CKMS_ID": "968fd594-b0e7-41f0-ba4b-de259047a933", + "request_ID": str(request_id), + "key_properties": { + "number": 1, + "key_length": 256, + "timeout": 20, + "TTL": 24 + } + } + + headers = { + "Content-Type": "application/json" + } + + # Create a connection + conn = http.client.HTTPConnection(baseURL) + # Convert data to JSON + json_data = json.dumps(data) + # Make the POST request + conn.request("POST", endpoint, body=json_data, headers=headers) + + # Check the return code + response = conn.getresponse() + if response.status != 204: + print(f"Request failed with status code {response.status}") + print(response.read().decode()) + + # Close the connection + conn.close() + + sleepRandomTime(min_time, max_time) + + +def readFile(fileURL: str): + with open(fileURL, 'r') as file: + lines = file.readlines() + parsed_lines = [] + for line in lines: + data = json.loads(line.strip()) + parsed_line = { + "source": data["source"], + "request_ID": data["body"]["request_ID"], + "process_ID": data["body"]["process_ID"], + "ksa_keys": data["body"]["ksa_keys"] + } + parsed_lines.append(parsed_line) + + return parsed_lines + + +def analyzeMode(fileURLs: list): + data = [] + for fileURL in fileURLs: + fileData = readFile(fileURL) + data.append(fileData) + + for i, log in enumerate(data): + if len(log) == len(data[0]): + print("Logs are the same length!") + + +def main(): + # Parse the command line arguments --mode, --min_time, --max_time and --base_url + parser = argparse.ArgumentParser(description="Longevity test script") + parser.add_argument("--mode", type=str, required=False, + help="Mode of operation. Can be 'request' or 'analyze'.") + parser.add_argument("--min_time", type=int, + required=False, help="Minimum time in seconds") + parser.add_argument("--max_time", type=int, + required=False, help="Maximum time in seconds") + parser.add_argument("--base_url", type=str, required=False, + help="Base URL for the requests") + args = parser.parse_args() + + mode = args.mode + min_time = args.min_time + max_time = args.max_time + base_url = args.base_url + + # Set default values + if mode is None: + mode = "request" + if min_time is None: + min_time = 10 + if max_time is None: + max_time = 240 + if base_url is None: + base_url = "127.0.0.1:9696" + + if mode == "request": + print("Running in request mode") + requestMode(base_url, min_time, max_time) + elif mode == "analyze": + print("Running in analyze mode") + analyzeMode(["longevity-tests/akms1-logs/akms-simulator.log", "longevity-tests/akms2-logs/akms-simulator.log"]) + +if __name__ == "__main__": + main() diff --git a/longevity-tests/run-curl.sh b/longevity-tests/run-curl.sh index 65b97fd1250ae5705ac52a829cebf501cf829c79..648132f7a1d8641ca97aa9ca02ffec9cd799fea2 100755 --- a/longevity-tests/run-curl.sh +++ b/longevity-tests/run-curl.sh @@ -1,28 +1,22 @@ #!/bin/bash -kms1AkmsURL="127.0.0.1:9696" - +url="https://${kms1AkmsURL}/api/v1/keys/ksa_key_req" # Loop for ever and increase a requestId variable requestId=0 while true; do requestId=$((requestId+1)) echo "requestId: $requestId" - url="https://${kms1AkmsURL}/api/v1/keys/ksa_key_req" - data=$( - ) - curl -X POST "$url" \ - -H "Content-Type: application/json" \ - -d "$data" { - "ReceivingCKMSID": "5e41c291-6121-4335-84f6-41e04b8bdaa2", - "RequestID": "${requestId}", - "KeyProperties": { \ - "Number": 1, \ - "KeyLength": 256, \ - "Timeout": 20, \ - "TTL": 24 \ - } \ - } + curl -X POST -H "Content-Type: application/json" -d '{ + "receiving_CKMS_ID": "968fd594-b0e7-41f0-ba4b-de259047a933", + "request_ID": "${requestId}", + "key_properties": { + "number": 1, + "key_length": 256, + "timeout": 20, + "TTL": 24 + } + }' 'http://127.0.0.1:9696/api/v1/keys/ksa_key_req' sleep 1 done