diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 904228d4deaffc11414a62475dc2112bbab63ac7..a619e6514518175ca83b9d6e71bac4ced4321f09 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -21,39 +21,39 @@ stages:
 
 # include the individual .gitlab-ci.yml of each micro-service and tests
 include:
-  #- local: '/manifests/.gitlab-ci.yml'
-  - local: '/src/monitoring/.gitlab-ci.yml'
-  - local: '/src/nbi/.gitlab-ci.yml'
-  - local: '/src/context/.gitlab-ci.yml'
-  - local: '/src/device/.gitlab-ci.yml'
-  - local: '/src/service/.gitlab-ci.yml'
-  - local: '/src/dbscanserving/.gitlab-ci.yml'
-  - local: '/src/opticalattackmitigator/.gitlab-ci.yml'
-  - local: '/src/opticalattackdetector/.gitlab-ci.yml'
-  - local: '/src/opticalattackmanager/.gitlab-ci.yml'
-  - local: '/src/opticalcontroller/.gitlab-ci.yml'
-  - local: '/src/ztp/.gitlab-ci.yml'
-  - local: '/src/policy/.gitlab-ci.yml'
-  - local: '/src/automation/.gitlab-ci.yml'
-  - local: '/src/forecaster/.gitlab-ci.yml'
-  #- local: '/src/webui/.gitlab-ci.yml'
-  #- local: '/src/l3_distributedattackdetector/.gitlab-ci.yml'
-  #- local: '/src/l3_centralizedattackdetector/.gitlab-ci.yml'
-  #- local: '/src/l3_attackmitigator/.gitlab-ci.yml'
-  - local: '/src/slice/.gitlab-ci.yml'
-  #- local: '/src/interdomain/.gitlab-ci.yml'
-  - local: '/src/pathcomp/.gitlab-ci.yml'
-  #- local: '/src/dlt/.gitlab-ci.yml'
-  - local: '/src/load_generator/.gitlab-ci.yml'
-  - local: '/src/bgpls_speaker/.gitlab-ci.yml'
-  - local: '/src/kpi_manager/.gitlab-ci.yml'
-  - local: '/src/kpi_value_api/.gitlab-ci.yml'
-  #- local: '/src/kpi_value_writer/.gitlab-ci.yml'
-  #- local: '/src/telemetry/.gitlab-ci.yml'
-  - local: '/src/analytics/.gitlab-ci.yml'
-  - local: '/src/qos_profile/.gitlab-ci.yml'
-  - local: '/src/vnt_manager/.gitlab-ci.yml'
-  - local: '/src/e2e_orchestrator/.gitlab-ci.yml'
+#  #- local: '/manifests/.gitlab-ci.yml'
+#  - local: '/src/monitoring/.gitlab-ci.yml'
+#  - local: '/src/nbi/.gitlab-ci.yml'
+#  - local: '/src/context/.gitlab-ci.yml'
+#  - local: '/src/device/.gitlab-ci.yml'
+#  - local: '/src/service/.gitlab-ci.yml'
+#  - local: '/src/dbscanserving/.gitlab-ci.yml'
+#  - local: '/src/opticalattackmitigator/.gitlab-ci.yml'
+#  - local: '/src/opticalattackdetector/.gitlab-ci.yml'
+#  - local: '/src/opticalattackmanager/.gitlab-ci.yml'
+#  - local: '/src/opticalcontroller/.gitlab-ci.yml'
+#  - local: '/src/ztp/.gitlab-ci.yml'
+#  - local: '/src/policy/.gitlab-ci.yml'
+#  - local: '/src/automation/.gitlab-ci.yml'
+#  - local: '/src/forecaster/.gitlab-ci.yml'
+#  #- local: '/src/webui/.gitlab-ci.yml'
+#  #- local: '/src/l3_distributedattackdetector/.gitlab-ci.yml'
+#  #- local: '/src/l3_centralizedattackdetector/.gitlab-ci.yml'
+#  #- local: '/src/l3_attackmitigator/.gitlab-ci.yml'
+#  - local: '/src/slice/.gitlab-ci.yml'
+#  #- local: '/src/interdomain/.gitlab-ci.yml'
+#  - local: '/src/pathcomp/.gitlab-ci.yml'
+#  #- local: '/src/dlt/.gitlab-ci.yml'
+#  - local: '/src/load_generator/.gitlab-ci.yml'
+#  - local: '/src/bgpls_speaker/.gitlab-ci.yml'
+#  - local: '/src/kpi_manager/.gitlab-ci.yml'
+#  - local: '/src/kpi_value_api/.gitlab-ci.yml'
+#  #- local: '/src/kpi_value_writer/.gitlab-ci.yml'
+#  #- local: '/src/telemetry/.gitlab-ci.yml'
+#  - local: '/src/analytics/.gitlab-ci.yml'
+#  - local: '/src/qos_profile/.gitlab-ci.yml'
+#  - local: '/src/vnt_manager/.gitlab-ci.yml'
+#  - local: '/src/e2e_orchestrator/.gitlab-ci.yml'
 
   # This should be last one: end-to-end integration tests
   - local: '/src/tests/.gitlab-ci.yml'
diff --git a/src/tests/.gitlab-ci.yml b/src/tests/.gitlab-ci.yml
index 1bb67b6cd6d1db29dcb1f646cf58b77a50b4f951..3ab81e3abdb0200567d366cb55ac70e3dbb58784 100644
--- a/src/tests/.gitlab-ci.yml
+++ b/src/tests/.gitlab-ci.yml
@@ -14,16 +14,16 @@
 
 # include the individual .gitlab-ci.yml of each end-to-end integration test
 include:
-  - local: '/src/tests/ofc22/.gitlab-ci.yml'
-  #- local: '/src/tests/oeccpsc22/.gitlab-ci.yml'
-  - local: '/src/tests/ecoc22/.gitlab-ci.yml'
-  #- local: '/src/tests/nfvsdn22/.gitlab-ci.yml'
-  #- local: '/src/tests/ofc23/.gitlab-ci.yml'
-  - local: '/src/tests/ofc24/.gitlab-ci.yml'
-  - local: '/src/tests/eucnc24/.gitlab-ci.yml'
-  - local: '/src/tests/ofc25-camara-agg-net-controller/.gitlab-ci.yml'
-  - local: '/src/tests/ofc25-camara-e2e-controller/.gitlab-ci.yml'
-  #- local: '/src/tests/ofc25/.gitlab-ci.yml'
-  #- local: '/src/tests/ryu-openflow/.gitlab-ci.yml'
+#  - local: '/src/tests/ofc22/.gitlab-ci.yml'
+#  #- local: '/src/tests/oeccpsc22/.gitlab-ci.yml'
+#  - local: '/src/tests/ecoc22/.gitlab-ci.yml'
+#  #- local: '/src/tests/nfvsdn22/.gitlab-ci.yml'
+#  #- local: '/src/tests/ofc23/.gitlab-ci.yml'
+#  - local: '/src/tests/ofc24/.gitlab-ci.yml'
+#  - local: '/src/tests/eucnc24/.gitlab-ci.yml'
+#  - local: '/src/tests/ofc25-camara-agg-net-controller/.gitlab-ci.yml'
+#  - local: '/src/tests/ofc25-camara-e2e-controller/.gitlab-ci.yml'
+#  #- local: '/src/tests/ofc25/.gitlab-ci.yml'
+  - local: '/src/tests/ryu-openflow/.gitlab-ci.yml'
 
-  - local: '/src/tests/tools/mock_tfs_nbi_dependencies/.gitlab-ci.yml'
+#  - local: '/src/tests/tools/mock_tfs_nbi_dependencies/.gitlab-ci.yml'
diff --git a/src/tests/ryu-openflow/.gitlab-ci.yml b/src/tests/ryu-openflow/.gitlab-ci.yml
index 964fc874830ea8324b5d1f2f1f4159182b785f41..b089823f2dea8f8720b61c646967b31975157389 100644
--- a/src/tests/ryu-openflow/.gitlab-ci.yml
+++ b/src/tests/ryu-openflow/.gitlab-ci.yml
@@ -19,7 +19,12 @@ build ryu-openflow:
   stage: build
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+    - docker ps -aq | xargs -r docker rm -f
+    - containerlab destroy --all --cleanup || true
   script:
+    - echo "CI_PIPELINE_SOURCE = $CI_PIPELINE_SOURCE"
+    - echo "CI_MERGE_REQUEST_ID = $CI_MERGE_REQUEST_ID"
+    - echo "CI_MERGE_REQUEST_IID = $CI_MERGE_REQUEST_IID"
     - 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"
@@ -35,224 +40,223 @@ build ryu-openflow:
       - src/tests/${TEST_NAME}/Dockerfile
       - .gitlab-ci.yml
 
-# Deploy TeraFlowSDN and Execute end-2-end test
-end2end_test ryu-openflow:
-  timeout: 90m
-  variables:
-    TEST_NAME: 'ryu-openflow'
-  stage: end2end_test
-  # Disable to force running it after all other tasks
-  #needs:
-  #  - build ryu-openflow
-  before_script:
-    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-    - docker rm -f ${TEST_NAME} || true
-    - containerlab destroy --all --cleanup || true
-
-  script:
-    # Download Docker image to run the test
-    - docker pull "${CI_REGISTRY_IMAGE}/${TEST_NAME}:latest"
-
-    # Check MicroK8s is ready
-    - microk8s status --wait-ready
-    - kubectl get pods --all-namespaces
-
-    # Deploy ContainerLab Scenario
-    - RUNNER_PATH=`pwd`
-    #- cd $PWD/src/tests/${TEST_NAME}
-    - mkdir -p /tmp/clab/${TEST_NAME}
-    - cp -R src/tests/${TEST_NAME}/clab/* /tmp/clab/${TEST_NAME}
-    - tree -la /tmp/clab/${TEST_NAME}
-    - cd /tmp/clab/${TEST_NAME}
-    - containerlab deploy --reconfigure --topo ryu-openflow.clab.yml
-    - cd $RUNNER_PATH
-
-    # Wait for initialization of Device NOSes
-    - sleep 3
-    - docker ps -a
-
-    # Dump configuration of the routers (before any configuration)
-    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-
-    # Configure TeraFlowSDN deployment
-    # Uncomment if DEBUG log level is needed for the components
-    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/contextservice.yaml
-    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/deviceservice.yaml
-    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="frontend").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/pathcompservice.yaml
-    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/serviceservice.yaml
-    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/nbiservice.yaml
-    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/monitoringservice.yaml
-
-    - source src/tests/${TEST_NAME}/deploy_specs.sh
-    #- export TFS_REGISTRY_IMAGES="${CI_REGISTRY_IMAGE}"
-    #- export TFS_SKIP_BUILD="YES"
-    #- export TFS_IMAGE_TAG="latest"
-    #- echo "TFS_REGISTRY_IMAGES=${CI_REGISTRY_IMAGE}"
-
-    # Deploy TeraFlowSDN
-    - ./deploy/crdb.sh
-    - ./deploy/nats.sh
-    - ./deploy/kafka.sh
-    - ./deploy/qdb.sh
-    - ./deploy/tfs.sh
-    - ./deploy/show.sh
-
-    ## Wait for Context to be subscribed to NATS
-    ## WARNING: this loop is infinite if there is no subscriber (such as monitoring).
-    ##          Investigate if we can use a counter to limit the number of iterations.
-    ##          For now, keep it commented out.
-    #- LOOP_MAX_ATTEMPTS=180
-    #- LOOP_COUNTER=0
-    #- >
-    #  while ! kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1 | grep -q 'Subscriber is Ready? True'; do
-    #    echo "Attempt: $LOOP_COUNTER"
-    #    kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1;
-    #    sleep 1;
-    #    LOOP_COUNTER=$((LOOP_COUNTER + 1))
-    #    if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then
-    #      echo "Max attempts reached, exiting the loop."
-    #      break
-    #    fi
-    #  done
-    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server
-
-    # Run end-to-end test: onboard scenario
-    - >
-      docker run -t --rm --name ${TEST_NAME} --network=host 
-      --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 /var/teraflow/run-onboarding.sh
-
-    # Run end-to-end test: configure service TFS
-    - >
-      docker run -t --rm --name ${TEST_NAME} --network=host 
-      --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 /var/teraflow/run-service-tfs-create.sh
-
-    # Dump configuration of the routers (after configure TFS service)
-    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-
-    # Run end-to-end test: test connectivity with ping
-    - export TEST1_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.10' --format json)
-    - echo $TEST1_10
-    - echo $TEST1_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
-    - export TEST1_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.1' --format json)
-    - echo $TEST1_1
-    - echo $TEST1_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
-    - export TEST2_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.1' --format json)
-    - echo $TEST2_1
-    - echo $TEST2_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
-    - export TEST2_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.10' --format json)
-    - echo $TEST2_10
-    - echo $TEST2_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
-    - export TEST3_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.1' --format json)
-    - echo $TEST3_1
-    - echo $TEST3_1 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
-    - export TEST3_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.10' --format json)
-    - echo $TEST3_10
-    - echo $TEST3_10 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
-
-    # Run end-to-end test: deconfigure service TFS
-    - >
-      docker run -t --rm --name ${TEST_NAME} --network=host 
-      --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 /var/teraflow/run-service-tfs-remove.sh
-
-    # Dump configuration of the routers (after deconfigure TFS service)
-    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-
-    # Run end-to-end test: configure service IETF
-    - >
-      docker run -t --rm --name ${TEST_NAME} --network=host 
-      --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 /var/teraflow/run-service-ietf-create.sh
-
-    # Dump configuration of the routers (after configure IETF service)
-    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-
-    # Run end-to-end test: test connectivity with ping
-    - export TEST1_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.10' --format json)
-    - echo $TEST1_10
-    - echo $TEST1_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
-    - export TEST1_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.1' --format json)
-    - echo $TEST1_1
-    - echo $TEST1_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
-    - export TEST2_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.1' --format json)
-    - echo $TEST2_1
-    - echo $TEST2_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
-    - export TEST2_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.10' --format json)
-    - echo $TEST2_10
-    - echo $TEST2_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
-    - export TEST3_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.1' --format json)
-    - echo $TEST3_1
-    - echo $TEST3_1 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
-    - export TEST3_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.10' --format json)
-    - echo $TEST3_10
-    - echo $TEST3_10 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
-
-    # Run end-to-end test: deconfigure service IETF
-    - >
-      docker run -t --rm --name ${TEST_NAME} --network=host 
-      --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 /var/teraflow/run-service-ietf-remove.sh
-
-    # Dump configuration of the routers (after deconfigure IETF service)
-    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-
-    # Run end-to-end test: cleanup scenario
-    - >
-      docker run -t --rm --name ${TEST_NAME} --network=host 
-      --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 /var/teraflow/run-cleanup.sh
-
-  after_script:
-    # Dump configuration of the routers (on after_script)
-    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
-
-    # Dump TeraFlowSDN component logs
-    - source src/tests/${TEST_NAME}/deploy_specs.sh
-    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server
-    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/deviceservice -c server
-    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/pathcompservice -c frontend
-    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/serviceservice -c server
-    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/nbiservice -c server
-    #- kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/monitoringservice -c server
-
-    # Destroy Scenario
-    - docker rm -f ${TEST_NAME} || true
-    - RUNNER_PATH=`pwd`
-    #- cd $PWD/src/tests/${TEST_NAME}
-    - cd /tmp/clab/${TEST_NAME}
-    - containerlab destroy --topo ryu-openflow.clab.yml --cleanup || true
-    - sudo rm -rf clab-ryu-openflow/ .ryu-openflow.clab.yml.bak || true
-    - cd $RUNNER_PATH
-    - kubectl delete namespaces tfs || true
-
-    # Clean old docker images
-    - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
-
-  #coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
-  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
+## Deploy TeraFlowSDN and Execute end-2-end test
+#end2end_test ryu-openflow:
+#  timeout: 90m
+#  variables:
+#    TEST_NAME: 'ryu-openflow'
+#  stage: end2end_test
+#  # Disable to force running it after all other tasks
+#  #needs:
+#  #  - build ryu-openflow
+#  before_script:
+#    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+#    - docker ps -aq | xargs -r docker rm -f
+#    - containerlab destroy --all --cleanup || true
+#  script:
+#    # Download Docker image to run the test
+#    - docker pull "${CI_REGISTRY_IMAGE}/${TEST_NAME}:latest"
+#
+#    # Check MicroK8s is ready
+#    - microk8s status --wait-ready
+#    - kubectl get pods --all-namespaces
+#
+#    # Deploy ContainerLab Scenario
+#    - RUNNER_PATH=`pwd`
+#    #- cd $PWD/src/tests/${TEST_NAME}
+#    - mkdir -p /tmp/clab/${TEST_NAME}
+#    - cp -R src/tests/${TEST_NAME}/clab/* /tmp/clab/${TEST_NAME}
+#    - tree -la /tmp/clab/${TEST_NAME}
+#    - cd /tmp/clab/${TEST_NAME}
+#    - containerlab deploy --reconfigure --topo ryu-openflow.clab.yml
+#    - cd $RUNNER_PATH
+#
+#    # Wait for initialization of Device NOSes
+#    - sleep 3
+#    - docker ps -a
+#
+#    # Dump configuration of the routers (before any configuration)
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#
+#    # Configure TeraFlowSDN deployment
+#    # Uncomment if DEBUG log level is needed for the components
+#    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/contextservice.yaml
+#    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/deviceservice.yaml
+#    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="frontend").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/pathcompservice.yaml
+#    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/serviceservice.yaml
+#    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/nbiservice.yaml
+#    #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/monitoringservice.yaml
+#
+#    - source src/tests/${TEST_NAME}/deploy_specs.sh
+#    #- export TFS_REGISTRY_IMAGES="${CI_REGISTRY_IMAGE}"
+#    #- export TFS_SKIP_BUILD="YES"
+#    #- export TFS_IMAGE_TAG="latest"
+#    #- echo "TFS_REGISTRY_IMAGES=${CI_REGISTRY_IMAGE}"
+#
+#    # Deploy TeraFlowSDN
+#    - ./deploy/crdb.sh
+#    - ./deploy/nats.sh
+#    - ./deploy/kafka.sh
+#    - ./deploy/qdb.sh
+#    - ./deploy/tfs.sh
+#    - ./deploy/show.sh
+#
+#    ## Wait for Context to be subscribed to NATS
+#    ## WARNING: this loop is infinite if there is no subscriber (such as monitoring).
+#    ##          Investigate if we can use a counter to limit the number of iterations.
+#    ##          For now, keep it commented out.
+#    #- LOOP_MAX_ATTEMPTS=180
+#    #- LOOP_COUNTER=0
+#    #- >
+#    #  while ! kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1 | grep -q 'Subscriber is Ready? True'; do
+#    #    echo "Attempt: $LOOP_COUNTER"
+#    #    kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1;
+#    #    sleep 1;
+#    #    LOOP_COUNTER=$((LOOP_COUNTER + 1))
+#    #    if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then
+#    #      echo "Max attempts reached, exiting the loop."
+#    #      break
+#    #    fi
+#    #  done
+#    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server
+#
+#    # Run end-to-end test: onboard scenario
+#    - >
+#      docker run -t --rm --name ${TEST_NAME} --network=host 
+#      --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 /var/teraflow/run-onboarding.sh
+#
+#    # Run end-to-end test: configure service TFS
+#    - >
+#      docker run -t --rm --name ${TEST_NAME} --network=host 
+#      --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 /var/teraflow/run-service-tfs-create.sh
+#
+#    # Dump configuration of the routers (after configure TFS service)
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#
+#    # Run end-to-end test: test connectivity with ping
+#    - export TEST1_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.10' --format json)
+#    - echo $TEST1_10
+#    - echo $TEST1_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+#    - export TEST1_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.1' --format json)
+#    - echo $TEST1_1
+#    - echo $TEST1_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+#    - export TEST2_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.1' --format json)
+#    - echo $TEST2_1
+#    - echo $TEST2_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+#    - export TEST2_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.10' --format json)
+#    - echo $TEST2_10
+#    - echo $TEST2_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+#    - export TEST3_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.1' --format json)
+#    - echo $TEST3_1
+#    - echo $TEST3_1 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
+#    - export TEST3_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.10' --format json)
+#    - echo $TEST3_10
+#    - echo $TEST3_10 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
+#
+#    # Run end-to-end test: deconfigure service TFS
+#    - >
+#      docker run -t --rm --name ${TEST_NAME} --network=host 
+#      --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 /var/teraflow/run-service-tfs-remove.sh
+#
+#    # Dump configuration of the routers (after deconfigure TFS service)
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#
+#    # Run end-to-end test: configure service IETF
+#    - >
+#      docker run -t --rm --name ${TEST_NAME} --network=host 
+#      --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 /var/teraflow/run-service-ietf-create.sh
+#
+#    # Dump configuration of the routers (after configure IETF service)
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#
+#    # Run end-to-end test: test connectivity with ping
+#    - export TEST1_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.10' --format json)
+#    - echo $TEST1_10
+#    - echo $TEST1_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+#    - export TEST1_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.1' --format json)
+#    - echo $TEST1_1
+#    - echo $TEST1_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+#    - export TEST2_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.1' --format json)
+#    - echo $TEST2_1
+#    - echo $TEST2_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+#    - export TEST2_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.10' --format json)
+#    - echo $TEST2_10
+#    - echo $TEST2_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+#    - export TEST3_1=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.1' --format json)
+#    - echo $TEST3_1
+#    - echo $TEST3_1 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
+#    - export TEST3_10=$(containerlab exec --name ryu-openflow --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.10' --format json)
+#    - echo $TEST3_10
+#    - echo $TEST3_10 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
+#
+#    # Run end-to-end test: deconfigure service IETF
+#    - >
+#      docker run -t --rm --name ${TEST_NAME} --network=host 
+#      --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 /var/teraflow/run-service-ietf-remove.sh
+#
+#    # Dump configuration of the routers (after deconfigure IETF service)
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#
+#    # Run end-to-end test: cleanup scenario
+#    - >
+#      docker run -t --rm --name ${TEST_NAME} --network=host 
+#      --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 /var/teraflow/run-cleanup.sh
+#
+#  after_script:
+#    # Dump configuration of the routers (on after_script)
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#    - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+#
+#    # Dump TeraFlowSDN component logs
+#    - source src/tests/${TEST_NAME}/deploy_specs.sh
+#    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server
+#    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/deviceservice -c server
+#    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/pathcompservice -c frontend
+#    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/serviceservice -c server
+#    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/nbiservice -c server
+#    #- kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/monitoringservice -c server
+#
+#    # Destroy Scenario
+#    - docker rm -f ${TEST_NAME} || true
+#    - RUNNER_PATH=`pwd`
+#    #- cd $PWD/src/tests/${TEST_NAME}
+#    - cd /tmp/clab/${TEST_NAME}
+#    - containerlab destroy --topo ryu-openflow.clab.yml --cleanup || true
+#    - sudo rm -rf clab-ryu-openflow/ .ryu-openflow.clab.yml.bak || true
+#    - cd $RUNNER_PATH
+#    - kubectl delete namespaces tfs || true
+#
+#    # Clean old docker images
+#    - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
+#
+#  #coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
+#  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