From 06efb9670c48e7d72104fc61edfd674501d05860 Mon Sep 17 00:00:00 2001 From: Luis Carlos Lopes Silva <lclopes@optaresolutions.com> Date: Mon, 10 Feb 2025 18:13:21 +0000 Subject: [PATCH] Added the .gitlab-ci.yml to qkd_end2end --- src/tests/qkd_end2end/.gitlab-ci.yml | 119 +++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/tests/qkd_end2end/.gitlab-ci.yml diff --git a/src/tests/qkd_end2end/.gitlab-ci.yml b/src/tests/qkd_end2end/.gitlab-ci.yml new file mode 100644 index 000000000..fd1c65b84 --- /dev/null +++ b/src/tests/qkd_end2end/.gitlab-ci.yml @@ -0,0 +1,119 @@ +# Build, tag, and push the Docker image to the GitLab Docker registry +build qkd_end2end: + variables: + TEST_NAME: 'qkd_end2end' + stage: build + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + script: + - docker buildx build -t "${TEST_NAME}:latest" -f ./src/tests/${TEST_NAME}/Dockerfile . + - docker tag "${TEST_NAME}:latest" "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest" + - docker push "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest" + after_script: + - docker images --filter="dangling=true" --quiet | xargs -r docker rmi + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' + - changes: + - src/common/**/*.py + - proto/*.proto + - src/tests/${TEST_NAME}/**/*.{py,in,sh,yml} + - src/tests/${TEST_NAME}/Dockerfile + - .gitlab-ci.yml + +# Deploy TeraFlowSDN and Execute end-2-end test +end2end_test qkd_end2end: + variables: + TEST_NAME: 'qkd_end2end' + stage: end2end_test + # Needs to run after build stage + needs: + - build qkd_end2end + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + - docker rm -f crdb nats mock_qkd context device pathcomp-frontend pathcomp-backend service qkd_end2end + - docker network rm teraflowbridge + + script: + # Create Docker network for inter-container communication + - docker network create -d bridge --subnet=172.254.253.0/24 --gateway=172.254.253.254 teraflowbridge + + # Pull necessary images + - docker pull "$CI_REGISTRY_IMAGE/context:latest" + - docker pull "$CI_REGISTRY_IMAGE/device:latest" + - docker pull "$CI_REGISTRY_IMAGE/service:latest" + - docker pull "$CI_REGISTRY_IMAGE/pathcomp-frontend:latest" + - docker pull "$CI_REGISTRY_IMAGE/pathcomp-backend:latest" + - docker pull "$CI_REGISTRY_IMAGE/qkd_app:latest" + - docker pull "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest" + + # Deploy CockroachDB (crdb) and NATS + - docker run --name crdb -d --network=teraflowbridge -p 26257:26257 -p 8080:8080 cockroachdb/cockroach:latest-v22.2 start-single-node --insecure + - docker run --name nats -d --network=teraflowbridge -p 4222:4222 -p 8222:8222 nats:2.9 --http_port 8222 --user tfs --pass tfs123 + + # Wait for CockroachDB and NATS to initialize + - echo "Waiting for CockroachDB to be ready..." + - while ! docker logs crdb 2>&1 | grep -q 'CockroachDB node starting'; do sleep 1; done + - docker logs crdb + - echo "Waiting for NATS to be ready..." + - while ! docker logs nats 2>&1 | grep -q 'Server is ready'; do sleep 1; done + - docker logs nats + + # Start mock QKD nodes + - docker run --name mock_qkd -d --network=teraflowbridge -v "$PWD/src/tests/tools/mock_qkd_nodes:/app" python:3.9-slim bash -c "cd /app && ./start.sh" + + # Wait for mock QKD nodes to initialize + - echo "Waiting for mock QKD nodes to be ready..." + - sleep 10 + + # Deploy TeraFlowSDN services + - CRDB_ADDRESS=$(docker inspect crdb --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}") + - NATS_ADDRESS=$(docker inspect nats --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}") + + # Deploy Context Service + - docker run --name context -d -p 1010:1010 --env "CRDB_URI=cockroachdb://tfs:tfs123@${CRDB_ADDRESS}:26257/tfs_test?sslmode=require" --env "MB_BACKEND=nats" --env "NATS_URI=nats://tfs:tfs123@${NATS_ADDRESS}:4222" --network=teraflowbridge $CI_REGISTRY_IMAGE/context:latest + - CONTEXTSERVICE_SERVICE_HOST=$(docker inspect context --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}") + + # Deploy Device Service + - docker run --name device -d -p 2020:2020 --env "CONTEXTSERVICE_SERVICE_HOST=${CONTEXTSERVICE_SERVICE_HOST}" --network=teraflowbridge $CI_REGISTRY_IMAGE/device:latest + - DEVICESERVICE_SERVICE_HOST=$(docker inspect device --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}") + + # Deploy PathComp Services (frontend and backend) + - docker run --name pathcomp-backend -d -p 8081:8081 --network=teraflowbridge $CI_REGISTRY_IMAGE/pathcomp-backend:latest + - PATHCOMP_BACKEND_HOST=$(docker inspect pathcomp-backend --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}") + - docker run --name pathcomp-frontend -d -p 10020:10020 --env "CONTEXTSERVICE_SERVICE_HOST=${CONTEXTSERVICE_SERVICE_HOST}" --env "PATHCOMP_BACKEND_HOST=${PATHCOMP_BACKEND_HOST}" --env "PATHCOMP_BACKEND_PORT=8081" --network=teraflowbridge $CI_REGISTRY_IMAGE/pathcomp-frontend:latest + - PATHCOMPSERVICE_SERVICE_HOST=$(docker inspect pathcomp-frontend --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}") + + # Deploy Service Component + - docker run --name service -d -p 3030:3030 --env "CONTEXTSERVICE_SERVICE_HOST=${CONTEXTSERVICE_SERVICE_HOST}" --env "DEVICESERVICE_SERVICE_HOST=${DEVICESERVICE_SERVICE_HOST}" --env "PATHCOMPSERVICE_SERVICE_HOST=${PATHCOMPSERVICE_SERVICE_HOST}" --volume "$PWD/src/service/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/service:latest + + # Wait for services to initialize + - sleep 10 + + # Run end-to-end tests for QKD application + - docker run --name ${TEST_NAME} -t --network=teraflowbridge --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" $CI_REGISTRY_IMAGE/${TEST_NAME}:latest + + after_script: + # Dump logs for TeraFlowSDN components + - docker logs context + - docker logs device + - docker logs pathcomp-frontend + - docker logs pathcomp-backend + - docker logs service + + # Dump logs for QKD mock nodes + - docker logs mock_qkd + + # Clean up + - docker rm -f context device pathcomp-frontend pathcomp-backend service mock_qkd crdb nats + - docker network rm teraflowbridge + - docker volume prune --force + - docker image prune --force + + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' + artifacts: + when: always + reports: + junit: ./src/tests/${TEST_NAME}/report_*.xml -- GitLab