Loading src/tests/qkd_end2end/.gitlab-ci.yml 0 → 100644 +119 −0 Original line number Diff line number Diff line # 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 Loading
src/tests/qkd_end2end/.gitlab-ci.yml 0 → 100644 +119 −0 Original line number Diff line number Diff line # 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