summaryrefslogtreecommitdiffhomepage
path: root/testsuite/runtest
blob: 279f51fbd17b1a81f4239f4eb9c130f72699c21d (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
148
149
150
#!/bin/sh

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

# 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

	d=$srcdir 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 $srcdir/$applet/*; do
		if [ "$testcase" = "$srcdir/$applet/CVS" ]; then
			continue
		fi

		if run_applet_testcase $applet $testcase; then
			:
		else
			status=1
		fi
	done

	return $status
}


status=0
verbose=0

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

if [ $# -ne 0 ]; then
	applets=$(cd $srcdir ; for i in $@; do ls ${i}* ; done)
else
	applets=$(ls $srcdir)
fi

# Populate a directory with links to all busybox applets

LINKSDIR="$bindir/runtest-tempdir-links"
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
	)
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=:$(echo $(sed -nr 's/^CONFIG_(.*)=.*/\1/p' $configfile) | sed 's/ /:/g')

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

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

done
rm -rf "$LINKSDIR"
exit $status