- make -j2 install COVERAGE=1 PREFIX=${HOME}/.local
- ./daemon/kresd -h
- make check COVERAGE=1 PREFIX=${HOME}/.local
+ - make check-integration COVERAGE=1 PREFIX=${HOME}/.local
after_success:
- test $TRAVIS_OS_NAME = linux && coveralls -i lib -i daemon -x ".c" --gcov-options '\-lp'
sudo: false
The project can be built with code coverage tracking using the ``COVERAGE=1`` variable.
+Running unit and integration tests
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The unit tests require cmocka_ and are executed with ``make check``.
+
+The integration tests use Deckard, the `DNS test harness <deckard>`_.
+
+.. code-block:: bash
+
+ $ make check-integration
+
+Note that the daemon and modules must be installed first before running integration tests, the reason is that the daemon
+is otherwise unable to find and load modules.
+
+Read the `documentation <deckard_doc>`_ for more information about requirements, how to run it and extend it.
+
.. _Docker images: https://registry.hub.docker.com/u/cznic/knot-resolver
.. _libuv: https://github.com/libuv/libuv
.. _MSVC: https://msdn.microsoft.com/en-us/vstudio/hh386302.aspx
.. _Python: https://www.python.org/
.. _boot2docker: http://boot2docker.io/
+
+.. _deckard: https://gitlab.labs.nic.cz/knot/deckard
+.. _deckard_doc: https://gitlab.labs.nic.cz/knot/resolver/blob/master/tests/README.rst
Unit tests
==========
-The tests depend on cmocka_.
+The unit tests depend on cmocka_.
.. code-block:: bash
- $ make check-unit
-
+ $ make check
.. todo:: Writing tests.
Integration tests
=================
-The tests depend on cwrap's `socket_wrapper`_, libfaketime_ and Python.
-The libfaketime is included in ``contrib/libfaketime`` as it depends on rather latest version of it,
-it is automatically synchronised with ``make``.
+The integration tests are using Deckard, the `DNS test harness <deckard>`_.
+It requires Jinja2_ and Python, `socket_wrapper`_, libfaketime_ are embedded in the build (cmake is required for `socket_wrapper`_).
Execute the tests by:
$ make check-integration
-.. todo:: Writing tests.
+See deckard_ documentation on how to write additional tests.
.. _cmocka: https://cmocka.org/
.. _`socket_wrapper`: https://cwrap.org/socket_wrapper.html
.. _libfaketime: https://cwrap.org/socket_wrapper.html
+.. _deckard: https://gitlab.labs.nic.cz/knot/deckard
-#
-# Integration tests
-#
-
-# Path to scenario files
+# Config
TESTS=tests/integration/sets/resolver
-# Path to daemon
-DAEMON=kresd
-# Template file name
TEMPLATE=template/kresd.j2
-# Config file name
-CONFIG=config
# Targets
deckard_DIR := tests/integration
deckard := $(libfaketime_DIR)/deckard.py
-
libfaketime_DIR := contrib/libfaketime
libfaketime := $(abspath $(libfaketime_DIR))/src/libfaketime$(LIBEXT).1
-
libswrap_DIR := contrib/libswrap
libswrap_cmake_DIR := $(libswrap_DIR)/obj
libswrap=$(abspath $(libswrap_cmake_DIR))/src/libsocket_wrapper$(LIBEXT).0
@git submodule update --init
$(libfaketime_DIR)/Makefile:
@git submodule update --init
-# Build libfaketime contrib
+
+# Build contrib libraries
$(libfaketime): $(libfaketime_DIR)/Makefile
@CFLAGS="" $(MAKE) -C $(libfaketime_DIR)
$(libswrap_DIR):
@git submodule update --init
-$(libswrap_cmake_DIR):$(libswrap_DIR)
- mkdir $(libswrap_cmake_DIR)
+$(libswrap_cmake_DIR): $(libswrap_DIR)
+ @mkdir $(libswrap_cmake_DIR)
$(libswrap_cmake_DIR)/Makefile: $(libswrap_cmake_DIR)
@cd $(libswrap_cmake_DIR); cmake ..
$(libswrap): $(libswrap_cmake_DIR)/Makefile
- @CFLAGS="-O2 -g" $(MAKE) -C $(libswrap_cmake_DIR)
+ @CFLAGS="-O2 -g" $(MAKE) -s -C $(libswrap_cmake_DIR)
+deckard: check-integration
check-integration: $(deckard) $(libswrap) $(libfaketime)
- $(preload_syms) tests/integration/deckard.py $(TESTS) $(DAEMON) $(TEMPLATE) $(CONFIG) $(ADDITIONAL)
+ @$(preload_LIBS) $(preload_syms) python tests/integration/deckard.py $(TESTS) $(abspath daemon/kresd) $(TEMPLATE) config
-.PHONY: check-integration
+.PHONY: deckard check-integration
# Integration tests
ifeq ($(HAS_python)|$(HAS_socket_wrapper), yes|yes)
include tests/integration.mk
-else
-$(warning python or socket_wrapper not found, skipping integration tests)
endif
# Targets
-tests: check-unit check-integration
+tests: check-unit
tests-clean: $(foreach test,$(tests_BIN),$(test)-clean)
.PHONY: tests tests-clean