Loading src/tests/.gitlab-ci.yml +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ include: #- local: '/src/tests/ofc25/.gitlab-ci.yml' #- local: '/src/tests/ryu-openflow/.gitlab-ci.yml' - local: '/src/tests/qkd_end2end/.gitlab-ci.yml' - local: '/src/tests/acl_end2end/.gitlab-ci.yml' - local: '/src/tests/tools/mock_tfs_nbi_dependencies/.gitlab-ci.yml' - local: '/src/tests/tools/mock_qkd_node/.gitlab-ci.yml' Loading src/tests/acl_end2end/.gitlab-ci.yml +62 −20 Original line number Diff line number Diff line Loading @@ -188,32 +188,74 @@ end2end_test acl_end2end: --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 ACLs # Baseline connectivity: both clients can reach the DC - | export BASE_CLIENT1_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.1.10' --format json) echo "${BASE_CLIENT1_DC}" echo "${BASE_CLIENT1_DC}" | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - | export BASE_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.1.10' --format json) echo "${BASE_CLIENT2_DC}" echo "${BASE_CLIENT2_DC}" | grep -E '3 packets transmitted, 3 received, 0\% packet loss' # Run end-to-end test: test connectivity with ping before creating ACL - export TEST_CLIENT1_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.11.1' --format json) - echo $TEST_CLIENT1_FW - echo $TEST_CLIENT1_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT1_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT1_DC - echo $TEST_CLIENT1_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.12.1' --format json) - echo $TEST_CLIENT2_FW - echo $TEST_CLIENT2_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT2_DC - echo $TEST_CLIENT2_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' # Run end-to-end test: create ACLs - > 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-acl-create-tests.sh # Run end-to-end test: test connectivity with ping after creating ACL - export TEST_CLIENT1_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.11.1' --format json) - echo $TEST_CLIENT1_FW - echo $TEST_CLIENT1_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT1_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT1_DC - echo $TEST_CLIENT1_DC | grep -E '3 packets transmitted, 0 received, 100\% packet loss' - export TEST_CLIENT2_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.12.1' --format json) - echo $TEST_CLIENT2_FW - echo $TEST_CLIENT2_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT2_DC - echo $TEST_CLIENT2_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' # Run end-to-end test: delete ACLs - > 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-acl-tests.sh # Run end-to-end test: test connectivity with ping - export TEST_CLIENT_FIREWALL=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.1.1' --format json) - echo $TEST_CLIENT_FIREWALL - echo $TEST_CLIENT_FIREWALL | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.0.10' --format json) - echo $TEST_CLIENT_DC - echo $TEST_CLIENT_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_FIREWALL=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.2.1' --format json) - echo $TEST_CLIENT2_FIREWALL - echo $TEST_CLIENT2_FIREWALL | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.0.10' --format json) $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-acl-delete-tests.sh # Run end-to-end test: test connectivity with ping after deleting ACL - export TEST_CLIENT1_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.11.1' --format json) - echo $TEST_CLIENT1_FW - echo $TEST_CLIENT1_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT1_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT1_DC - echo $TEST_CLIENT1_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.12.1' --format json) - echo $TEST_CLIENT2_FW - echo $TEST_CLIENT2_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT2_DC - echo $TEST_CLIENT2_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_DC_CLIENT=$(containerlab exec --name acl_end2end --label clab-node-name=dc --cmd 'ping -n -c3 172.16.1.10' --format json) - echo $TEST_DC_CLIENT - echo $TEST_DC_CLIENT | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_DC_CLIENT2=$(containerlab exec --name acl_end2end --label clab-node-name=dc --cmd 'ping -n -c3 172.16.2.10' --format json) - echo $TEST_DC_CLIENT2 - echo $TEST_DC_CLIENT2 | grep -E '3 packets transmitted, 3 received, 0\% packet loss' # Run end-to-end test: cleanup scenario - > Loading src/tests/acl_end2end/scripts/run-acl-tests.sh→src/tests/acl_end2end/scripts/run-acl-create.sh +2 −3 Original line number Diff line number Diff line #!/bin/bash # Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); Loading @@ -16,5 +15,5 @@ source /var/teraflow/tfs_runtime_env_vars.sh export PYTHONPATH=/var/teraflow pytest --verbose --log-level=INFO \ --junitxml=/opt/results/report_acl.xml \ /var/teraflow/tests/acl_end2end/tests/test_acl.py --junitxml=/opt/results/report_acl_create.xml \ /var/teraflow/tests/acl_end2end/tests/test_acl_create.py src/tests/acl_end2end/scripts/run-acl-delete.sh 0 → 100644 +19 −0 Original line number Diff line number Diff line # Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. source /var/teraflow/tfs_runtime_env_vars.sh export PYTHONPATH=/var/teraflow pytest --verbose --log-level=INFO \ --junitxml=/opt/results/report_acl_delete.xml \ /var/teraflow/tests/acl_end2end/tests/test_acl_delete.py src/tests/acl_end2end/tests/test_acl_create.py 0 → 100644 +49 −0 Original line number Diff line number Diff line # Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import json, logging, os from typing import Dict from .Tools import do_rest_get_request, do_rest_post_request LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) ACL_URL = '/restconf/data/device=firewall/ietf-access-control-list:acls' ACL_GET_URL_TEMPLATE = '/restconf/data/device=firewall/ietf-access-control-list:acl={acl_name}' ACL_FILE = os.path.join( os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'ietf-acl.json' ) def load_acl_payload() -> Dict: with open(ACL_FILE, 'r', encoding='UTF-8') as f: return json.load(f) def get_acl_name(payload: Dict) -> str: return payload['ietf-access-control-list:acls']['acl'][0]['name'] def test_ietf_acl_create() -> None: acl_payload = load_acl_payload() acl_name = get_acl_name(acl_payload) do_rest_post_request( ACL_URL, body=acl_payload, logger=LOGGER, expected_status_codes={201, 204} ) response = do_rest_get_request( ACL_GET_URL_TEMPLATE.format(acl_name=acl_name), logger=LOGGER, expected_status_codes={200} ) assert response is not None Loading
src/tests/.gitlab-ci.yml +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ include: #- local: '/src/tests/ofc25/.gitlab-ci.yml' #- local: '/src/tests/ryu-openflow/.gitlab-ci.yml' - local: '/src/tests/qkd_end2end/.gitlab-ci.yml' - local: '/src/tests/acl_end2end/.gitlab-ci.yml' - local: '/src/tests/tools/mock_tfs_nbi_dependencies/.gitlab-ci.yml' - local: '/src/tests/tools/mock_qkd_node/.gitlab-ci.yml' Loading
src/tests/acl_end2end/.gitlab-ci.yml +62 −20 Original line number Diff line number Diff line Loading @@ -188,32 +188,74 @@ end2end_test acl_end2end: --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 ACLs # Baseline connectivity: both clients can reach the DC - | export BASE_CLIENT1_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.1.10' --format json) echo "${BASE_CLIENT1_DC}" echo "${BASE_CLIENT1_DC}" | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - | export BASE_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.1.10' --format json) echo "${BASE_CLIENT2_DC}" echo "${BASE_CLIENT2_DC}" | grep -E '3 packets transmitted, 3 received, 0\% packet loss' # Run end-to-end test: test connectivity with ping before creating ACL - export TEST_CLIENT1_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.11.1' --format json) - echo $TEST_CLIENT1_FW - echo $TEST_CLIENT1_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT1_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT1_DC - echo $TEST_CLIENT1_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.12.1' --format json) - echo $TEST_CLIENT2_FW - echo $TEST_CLIENT2_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT2_DC - echo $TEST_CLIENT2_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' # Run end-to-end test: create ACLs - > 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-acl-create-tests.sh # Run end-to-end test: test connectivity with ping after creating ACL - export TEST_CLIENT1_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.11.1' --format json) - echo $TEST_CLIENT1_FW - echo $TEST_CLIENT1_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT1_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT1_DC - echo $TEST_CLIENT1_DC | grep -E '3 packets transmitted, 0 received, 100\% packet loss' - export TEST_CLIENT2_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.12.1' --format json) - echo $TEST_CLIENT2_FW - echo $TEST_CLIENT2_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT2_DC - echo $TEST_CLIENT2_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' # Run end-to-end test: delete ACLs - > 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-acl-tests.sh # Run end-to-end test: test connectivity with ping - export TEST_CLIENT_FIREWALL=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.1.1' --format json) - echo $TEST_CLIENT_FIREWALL - echo $TEST_CLIENT_FIREWALL | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.0.10' --format json) - echo $TEST_CLIENT_DC - echo $TEST_CLIENT_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_FIREWALL=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.2.1' --format json) - echo $TEST_CLIENT2_FIREWALL - echo $TEST_CLIENT2_FIREWALL | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.0.10' --format json) $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-acl-delete-tests.sh # Run end-to-end test: test connectivity with ping after deleting ACL - export TEST_CLIENT1_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.11.1' --format json) - echo $TEST_CLIENT1_FW - echo $TEST_CLIENT1_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT1_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client1 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT1_DC - echo $TEST_CLIENT1_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_FW=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.12.1' --format json) - echo $TEST_CLIENT2_FW - echo $TEST_CLIENT2_FW | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_CLIENT2_DC=$(containerlab exec --name acl_end2end --label clab-node-name=client2 --cmd 'ping -n -c3 172.16.10.10' --format json) - echo $TEST_CLIENT2_DC - echo $TEST_CLIENT2_DC | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_DC_CLIENT=$(containerlab exec --name acl_end2end --label clab-node-name=dc --cmd 'ping -n -c3 172.16.1.10' --format json) - echo $TEST_DC_CLIENT - echo $TEST_DC_CLIENT | grep -E '3 packets transmitted, 3 received, 0\% packet loss' - export TEST_DC_CLIENT2=$(containerlab exec --name acl_end2end --label clab-node-name=dc --cmd 'ping -n -c3 172.16.2.10' --format json) - echo $TEST_DC_CLIENT2 - echo $TEST_DC_CLIENT2 | grep -E '3 packets transmitted, 3 received, 0\% packet loss' # Run end-to-end test: cleanup scenario - > Loading
src/tests/acl_end2end/scripts/run-acl-tests.sh→src/tests/acl_end2end/scripts/run-acl-create.sh +2 −3 Original line number Diff line number Diff line #!/bin/bash # Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); Loading @@ -16,5 +15,5 @@ source /var/teraflow/tfs_runtime_env_vars.sh export PYTHONPATH=/var/teraflow pytest --verbose --log-level=INFO \ --junitxml=/opt/results/report_acl.xml \ /var/teraflow/tests/acl_end2end/tests/test_acl.py --junitxml=/opt/results/report_acl_create.xml \ /var/teraflow/tests/acl_end2end/tests/test_acl_create.py
src/tests/acl_end2end/scripts/run-acl-delete.sh 0 → 100644 +19 −0 Original line number Diff line number Diff line # Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. source /var/teraflow/tfs_runtime_env_vars.sh export PYTHONPATH=/var/teraflow pytest --verbose --log-level=INFO \ --junitxml=/opt/results/report_acl_delete.xml \ /var/teraflow/tests/acl_end2end/tests/test_acl_delete.py
src/tests/acl_end2end/tests/test_acl_create.py 0 → 100644 +49 −0 Original line number Diff line number Diff line # Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import json, logging, os from typing import Dict from .Tools import do_rest_get_request, do_rest_post_request LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) ACL_URL = '/restconf/data/device=firewall/ietf-access-control-list:acls' ACL_GET_URL_TEMPLATE = '/restconf/data/device=firewall/ietf-access-control-list:acl={acl_name}' ACL_FILE = os.path.join( os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'ietf-acl.json' ) def load_acl_payload() -> Dict: with open(ACL_FILE, 'r', encoding='UTF-8') as f: return json.load(f) def get_acl_name(payload: Dict) -> str: return payload['ietf-access-control-list:acls']['acl'][0]['name'] def test_ietf_acl_create() -> None: acl_payload = load_acl_payload() acl_name = get_acl_name(acl_payload) do_rest_post_request( ACL_URL, body=acl_payload, logger=LOGGER, expected_status_codes={201, 204} ) response = do_rest_get_request( ACL_GET_URL_TEMPLATE.format(acl_name=acl_name), logger=LOGGER, expected_status_codes={200} ) assert response is not None