1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
# Copyright (c) 2017-2023 Brett Sheffield <bacs@librecast.net>
TESTRUNNER := @TESTRUNNER@
CFLAGS = @CFLAGS@
override CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -I../src -I../include
CPPFLAGS = @CPPFLAGS@
TEST_SOURCES := $(wildcard ????-????.c)
TEST_PROGS ?= $(TEST_SOURCES:.c=.test)
TEST_MULTICAST_Linux := ip route get ff1e:: 2> /dev/null | wc -l
TEST_MULTICAST_FreeBSD := case $$(route -6 get ff1e:: 2> /dev/null) in *REJECT*) echo 0;; *DONE*) echo 1;; *) echo 0 ;; esac
TEST_MULTICAST_NetBSD := case $$(/sbin/route -n get -inet6 ff1e:: 2>/dev/null) in *REJECT*) echo 0;; *DONE*) echo 1;; *) echo 0 ;; esac
TEST_MULTICAST_OpenBSD := case $$(route -n get -inet6 ff1e:: 2> /dev/null) in *REJECT*) echo 0;; *DONE*) echo 1;; *) echo 0 ;; esac
TEST_MULTICAST_OUT = $(shell $(TEST_MULTICAST) || /bin/true)
TEST_MULTICAST = $(TEST_MULTICAST_$(shell uname -s))
LDFLAGS = @LDFLAGS@ -L../src -Wl,-rpath,../src
LDLIBS = @LIBS@
PROGRAM = @PACKAGE_NAME@
NOTOBJS := ../src/$(PROGRAM).o ../src/mdextest.o ../src/arg_share.o
OBJS := test.o testdata.o testnet.o testsync.o $(filter-out $(NOTOBJS), $(wildcard ../src/*.o))
LASTLOG := lastlog.log
LOGFILE := $(shell mktemp "testlog-XXXXXX")
ANSI_RESET = "\033[0m"
ANSI_BOLD := "\033[0m\033[2m"
ANSI_GREEN = "\033[32m"
ANSI_RED = "\033[31m"
ANSI_YELLOW = "\033[33m"
ANSI_WHITE = "\033[37m"
PASS = $(ANSI_RESET)$(ANSI_GREEN)\ OK$(ANSI_RESET)
WARN = $(ANSI_RESET)$(ANSI_YELLOW)WARN$(ANSI_RESET)
FAIL = $(ANSI_RESET)$(ANSI_RED)FAIL$(ANSI_RESET)
UNKN = $(ANSI_RESET)$(ANSI_WHITE)????$(ANSI_RESET)
VALGRIND = valgrind --leak-check=full --max-stackframe=20480160 --error-exitcode=2 --errors-for-leak-kinds=all --track-origins=yes
define runtest =
export HAVE_MULTICAST_ROUTES="$(TEST_MULTICAST_OUT)"
@printf $(ANSI_BOLD)
@echo -n " $(1:.test=) "
@$(MEMCHECK) ./$(1) 2>>$(LOGFILE)
ret=$$?
@if [ $$ret -eq 0 ]; then \
printf $(PASS); echo; \
elif [ $$ret -eq 1 ]; then \
printf $(WARN); echo; \
elif [ $$ret -eq 2 ]; then \
printf $(FAIL); echo; \
fails=$$(( fails + 1 )) ; \
elif [ $$ret -eq 2 ]; then \
printf $(UNKN); echo; \
else \
printf $(FAIL); echo; \
fails=$$(( fails + 1 )) ; \
fi
$(eval tests_run=$(shell echo $$(($(tests_run)+1))))
endef
.PHONY: test clean
test: $(TESTRUNNER)
%.test: %.c $(OBJS)
$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $< $(OBJS) $(LDLIBS)
lctest: $(TEST_PROGS)
lctest -b $^
memcheck:
MEMCHECK="$(VALGRIND)" $(MAKE) test
memcheck/%:
MEMCHECK="$(VALGRIND)" $(MAKE) test/$(@F)
# if $(@F) is a directory, run tests in that directory
test/%:
@if [ -d "$(@F)" ]; then
$(eval TEST_PROGS=$(notdir $(wildcard $(@F)/*.test)))
TEST_PROGS="$(TEST_PROGS)" $(MAKE) maketest
else
$(eval TEST_PROGS=0000-$(@F).test)
TEST_PROGS="$(TEST_PROGS)" $(MAKE) maketest
fi
.ONESHELL: maketest
maketest: $(TEST_PROGS)
@fails=0
$(foreach x,$^,$(call runtest,$(x)))
ln -sf $(LOGFILE) $(LASTLOG)
@echo -e "\n$(TIMESTAMP) - tests done" >> $(LOGFILE)
@echo -e "$(tests_run) tests run"
if [ $$fails -gt 0 ]; then \
echo -n "$$fails tests failed"
fi
@echo -e "\nlogfile: $(LOGFILE)\n"
@if [ $$fails -gt 0 ]; then \
exit 1
fi
clean:
$(RM) -r ????-????.{src,dst}.tmp.??????
$(RM) -r ????-????.test-?????? ????-????.*.tmp.??????
$(RM) *.o *.test *.core testlog-?????? $(LASTLOG)
|