Loading src/tests/ofc22/Dockerfile +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ export PYTHONPATH=/var/teraflow pytest --verbose --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_bootstrap.py --junitxml=/opt/results/report_bootstrap.xml pytest --verbose --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_create_service.py --junitxml=/opt/results/report_create_service.xml pytest --verbose --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_delete_service.py --junitxml=/opt/results/report_delete_service.xml pytest --verbose --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_cleanup.py --junitxml=/opt/results/report_cleanup.xml pytest --verbose --timeout=120 --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_cleanup.py --junitxml=/opt/results/report_cleanup.xml EOF RUN chmod ug+x ./run_tests.sh Loading src/tests/ofc22/tests/conftest.py 0 → 100644 +63 −0 Original line number Diff line number Diff line # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (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. # Acknowledgement: https://stackoverflow.com/questions/46766899/pytest-timeout-fail-test-instead-killing-whole-test-run import pytest, signal class Termination(SystemExit): pass class TimeoutExit(BaseException): pass def _terminate(signum, frame): raise Termination("Runner is terminated from outside.") def _timeout(signum, frame): raise TimeoutExit("Runner timeout is reached, runner is terminating.") @pytest.hookimpl def pytest_addoption(parser): parser.addoption( '--timeout', action='store', dest='timeout', type=int, default=None, help="number of seconds before each test failure") @pytest.hookimpl def pytest_configure(config): # Install the signal handlers that we want to process. signal.signal(signal.SIGTERM, _terminate) signal.signal(signal.SIGALRM, _timeout) @pytest.hookimpl(hookwrapper=True) def pytest_runtest_protocol(item, nextitem): # Set the per-test timeout (an alarm signal). if item.config.option.timeout is not None: signal.alarm(item.config.option.timeout) try: # Run the setup, test body, and teardown stages. yield finally: # Disable the alarm when the test passes or fails. # I.e. when we get into the framework's body. signal.alarm(0) Loading
src/tests/ofc22/Dockerfile +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ export PYTHONPATH=/var/teraflow pytest --verbose --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_bootstrap.py --junitxml=/opt/results/report_bootstrap.xml pytest --verbose --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_create_service.py --junitxml=/opt/results/report_create_service.xml pytest --verbose --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_delete_service.py --junitxml=/opt/results/report_delete_service.xml pytest --verbose --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_cleanup.py --junitxml=/opt/results/report_cleanup.xml pytest --verbose --timeout=120 --log-level=INFO /var/teraflow/tests/ofc22/tests/test_functional_cleanup.py --junitxml=/opt/results/report_cleanup.xml EOF RUN chmod ug+x ./run_tests.sh Loading
src/tests/ofc22/tests/conftest.py 0 → 100644 +63 −0 Original line number Diff line number Diff line # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (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. # Acknowledgement: https://stackoverflow.com/questions/46766899/pytest-timeout-fail-test-instead-killing-whole-test-run import pytest, signal class Termination(SystemExit): pass class TimeoutExit(BaseException): pass def _terminate(signum, frame): raise Termination("Runner is terminated from outside.") def _timeout(signum, frame): raise TimeoutExit("Runner timeout is reached, runner is terminating.") @pytest.hookimpl def pytest_addoption(parser): parser.addoption( '--timeout', action='store', dest='timeout', type=int, default=None, help="number of seconds before each test failure") @pytest.hookimpl def pytest_configure(config): # Install the signal handlers that we want to process. signal.signal(signal.SIGTERM, _terminate) signal.signal(signal.SIGALRM, _timeout) @pytest.hookimpl(hookwrapper=True) def pytest_runtest_protocol(item, nextitem): # Set the per-test timeout (an alarm signal). if item.config.option.timeout is not None: signal.alarm(item.config.option.timeout) try: # Run the setup, test body, and teardown stages. yield finally: # Disable the alarm when the test passes or fails. # I.e. when we get into the framework's body. signal.alarm(0)