Annotation of /trunk/mkinitrd-magellan/busybox/testsuite/testing.sh
Parent Directory
|
Revision Log
Revision 816 -
(hide annotations)
(download)
(as text)
Fri Apr 24 18:33:46 2009 UTC (15 years, 1 month ago) by niro
File MIME type: application/x-sh
File size: 3649 byte(s)
Fri Apr 24 18:33:46 2009 UTC (15 years, 1 month ago) by niro
File MIME type: application/x-sh
File size: 3649 byte(s)
-updated to busybox-1.13.4
1 | niro | 532 | # Simple test harness infrastructurei for BusyBox |
2 | # | ||
3 | # Copyright 2005 by Rob Landley | ||
4 | # | ||
5 | # License is GPLv2, see LICENSE in the busybox tarball for full license text. | ||
6 | |||
7 | niro | 816 | # This file defines two functions, "testing" and "optional" |
8 | # and a couple more... | ||
9 | niro | 532 | |
10 | # The following environment variables may be set to enable optional behavior | ||
11 | # in "testing": | ||
12 | # VERBOSE - Print the diff -u of each failed test case. | ||
13 | # DEBUG - Enable command tracing. | ||
14 | niro | 816 | # SKIP - do not perform this test (this is set by "optional") |
15 | niro | 532 | # |
16 | # The "testing" function takes five arguments: | ||
17 | niro | 816 | # $1) Test description |
18 | # $2) Command(s) to run. May have pipes, redirects, etc | ||
19 | # $3) Expected result on stdout | ||
20 | # $4) Data to be written to file "input" | ||
21 | # $5) Data to be written to stdin | ||
22 | niro | 532 | # |
23 | niro | 816 | # The exit value of testing is the exit value of $2 it ran. |
24 | niro | 532 | # |
25 | # The environment variable "FAILCOUNT" contains a cumulative total of the | ||
26 | # number of failed tests. | ||
27 | |||
28 | # The "optional" function is used to skip certain tests, ala: | ||
29 | niro | 816 | # optional CONFIG_FEATURE_THINGY |
30 | niro | 532 | # |
31 | # The "optional" function checks the environment variable "OPTIONFLAGS", | ||
32 | # which is either empty (in which case it always clears SKIP) or | ||
33 | # else contains a colon-separated list of features (in which case the function | ||
34 | # clears SKIP if the flag was found, or sets it to 1 if the flag was not found). | ||
35 | |||
36 | export FAILCOUNT=0 | ||
37 | export SKIP= | ||
38 | |||
39 | # Helper functions | ||
40 | |||
41 | optional() | ||
42 | { | ||
43 | niro | 816 | option=`echo ":$OPTIONFLAGS:" | grep ":$1:"` |
44 | niro | 532 | # Not set? |
45 | if [ -z "$1" ] || [ -z "$OPTIONFLAGS" ] || [ ${#option} -ne 0 ] | ||
46 | then | ||
47 | niro | 816 | SKIP= |
48 | niro | 532 | return |
49 | fi | ||
50 | SKIP=1 | ||
51 | } | ||
52 | |||
53 | # The testing function | ||
54 | |||
55 | niro | 816 | testing() |
56 | niro | 532 | { |
57 | NAME="$1" | ||
58 | niro | 816 | [ -n "$1" ] || NAME="$2" |
59 | niro | 532 | |
60 | if [ $# -ne 5 ] | ||
61 | then | ||
62 | niro | 816 | echo "Test $NAME has wrong number of arguments (must be 5) ($# $*)" >&2 |
63 | exit 1 | ||
64 | niro | 532 | fi |
65 | |||
66 | niro | 816 | [ -z "$DEBUG" ] || set -x |
67 | niro | 532 | |
68 | if [ -n "$SKIP" ] | ||
69 | then | ||
70 | echo "SKIPPED: $NAME" | ||
71 | return 0 | ||
72 | fi | ||
73 | |||
74 | niro | 816 | $ECHO -ne "$3" > expected |
75 | $ECHO -ne "$4" > input | ||
76 | niro | 532 | [ -z "$VERBOSE" ] || echo "echo '$5' | $2" |
77 | niro | 816 | $ECHO -ne "$5" | eval "$2" > actual |
78 | niro | 532 | RETVAL=$? |
79 | |||
80 | niro | 816 | if cmp expected actual >/dev/null 2>/dev/null |
81 | niro | 532 | then |
82 | niro | 816 | echo "PASS: $NAME" |
83 | else | ||
84 | FAILCOUNT=$(($FAILCOUNT + 1)) | ||
85 | niro | 532 | echo "FAIL: $NAME" |
86 | niro | 816 | [ -z "$VERBOSE" ] || diff -u expected actual |
87 | niro | 532 | fi |
88 | rm -f input expected actual | ||
89 | |||
90 | niro | 816 | [ -z "$DEBUG" ] || set +x |
91 | niro | 532 | |
92 | return $RETVAL | ||
93 | } | ||
94 | |||
95 | # Recursively grab an executable and all the libraries needed to run it. | ||
96 | # Source paths beginning with / will be copied into destpath, otherwise | ||
97 | # the file is assumed to already be there and only its library dependencies | ||
98 | # are copied. | ||
99 | |||
100 | niro | 816 | mkchroot() |
101 | niro | 532 | { |
102 | [ $# -lt 2 ] && return | ||
103 | |||
104 | niro | 816 | $ECHO -n . |
105 | niro | 532 | |
106 | dest=$1 | ||
107 | shift | ||
108 | for i in "$@" | ||
109 | do | ||
110 | niro | 816 | #bashism: [ "${i:0:1}" == "/" ] || i=$(which $i) |
111 | i=$(which $i) # no-op for /bin/prog | ||
112 | niro | 532 | [ -f "$dest/$i" ] && continue |
113 | if [ -e "$i" ] | ||
114 | then | ||
115 | d=`echo "$i" | grep -o '.*/'` && | ||
116 | mkdir -p "$dest/$d" && | ||
117 | cat "$i" > "$dest/$i" && | ||
118 | chmod +x "$dest/$i" | ||
119 | else | ||
120 | echo "Not found: $i" | ||
121 | fi | ||
122 | mkchroot "$dest" $(ldd "$i" | egrep -o '/.* ') | ||
123 | done | ||
124 | } | ||
125 | |||
126 | # Set up a chroot environment and run commands within it. | ||
127 | # Needed commands listed on command line | ||
128 | # Script fed to stdin. | ||
129 | |||
130 | niro | 816 | dochroot() |
131 | niro | 532 | { |
132 | mkdir tmpdir4chroot | ||
133 | mount -t ramfs tmpdir4chroot tmpdir4chroot | ||
134 | mkdir -p tmpdir4chroot/{etc,sys,proc,tmp,dev} | ||
135 | cp -L testing.sh tmpdir4chroot | ||
136 | |||
137 | # Copy utilities from command line arguments | ||
138 | |||
139 | niro | 816 | $ECHO -n "Setup chroot" |
140 | niro | 532 | mkchroot tmpdir4chroot $* |
141 | echo | ||
142 | |||
143 | mknod tmpdir4chroot/dev/tty c 5 0 | ||
144 | mknod tmpdir4chroot/dev/null c 1 3 | ||
145 | mknod tmpdir4chroot/dev/zero c 1 5 | ||
146 | |||
147 | # Copy script from stdin | ||
148 | |||
149 | cat > tmpdir4chroot/test.sh | ||
150 | chmod +x tmpdir4chroot/test.sh | ||
151 | chroot tmpdir4chroot /test.sh | ||
152 | umount -l tmpdir4chroot | ||
153 | rmdir tmpdir4chroot | ||
154 | } |
Properties
Name | Value |
---|---|
svn:executable | * |