2019-04-15 15:28:21 +02:00
ASAN_OPTIONS ?= verify_asan_link_order = 0:detect_leaks= 0:abort_on_error= 1:unmap_shadow_on_exit= 1:disable_coredump= 0
export ASAN_OPTIONS
2019-11-15 17:29:15 -05:00
.PHONY : verify -env
verify-env :
i f n d e f W S _ R O O T
$( error WS_ROOT is not set )
e n d i f
i f n d e f B R
$( error BR is not set )
e n d i f
2018-11-08 11:21:39 +01:00
i f n d e f T E S T _ D I R
$( error TEST_DIR is not set )
2016-10-28 13:20:27 +02:00
e n d i f
2021-05-12 21:43:59 -04:00
export TEST_BR = $( TEST_DIR)
export TEST_DOC_BR = $( TEST_DIR) /doc/build
2019-11-15 17:29:15 -05:00
FAILED_DIR = /tmp/vpp-failed-unittests/
2021-05-12 21:43:59 -04:00
VPP_TEST_DIRS = $( shell ls -d $( TEST_DIR) $( EXTERN_TESTS) )
2019-11-15 17:29:15 -05:00
2021-03-16 12:52:12 +01:00
FORCE_NO_WIPE = 0
2017-08-11 10:06:15 +02:00
i f e q ( $( DEBUG ) , g d b )
FORCE_FOREGROUND = 1
e l s e i f e q ( $( DEBUG ) , g d b s e r v e r )
FORCE_FOREGROUND = 1
2019-10-21 02:53:14 +00:00
e l s e i f e q ( $( DEBUG ) , g d b - a l l )
FORCE_FOREGROUND = 1
e l s e i f e q ( $( DEBUG ) , g d b s e r v e r - a l l )
FORCE_FOREGROUND = 1
2017-10-10 06:44:05 +02:00
e l s e i f e q ( $( DEBUG ) , c o r e )
FORCE_FOREGROUND = 1
2021-03-16 12:52:12 +01:00
e l s e i f e q ( $( DEBUG ) , a t t a c h )
FORCE_FOREGROUND = 1
FORCE_NO_WIPE = 1
2018-07-16 14:22:01 +02:00
e l s e i f e q ( $( STEP ) , y e s )
FORCE_FOREGROUND = 1
e l s e i f e q ( $( STEP ) , y )
FORCE_FOREGROUND = 1
e l s e i f e q ( $( STEP ) , 1 )
FORCE_FOREGROUND = 1
2017-08-11 10:06:15 +02:00
e l s e
FORCE_FOREGROUND = 0
e n d i f
2018-06-27 13:54:32 +02:00
i f d e f P R O F I L E _ O U T P U T
PROFILE_OUTPUT_OPTS = -o $( PROFILE_OUTPUT)
e n d i f
i f n d e f P R O F I L E _ S O R T _ B Y
PROFILE_SORT_BY = cumtime
e n d i f
i f e q ( $( PROFILE ) , 1 )
PYTHON_PROFILE_OPTS = -m cProfile $( PROFILE_OUTPUT_OPTS) -s $( PROFILE_SORT_BY)
FORCE_FOREGROUND = 1
e n d i f
2017-03-16 09:14:59 +01:00
UNITTEST_EXTRA_OPTS =
UNITTEST_FAILFAST_OPTS =
2017-02-14 02:55:31 +01:00
i f e q ( $( FAILFAST ) , 1 )
2017-03-16 09:14:59 +01:00
UNITTEST_EXTRA_OPTS = -f
e n d i f
i f n e q ( $( EXTERN_TESTS ) , )
UNITTEST_EXTRA_OPTS = $( UNITTEST_FAILFAST_OPTS) -d $( EXTERN_TESTS)
2017-02-14 02:55:31 +01:00
e n d i f
2021-05-12 21:43:59 -04:00
VENV_PATH = $( TEST_DIR) /venv
2018-11-08 11:21:39 +01:00
2018-02-17 13:41:33 +01:00
i f e q ( $( TEST_DEBUG ) , 1 )
2019-11-15 17:29:15 -05:00
VENV_RUN_DIR := $( VENV_PATH) /run-debug
2018-02-17 13:41:33 +01:00
e l s e
2019-11-15 17:29:15 -05:00
VENV_RUN_DIR := $( VENV_PATH) /run
2018-02-17 13:41:33 +01:00
e n d i f
2017-04-07 01:48:47 +00:00
i f e q ( $( PYTHON ) , )
2020-02-04 13:28:13 +01:00
PYTHON_INTERP = python3
2017-04-07 01:48:47 +00:00
e l s e
PYTHON_INTERP = $( PYTHON)
e n d i f
2019-06-21 17:04:29 +02:00
PYTHON_VERSION = $( shell $( PYTHON_INTERP) -c 'import sys; print(sys.version_info.major)' )
2021-08-12 18:36:02 -04:00
PIP_VERSION = 21.2.4
2020-05-25 18:07:24 +02:00
# Keep in sync with requirements.txt
2021-08-12 18:36:02 -04:00
PIP_TOOLS_VERSION = 6.2.0
2019-06-21 17:04:29 +02:00
PYTHON_DEPENDS = requirements-$( PYTHON_VERSION) .txt
2020-02-04 13:28:13 +01:00
SCAPY_SOURCE = $( shell find $( VENV_PATH) /lib/python* -name site-packages)
2019-11-15 17:29:15 -05:00
BUILD_COV_DIR = $( TEST_BR) /coverage
2020-05-25 18:07:24 +02:00
PIP_TOOLS_INSTALL_DONE = $( VENV_RUN_DIR) /pip-tools-install-$( PYTHON_VERSION) -$( PIP_TOOLS_VERSION) .done
PIP_INSTALL_DONE = $( VENV_RUN_DIR) /pip-install-$( PYTHON_VERSION) -$( PIP_VERSION) .done
2019-11-15 17:29:15 -05:00
PIP_PATCH_DONE = $( VENV_RUN_DIR) /pip-patch-$( PYTHON_VERSION) .done
PAPI_INSTALL_DONE = $( VENV_RUN_DIR) /papi-install-$( PYTHON_VERSION) .done
PAPI_PYTHON_SRC_DIR = $( WS_ROOT) /src/vpp-api/python
PAPI_WIPE_DIST = $( WS_ROOT) /src/vpp-api/vapi/__pycache__ \
$( PAPI_PYTHON_SRC_DIR) /build \
$( PAPI_PYTHON_SRC_DIR) /vpp_papi.egg-info \
$( PAPI_PYTHON_SRC_DIR) /vpp_papi/__pycache__
2019-06-21 17:04:29 +02:00
$(PIP_TOOLS_INSTALL_DONE) :
@rm -rf $( VENV_PATH)
2019-11-15 17:29:15 -05:00
@mkdir -p $( VENV_RUN_DIR)
2021-03-30 19:46:06 +02:00
@$( PYTHON_INTERP) -m venv $( VENV_PATH)
2019-07-23 15:19:28 +02:00
# pip version pinning
@bash -c " source $( VENV_PATH) /bin/activate && \
$( PYTHON_INTERP) -m pip install pip = = = $( PIP_VERSION) "
2019-06-21 17:04:29 +02:00
@bash -c " source $( VENV_PATH) /bin/activate && \
$( PYTHON_INTERP) -m pip install pip-tools= = = $( PIP_TOOLS_VERSION) "
@touch $@
2020-06-24 11:33:20 +02:00
$(PYTHON_DEPENDS) : requirements .txt
2019-06-21 17:04:29 +02:00
@bash -c " source $( VENV_PATH) /bin/activate && \
CUSTOM_COMPILE_COMMAND = 'make test-refresh-deps (or update requirements.txt)' \
$( PYTHON_INTERP) -m piptools compile -q --generate-hashes requirements.txt --output-file $@ "
2020-06-24 11:33:20 +02:00
$(PIP_INSTALL_DONE) : $( PIP_TOOLS_INSTALL_DONE ) $( PYTHON_DEPENDS )
2019-06-21 17:04:29 +02:00
@bash -c " source $( VENV_PATH) /bin/activate && \
$( PYTHON_INTERP) -m piptools sync $( PYTHON_DEPENDS) "
2016-11-15 09:46:51 +00:00
@touch $@
2016-12-12 09:20:50 +01:00
$(PIP_PATCH_DONE) : $( PIP_INSTALL_DONE )
2016-11-15 09:46:51 +00:00
@echo --- patching ---
2017-01-26 21:07:10 -05:00
@sleep 1 # Ensure python recompiles patched *.py files -> *.pyc
2019-12-13 23:39:35 +00:00
for f in $( CURDIR) /patches/scapy-2.4.3/*.patch ; do \
2016-11-15 09:46:51 +00:00
echo Applying patch: $$ ( basename $$ f) ; \
2019-06-21 17:04:29 +02:00
patch --forward -p1 -d $( SCAPY_SOURCE) < $$ f ; \
retCode = $$ ?; \
2020-06-24 11:33:20 +02:00
[ $$ retCode -gt 1 ] && exit $$ retCode; \
2019-06-21 17:04:29 +02:00
done ; \
touch $@
2016-11-15 09:46:51 +00:00
2016-12-12 09:20:50 +01:00
$(PAPI_INSTALL_DONE) : $( PIP_PATCH_DONE )
2019-11-15 17:29:15 -05:00
@bash -c " source $( VENV_PATH) /bin/activate && $( PYTHON_INTERP) -m pip install -e $( PAPI_PYTHON_SRC_DIR) "
2016-11-15 09:46:51 +00:00
@touch $@
2019-11-15 17:29:15 -05:00
.PHONY : refresh -deps
2019-06-21 17:04:29 +02:00
refresh-deps : clean -deps $( PYTHON_DEPENDS )
2019-11-15 17:29:15 -05:00
.PHONY : clean -deps
2019-06-21 17:04:29 +02:00
clean-deps :
@rm -f $( PYTHON_DEPENDS)
2019-11-15 17:29:15 -05:00
INTERN_PLUGIN_SRC_DIR = $( WS_ROOT) /src/plugins
2019-08-22 00:32:29 +00:00
i f n e q ( $( EXTERN_PLUGIN_SRC_DIR ) , )
PLUGIN_SRC_DIR = $( EXTERN_PLUGIN_SRC_DIR)
e l s e
2019-11-15 17:29:15 -05:00
PLUGIN_SRC_DIR = $( INTERN_PLUGIN_SRC_DIR)
2019-08-22 00:32:29 +00:00
e n d i f
2016-11-16 19:50:24 +01:00
d e f i n e r e t e s t - f u n c
2021-05-12 21:43:59 -04:00
@ e n v VPP_IN_GDB = $( VPP_IN_GDB) FORCE_FOREGROUND = $( FORCE_FOREGROUND) FAILED_DIR = $( FAILED_DIR) VENV_PATH = $( VENV_PATH) scripts/setsid_wrapper.sh $( FORCE_FOREGROUND) $( VENV_PATH) /bin/activate $( PYTHON_INTERP) $( PYTHON_PROFILE_OPTS) run_tests.py -d $( TEST_DIR) $( UNITTEST_EXTRA_OPTS) || env FAILED_DIR = $( FAILED_DIR) COMPRESS_FAILED_TEST_LOGS = $( COMPRESS_FAILED_TEST_LOGS) scripts/compress_failed.sh
2016-11-16 19:50:24 +01:00
e n d e f
2017-03-09 08:20:13 +01:00
.PHONY : sanity
2017-10-17 07:59:31 +02:00
i f e q ( $( SANITY ) , n o )
SANITY_IMPORT_VPP_PAPI_CMD = true
SANITY_RUN_VPP_CMD = true
e l s e
2021-05-12 21:43:59 -04:00
SANITY_IMPORT_VPP_PAPI_CMD = source $( VENV_PATH) /bin/activate && $( PYTHON_INTERP) sanity_import_vpp_papi.py
SANITY_RUN_VPP_CMD = source $( VENV_PATH) /bin/activate && $( PYTHON_INTERP) sanity_run_vpp.py
2017-10-17 07:59:31 +02:00
e n d i f
2018-07-16 14:22:01 +02:00
i f n d e f T E S T _ J O B S
PARALLEL_ILLEGAL = 0
e l s e i f e q ( $( FORCE_FOREGROUND ) , 0 )
PARALLEL_ILLEGAL = 0
e l s e i f e q ( $( TEST_JOBS ) , a u t o )
PARALLEL_ILLEGAL = 0
e l s e i f e q ( $( TEST_JOBS ) , 1 )
PARALLEL_ILLEGAL = 0
e l s e
PARALLEL_ILLEGAL = 1
e n d i f
2021-03-16 12:52:12 +01:00
sanity : test -dep
2018-07-16 14:22:01 +02:00
@bash -c " test $( PARALLEL_ILLEGAL) -eq 0 ||\
( echo \" *******************************************************************\" && \
echo \" * Sanity check failed, TEST_JOBS is not 1 or 'auto' and DEBUG, STEP or PROFILE is set\" && \
echo \" *******************************************************************\" && \
false ) "
2017-10-17 07:59:31 +02:00
@bash -c " $( SANITY_IMPORT_VPP_PAPI_CMD) ||\
2017-03-09 08:20:13 +01:00
( echo \" *******************************************************************\" && \
echo \" * Sanity check failed, cannot import vpp_papi\" && \
echo \" * to debug: \" && \
echo \" * 1. enter test shell: make test-shell\" && \
echo \" * 2. execute debugger: gdb python -ex 'run sanity_import_vpp_papi.py' \" && \
echo \" *******************************************************************\" && \
false ) "
2017-10-17 07:59:31 +02:00
@bash -c " $( SANITY_RUN_VPP_CMD) ||\
2017-04-10 06:30:17 +02:00
( echo \" *******************************************************************\" && \
echo \" * Sanity check failed, cannot run vpp\" && \
echo \" *******************************************************************\" && \
false ) "
2017-03-09 08:20:13 +01:00
2019-11-15 17:29:15 -05:00
$(FAILED_DIR) : reset
@mkdir -p $@
.PHONY : test -dep
2021-05-12 21:43:59 -04:00
test-dep : $( PAPI_INSTALL_DONE ) $( FAILED_DIR )
2019-11-15 17:29:15 -05:00
.PHONY : test
2021-05-25 18:29:24 +02:00
test : test -dep sanity
2016-11-16 19:50:24 +01:00
$( call retest-func)
2016-10-11 11:47:09 +02:00
2019-11-15 17:29:15 -05:00
.PHONY : retest
retest : verify -env sanity $( FAILED_DIR )
2016-11-16 19:50:24 +01:00
$( call retest-func)
2016-10-11 11:47:09 +02:00
2019-11-15 17:29:15 -05:00
.PHONY : shell
shell : test -dep
2018-11-08 11:21:39 +01:00
@echo " source $( VENV_PATH) /bin/activate;\
2019-12-19 16:09:43 -05:00
export RND_SEED = $( RND_SEED) ; \
2017-03-09 08:01:52 +01:00
echo '***' ; \
2021-03-16 22:12:07 -04:00
echo PYTHONPATH = $( PYTHONPATH) ; \
2019-12-19 16:09:43 -05:00
echo RND_SEED = $( RND_SEED) ; \
2019-02-07 19:56:50 +01:00
echo VPP_BUILD_DIR = $( VPP_BUILD_DIR) ; \
echo VPP_BIN = $( VPP_BIN) ; \
echo VPP_PLUGIN_PATH = $( VPP_PLUGIN_PATH) ; \
2019-05-08 19:18:18 -04:00
echo VPP_TEST_PLUGIN_PATH = $( VPP_TEST_PLUGIN_PATH) ; \
2019-02-07 19:56:50 +01:00
echo VPP_INSTALL_PATH = $( VPP_INSTALL_PATH) ; \
2017-03-21 08:21:25 +01:00
echo EXTERN_TESTS = $( EXTERN_TESTS) ; \
echo EXTERN_PLUGINS = $( EXTERN_PLUGINS) ; \
2017-05-11 06:55:32 +02:00
echo EXTERN_COV_DIR = $( EXTERN_COV_DIR) ; \
2017-03-09 08:01:52 +01:00
echo LD_LIBRARY_PATH = $( LD_LIBRARY_PATH) ; \
echo '***' ; \
exec </dev/tty" | bash -i
2019-11-15 17:29:15 -05:00
.PHONY : reset
2016-11-15 09:46:51 +00:00
reset :
2021-03-18 15:22:57 +01:00
@rm -f /dev/shm/vpp-unittest-*
2021-03-16 12:52:12 +01:00
@if [ $( FORCE_NO_WIPE) -eq "0" ] ; then rm -rf /tmp/vpp-unittest-*; fi
2019-11-15 17:29:15 -05:00
@rm -f /tmp/api_post_mortem.*
2018-11-08 11:21:39 +01:00
@rm -rf $( FAILED_DIR)
2016-10-11 11:47:09 +02:00
2019-11-15 17:29:15 -05:00
.PHONY : wipe
2016-11-15 09:46:51 +00:00
wipe : reset
2018-11-08 11:21:39 +01:00
@rm -rf $( VENV_PATH)
2021-01-08 08:43:14 +00:00
@rm -rf $( patsubst %,%/__pycache__, $( VPP_TEST_DIRS) )
2016-11-15 09:46:51 +00:00
2020-04-07 15:43:33 +02:00
$(TEST_DOC_BR) : $( PIP_INSTALL_DONE )
2019-11-15 17:29:15 -05:00
@mkdir -p $@
@bash -c " source $( VENV_PATH) /bin/activate && make -C doc html "
2016-10-28 13:20:27 +02:00
2019-11-15 17:29:15 -05:00
.PHONY : doc
2021-05-12 21:43:59 -04:00
doc : $( PIP_PATCH_DONE ) $( TEST_DOC_BR )
2019-11-15 17:29:15 -05:00
@echo
@echo " Test Documentation URL: $( TEST_DOC_BR) /html/index.html "
@echo "Run 'make test-wipe-doc test-doc' to rebuild the test docs"
@echo
2016-12-12 09:20:50 +01:00
2019-11-15 17:29:15 -05:00
.PHONY : wipe -doc
2016-10-28 13:20:27 +02:00
wipe-doc :
2019-11-15 17:29:15 -05:00
@rm -rf $( TEST_DOC_BR)
2016-10-28 13:20:27 +02:00
2019-11-15 17:29:15 -05:00
$(BUILD_COV_DIR) :
@mkdir -p $@
.PHONY : cov
cov : wipe -cov test -dep ext $( BUILD_COV_DIR )
2019-02-07 19:56:50 +01:00
@lcov --zerocounters --directory $( VPP_BUILD_DIR)
2017-05-11 06:55:32 +02:00
@test -z " $( EXTERN_COV_DIR) " || lcov --zerocounters --directory $( EXTERN_COV_DIR)
2016-11-16 19:50:24 +01:00
$( call retest-func)
2019-02-07 19:56:50 +01:00
@lcov --capture --directory $( VPP_BUILD_DIR) --output-file $( BUILD_COV_DIR) /coverage.info
2017-05-11 06:55:32 +02:00
@test -z " $( EXTERN_COV_DIR) " || lcov --capture --directory $( EXTERN_COV_DIR) --output-file $( BUILD_COV_DIR) /extern-coverage.info
2016-11-16 19:50:24 +01:00
@genhtml $( BUILD_COV_DIR) /coverage.info --output-directory $( BUILD_COV_DIR) /html
2017-05-11 06:55:32 +02:00
@test -z " $( EXTERN_COV_DIR) " || genhtml $( BUILD_COV_DIR) /extern-coverage.info --output-directory $( BUILD_COV_DIR) /extern-html
2016-11-16 19:50:24 +01:00
@echo
@echo " Build finished. Code coverage report is in $( BUILD_COV_DIR) /html/index.html "
2017-05-11 06:55:32 +02:00
@test -z " $( EXTERN_COV_DIR) " || echo " Code coverage report for out-of-tree objects is in $( BUILD_COV_DIR) /extern-html/index.html "
2016-11-16 19:50:24 +01:00
2016-12-12 09:20:50 +01:00
.PHONY : wipe -cov
2016-11-16 19:50:24 +01:00
wipe-cov : wipe
@rm -rf $( BUILD_COV_DIR)
2019-11-15 17:29:15 -05:00
.PHONY : wipe -papi
wipe-papi :
@rm -rf $( PAPI_INSTALL_DONE) $( PAPI_WIPE_DIST)
2019-07-09 16:49:46 -04:00
2019-11-15 17:29:15 -05:00
.PHONY : wipe -all
wipe-all : wipe wipe -papi wipe -doc wipe -cov
@rm -rf $( TEST_BR)
2019-07-09 16:49:46 -04:00
2021-03-24 23:24:52 +01:00
.PHONY : checkstyle -diff
2021-05-12 21:43:59 -04:00
checkstyle-diff : $( PIP_INSTALL_DONE )
2021-03-24 23:24:52 +01:00
@bash -c " source $( VENV_PATH) /bin/activate &&\
$( PYTHON_INTERP) -m pip install pycodestyle"
@bash -c " source $( VENV_PATH) /bin/activate &&\
cd $( WS_ROOT) && git diff --name-only --no-color --relative HEAD~1 ':!*.patch' | grep '.py$$' | xargs -n 1 -I XXX \
pycodestyle --show-source --ignore= W504,E126,E241,E226,E305,E704,E741,E722 -v XXX || \
( echo \" *********************************************************************\" && \
echo \" * Test framework PEP8 compliance check FAILED ( checked changed files) \" && \
echo \" *********************************************************************\" && \
false ) "
@echo "*********************************************************************"
@echo "* Test framework PEP8 compliance check passed (checked changed files)"
@echo "*********************************************************************"
2021-03-16 12:52:12 +01:00
.PHONY : start -gdb
start-gdb : sanity
$( eval VPP_IN_GDB = 1)
$( eval FORCE_FOREGROUND = 1)
$( call retest-func)
2017-01-17 10:37:05 +01:00
.PHONY : checkstyle
2021-05-12 21:43:59 -04:00
checkstyle : $( PIP_INSTALL_DONE )
2019-10-23 11:47:33 +02:00
@bash -c " source $( VENV_PATH) /bin/activate &&\
$( PYTHON_INTERP) -m pip install pycodestyle"
2018-11-08 11:21:39 +01:00
@bash -c " source $( VENV_PATH) /bin/activate &&\
2021-05-12 21:43:59 -04:00
pycodestyle --show-source --ignore= W504,E126,E241,E226,E305,E704,E741,E722 -v *.py || \
2017-01-17 10:37:05 +01:00
( echo \" *******************************************************************\" && \
2021-03-24 23:24:52 +01:00
echo \" * Test framework PEP8 compliance check FAILED ( checked all files) \" && \
2017-01-17 10:37:05 +01:00
echo \" *******************************************************************\" && \
false ) "
@echo "*******************************************************************"
2021-03-24 23:24:52 +01:00
@echo "* Test framework PEP8 compliance check passed (checked all files)"
2017-01-17 10:37:05 +01:00
@echo "*******************************************************************"
2019-11-15 17:29:15 -05:00
.PHONY : help
2016-10-28 13:20:27 +02:00
help :
@echo "Running tests:"
@echo ""
2019-11-15 17:29:15 -05:00
@echo " test - build and run (basic) functional tests"
@echo " test-debug - build and run (basic) functional tests (debug build)"
@echo " test-all - build and run functional and extended tests"
@echo " test-all-debug - build and run functional and extended tests (debug build)"
@echo " retest - run functional tests"
@echo " retest-debug - run functional tests (debug build)"
@echo " retest-all - run functional and extended tests"
@echo " retest-all-debug - run functional and extended tests (debug build)"
@echo " test-cov - generate code coverage report for test framework"
@echo " test-gcov - build and run functional tests (gcov build)"
@echo " test-wipe - wipe (temporary) files generated by unit tests"
@echo " test-wipe-cov - wipe code coverage report for test framework"
@echo " test-wipe-doc - wipe documentation for test framework"
@echo " test-wipe-papi - rebuild vpp_papi sources"
@echo " test-wipe-all - wipe (temporary) files generated by unit tests, docs, and coverage"
@echo " test-shell - enter shell with test environment"
@echo " test-shell-debug - enter shell with test environment (debug build)"
2021-03-16 12:52:12 +01:00
@echo " test-checkstyle - check PEP8 compliance for test framework"
@echo " test-refresh-deps - refresh the Python dependencies for the tests"
2016-10-28 13:20:27 +02:00
@echo ""
@echo "Arguments controlling test runs:"
2019-11-15 17:29:15 -05:00
@echo " V=[0|1|2] - set test verbosity level"
@echo " 0=ERROR, 1=INFO, 2=DEBUG"
2021-04-08 19:37:41 +02:00
@echo " TEST_JOBS=[<n>|auto] - use at most <n> parallel python processes for test execution, if auto, set to number of available cpus (default: 1)"
@echo " MAX_VPP_CPUS=[<n>|auto]- use at most <n> cpus for running vpp main and worker threads, if auto, set to number of available cpus (default: auto)"
2019-11-15 17:29:15 -05:00
@echo " CACHE_OUTPUT=[0|1] - cache VPP stdout/stderr and log as one block after test finishes (default: 1)"
@echo " FAILFAST=[0|1] - fail fast if 1, complete all tests if 0"
@echo " TIMEOUT=<timeout> - fail test suite if any single test takes longer than <timeout> (in seconds) to finish (default: 600)"
@echo " RETRIES=<n> - retry failed tests <n> times"
@echo " DEBUG=<type> - set VPP debugging kind"
@echo " DEBUG=core - detect coredump and load it in gdb on crash"
@echo " DEBUG=gdb - allow easy debugging by printing VPP PID"
@echo " and waiting for user input before running"
@echo " and tearing down a testcase"
@echo " DEBUG=gdbserver - run gdb inside a gdb server, otherwise"
@echo " same as above"
2021-03-16 12:52:12 +01:00
@echo " DEBUG=attach - attach test case to already running vpp in gdb (see test-start-vpp-in-gdb)"
@echo ""
2019-11-15 17:29:15 -05:00
@echo " STEP=[yes|no] - ease debugging by stepping through a testcase"
@echo " SANITY=[yes|no] - perform sanity import of vpp-api/sanity vpp run before running tests (default: yes)"
@echo " EXTENDED_TESTS=[1|y] - used by '[re]test-all' & '[re]test-all-debug' to run extended tests"
@echo " TEST=<filter> - filter the set of tests:"
@echo " by file-name - only run tests from specified file, e.g. TEST=test_bfd selects all tests from test_bfd.py"
@echo " by file-suffix - same as file-name, but 'test_' is omitted e.g. TEST=bfd selects all tests from test_bfd.py"
@echo " by wildcard - wildcard filter is <file>.<class>.<test function>, each can be replaced by '*'"
@echo " e.g. TEST='test_bfd.*.*' is equivalent to above example of filter by file-name"
@echo " TEST='bfd.*.*' is equivalent to above example of filter by file-suffix"
@echo " TEST='bfd.BFDAPITestCase.*' selects all tests from test_bfd.py which are part of BFDAPITestCase class"
@echo " TEST='bfd.BFDAPITestCase.test_add_bfd' selects a single test named test_add_bfd from test_bfd.py/BFDAPITestCase"
@echo " TEST='*.*.test_add_bfd' selects all test functions named test_add_bfd from all files/classes"
2016-10-28 13:20:27 +02:00
@echo ""
2020-03-10 14:35:32 +00:00
@echo " VARIANT=<variant> - specify which march node variant to unit test"
2020-08-14 15:27:10 +01:00
@echo " e.g. VARIANT=skx test the skx march variants"
@echo " e.g. VARIANT=icl test the icl march variants"
2020-03-10 14:35:32 +00:00
@echo ""
2019-11-15 17:29:15 -05:00
@echo " COREDUMP_SIZE=<size> - pass <size> as unix { coredump-size <size> } argument to vpp"
@echo " e.g. COREDUMP_SIZE=4g"
@echo " COREDUMP_SIZE=unlimited"
@echo " COREDUMP_COMPRESS=1 - compress core files if not debugging them"
@echo " EXTERN_TESTS=<path> - path to out-of-tree test_<name>.py files containing test cases"
@echo " EXTERN_PLUGINS=<path> - path to out-of-tree plugins to be loaded by vpp under test"
@echo " EXTERN_COV_DIR=<path> - path to out-of-tree prefix, where source, object and .gcda files can be found for coverage report"
2017-03-02 08:16:20 +01:00
@echo ""
2019-11-15 17:29:15 -05:00
@echo " PROFILE=1 - enable profiling of test framework via cProfile module"
@echo " PROFILE_SORT_BY=opt - sort profiling report by opt - consult cProfile documentation for possible values (default: cumtime)"
@echo " PROFILE_OUTPUT=file - output profiling info to file - use absolute path (default: stdout)"
2018-06-27 13:54:32 +02:00
@echo ""
2019-11-15 17:29:15 -05:00
@echo " TEST_DEBUG=1 - turn on debugging of the test framework itself (expert)"
2018-02-17 13:41:33 +01:00
@echo ""
2019-11-15 17:29:15 -05:00
@echo " SKIP_AARCH64=1 - skip tests that are failing on the ARM platorm in FD.io CI"
2018-11-29 09:37:08 +01:00
@echo ""
2019-11-15 17:29:15 -05:00
@echo " RND_SEED=seed - Seed RND with given seed"
2019-11-05 11:18:25 +00:00
@echo ""
2021-03-16 12:52:12 +01:00
@echo "Starting VPP in GDB for use with DEBUG=attach:"
@echo ""
@echo " test-start-vpp-in-gdb - start VPP in gdb (release)"
@echo " test-start-vpp-debug-in-gdb - start VPP in gdb (debug)"
@echo ""
@echo "Arguments controlling VPP in GDB runs:"
@echo " "
@echo " VPP_IN_GDB_TMP_DIR - specify directory to run VPP IN (default: /tmp/unittest-attach-gdb)"
@echo " VPP_IN_GDB_NO_RMDIR=0 - don't remove existing tmp dir but fail instead"
@echo " VPP_IN_GDB_CMDLINE=1 - add 'interactive' to VPP arguments to run with command line"
@echo ""
2016-10-28 13:20:27 +02:00
@echo "Creating test documentation"
2019-11-15 17:29:15 -05:00
@echo " test-doc - generate documentation for test framework"
@echo " test-wipe-doc - wipe documentation for test framework"
2016-11-16 19:50:24 +01:00
@echo ""
@echo "Creating test code coverage report"
2019-11-15 17:29:15 -05:00
@echo " test-cov - generate code coverage report for test framework"
@echo " test-wipe-cov - wipe code coverage report for test framework"
2016-10-28 13:20:27 +02:00
@echo ""
2017-01-17 10:37:05 +01:00
@echo "Verifying code-style"
2019-11-15 17:29:15 -05:00
@echo " test-checkstyle - check PEP8 compliance"
2017-01-17 10:37:05 +01:00
@echo ""