summaryrefslogtreecommitdiffhomepage
path: root/testsuite/runtest
blob: 92cbfdf4eff3f5a9e99abe2669794977e028b190 (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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/bin/sh

# Run old-style test.

run_applet_testcase()
{
	local applet=$1
	local testcase=$2

	local status=0
	local RES=

	local uc_applet=$(echo $applet | tr a-z A-Z)
	local testname=$(basename $testcase)

	if grep -q "^# CONFIG_${uc_applet} is not set$" $bindir/.config; then
		echo UNTESTED: $testname
		return 0
	fi

	if grep -q "^# FEATURE: " $testcase; then
		local feature=`sed -ne 's/^# FEATURE: //p' $testcase`

		if grep -q "^# ${feature} is not set$" $bindir/.config; then
			echo UNTESTED: $testname
			return 0
		fi
	fi

	rm -rf tmp
	mkdir -p tmp
	pushd tmp > /dev/null

#	echo Running testcase $testcase
	d=$tsdir sh -x -e $testcase >.logfile.txt 2>&1 || status=$?

	if [ $status -ne 0 ]; then
		echo FAIL: $testname
		if [ $verbose -gt 0 ]; then
			cat .logfile.txt
		fi
		status=$?
	else
		echo PASS: $testname
		rm -f .logfile.txt
		status=$?
	fi

	popd > /dev/null
	rm -rf tmp

	return $status
}

run_applet_tests()
{
	local applet=$1

	local status=0

	for testcase in $tsdir/$applet/*; do
		if [ "$testcase" = "$tsdir/$applet/CVS" ]; then
			continue
		fi
		if ! run_applet_testcase $applet $testcase; then
			status=1
		fi
	done

	return $status
}


status=0
verbose=0

[ -n "$tsdir" ] || tsdir=$(pwd)
[ -n "$bindir" ] || bindir=$(dirname $(pwd))
PATH="$bindir:$PATH"

if [ x"$1" = x"-v" ]; then
	verbose=1
	export VERBOSE=$verbose
	shift
fi

implemented=$(
	$bindir/busybox 2>&1 |
	while read line; do
		if test x"$line" = x"Currently defined functions:"; then
			xargs | sed 's/,//g'
			break
		fi
	done
	)

applets="$implemented"
if [ $# -ne 0 ]; then
	applets="$@"
fi

# Populate a directory with links to all busybox applets

LINKSDIR="$bindir/runtest-tempdir-links"
rm -rf "$LINKSDIR" 2>/dev/null
mkdir "$LINKSDIR"
for i in $implemented; do
	ln -s $bindir/busybox "$LINKSDIR"/$i
done

# Set up option flags so tests can be selective.

configfile=${bindir}/.config
export OPTIONFLAGS=:$(sed -nr 's/^CONFIG_(.*)=.*/\1/p' $configfile | xargs | sed 's/ /:/g')

for applet in $applets; do
	if [ "$applet" = "links" ]; then continue; fi
	if [ "$applet" != "CVS" -a -d "$tsdir/$applet" ]; then
		if ! run_applet_tests $applet; then
			status=1
		fi
	fi

	# Is this a new-style test?
	if [ -f ${applet}.tests ]; then
		if [ ! -h "$LINKSDIR/$applet" ] && [ "${applet:0:4}" != "all_" ]; then
			echo "SKIPPED: $applet (not built)"
			continue
		fi
		if PATH="$LINKSDIR:$tsdir:$bindir:$PATH" \
				"${tsdir:-.}/$applet".tests
		then
			:
		else
			status=1
		fi
	fi

done

# Leaving the dir makes it somewhat easier to run failed test by hand
#rm -rf "$LINKSDIR"

if [ $status != 0 -a x"$VERBOSE" = x ]; then
	echo "Failures detected, running with VERBOSE=1 will give more info"
fi
exit $status