.PHONY: all tests adj_tests

SHELL := /bin/bash

all: tests

CMD = ../dag_scrubber

adj_tests := ip4_udp.adj-cksum ip4_tcp.adj-cksum ip6_udp.adj-cksum ip6_tcp.adj-cksum

zero_tcp_tests := ip4_tcp.zero-cksum=tcp ip6_tcp.zero-cksum=tcp
zero_udp_tests := ip4_udp.zero-cksum=udp ip6_udp.zero-cksum=udp
zero_all_tests := $(zero_tcp_tests) $(zero_udp_tests)

all_passthru_tests := $(adj_tests) $(zero_all_tests)
all_chop_tests := ip4_tcp.chop ip6_tcp.chop ip4_udp.chop ip6_udp.chop

all_tests := $(all_passthru_tests) $(all_chop_tests)

.PHONY: $(all_tests)

tests:  $(CMD) $(all_tests)
	@echo "All tests succeeded"

P := # options
F := # filter
S := # suffix

$(adj_tests): S=adj-cksum
$(adj_tests): F=-n 'greater 0'

$(zero_all_tests): S=zero-cksum=all
$(zero_all_tests): P=--zero-cksums=all
$(zero_all_tests): F=-n 'greater 0'

$(zero_tcp_tests): S=zero-cksum=tcp
$(zero_tcp_tests): P=--zero-cksums=tcp

$(zero_udp_tests): S=zero-cksum=udp
$(zero_udp_tests): P=--zero-cksums=udp

$(all_chop_tests): S=chop
$(all_chop_tests): P=-c

$(all_tests):
	@echo Running Test: $@
	@$(CMD) -s keyfile $(F) $(P) in/$(patsubst %.$(S),%,$@).pcap >out/$@.out.pcap 2>/dev/null
	@test -e out/$@.pcap || { echo "Reference output doesn't exist, generating out/$@.pcap"; cp out/$@.out.pcap out/$@.pcap; } 
	@diff -q out/$@.pcap out/$@.out.pcap \
		&& { echo "  Succeeded"; rm -f out/$@.out.pcap; } \
		|| { echo "  Failed"; exit 1; }
