aboutsummaryrefslogtreecommitdiff
path: root/tests/do.sh.in
blob: d04b483b69bc2f1b8ae0614b7cab67294059476c (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
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
#!/bin/sh

cd "$(dirname "${0}")"

FUZZY_TESTING_ENABLED=@BUILD_FUZZTARGETS@
if [ "$NDPI_DISABLE_FUZZY" = "1" ]; then
   FUZZY_TESTING_ENABLED=0
fi

#Remember: valgrind and *SAN are incompatible!
VALGRIND=""
if [ "$NDPI_TESTS_VALGRIND" = "1" ]; then
   VALGRIND="valgrind -q --leak-check=full"
fi

GCRYPT_ENABLED=@GCRYPT_ENABLED@
PCRE_ENABLED=@PCRE_ENABLED@
PCRE_PCAPS="WebattackRCE.pcap"
GCRYPT_PCAPS="gquic.pcap quic-23.pcap quic-24.pcap quic-27.pcap quic-28.pcap quic-29.pcap quic-mvfst-22.pcap quic-mvfst-27.pcapng quic-mvfst-exp.pcap quic_q50.pcap quic_t50.pcap quic_t51.pcap quic_0RTT.pcap quic_interop_V.pcapng quic-33.pcapng doq.pcapng doq_adguard.pcapng dlt_ppp.pcap os_detected.pcapng quic_frags_ch_out_of_order_same_packet_craziness.pcapng quic_frags_ch_in_multiple_packets.pcapng"
READER="$VALGRIND ../example/ndpiReader -p ../example/protos.txt -c ../example/categories.txt -r ../example/risky_domains.txt -j ../example/ja3_fingerprints.csv -S ../example/sha1_fingerprints.csv"

RC=0
PCAPS=`cd pcap; /bin/ls *.pcap *.pcapng`

if [ ! -x "../example/ndpiReader" ]; then
  echo "$0: Missing $(realpath ../example/ndpiReader)"
  echo "$0: Run ./configure and make first"
  exit 1
fi

fuzzy_testing() {
    if [ -f ../fuzz/fuzz_ndpi_reader ]; then
	../fuzz/fuzz_ndpi_reader -max_total_time="${MAX_TOTAL_TIME:-592}" -print_pcs=1 -workers="${FUZZY_WORKERS:-0}" -jobs="${FUZZY_JOBS:-0}" pcap/
    fi
}

build_results() {
    for f in $PCAPS; do
	#echo $f
	# create result files if not present
	if [ ! -f result/$f.out ]; then
	    CMD="$READER -q -t -i pcap/$f -w result/$f.out -v 2"
	    $CMD
	fi
    done
}

check_results() {
	for f in $PCAPS; do
	    if [ -n "$*" ]; then
	    	SKIP_PCAP=1
		for i in $* ; do [ "$f" = "$i" ] && SKIP_PCAP=0 && break ; done
		[ $SKIP_PCAP = 1 ] && continue
	    fi
	    SKIP_PCAP=0
	    if [ $GCRYPT_ENABLED -eq 0 ]; then
	      for g in $GCRYPT_PCAPS; do
	        if [ $f = $g ]; then
	          SKIP_PCAP=1
	          break
	        fi
	      done
	    fi
	    if [ $PCRE_ENABLED -eq 0 ]; then
	      for p in $PCRE_PCAPS; do
	        if [ $f = $p ]; then
	          SKIP_PCAP=1
	          break
	        fi
	      done
	    fi
	    if [ $SKIP_PCAP -eq 1 ]; then
	        printf "%-32s\tSKIPPED\n" "$f"
	        continue
	    fi

	if [ -f result/$f.out ]; then
	    CMD="$READER -q -t -i pcap/$f -w /tmp/reader.out -v 2"
	    $CMD
	    NUM_DIFF=`diff result/$f.out /tmp/reader.out | wc -l`

	    if [ $NUM_DIFF -eq 0 ]; then
		printf "%-48s\tOK\n" "$f"
	    else
		printf "%-48s\tERROR\n" "$f"
		echo "$CMD [old vs new]"
		diff result/$f.out /tmp/reader.out
		RC=1
	    fi

	    /bin/rm /tmp/reader.out
	fi
    done
}

if [ $FUZZY_TESTING_ENABLED -eq 1 ]; then
    fuzzy_testing
fi
build_results
check_results $*

exit $RC