1#!/bin/sh
2
3errors=0
4umask 0002
5
6DATE="$(date +%s)"
7unset LOGBASEDIR
8if [ -z "$LOGDIR" ]; then
9	LOGBASEDIR=logs
10	LOGDIR=$LOGBASEDIR/$DATE
11	mkdir -p $LOGDIR
12fi
13export LOGDIR
14
15if [ -z "$DBFILE" ]; then
16    DB=""
17else
18    DB="-S $DBFILE"
19    if [ -z "$COMMITID" ]; then
20	COMMITID="$(git rev-parse HEAD)"
21    fi
22    if [ -n "$COMMITID" ]; then
23	DB="$DB --commit $COMMITID"
24    fi
25    if [ -n "$BUILD" ]; then
26	DB="$DB -b $BUILD"
27    fi
28    if [ "$PREFILL_DB" = "y" ] ; then
29        DB="$DB --prefill-tests"
30    fi
31fi
32
33usage()
34{
35	echo "$0 [-v | --valgrind | valgrind] [-t | --trace | trace]"
36	echo "\t[-n <num> | --channels <num>] [-B | --build]"
37	echo "\t[-c | --codecov ] [run-tests.py parameters]"
38	exit 1
39}
40
41unset VALGRIND
42unset TRACE
43unset TRACE_ARGS
44unset RUN_TEST_ARGS
45unset BUILD
46unset BUILD_ARGS
47unset CODECOV
48unset VM
49while [ "$1" != "" ]; do
50	case $1 in
51		-v | --valgrind | valgrind)
52			shift
53			echo "$0: using valgrind"
54			VALGRIND=valgrind
55			;;
56		-t | --trace | trace)
57			shift
58			echo "$0: using Trace"
59			TRACE=trace
60			;;
61		-n | --channels)
62			shift
63			NUM_CH=$1
64			shift
65			echo "$0: using channels=$NUM_CH"
66			;;
67		-B | --build)
68			shift
69			echo "$0: build before running tests"
70			BUILD=build
71			;;
72		-c | --codecov)
73			shift
74			echo "$0: using code coverage"
75			CODECOV=lcov
76			BUILD_ARGS=-c
77			;;
78		-h | --help)
79			usage
80			;;
81		-V | --vm)
82			shift
83			echo "$0: running inside a VM"
84			VM=VM
85			;;
86
87		*)
88			RUN_TEST_ARGS="$RUN_TEST_ARGS$1 "
89			shift
90			;;
91	esac
92done
93
94if [ ! -z "$RUN_TEST_ARGS" ]; then
95	echo "$0: passing the following args to run-tests.py: $RUN_TEST_ARGS"
96fi
97
98unset SUFFIX
99if [ ! -z "$BUILD" ]; then
100	SUFFIX=-build
101fi
102
103if [ ! -z "$VALGRIND" ]; then
104	SUFFIX=$SUFFIX-valgrind
105fi
106
107if [ ! -z "$TRACE" ]; then
108	SUFFIX=$SUFFIX-trace
109	TRACE_ARGS="-T"
110fi
111
112if [ ! -z "$CODECOV" ]; then
113	SUFFIX=$SUFFIX-codecov
114fi
115
116if [ ! -z "$BUILD" ]; then
117    echo "Building with args=$BUILD_ARGS"
118    if ! ./build.sh $BUILD_ARGS; then
119	    echo "Failed building components"
120	    exit 1
121    fi
122fi
123
124if ! ./start.sh $VM $VALGRIND $TRACE channels=$NUM_CH; then
125	if ! [ -z "$LOGBASEDIR" ] ; then
126		echo "Could not start test environment" > $LOGDIR/run
127	fi
128	exit 1
129fi
130
131# Only use sudo if not already root.
132if [ "$(id -u)" != 0 ]; then
133	SUDO=sudo
134else
135	SUDO=
136fi
137${SUDO} env VM=$VM ./run-tests.py -D --logdir "$LOGDIR" $TRACE_ARGS -q $DB $RUN_TEST_ARGS || errors=1
138
139./stop.sh
140
141ps ax > $LOGDIR/after-stop-ps-ax
142netstat -tnlu > $LOGDIR/after-stop-netstat
143
144if [ ! -z "$VALGRIND" ] ; then
145    failures=`grep "ERROR SUMMARY" $LOGDIR/valgrind-* | grep -v " 0 errors" | wc -l`
146    if [ $failures -gt 0 ]; then
147	echo "Mark as failed due to valgrind errors"
148	errors=1
149    fi
150fi
151
152if tail -100 $LOGDIR/auth_serv | grep -q MEMLEAK; then
153    echo "Mark as failed due to authentication server memory leak"
154    errors=1
155fi
156
157if [ ! -z "$CODECOV" ] ; then
158	lcov -q --capture --directory ../../wpa_supplicant --output-file $LOGDIR/wpas_lcov.info
159	genhtml -q $LOGDIR/wpas_lcov.info --output-directory $LOGDIR/wpas_lcov
160	lcov -q --capture --directory ../../hostapd --output-file $LOGDIR/hostapd_lcov.info
161	genhtml -q $LOGDIR/hostapd_lcov.info --output-directory $LOGDIR/hostapd_lcov
162fi
163
164if [ $errors -gt 0 ]; then
165    if [ -z $VM ]; then
166	tar czf /tmp/hwsim-tests-$DATE-FAILED$SUFFIX.tar.gz $LOGDIR/
167    fi
168    exit 1
169fi
170
171echo "ALL-PASSED"
172