b93d142430
Check if there are existing vpp processes before running the test suite and refuse to run if there are. This prevents the removal of other test suite temporary files and also makes sure that if the machine is loaded by (zombie) vpp processes, interactive tests (like bfd) won't fail. Change-Id: I88a74098188cb3f51966de5db19d7f80f39e51e2 Signed-off-by: Klement Sekera <ksekera@cisco.com>
162 lines
6.4 KiB
Makefile
162 lines
6.4 KiB
Makefile
.PHONY: verify-python-path
|
|
|
|
verify-python-path:
|
|
ifndef VPP_PYTHON_PREFIX
|
|
$(error VPP_PYTHON_PREFIX is not set)
|
|
endif
|
|
|
|
.PHONY: verify-no-running-vpp
|
|
|
|
ifdef VPP_ZOMBIE_NOCHECK
|
|
VPP_PIDS=
|
|
else
|
|
VPP_PIDS=$(shell pgrep -d, -x vpp_main)
|
|
endif
|
|
|
|
verify-no-running-vpp:
|
|
@if [ "$(VPP_PIDS)" != "" ]; then \
|
|
echo; \
|
|
echo "*** Existing vpp processes detected (PID(s): $(VPP_PIDS)). Running tests under these conditions is not supported. ***"; \
|
|
echo; \
|
|
ps -fp $(VPP_PIDS);\
|
|
echo; \
|
|
false; \
|
|
fi
|
|
|
|
UNITTEST_EXTRA_OPTS=""
|
|
|
|
ifeq ($(FAILFAST),1)
|
|
UNITTEST_EXTRA_OPTS="-f"
|
|
endif
|
|
|
|
PYTHON_VENV_PATH=$(VPP_PYTHON_PREFIX)/virtualenv
|
|
PYTHON_DEPENDS=scapy==2.3.3 pexpect subprocess32 git+https://github.com/klement/py-lispnetworking@setup
|
|
SCAPY_SOURCE=$(PYTHON_VENV_PATH)/lib/python2.7/site-packages/
|
|
BUILD_COV_DIR = $(BR)/test-cov
|
|
|
|
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
|
|
@bash -c "source $(PYTHON_VENV_PATH)/bin/activate && pip install $(PYTHON_DEPENDS)"
|
|
@touch $@
|
|
|
|
$(PIP_PATCH_DONE): $(PIP_INSTALL_DONE)
|
|
@echo --- patching ---
|
|
@sleep 1 # Ensure python recompiles patched *.py files -> *.pyc
|
|
for f in $(CURDIR)/patches/scapy-2.3.3/*.patch ; do \
|
|
echo Applying patch: $$(basename $$f) ; \
|
|
patch -p1 -d $(SCAPY_SOURCE) < $$f ; \
|
|
done
|
|
@touch $@
|
|
|
|
$(PAPI_INSTALL_DONE): $(PIP_PATCH_DONE)
|
|
@bash -c "source $(PYTHON_VENV_PATH)/bin/activate && cd $(WS_ROOT)/src/vpp-api/python && python setup.py install"
|
|
@touch $@
|
|
|
|
define retest-func
|
|
@bash -c "source $(PYTHON_VENV_PATH)/bin/activate && python run_tests.py discover $(UNITTEST_EXTRA_OPTS) -p test_\"*.py\""
|
|
endef
|
|
|
|
test: verify-python-path verify-no-running-vpp reset $(PAPI_INSTALL_DONE)
|
|
$(call retest-func)
|
|
|
|
retest: verify-python-path verify-no-running-vpp reset
|
|
$(call retest-func)
|
|
|
|
.PHONY: wipe doc
|
|
|
|
reset:
|
|
@rm -f /dev/shm/vpp-unittest-*
|
|
@rm -rf /tmp/vpp-unittest-*
|
|
|
|
wipe: reset
|
|
@rm -rf $(PYTHON_VENV_PATH)
|
|
@rm -f $(PAPI_INSTALL_FLAGS)
|
|
|
|
doc: verify-python-path $(PIP_PATCH_DONE)
|
|
@virtualenv $(PYTHON_VENV_PATH) -p python2.7
|
|
@bash -c "source $(PYTHON_VENV_PATH)/bin/activate && pip install sphinx sphinx-rtd-theme"
|
|
@bash -c "source $(PYTHON_VENV_PATH)/bin/activate && make -C doc WS_ROOT=$(WS_ROOT) BR=$(BR) NO_VPP_PAPI=1 html"
|
|
|
|
.PHONY: wipe-doc
|
|
|
|
wipe-doc:
|
|
@make -C doc wipe BR=$(BR)
|
|
|
|
cov: wipe-cov reset verify-python-path $(PAPI_INSTALL_DONE)
|
|
@lcov --zerocounters --directory $(VPP_TEST_BUILD_DIR)
|
|
$(call retest-func)
|
|
@mkdir $(BUILD_COV_DIR)
|
|
@lcov --capture --directory $(VPP_TEST_BUILD_DIR) --output-file $(BUILD_COV_DIR)/coverage.info
|
|
@genhtml $(BUILD_COV_DIR)/coverage.info --output-directory $(BUILD_COV_DIR)/html
|
|
@echo
|
|
@echo "Build finished. Code coverage report is in $(BUILD_COV_DIR)/html/index.html"
|
|
|
|
.PHONY: wipe-cov
|
|
|
|
wipe-cov: wipe
|
|
@rm -rf $(BUILD_COV_DIR)
|
|
|
|
.PHONY: checkstyle
|
|
checkstyle: verify-python-path
|
|
@virtualenv $(PYTHON_VENV_PATH) -p python2.7
|
|
@bash -c "source $(PYTHON_VENV_PATH)/bin/activate && pip install pep8"
|
|
@bash -c "source $(PYTHON_VENV_PATH)/bin/activate &&\
|
|
pep8 --show-source -v $(WS_ROOT)/test/*.py ||\
|
|
(echo \"*******************************************************************\" &&\
|
|
echo \"* Test framework PEP8 compliance check FAILED \" &&\
|
|
echo \"*******************************************************************\" &&\
|
|
false)"
|
|
@echo "*******************************************************************"
|
|
@echo "* Test framework PEP8 compliance check passed"
|
|
@echo "*******************************************************************"
|
|
|
|
help:
|
|
@echo "Running tests:"
|
|
@echo ""
|
|
@echo " test - build and run functional tests"
|
|
@echo " test-debug - build and run functional tests (debug build)"
|
|
@echo " retest - run functional tests"
|
|
@echo " retest-debug - run functional tests (debug build)"
|
|
@echo " test-wipe - wipe (temporary) files generated by unit tests"
|
|
@echo ""
|
|
@echo "Arguments controlling test runs:"
|
|
@echo " V=[0|1|2] - set test verbosity level"
|
|
@echo " FAILFAST=[0|1] - fail fast if 1, complete all tests if 0"
|
|
@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"
|
|
@echo " STEP=[yes|no] - ease debugging by stepping through a testcase "
|
|
@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"
|
|
@echo ""
|
|
@echo " VPP_ZOMBIE_NOCHECK=1 - skip checking for vpp (zombie) processes (CAUTION)"
|
|
@echo ""
|
|
@echo "Creating test documentation"
|
|
@echo " test-doc - generate documentation for test framework"
|
|
@echo " test-wipe-doc - wipe documentation for test framework"
|
|
@echo ""
|
|
@echo "Creating test code coverage report"
|
|
@echo " test-cov - generate code coverage report for test framework"
|
|
@echo " test-wipe-cov - wipe code coverage report for test framework"
|
|
@echo ""
|
|
@echo "Verifying code-style"
|
|
@echo " test-checkstyle - check PEP8 compliance"
|
|
@echo ""
|