acb9b8e8c3
Disable automatic garbage collection and run it manually before running each test case to minimize stalls. Improve vpp subprocess cleanup. Reduce helper thread count to one and properly clean that thread once it's not needed. Change-Id: I3ea78ed9628552b5ef3ff29cc7bcf2d3fc42f2c3 Signed-off-by: Klement Sekera <ksekera@cisco.com>
142 lines
5.8 KiB
Makefile
142 lines
5.8 KiB
Makefile
.PHONY: verify-python-path
|
|
|
|
verify-python-path:
|
|
ifndef VPP_PYTHON_PREFIX
|
|
$(error VPP_PYTHON_PREFIX is not set)
|
|
endif
|
|
|
|
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
|
|
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: reset verify-python-path $(PAPI_INSTALL_DONE)
|
|
$(call retest-func)
|
|
|
|
retest: reset verify-python-path
|
|
$(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 "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 ""
|