# -*- mode: Makefile; -*- ## ----------------------------------------------------------------------------- ## --SECTION-- CONFIGURATION ## ----------------------------------------------------------------------------- FORCE = 0 SKIP_BOOST = 0 SKIP_GEO = 0 SKIP_AHUACATL = 0 SKIP_RANGES = 0 VALGRIND = USERNAME = root PASSWORD = PROTO = http ## ----------------------------------------------------------------------------- ## --SECTION-- UNITTESTS ## ----------------------------------------------------------------------------- ################################################################################ ## unittests target ################################################################################ .PHONY: unittests unittests-brief unittests-verbose unittests: all unittests-verbose unittests-brief unittests-brief: \ unittests-make \ unittests-boost \ unittests-shell-server \ unittests-shell-server-ahuacatl \ unittests-http-server \ unittests-ssl-server \ unittests-shell-client \ unittests-arangob \ unittests-import unittests-verbose: @echo "################################################################################" @echo "## ##" @echo "## ArangoDB Unit-Tests ##" @echo "## ##" @echo "## > make unittests ##" @echo "## > make unittests FORCE=1 ##" @echo "## > make unittests SKIP_BOOST=1 ##" @echo "## > make unittests SKIP_GEO=1 ##" @echo "## > make unittests SKIP_AHUACATL=1 ##" @echo "## > make unittests SKIP_RANGES=1 ##" @echo "## > make unittests VALGRIND=valgrind ##" @echo "## ##" @echo "################################################################################" @echo @sleep 1 ################################################################################ ## start the arango server ################################################################################ PID := $(shell echo $$PPID) PIDFILE := /tmp/arango.$(PID).pid VOCDIR := /tmp/vocdir.$(PID) VOCPORT := $(shell printf "3%04d" `expr $(PID) % 10000`) VOCHOST := 127.0.0.1 STARTFILE := $(VOCDIR)/startup CURL := curl CURL_OPT := --basic --user "$(USERNAME):$(PASSWORD)" CERT_FILE := @top_srcdir@/UnitTests/server.pem SERVER_START := SERVER_OPT := \ --configuration none \ --database.maximal-journal-size 1048576 \ --database.force-sync-shapes false \ --javascript.action-directory @top_srcdir@/js/actions/system \ --javascript.gc-interval 1 \ --javascript.modules-path @top_srcdir@/js/server/modules:@top_srcdir@/js/common/modules \ --javascript.startup-directory @top_srcdir@/js \ --ruby.action-directory @top_srcdir@/mr/actions/system \ --ruby.modules-path @top_srcdir@/mr/server/modules:@top_srcdir@/mr/common/modules \ --server.threads 4 \ --server.admin-directory ./html/admin \ $(SERVER_START) CLIENT_OPT := \ --configuration none \ --javascript.startup-directory @top_srcdir@/js \ --javascript.modules-path @top_srcdir@/js/client/modules:@top_srcdir@/js/common/modules \ --no-colors \ --quiet .PHONY: start-server start-server: @echo @echo "================================================================================" @(test "$(PROTO)" == "http" && echo "<< STARTING SERVER ON TCP ENDPOINT >>") || true @(test "$(PROTO)" == "https" && echo "<< STARTING SERVER ON SSL ENDPOINT >>") || true @(test "$(PROTO)" == "unix" && echo "<< STARTING SERVER ON UNIX SOCKET ENDPOINT >>") || true @echo "================================================================================" @echo @echo "Server Options: $(SERVER_OPT)" @echo rm -f "$(PIDFILE)" rm -rf "$(VOCDIR)" mkdir -p "$(VOCDIR)" @test -d "$(VOCDIR)" @builddir@/bin/arango-upgrade --relative --database.directory "$(VOCDIR)" ($(VALGRIND) @builddir@/bin/arangod "$(VOCDIR)" $(SERVER_OPT) --pid-file $(PIDFILE) --watch-process $(PID) && rm -rf "$(VOCDIR)") & @test "$(PROTO)" == "unix" || (rm -f "$(STARTFILE)"; while [ ! -s "$(STARTFILE)" ]; do $(CURL) $(CURL_OPT) --insecure -X GET -s "$(PROTO)://$(VOCHOST):$(VOCPORT)/_api/version" > "$(STARTFILE)" || sleep 2; done) @(test "$(PROTO)" == "unix" && sleep 5) || true @rm -f "$(STARTFILE)" @echo "server has been started." @if [ "$(VALGRIND)" != "" ]; then echo "adding valgrind memorial time..."; sleep 75; else sleep 2; fi @echo ################################################################################ ## COMMON MAKE-RELATED TESTS ################################################################################ .PHONY: unittests-make unittests-make: @(ctags --version > /dev/null 2> /dev/null && make tags > /dev/null || test "x$(FORCE)" == "x1") || true ################################################################################ ## BOOST TESTS ################################################################################ .PHONY: unittests-boost if ENABLE_MAINTAINER_MODE unittests-boost: UnitTests/basics_suite UnitTests/geo_suite @echo @echo "================================================================================" @echo "<< BOOST TESTS >>" @echo "================================================================================" @echo test "x$(SKIP_BOOST)" == "x1" || $(VALGRIND) @builddir@/UnitTests/basics_suite --show_progress || test "x$(FORCE)" == "x1" test "x$(SKIP_GEO)" == "x1" || $(VALGRIND) @builddir@/UnitTests/geo_suite --show_progress || test "x$(FORCE)" == "x1" @echo noinst_PROGRAMS += UnitTests/basics_suite UnitTests/geo_suite UnitTests_basics_suite_LDADD = -L@top_builddir@/lib -larango -lboost_unit_test_framework UnitTests_basics_suite_DEPENDENCIES = @top_builddir@/lib/libarango.a UnitTests_basics_suite_SOURCES = \ UnitTests/Runner.cpp \ UnitTests/Philadelphia/csv-test.cpp \ UnitTests/Philadelphia/json-test.cpp \ UnitTests/Philadelphia/json-utilities-test.cpp \ UnitTests/Philadelphia/hashes-test.cpp \ UnitTests/Philadelphia/mersenne-test.cpp \ UnitTests/Philadelphia/associative-pointer-test.cpp \ UnitTests/Philadelphia/string-buffer-test.cpp \ UnitTests/Philadelphia/string-utf8-normalize-test.cpp \ UnitTests/Philadelphia/string-utf8-test.cpp \ UnitTests/Philadelphia/string-test.cpp \ UnitTests/Philadelphia/vector-pointer-test.cpp \ UnitTests/Philadelphia/vector-test.cpp \ UnitTests/Jutland/EndpointTest.cpp \ UnitTests/Jutland/StringBufferTest.cpp \ UnitTests/Jutland/StringUtilsTest.cpp UnitTests_geo_suite_CPPFLAGS = -I@top_srcdir@/arangod -I@top_builddir@/lib -I@top_srcdir@/lib UnitTests_geo_suite_LDADD = -L@top_builddir@/lib -larango -lboost_unit_test_framework UnitTests_geo_suite_DEPENDENCIES = @top_builddir@/lib/libarango.a UnitTests_geo_suite_SOURCES = \ UnitTests/Cambridge/Runner.cpp \ UnitTests/Cambridge/georeg.cpp \ arangod/GeoIndex/GeoIndex.c else unittests-boost: @echo @echo "================================================================================" @echo "<< BOOST TESTS >>" @echo "================================================================================" @echo @echo "to enable unit-testing, configure with --enable-maintainer-mode" @echo endif ################################################################################ ## SHELL SERVER TESTS (BASICS) ################################################################################ SHELL_COMMON = @top_srcdir@/js/common/tests/shell-document.js \ @top_srcdir@/js/common/tests/shell-edge.js \ @top_srcdir@/js/common/tests/shell-compactor.js \ @top_srcdir@/js/common/tests/shell-collection.js \ @top_srcdir@/js/common/tests/shell-simple-query.js \ @top_srcdir@/js/common/tests/shell-statement.js \ @top_srcdir@/js/common/tests/shell-index.js \ @top_srcdir@/js/common/tests/shell-index-geo.js \ @top_srcdir@/js/common/tests/shell-cap-constraint.js \ @top_srcdir@/js/common/tests/shell-unique-constraint.js \ @top_srcdir@/js/common/tests/shell-hash-index.js SHELL_SERVER = $(SHELL_COMMON) \ @top_srcdir@/js/common/tests/shell-graph.js \ @top_srcdir@/js/common/tests/shell-graph-algorithms.js \ @top_srcdir@/js/common/tests/shell-graph-measurement.js .PHONY: unittests-shell-server UNITTESTS_SERVER = $(addprefix --javascript.unit-tests ,$(SHELL_SERVER)) unittests-shell-server: @echo @echo "================================================================================" @echo "<< SHELL SERVER TESTS (BASICS) >>" @echo "================================================================================" @echo @rm -rf "$(VOCDIR)" @mkdir "$(VOCDIR)" @builddir@/bin/arango-upgrade --relative --database.directory "$(VOCDIR)" $(VALGRIND) @builddir@/bin/arangod "$(VOCDIR)" $(SERVER_OPT) $(UNITTESTS_SERVER) || test "x$(FORCE)" == "x1" @rm -rf "$(VOCDIR)" @echo ################################################################################ ## SHELL SERVER TESTS (AHUACATL) ################################################################################ SHELL_SERVER_AHUACATL = @top_srcdir@/js/server/tests/ahuacatl-ranges.js \ @top_srcdir@/js/server/tests/ahuacatl-queries-optimiser.js \ @top_srcdir@/js/server/tests/ahuacatl-queries-optimiser-ref.js \ @top_srcdir@/js/server/tests/ahuacatl-escaping.js \ @top_srcdir@/js/server/tests/ahuacatl-functions.js \ @top_srcdir@/js/server/tests/ahuacatl-variables.js \ @top_srcdir@/js/server/tests/ahuacatl-bind.js \ @top_srcdir@/js/server/tests/ahuacatl-complex.js \ @top_srcdir@/js/server/tests/ahuacatl-logical.js \ @top_srcdir@/js/server/tests/ahuacatl-arithmetic.js \ @top_srcdir@/js/server/tests/ahuacatl-relational.js \ @top_srcdir@/js/server/tests/ahuacatl-ternary.js \ @top_srcdir@/js/server/tests/ahuacatl-parse.js \ @top_srcdir@/js/server/tests/ahuacatl-hash.js \ @top_srcdir@/js/server/tests/ahuacatl-skiplist.js \ @top_srcdir@/js/server/tests/ahuacatl-refaccess-variable.js \ @top_srcdir@/js/server/tests/ahuacatl-refaccess-attribute.js \ @top_srcdir@/js/server/tests/ahuacatl-queries-simple.js \ @top_srcdir@/js/server/tests/ahuacatl-queries-variables.js \ @top_srcdir@/js/server/tests/ahuacatl-queries-geo.js \ @top_srcdir@/js/server/tests/ahuacatl-queries-collection.js \ @top_srcdir@/js/server/tests/ahuacatl-queries-noncollection.js \ @top_srcdir@/js/server/tests/ahuacatl-subquery.js \ @top_srcdir@/js/server/tests/ahuacatl-operators.js SHELL_SERVER_AHUACATL_EXTENDED = \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-1.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-2.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-3.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-4.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-5.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-6.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-7.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-8.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-9.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-10.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-11.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-12.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-13.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-14.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-15.js \ @top_srcdir@/js/server/tests/ahuacatl-ranges-combined-16.js .PHONY: unittests-shell-server-ahuacatl UNITTESTS_SERVER_AHUACATL = $(addprefix --javascript.unit-tests ,$(SHELL_SERVER_AHUACATL)) UNITTESTS_SERVER_AHUACATL_EXTENDED = $(addprefix --javascript.unit-tests ,$(SHELL_SERVER_AHUACATL_EXTENDED)) unittests-shell-server-ahuacatl: @echo @echo "================================================================================" @echo "<< SHELL SERVER TESTS (AHUACATL) >>" @echo "================================================================================" @echo @rm -rf "$(VOCDIR)" @mkdir "$(VOCDIR)" @test "x$(SKIP_AHUACATL)" == "x1" || @builddir@/bin/arango-upgrade --relative --database.directory "$(VOCDIR)" @test "x$(SKIP_AHUACATL)" == "x1" || $(VALGRIND) @builddir@/bin/arangod "$(VOCDIR)" $(SERVER_OPT) $(UNITTESTS_SERVER_AHUACATL) || test "x$(FORCE)" == "x1" @test "x$(SKIP_AHUACATL)" == "x1" || test "x$(SKIP_RANGES)" == "x1" || $(VALGRIND) @builddir@/bin/arangod "$(VOCDIR)" $(SERVER_OPT) $(UNITTESTS_SERVER_AHUACATL_EXTENDED) || test "x$(FORCE)" == "x1" @rm -rf "$(VOCDIR)" @echo ################################################################################ ## SHELL CLIENT TESTS ################################################################################ SHELL_CLIENT = $(SHELL_COMMON) @top_srcdir@/js/client/tests/client.js .PHONY: unittests-shell-client UNITTESTS_CLIENT = $(addprefix --javascript.unit-tests ,$(SHELL_CLIENT)) unittests-shell-client: $(MAKE) start-server PID=$(PID) SERVER_START="--server.endpoint unix://$(VOCDIR)/arango.sock --server.disable-authentication true" PROTO=unix @echo @echo "================================================================================" @echo "<< SHELL CLIENT TESTS >>" @echo "================================================================================" @echo $(VALGRIND) @builddir@/bin/arangosh $(CLIENT_OPT) --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock $(UNITTESTS_CLIENT) || test "x$(FORCE)" == "x1" kill `cat $(PIDFILE)` while test -f $(PIDFILE); do sleep 1; done @if [ "$(VALGRIND)" != "" ]; then sleep 60; fi @rm -rf "$(VOCDIR)" @echo ################################################################################ ## HTTP SERVER TESTS ################################################################################ .PHONY: unittests-http-server unittests-http-server: $(MAKE) start-server PID=$(PID) SERVER_START="--server.endpoint tcp://$(VOCHOST):$(VOCPORT) --server.disable-auth true" PROTO=http @echo @echo "================================================================================" @echo "<< HTTP SERVER TESTS >>" @echo "================================================================================" @echo cd @top_srcdir@/UnitTests/HttpInterface && ARANGO_SERVER="$(VOCHOST):$(VOCPORT)" ARANGO_SSL=0 ARANGO_USER="$(USERNAME)" ARANGO_PASSWORD="$(PASSWORD)" ./run-tests || test "x$(FORCE)" == "x1" kill `cat $(PIDFILE)` while test -f $(PIDFILE); do sleep 1; done @if [ "$(VALGRIND)" != "" ]; then sleep 60; fi @rm -rf "$(VOCDIR)" @echo ################################################################################ ## SSL SERVER TESTS (same as HTTP SERVER TESTS but using SSL) ################################################################################ .PHONY: unittests-ssl-server unittests-ssl-server: $(MAKE) start-server PID=$(PID) SERVER_START="--server.endpoint ssl://$(VOCHOST):$(VOCPORT) --server.keyfile $(CERT_FILE) --server.disable-auth true" PROTO=https @echo @echo "================================================================================" @echo "<< SSL SERVER TESTS (same as HTTP SERVER TESTS but using SSL) >>" @echo "================================================================================" @echo cd @top_srcdir@/UnitTests/HttpInterface && ARANGO_SERVER="$(VOCHOST):$(VOCPORT)" ARANGO_SSL=1 ARANGO_USER="$(USERNAME)" ARANGO_PASSWORD="$(PASSWORD)" ./run-tests || test "x$(FORCE)" == "x1" kill `cat $(PIDFILE)` while test -f $(PIDFILE); do sleep 1; done @if [ "$(VALGRIND)" != "" ]; then sleep 60; fi @rm -rf "$(VOCDIR)" @echo ################################################################################ ## IMPORT TESTS ################################################################################ .PHONY: unittests-import unittests-import: $(MAKE) start-server PID=$(PID) SERVER_START="--server.endpoint unix://$(VOCDIR)/arango.sock --server.disable-authentication true" PROTO=unix @echo @echo "================================================================================" @echo "<< IMPORT TESTS >>" @echo "================================================================================" @echo $(VALGRIND) @builddir@/bin/arangosh $(CLIENT_OPT) --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --javascript.unit-tests @top_srcdir@/js/server/tests/import-setup.js || test "x$(FORCE)" == "x1" for i in 1 2; do $(VALGRIND) @builddir@/bin/arangoimp --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --file UnitTests/import-$$i.json --collection UnitTestsImportJson$$i --type json || test "x$(FORCE)" == "x1"; done for i in 1 2; do $(VALGRIND) @builddir@/bin/arangoimp --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --file UnitTests/import-$$i.csv --collection UnitTestsImportCsv$$i --create-collection true --type csv || test "x$(FORCE)" == "x1"; done for i in 1 2; do $(VALGRIND) @builddir@/bin/arangoimp --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --file UnitTests/import-$$i.tsv --collection UnitTestsImportTsv$$i --create-collection true --type tsv --eol "\r\n" || test "x$(FORCE)" == "x1"; done $(VALGRIND) @builddir@/bin/arangosh $(CLIENT_OPT) --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --javascript.unit-tests @top_srcdir@/js/server/tests/import.js || test "x$(FORCE)" == "x1" $(VALGRIND) @builddir@/bin/arangosh $(CLIENT_OPT) --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --javascript.unit-tests @top_srcdir@/js/server/tests/import-teardown.js || test "x$(FORCE)" == "x1" kill `cat $(PIDFILE)` while test -f $(PIDFILE); do sleep 1; done @if [ "$(VALGRIND)" != "" ]; then sleep 60; fi @rm -rf "$(VOCDIR)" @echo ################################################################################ ## BITARRAY INDEXES TESTS ################################################################################ BITARRAY_COMMON = @top_srcdir@/js/common/tests/shell-bitarray-index.js .PHONY: unittests-bitarray-index UNITTESTS_SERVER_BITARRAY = $(addprefix --javascript.unit-tests ,$(BITARRAY_COMMON)) unittests-bitarray-index: @echo @echo "================================================================================" @echo "<< BITARRAY INDEX TESTS >>" @echo "================================================================================" @echo @rm -rf "$(VOCDIR)" @mkdir "$(VOCDIR)" @builddir@/bin/arango-upgrade --relative --database.directory "$(VOCDIR)" $(VALGRIND) @builddir@/bin/arangod "$(VOCDIR)" $(SERVER_OPT) $(UNITTESTS_SERVER_BITARRAY) || test "x$(FORCE)" == "x1" @ rm -rf "$(VOCDIR)" @echo ################################################################################ ## ARANGOB TESTS ################################################################################ .PHONY: unittests-arangob if ENABLE_ARANGOB unittests-arangob: $(MAKE) start-server PID=$(PID) SERVER_START="--server.endpoint unix://$(VOCDIR)/arango.sock --server.disable-authentication true" PROTO=unix @echo @echo "================================================================================" @echo "<< ARANGOB TESTS >>" @echo "================================================================================" @echo $(VALGRIND) @builddir@/bin/arangob --configuration none --quiet --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --requests 1000 --batch-size 16 --concurrency 2 --test version || test "x$(FORCE)" == "x1" $(VALGRIND) @builddir@/bin/arangob --configuration none --quiet --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --requests 100 --batch-size 0 --concurrency 1 --test version || test "x$(FORCE)" == "x1" $(VALGRIND) @builddir@/bin/arangob --configuration none --quiet --server.username "$(USERNAME)" --server.password "$(PASSWORD)" --server.endpoint unix://$(VOCDIR)/arango.sock --requests 100 --batch-size 10 --concurrency 2 --test document --complexity 1 || test "x$(FORCE)" == "x1" kill `cat $(PIDFILE)` while test -f $(PIDFILE); do sleep 1; done @if [ "$(VALGRIND)" != "" ]; then sleep 60; fi @rm -rf "$(VOCDIR)" @echo else unittests-arangob: @echo endif