aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/Makefile
blob: 2027650051d48a451d5c02f776d6427416d6c237 (plain)
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
## -- Config --
DEV := lo
PREFIX := sudo -E unshare -n
RESULTS_DIR := results
## -- End Config --

HAVE_UNSHARED_UTIL := $(shell unshare --version 2> /dev/null)

rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))

TESTS := $(patsubst tests/%,%,$(call rwildcard,tests/,*.t))
TESTS_DIR := $(dir $(TESTS))

IPVERS := $(filter-out iproute2/Makefile,$(wildcard iproute2/*))

ifneq (,$(wildcard /proc/config.gz))
	KENV := $(shell cat /proc/config.gz | gunzip | grep ^CONFIG)
endif

.PHONY: compile listtests alltests configure $(TESTS)

configure:
	echo "Entering iproute2" && cd iproute2 && $(MAKE) configure && cd ..;

compile: configure
	echo "Entering iproute2" && cd iproute2 && $(MAKE) && cd ..;

listtests:
	@for t in $(TESTS); do \
		echo "$$t"; \
	done

alltests: $(TESTS)

clean:
	@echo "Removing $(RESULTS_DIR) dir ..."
	@rm -rf $(RESULTS_DIR)

distclean: clean
	echo "Entering iproute2" && cd iproute2 && $(MAKE) distclean && cd ..;

$(TESTS): clean
ifeq (,$(HAVE_UNSHARED_UTIL))
	$(error Please install util-linux tools to run tests in separated network namespace)
endif
	@mkdir -p $(RESULTS_DIR)
	
	@for d in $(TESTS_DIR); do \
	    mkdir -p $(RESULTS_DIR)/$$d; \
	done
	
	@for i in $(IPVERS); do \
		o=`echo $$i | sed -e 's/iproute2\///'`; \
		echo -n "Running $@ [$$o/`uname -r`]: "; \
		TMP_ERR=`mktemp /tmp/tc_testsuite.XXXXXX`; \
		TMP_OUT=`mktemp /tmp/tc_testsuite.XXXXXX`; \
		STD_ERR="$$TMP_ERR" STD_OUT="$$TMP_OUT" \
		TC="$$i/tc/tc" IP="$$i/ip/ip" DEV="$(DEV)" IPVER="$@" SNAME="$$i" \
		ERRF="$(RESULTS_DIR)/$@.$$o.err" $(KENV) $(PREFIX) tests/$@ > $(RESULTS_DIR)/$@.$$o.out; \
		if [ "$$?" = "127" ]; then \
			echo "SKIPPED"; \
		elif [ -e "$(RESULTS_DIR)/$@.$$o.err" ]; then \
			echo "FAILED"; \
		else \
			echo "PASS"; \
		fi; \
		rm "$$TMP_ERR" "$$TMP_OUT"; \
		dmesg > $(RESULTS_DIR)/$@.$$o.dmesg; \
	done