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)
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 )
2021-05-31 16:08:53 +02:00
PYTHON_OPTS = " -m cProfile $( PROFILE_OUTPUT_OPTS) -s $( PROFILE_SORT_BY) "
2018-06-27 13:54:32 +02:00
FORCE_FOREGROUND = 1
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
2021-05-31 16:08:53 +02:00
i f e q ( $( V ) , )
V = 0
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)' )
2022-02-05 09:27:05 -05:00
PIP_VERSION = 22.0.3
2020-05-25 18:07:24 +02:00
# Keep in sync with requirements.txt
2022-02-05 09:27:05 -05:00
PIP_TOOLS_VERSION = 6.5.0
PIP_SETUPTOOLS_VERSION = 60.7.1
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 && \
2021-04-10 12:37:04 +02:00
python3 -m pip install pip = = = $( PIP_VERSION) "
2019-06-21 17:04:29 +02:00
@bash -c " source $( VENV_PATH) /bin/activate && \
2021-04-10 12:37:04 +02:00
python3 -m pip install pip-tools= = = $( PIP_TOOLS_VERSION) "
2022-02-05 09:27:05 -05:00
@bash -c " source $( VENV_PATH) /bin/activate && \
python3 -m pip install setuptools = = = $( PIP_SETUPTOOLS_VERSION) "
2019-06-21 17:04:29 +02:00
@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)' \
2021-04-10 12:37:04 +02:00
python3 -m piptools compile -q --generate-hashes requirements.txt --output-file $@ "
2019-06-21 17:04:29 +02:00
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 && \
2021-04-10 12:37:04 +02:00
python3 -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 )
2021-04-10 12:37:04 +02:00
@bash -c " source $( VENV_PATH) /bin/activate && python3 -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
2017-03-09 08:20:13 +01:00
.PHONY : sanity
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
2021-05-31 16:08:53 +02:00
TEST_JOBS = 1
2018-07-16 14:22:01 +02:00
e l s e i f e q ( $( FORCE_FOREGROUND ) , 0 )
PARALLEL_ILLEGAL = 0
2021-05-31 16:08:53 +02:00
e l s e i f n e q ( $( findstring $ ( TEST_JOBS ) ,1 auto ) , )
2018-07-16 14:22:01 +02:00
PARALLEL_ILLEGAL = 0
e l s e
PARALLEL_ILLEGAL = 1
e n d i f
2021-05-31 16:08:53 +02:00
i f n e q ( $( DEBUG ) , )
SANITY = no
e n d i f
i f n e q ( $( findstring $ ( SANITY ) ,0 n no ) , )
SANITY_IMPORT_VPP_PAPI_CMD = true
ARG0 =
e l s e
SANITY_IMPORT_VPP_PAPI_CMD = source $( VENV_PATH) /bin/activate && $( PYTHON_INTERP) sanity_import_vpp_papi.py
ARG0 = --sanity
e n d i f
ARG1 =
i f n e q ( $( findstring $ ( FAILFAST ) ,1 y yes ) , )
ARG1 = --failfast
e n d i f
ARG2 =
i f n e q ( $( findstring $ ( EXTENDED_TESTS ) ,1 y yes ) , )
ARG2 = --extended
e n d i f
ARG3 =
i f n e q ( $( EXTERN_TESTS ) , )
ARG3 = --test-src-dir $( EXTERN_TESTS)
e n d i f
ARG4 =
i f n e q ( $( findstring $ ( FORCE_FOREGROUND ) ,1 y yes ) , )
ARG4 = --force-foreground
e n d i f
ARG5 =
i f n e q ( $( findstring $ ( COREDUMP_COMPRESS ) ,1 y yes ) , )
ARG5 = --compress-core
e n d i f
ARG6 =
i f n e q ( $( findstring $ ( STEP ) ,1 y yes ) , )
ARG6 = --step
e n d i f
ARG7 =
i f n e q ( $( findstring $ ( TESTS_GCOV ) ,1 y yes ) , )
ARG7 = --gcov
e n d i f
ARG8 =
i f n e q ( $( EXTERN_PLUGINS ) , )
ARG8 = --extern-plugin-dir= $( EXTERN_PLUGINS)
e n d i f
ARG9 =
i f n e q ( $( DEBUG ) , )
ARG9 = --debug= $( DEBUG)
e n d i f
ARG10 =
i f n e q ( $( COREDUMP_SIZE ) , )
ARG10 = --coredump-size= $( COREDUMP_SIZE)
e n d i f
ARG11 =
i f n e q ( $( VARIANT ) , )
ARG11 = --variant= $( VARIANT)
e n d i f
ARG12 = --cache-vpp-output
i f n e q ( $( findstring $ ( CACHE_OUTPUT ) ,0 n no ) , )
ARG12 =
e n d i f
ARG13 =
i f n e q ( $( MAX_VPP_CPUS ) , )
ARG13 = --max-vpp-cpus= $( MAX_VPP_CPUS)
e n d i f
ARG14 =
i f n e q ( $( TIMEOUT ) , )
ARG14 = --timeout= $( TIMEOUT)
e n d i f
ARG15 =
i f n e q ( $( findstring $ ( TEST_DEBUG ) ,1 y yes ) , )
ARG15 = --debug-framework
e n d i f
ARG16 =
i f n e q ( $( findstring $ ( API_FUZZ ) ,1 y yes ) , )
ARG16 = --api-fuzz= on
e n d i f
EXTRA_ARGS = $( ARG0) $( ARG1) $( ARG2) $( ARG3) $( ARG4) $( ARG5) $( ARG6) $( ARG7) $( ARG8) $( ARG9) $( ARG10) $( ARG11) $( ARG12) $( ARG13) $( ARG14) $( ARG15) $( ARG16)
RUN_TESTS_ARGS = --failed-dir= $( FAILED_DIR) --verbose= $( V) --jobs= $( TEST_JOBS) --filter= $( TEST) --retries= $( RETRIES) --venv-dir= $( VENV_PATH) --vpp-ws-dir= $( WS_ROOT) --vpp-tag= $( TAG) --rnd-seed= $( RND_SEED) --vpp-worker-count= " $( VPP_WORKER_COUNT) " --keep-pcaps --python-opts= $( PYTHON_OPTS) $( PLUGIN_PATH_ARGS) $( TEST_PLUGIN_PATH_ARGS) $( EXTRA_ARGS)
d e f i n e r e t e s t - f u n c
@ s c r i p t s / r u n . s h $( RUN_TESTS_ARGS ) | | e n v FAILED_DIR = $( FAILED_DIR) COMPRESS_FAILED_TEST_LOGS = $( COMPRESS_FAILED_TEST_LOGS) scripts/compress_failed.sh
e n d e 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 ) "
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_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) ; \
2021-05-31 16:08:53 +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
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
2021-08-19 11:38:06 +02:00
wipe-all : wipe wipe -papi wipe -cov
2019-11-15 17:29:15 -05:00
@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 &&\
2021-04-10 12:37:04 +02:00
python3 -m pip install pycodestyle"
2021-03-24 23:24:52 +01:00
@bash -c " source $( VENV_PATH) /bin/activate &&\
2022-02-03 16:03:26 +00:00
cd $( WS_ROOT) && git diff --name-only --no-color --relative HEAD~1 ':!*.patch' | grep '.py$$' | xargs -I XXX \
pycodestyle --show-source --ignore= W504,E126,E241,E226,E305,E704,E741,E722 -v XXX || \
2021-03-24 23:24:52 +01:00
( 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
2021-05-31 16:08:53 +02:00
@bash -c " source $( VENV_PATH) /bin/activate && python3 -c 'from debug import start_vpp_in_gdb; start_vpp_in_gdb()' $( RUN_TESTS_ARGS) "
2021-03-16 12:52:12 +01:00
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 &&\
2021-04-10 12:37:04 +02:00
python3 -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-papi - rebuild vpp_papi sources"
2021-08-19 11:38:06 +02:00
@echo " test-wipe-all - wipe (temporary) files generated by unit tests, and coverage"
2019-11-15 17:29:15 -05:00
@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:"
2021-05-31 16:08:53 +02:00
@echo ""
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)"
2021-05-31 16:08:53 +02:00
@echo " CACHE_OUTPUT=[0|n|no] - disable cache VPP stdout/stderr and log as one block after test finishes (default: yes)"
@echo " FAILFAST=[1|y|yes] - fail fast if 1, otherwise complete all tests"
2019-11-15 17:29:15 -05:00
@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)"
2021-05-31 16:08:53 +02:00
@echo " STEP=[1|y|yes] - enable stepping through a testcase (for testcase debugging)"
@echo " SANITY=[0|n|no] - disable sanity import of vpp-api/sanity vpp run before running tests"
@echo " EXTENDED_TESTS=[1|y|yes] - run extended tests"
2019-11-15 17:29:15 -05:00
@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"
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"
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"
2021-05-31 16:08:53 +02:00
@echo " COREDUMP_COMPRESS=[1|y|yes] - compress core files if not debugging them"
2019-11-15 17:29:15 -05:00
@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"
2021-05-31 16:08:53 +02:00
@echo " PROFILE=[1|y|yes] - enable profiling of test framework via cProfile module"
2019-11-15 17:29:15 -05:00
@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)"
2021-05-31 16:08:53 +02:00
@echo " TEST_DEBUG=[1|y|yes] - enable debugging of the test framework itself (expert)"
@echo " API_FUZZ=[1|y|yes] - enable VPP api fuzz testing"
@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 ""
2021-05-31 16:08:53 +02:00
@echo "Creating test code coverage report:"
2021-03-16 12:52:12 +01:00
@echo ""
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 ""
2021-05-31 16:08:53 +02:00
@echo "Verifying code-style:"
@echo ""
2019-11-15 17:29:15 -05:00
@echo " test-checkstyle - check PEP8 compliance"
2017-01-17 10:37:05 +01:00
@echo ""