blob: 2428f6c368c7fabc577b57ceab22f293d0e6188a (
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
151
152
153
154
155
156
157
158
159
|
#!/bin/sh
# Usage:
# runtest [applet1] [applet2...]
. testing.sh
# Run one old-style test.
# Tests are stored in applet/testcase shell scripts.
# They are run using "sh -x -e applet/testcase".
# Option -e will make testcase stop on the first failed command.
run_applet_testcase()
{
local applet="$1"
local testcase="$2"
local status=0
local uc_applet=$(echo "$applet" | tr a-z A-Z)
local testname="$testcase"
testname="${testname##*/}" # take basename
if grep "^# CONFIG_$uc_applet is not set$" "$bindir/.config" >/dev/null; then
echo "UNTESTED: $testname"
return 0
fi
if grep "^# FEATURE: " "$testcase" >/dev/null; then
local feature=$(sed -ne 's/^# FEATURE: //p' "$testcase")
if grep "^# $feature is not set$" "$bindir/.config" >/dev/null; then
echo "UNTESTED: $testname"
return 0
fi
fi
rm -rf ".tmpdir.$applet"
mkdir -p ".tmpdir.$applet"
cd ".tmpdir.$applet" || return 1
# echo "Running testcase $testcase"
d="$tsdir" \
sh -x -e "$testcase" >"$testname.stdout.txt" 2>&1 || status=$?
if [ $status -ne 0 ]; then
echo "FAIL: $testname"
if [ x"$VERBOSE" != x ]; then
cat "$testname.stdout.txt"
fi
else
echo "PASS: $testname"
fi
cd ..
rm -rf ".tmpdir.$applet"
return $status
}
# Run all old-style tests for given applet
run_oldstyle_applet_tests()
{
local applet="$1"
local status=0
for testcase in "$tsdir/$applet"/*; do
# switch on basename of $testcase
case "${testcase##*/}" in
.*) continue ;; # .svn, .git etc
*~) continue ;; # backup files
"CVS") continue ;;
\#*) continue ;; # CVS merge residues
*.mine) continue ;; # svn-produced junk
*.r[0-9]*) continue ;; # svn-produced junk
esac
run_applet_testcase "$applet" "$testcase" || status=1
done
return $status
}
lcwd=$(pwd)
[ x"$tsdir" != x ] || tsdir="$lcwd"
[ x"$bindir" != x ] || bindir="${lcwd%/*}" # one directory up from $lcwd
PATH="$bindir:$PATH"
if [ x"$VERBOSE" = x ]; then
export VERBOSE=
fi
if [ x"$1" = x"-v" ]; then
export VERBOSE=1
shift
fi
implemented=$(
"$bindir/busybox" 2>&1 |
while read line; do
if [ 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"
# Comment this line out if you have put a different binary in $LINKSDIR
# (say, a "standard" tool's binary) in order to run tests against it:
rm -rf "$LINKSDIR" 2>/dev/null
mkdir "$LINKSDIR" 2>/dev/null
for i in $implemented; do
# Note: if $LINKSDIR/applet exists, we do not overwrite it.
# Useful if one wants to run tests against a standard utility,
# not an applet.
ln -s "$bindir/busybox" "$LINKSDIR/$i" 2>/dev/null
done
# Set up option flags so tests can be selective.
export OPTIONFLAGS=:$(
sed -nr 's/^CONFIG_//p' "$bindir/.config" |
sed 's/=.*//' | xargs | sed 's/ /:/g'
)
status=0
for applet in $applets; do
# Any old-style tests for this applet?
if [ -d "$tsdir/$applet" ]; then
run_oldstyle_applet_tests "$applet" || status=1
fi
# Is this a new-style test?
if [ -f "$applet.tests" ]; then
if [ ! -e "$LINKSDIR/$applet" ]; then
# (avoiding bash'ism "${applet:0:4}")
if ! echo "$applet" | grep "^all_" >/dev/null; then
echo "SKIPPED: $applet (not built)"
continue
fi
fi
# echo "Running test $tsdir/$applet.tests"
PATH="$LINKSDIR:$tsdir:$bindir:$PATH" \
"$tsdir/$applet.tests" || status=1
fi
done
# Leaving the dir makes it somewhat easier to run failed test by hand
#rm -rf "$LINKSDIR"
if [ $status -ne 0 ] && [ x"$VERBOSE" = x ]; then
echo "Failures detected, running with -v (verbose) will give more info"
fi
exit $status
|