X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2FMakefile;h=dbb269734405ffe0c9b8eafc50085a83ec261826;hb=f051072;hp=787dd9d12c7cff5c51adb58814c1c863beed0c01;hpb=3747c75a215f082bc52198a7229e1b1e529d7666;p=vpp.git diff --git a/test/Makefile b/test/Makefile index 787dd9d12c7..dbb26973440 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,5 +1,7 @@ .PHONY: verify-python-path +VPP_TEST_FAILED_DIR=/tmp/vpp-failed-unittests/ + verify-python-path: ifndef VPP_PYTHON_PREFIX $(error VPP_PYTHON_PREFIX is not set) @@ -13,6 +15,16 @@ else VPP_PIDS=$(shell pgrep -d, -x vpp_main) endif +ifeq ($(DEBUG),gdb) +FORCE_FOREGROUND=1 +else ifeq ($(DEBUG),gdbserver) +FORCE_FOREGROUND=1 +else ifeq ($(DEBUG),core) +FORCE_FOREGROUND=1 +else +FORCE_FOREGROUND=0 +endif + verify-no-running-vpp: @if [ "$(VPP_PIDS)" != "" ]; then \ echo; \ @@ -35,18 +47,30 @@ UNITTEST_EXTRA_OPTS=$(UNITTEST_FAILFAST_OPTS) -d $(EXTERN_TESTS) endif PYTHON_VENV_PATH=$(VPP_PYTHON_PREFIX)/virtualenv -PYTHON_DEPENDS=scapy==2.3.3 pexpect subprocess32 cffi git+https://github.com/klement/py-lispnetworking@setup -SCAPY_SOURCE=$(PYTHON_VENV_PATH)/lib/python2.7/site-packages/ -BUILD_COV_DIR = $(BR)/test-cov +PYTHON_DEPENDS=faulthandler six scapy==2.3.3 pexpect pycrypto subprocess32 cffi git+https://github.com/klement/py-lispnetworking@setup +SCAPY_SOURCE=$(shell find $(PYTHON_VENV_PATH) -name site-packages) +BUILD_COV_DIR=$(BR)/test-cov +GET_PIP_SCRIPT=$(VPP_PYTHON_PREFIX)/get-pip.py PIP_INSTALL_DONE=$(VPP_PYTHON_PREFIX)/pip-install.done PIP_PATCH_DONE=$(VPP_PYTHON_PREFIX)/pip-patch.done PAPI_INSTALL_DONE=$(VPP_PYTHON_PREFIX)/papi-install.done PAPI_INSTALL_FLAGS=$(PIP_INSTALL_DONE) $(PIP_PATCH_DONE) $(PAPI_INSTALL_DONE) -$(PIP_INSTALL_DONE): - @virtualenv $(PYTHON_VENV_PATH) -p python2.7 +ifeq ($(PYTHON),) +PYTHON_INTERP=python2.7 +else +PYTHON_INTERP=$(PYTHON) +endif + +$(GET_PIP_SCRIPT): + @mkdir -p $(VPP_PYTHON_PREFIX) + @bash -c "cd $(VPP_PYTHON_PREFIX) && curl -O https://bootstrap.pypa.io/get-pip.py" + +$(PIP_INSTALL_DONE): $(GET_PIP_SCRIPT) + @virtualenv $(PYTHON_VENV_PATH) -p $(PYTHON_INTERP) + @bash -c "source $(PYTHON_VENV_PATH)/bin/activate && python $(GET_PIP_SCRIPT)" @bash -c "source $(PYTHON_VENV_PATH)/bin/activate && pip install $(PYTHON_DEPENDS)" @touch $@ @@ -64,13 +88,23 @@ $(PAPI_INSTALL_DONE): $(PIP_PATCH_DONE) @touch $@ define retest-func - @bash -c "source $(PYTHON_VENV_PATH)/bin/activate && python run_tests.py -d $(TEST_DIR) $(UNITTEST_EXTRA_OPTS)" +@env VPP_TEST_FAILED_DIR=$(VPP_TEST_FAILED_DIR) scripts/setsid_wrapper.sh $(FORCE_FOREGROUND) $(PYTHON_VENV_PATH)/bin/activate python run_tests.py -d $(TEST_DIR) $(UNITTEST_EXTRA_OPTS) || env VPP_TEST_FAILED_DIR=$(VPP_TEST_FAILED_DIR) COMPRESS_FAILED_TEST_LOGS=$(COMPRESS_FAILED_TEST_LOGS) scripts/compress_failed.sh endef .PHONY: sanity +ifeq ($(SANITY),no) +SANITY_IMPORT_VPP_PAPI_CMD=true +SANITY_RUN_VPP_CMD=true +else +SANITY_IMPORT_VPP_PAPI_CMD=source $(PYTHON_VENV_PATH)/bin/activate && python sanity_import_vpp_papi.py +SANITY_RUN_VPP_CMD=source $(PYTHON_VENV_PATH)/bin/activate && python sanity_run_vpp.py +endif + sanity: verify-no-running-vpp - @bash -c "source $(PYTHON_VENV_PATH)/bin/activate && python sanity_import_vpp_papi.py ||\ + @sys_req/dev_shm_size.sh + @sys_req/set_system_parameters.sh sys_req/system_parameters + @bash -c "$(SANITY_IMPORT_VPP_PAPI_CMD) ||\ (echo \"*******************************************************************\" &&\ echo \"* Sanity check failed, cannot import vpp_papi\" &&\ echo \"* to debug: \" &&\ @@ -78,13 +112,17 @@ sanity: verify-no-running-vpp echo \"* 2. execute debugger: gdb python -ex 'run sanity_import_vpp_papi.py'\" &&\ echo \"*******************************************************************\" &&\ false)" - @bash -c "source $(PYTHON_VENV_PATH)/bin/activate && python sanity_run_vpp.py ||\ + @bash -c "$(SANITY_RUN_VPP_CMD) ||\ (echo \"*******************************************************************\" &&\ echo \"* Sanity check failed, cannot run vpp\" &&\ echo \"*******************************************************************\" &&\ false)" -test: verify-python-path $(PAPI_INSTALL_DONE) sanity reset +.PHONY: ext +ext: + make -C ext + +test: verify-python-path $(PAPI_INSTALL_DONE) ext sanity reset $(call retest-func) retest: verify-python-path sanity reset @@ -99,6 +137,7 @@ shell: verify-python-path $(PAPI_INSTALL_DONE) echo VPP_TEST_INSTALL_PATH=$(VPP_TEST_INSTALL_PATH);\ echo EXTERN_TESTS=$(EXTERN_TESTS);\ echo EXTERN_PLUGINS=$(EXTERN_PLUGINS);\ + echo EXTERN_COV_DIR=$(EXTERN_COV_DIR);\ echo LD_LIBRARY_PATH=$(LD_LIBRARY_PATH);\ echo '***';\ exec - fail test suite if any single test takes longer than (in seconds) to finish" + @echo " RETRIES= - retry failed tests times" @echo " DEBUG= - 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 " @@ -175,6 +224,7 @@ help: @echo " DEBUG=gdbserver - run gdb inside a gdb server, otherwise " @echo " same as above" @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 " TEST= - 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" @@ -191,6 +241,7 @@ help: @echo " COREDUMP_SIZE=unlimited" @echo " EXTERN_TESTS= - path to out-of-tree test_.py files containing test cases" @echo " EXTERN_PLUGINS=- path to out-of-tree plugins to be loaded by vpp under test" + @echo " EXTERN_COV_DIR=- path to out-of-tree prefix, where source, object and .gcda files can be found for coverage report" @echo "" @echo "Creating test documentation" @echo " test-doc - generate documentation for test framework"