From 3f3114921d643d347c8c9ad1e85de07d101c3e9f Mon Sep 17 00:00:00 2001 From: Dirk Engling Date: Mon, 2 Nov 2026 17:02:39 +0100 Subject: Split the Makefile into Mk fragments and fix the default target --- Mk/tests.mk | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Mk/tests.mk (limited to 'Mk/tests.mk') diff --git a/Mk/tests.mk b/Mk/tests.mk new file mode 100644 index 0000000..d542044 --- /dev/null +++ b/Mk/tests.mk @@ -0,0 +1,72 @@ +BUILDDEPS+=Mk/tests.mk + +# The modules under test are compiled straight into the test binary, so a test +# may reach a static function by including the source. tests/stubs.c supplies +# the few symbols those modules reference but the tests never reach. +TESTBIN=tests/runner +TEST_SOURCES=tests/runner.c tests/test.c tests/stubs.c tests/t_urlencoded.c tests/t_iovec.c tests/t_vector.c tests/t_random.c tests/t_hex.c tests/t_accesslist.c tests/t_scan.c tests/t_buf.c tests/t_ip.c tests/t_socket.c tests/t_mutex.c tests/t_trackerlogic.c tests/t_workqueue.c tests/t_batch.c tests/t_fdstate.c tests/t_event.c tests/t_fmt.c +TEST_UNITS=ot_urlencoded.c ot_fmt.c ot_event.c ot_batch.c ot_fdstate.c ot_buf.c ot_ip.c ot_socket.c ot_iovec.c ot_vector.c ot_random.c ot_hex.c ot_scan.c ot_accesslist.c ot_mutex.c ot_workqueue.c trackerlogic.c +TEST_HEADERS=tests/test.h $(HEADERS) + +# A test binary is not a production binary, so it is built with the features +# the tests need to reach. +FEATURES_test=$(FEATURES) -DWANT_ACCESSLIST_BLACK -DWANT_SYNC_LIVE +CFLAGS_test=$(CFLAGS) -I. -g -O1 $(FEATURES_test) + +# clang over $(CC) because the two toolchains do not check the same things. +CC_sanitize?=clang +CFLAGS_sanitize=$(CFLAGS_test) -fsanitize=address,undefined -fno-omit-frame-pointer +LDFLAGS_sanitize=$(LDFLAGS) -fsanitize=address,undefined + +# Black box tests drive the real binary over the wire, so they cover the event +# loop and the parsers working together. The client timeout is cut right down +# so a test can reach the expiry sweep; tests/integration/test_expiry.py +# mirrors these two numbers. +PYTHON?=python3 +FEATURES_integration=$(FEATURES) -DWANT_IP_FROM_QUERY_STRING -DWANT_ACCESSLIST_BLACK -DWANT_DYNAMIC_ACCESSLIST -DWANT_KEEPALIVE -DOT_CLIENT_TIMEOUT=5 -DOT_CLIENT_TIMEOUT_CHECKINTERVAL=1 +CFLAGS_integration=$(CFLAGS) $(OPTS_debug) $(FEATURES_integration) -fsanitize=address,undefined -fno-omit-frame-pointer +LDFLAGS_integration=$(LDFLAGS) -fsanitize=address,undefined +CFLAGS_tsan=$(CFLAGS) $(OPTS_debug) $(FEATURES_integration) -fsanitize=thread -fno-omit-frame-pointer +LDFLAGS_tsan=$(LDFLAGS) -fsanitize=thread + +BINARIES+=$(TESTBIN) $(TESTBIN).poll $(TESTBIN).sanitize opentracker.integration opentracker.tsan + +$(TESTBIN): $(TEST_SOURCES) $(TEST_UNITS) $(TEST_HEADERS) $(BUILDDEPS) + $(CC) -o $@ $(CFLAGS_test) $(TEST_SOURCES) $(TEST_UNITS) + +$(TESTBIN).poll: $(TEST_SOURCES) $(TEST_UNITS) $(TEST_HEADERS) $(BUILDDEPS) + $(CC) -o $@ $(CFLAGS_test) -DOT_EVENT_FORCE_POLL $(TEST_SOURCES) $(TEST_UNITS) + +$(TESTBIN).sanitize: $(TEST_SOURCES) $(TEST_UNITS) $(TEST_HEADERS) $(BUILDDEPS) + $(CC_sanitize) -o $@ $(CFLAGS_sanitize) $(TEST_SOURCES) $(TEST_UNITS) $(LDFLAGS_sanitize) + +opentracker.integration: $(SOURCES) $(HEADERS) $(BUILDDEPS) + $(CC) -o $@ $(CFLAGS_integration) $(SOURCES) $(LDFLAGS_integration) + +opentracker.tsan: $(SOURCES) $(HEADERS) $(BUILDDEPS) + $(CC) -o $@ $(CFLAGS_tsan) $(SOURCES) $(LDFLAGS_tsan) + +check: $(TESTBIN) $(BINARY) + ./$(TESTBIN) + +check-poll: $(TESTBIN).poll + ./$(TESTBIN).poll ot_event + +check-sanitize: $(TESTBIN).sanitize + ./$(TESTBIN).sanitize + +check-integration: opentracker.integration + OPENTRACKER=./opentracker.integration $(PYTHON) -m unittest discover -s tests/integration + +check-tsan: opentracker.tsan + OPENTRACKER=./opentracker.tsan $(PYTHON) -m unittest discover -s tests/integration + +# Cheapest first, so a quick failure comes back quickly. +check-all: + $(MAKE) check + $(MAKE) check-poll + $(MAKE) check-sanitize + $(MAKE) check-integration + $(MAKE) check-tsan + +.PHONY: check check-poll check-sanitize check-integration check-tsan check-all -- cgit v1.3