diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-02 17:55:51 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-02 17:55:51 +0200 |
commit | c4cf542c575068d55368e771abf6c358bfebf5d3 (patch) | |
tree | b916ff4bea0671437b80257fa82283ad8e09faab /shell/hush_test/hush-redir | |
parent | 1b73f8471a3694d2e6b035bb7f04e1f4df943f03 (diff) | |
download | busybox-w32-c4cf542c575068d55368e771abf6c358bfebf5d3.tar.gz busybox-w32-c4cf542c575068d55368e771abf6c358bfebf5d3.tar.bz2 busybox-w32-c4cf542c575068d55368e771abf6c358bfebf5d3.zip |
sh testsuite: create hush-redir/* and move files around
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/hush_test/hush-redir')
24 files changed, 298 insertions, 0 deletions
diff --git a/shell/hush_test/hush-redir/redir1.right b/shell/hush_test/hush-redir/redir1.right new file mode 100644 index 000000000..15515d1af --- /dev/null +++ b/shell/hush_test/hush-redir/redir1.right | |||
@@ -0,0 +1,12 @@ | |||
1 | Test 0: var:ok | ||
2 | File created:ok | ||
3 | Test 1: var:ok | ||
4 | File created:ok | ||
5 | Test 2: var:ok | ||
6 | File created:ok | ||
7 | Test 3: var:ok | ||
8 | File created:ok | ||
9 | Test 4: var:ok | ||
10 | File created:ok | ||
11 | Test 5: var:ok | ||
12 | File created:ok | ||
diff --git a/shell/hush_test/hush-redir/redir1.tests b/shell/hush_test/hush-redir/redir1.tests new file mode 100755 index 000000000..ef2fbfb77 --- /dev/null +++ b/shell/hush_test/hush-redir/redir1.tests | |||
@@ -0,0 +1,40 @@ | |||
1 | rm shell_test_$$ 2>/dev/null | ||
2 | var=bad | ||
3 | >shell_test_$$ var=ok | ||
4 | echo "Test 0: var:$var" | ||
5 | test -f shell_test_$$ && echo "File created:ok" | ||
6 | |||
7 | rm shell_test_$$ 2>/dev/null | ||
8 | var=bad | ||
9 | var=ok >shell_test_$$ | ||
10 | echo "Test 1: var:$var" | ||
11 | test -f shell_test_$$ && echo "File created:ok" | ||
12 | |||
13 | rm shell_test_$$ 2>/dev/null | ||
14 | var=ok | ||
15 | true | var=bad >shell_test_$$ | ||
16 | echo "Test 2: var:$var" | ||
17 | test -f shell_test_$$ && echo "File created:ok" | ||
18 | |||
19 | rm shell_test_$$ 2>/dev/null | ||
20 | var=bad | ||
21 | { var=ok >shell_test_$$; } | ||
22 | echo "Test 3: var:$var" | ||
23 | test -f shell_test_$$ && echo "File created:ok" | ||
24 | |||
25 | rm shell_test_$$ 2>/dev/null | ||
26 | var=ok | ||
27 | { var=bad >shell_test_$$; } & | ||
28 | # cant use usleep as it isnt standard in $PATH -- | ||
29 | # we fail when testing busybox compiled solely as "hush" | ||
30 | wait | ||
31 | echo "Test 4: var:$var" | ||
32 | test -f shell_test_$$ && echo "File created:ok" | ||
33 | |||
34 | rm shell_test_$$ 2>/dev/null | ||
35 | var=ok | ||
36 | ( var=bad >shell_test_$$ ) | ||
37 | echo "Test 5: var:$var" | ||
38 | test -f shell_test_$$ && echo "File created:ok" | ||
39 | |||
40 | rm shell_test_$$ 2>/dev/null | ||
diff --git a/shell/hush_test/hush-redir/redir2.right b/shell/hush_test/hush-redir/redir2.right new file mode 100644 index 000000000..7326d9603 --- /dev/null +++ b/shell/hush_test/hush-redir/redir2.right | |||
@@ -0,0 +1 @@ | |||
Ok | |||
diff --git a/shell/hush_test/hush-redir/redir2.tests b/shell/hush_test/hush-redir/redir2.tests new file mode 100755 index 000000000..81983cae2 --- /dev/null +++ b/shell/hush_test/hush-redir/redir2.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | echo NOT SHOWN \2>/dev/null | ||
2 | echo Ok | ||
diff --git a/shell/hush_test/hush-redir/redir3.right b/shell/hush_test/hush-redir/redir3.right new file mode 100644 index 000000000..3d20bbf68 --- /dev/null +++ b/shell/hush_test/hush-redir/redir3.right | |||
@@ -0,0 +1,14 @@ | |||
1 | hush: can't open '/does/not/exist': No such file or directory | ||
2 | One:1 | ||
3 | hush: can't open '/cant/be/created': No such file or directory | ||
4 | One:1 | ||
5 | Ok | ||
6 | hush: can't open '/cant/be/created': No such file or directory | ||
7 | Zero:0 | ||
8 | hush: can't open '/cant/be/created': No such file or directory | ||
9 | One:1 | ||
10 | hush: can't open '/cant/be/created': No such file or directory | ||
11 | One:1 | ||
12 | hush: can't open '/cant/be/created': No such file or directory | ||
13 | Zero:0 | ||
14 | Done | ||
diff --git a/shell/hush_test/hush-redir/redir3.tests b/shell/hush_test/hush-redir/redir3.tests new file mode 100755 index 000000000..7c28e4324 --- /dev/null +++ b/shell/hush_test/hush-redir/redir3.tests | |||
@@ -0,0 +1,9 @@ | |||
1 | echo Error >/does/not/exist; echo One:$? | ||
2 | t=BAD | ||
3 | t=Ok >>/cant/be/created; echo One:$? | ||
4 | echo $t | ||
5 | ! >/cant/be/created; echo Zero:$? | ||
6 | exec >/cant/be/created; echo One:$? | ||
7 | exec /bin/true >/cant/be/created; echo One:$? | ||
8 | ! exec /bin/true >/cant/be/created; echo Zero:$? | ||
9 | echo Done | ||
diff --git a/shell/hush_test/hush-redir/redir4.right b/shell/hush_test/hush-redir/redir4.right new file mode 100644 index 000000000..ead25f603 --- /dev/null +++ b/shell/hush_test/hush-redir/redir4.right | |||
@@ -0,0 +1,18 @@ | |||
1 | shell_test | ||
2 | \shell_test | ||
3 | \shell_test | ||
4 | \shell_test | ||
5 | Here1 | ||
6 | Ok1 | ||
7 | Here2 | ||
8 | Ok2 | ||
9 | Here3 | ||
10 | Ok3 | ||
11 | Here4 | ||
12 | Ok4 | ||
13 | Now with variable refs | ||
14 | shell_test_1 | ||
15 | \shell_test_1 | ||
16 | \shell_test_1 | ||
17 | \shell_test_1 | ||
18 | Done | ||
diff --git a/shell/hush_test/hush-redir/redir4.tests b/shell/hush_test/hush-redir/redir4.tests new file mode 100755 index 000000000..c50b8cedf --- /dev/null +++ b/shell/hush_test/hush-redir/redir4.tests | |||
@@ -0,0 +1,85 @@ | |||
1 | rm *shell_test* 2>/dev/null | ||
2 | |||
3 | >\shell_test | ||
4 | echo *shell_test* | ||
5 | rm *shell_test* | ||
6 | |||
7 | >\\shell_test | ||
8 | echo *shell_test* | ||
9 | rm *shell_test* | ||
10 | |||
11 | >"\shell_test" | ||
12 | echo *shell_test* | ||
13 | rm *shell_test* | ||
14 | |||
15 | >"\\shell_test" | ||
16 | echo *shell_test* | ||
17 | rm *shell_test* | ||
18 | |||
19 | |||
20 | cat <<\shell_test | ||
21 | Here1 | ||
22 | shell_test | ||
23 | echo Ok1 | ||
24 | |||
25 | cat <<\\shell_test | ||
26 | Here2 | ||
27 | \shell_test | ||
28 | echo Ok2 | ||
29 | |||
30 | cat <<"\shell_test" | ||
31 | Here3 | ||
32 | \shell_test | ||
33 | echo Ok3 | ||
34 | |||
35 | cat <<"\\shell_test" | ||
36 | Here4 | ||
37 | \shell_test | ||
38 | echo Ok4 | ||
39 | |||
40 | |||
41 | echo Now with variable refs | ||
42 | i=1 | ||
43 | |||
44 | |||
45 | >\shell_test_$i | ||
46 | echo *shell_test* | ||
47 | rm *shell_test* | ||
48 | |||
49 | >\\shell_test_$i | ||
50 | echo *shell_test* | ||
51 | rm *shell_test* | ||
52 | |||
53 | >"\shell_test_$i" | ||
54 | echo *shell_test* | ||
55 | rm *shell_test* | ||
56 | |||
57 | >"\\shell_test_$i" | ||
58 | echo *shell_test* | ||
59 | rm *shell_test* | ||
60 | |||
61 | echo Done;exit | ||
62 | # UNFIXED BUG. bash apparently will expand $i even in terminating delimiter. | ||
63 | # http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html | ||
64 | # does not mandate this behavior. | ||
65 | # This is not likely to be used much in real-world. | ||
66 | |||
67 | cat <<\shell_test_$i | ||
68 | Here1 | ||
69 | shell_test_$i | ||
70 | echo Ok1 | ||
71 | |||
72 | cat <<\\shell_test_$i | ||
73 | Here2 | ||
74 | \shell_test_$i | ||
75 | echo Ok2 | ||
76 | |||
77 | cat <<"\shell_test_$i" | ||
78 | Here3 | ||
79 | \shell_test_$i | ||
80 | echo Ok3 | ||
81 | |||
82 | cat <<"\\shell_test_$i" | ||
83 | Here4 | ||
84 | \shell_test_$i | ||
85 | echo Ok4 | ||
diff --git a/shell/hush_test/hush-redir/redir5.right b/shell/hush_test/hush-redir/redir5.right new file mode 100644 index 000000000..52cce4feb --- /dev/null +++ b/shell/hush_test/hush-redir/redir5.right | |||
@@ -0,0 +1,4 @@ | |||
1 | Backgrounded pipes shall have their stdin redirected to /dev/null | ||
2 | Zero:0 | ||
3 | Zero:0 | ||
4 | Done | ||
diff --git a/shell/hush_test/hush-redir/redir5.tests b/shell/hush_test/hush-redir/redir5.tests new file mode 100755 index 000000000..957f9c81f --- /dev/null +++ b/shell/hush_test/hush-redir/redir5.tests | |||
@@ -0,0 +1,13 @@ | |||
1 | echo "Backgrounded pipes shall have their stdin redirected to /dev/null" | ||
2 | |||
3 | # 1. bash does not redirect stdin to /dev/null if it is interactive. | ||
4 | # hush does it always (this is allowed by standards). | ||
5 | |||
6 | # 2. Failure will result in this script hanging | ||
7 | |||
8 | cat & wait; echo Zero:$? | ||
9 | |||
10 | # This does not work for bash! bash bug? | ||
11 | cat | cat & wait; echo Zero:$? | ||
12 | |||
13 | echo Done | ||
diff --git a/shell/hush_test/hush-redir/redir6.right b/shell/hush_test/hush-redir/redir6.right new file mode 100644 index 000000000..a97c4bdf1 --- /dev/null +++ b/shell/hush_test/hush-redir/redir6.right | |||
@@ -0,0 +1,4 @@ | |||
1 | Testing multiple redirections to same fd | ||
2 | Hello | ||
3 | Done1 | ||
4 | Done2 | ||
diff --git a/shell/hush_test/hush-redir/redir6.tests b/shell/hush_test/hush-redir/redir6.tests new file mode 100755 index 000000000..c639ebb2d --- /dev/null +++ b/shell/hush_test/hush-redir/redir6.tests | |||
@@ -0,0 +1,5 @@ | |||
1 | echo "Testing multiple redirections to same fd" | ||
2 | # bug was making us lose fd #1 after this: | ||
3 | echo Hello >/dev/null 1>&2 | ||
4 | echo Done1 | ||
5 | echo Done2 >&2 | ||
diff --git a/shell/hush_test/hush-redir/redir7.right b/shell/hush_test/hush-redir/redir7.right new file mode 100644 index 000000000..6430b0211 --- /dev/null +++ b/shell/hush_test/hush-redir/redir7.right | |||
@@ -0,0 +1,3 @@ | |||
1 | Ok | ||
2 | Ok | ||
3 | Done | ||
diff --git a/shell/hush_test/hush-redir/redir7.tests b/shell/hush_test/hush-redir/redir7.tests new file mode 100755 index 000000000..e873a4622 --- /dev/null +++ b/shell/hush_test/hush-redir/redir7.tests | |||
@@ -0,0 +1,12 @@ | |||
1 | # Chars above 0x7f are used as special codes. | ||
2 | # 0x81 is CTLESC (see ash.c). | ||
3 | # The bug was that quoting and unquoting of them | ||
4 | # was out of sync for redirect filenames. | ||
5 | |||
6 | >unicode.sh | ||
7 | printf 'echo Ok >uni\x81code\n' >>unicode.sh | ||
8 | printf 'cat uni\x81code\n' >>unicode.sh | ||
9 | printf 'cat uni?code\n' >>unicode.sh | ||
10 | . ./unicode.sh | ||
11 | rm uni*code* | ||
12 | echo Done | ||
diff --git a/shell/hush_test/hush-redir/redir8.right b/shell/hush_test/hush-redir/redir8.right new file mode 100644 index 000000000..6430b0211 --- /dev/null +++ b/shell/hush_test/hush-redir/redir8.right | |||
@@ -0,0 +1,3 @@ | |||
1 | Ok | ||
2 | Ok | ||
3 | Done | ||
diff --git a/shell/hush_test/hush-redir/redir8.tests b/shell/hush_test/hush-redir/redir8.tests new file mode 100755 index 000000000..2bd386749 --- /dev/null +++ b/shell/hush_test/hush-redir/redir8.tests | |||
@@ -0,0 +1,15 @@ | |||
1 | # Chars above 0x7f are used as special codes. | ||
2 | # 0x81 is CTLESC (see ash.c). | ||
3 | # The bug was that quoting and unquoting of them | ||
4 | # was out of sync for redirect filenames. | ||
5 | |||
6 | # Subcase when redirect filename is specified in a variable. | ||
7 | |||
8 | >unicode.sh | ||
9 | printf 'v=uni\x81code\n' >>unicode.sh | ||
10 | printf 'echo Ok >"$v"\n' >>unicode.sh | ||
11 | printf 'cat uni\x81code\n' >>unicode.sh | ||
12 | printf 'cat uni?code\n' >>unicode.sh | ||
13 | . ./unicode.sh | ||
14 | rm uni*code* | ||
15 | echo Done | ||
diff --git a/shell/hush_test/hush-redir/redir9.right b/shell/hush_test/hush-redir/redir9.right new file mode 100644 index 000000000..34c2512e4 --- /dev/null +++ b/shell/hush_test/hush-redir/redir9.right | |||
@@ -0,0 +1,2 @@ | |||
1 | Ok | ||
2 | Done:0 | ||
diff --git a/shell/hush_test/hush-redir/redir9.tests b/shell/hush_test/hush-redir/redir9.tests new file mode 100755 index 000000000..8befa611c --- /dev/null +++ b/shell/hush_test/hush-redir/redir9.tests | |||
@@ -0,0 +1,4 @@ | |||
1 | echo Ok >file.tmp | ||
2 | cat 0<>file.tmp | ||
3 | echo Done:$? | ||
4 | rm file.tmp | ||
diff --git a/shell/hush_test/hush-redir/redirA.right b/shell/hush_test/hush-redir/redirA.right new file mode 100644 index 000000000..31406e336 --- /dev/null +++ b/shell/hush_test/hush-redir/redirA.right | |||
@@ -0,0 +1,2 @@ | |||
1 | tmp11 | ||
2 | tmp11 | ||
diff --git a/shell/hush_test/hush-redir/redirA.tests b/shell/hush_test/hush-redir/redirA.tests new file mode 100755 index 000000000..56833f938 --- /dev/null +++ b/shell/hush_test/hush-redir/redirA.tests | |||
@@ -0,0 +1,11 @@ | |||
1 | x="tmp11:tmp22" | ||
2 | |||
3 | # Bug was incorrectly expanding variables in >redir | ||
4 | echo "${x%:*}" >"${x%:*}" | ||
5 | echo tmp1* | ||
6 | rm tmp1* | ||
7 | |||
8 | # Also try unquoted | ||
9 | echo "${x%:*}" >${x%:*} | ||
10 | echo tmp1* | ||
11 | rm tmp1* | ||
diff --git a/shell/hush_test/hush-redir/redir_script.right b/shell/hush_test/hush-redir/redir_script.right new file mode 100644 index 000000000..6694ed334 --- /dev/null +++ b/shell/hush_test/hush-redir/redir_script.right | |||
@@ -0,0 +1 @@ | |||
Ok: script fd is not closed | |||
diff --git a/shell/hush_test/hush-redir/redir_script.tests b/shell/hush_test/hush-redir/redir_script.tests new file mode 100755 index 000000000..ccc497d7b --- /dev/null +++ b/shell/hush_test/hush-redir/redir_script.tests | |||
@@ -0,0 +1,29 @@ | |||
1 | # Builds a " 3>&- 4>&-" string. | ||
2 | # Note: one of these fds is a directory opened to /proc/self/fd | ||
3 | # for globbing. It is unwanted, but I don't know how to filter it out. | ||
4 | find_fds() { | ||
5 | fds="" | ||
6 | for f in /proc/self/fd/*; do | ||
7 | test "$f" = "/proc/self/fd/0" && continue | ||
8 | test "$f" = "/proc/self/fd/1" && continue | ||
9 | test "$f" = "/proc/self/fd/2" && continue | ||
10 | fds="$fds ${f##*/}>&-" | ||
11 | done | ||
12 | } | ||
13 | |||
14 | find_fds | ||
15 | fds1="$fds" | ||
16 | |||
17 | # One of the fds is open to the script body | ||
18 | # Close it while executing something. | ||
19 | eval "find_fds $fds" | ||
20 | |||
21 | # Shell should not lose that fd. Did it? | ||
22 | find_fds | ||
23 | test x"$fds1" = x"$fds" && { echo "Ok: script fd is not closed"; exit 0; } | ||
24 | |||
25 | echo "Bug: script fd is closed" | ||
26 | echo "fds1:$fds1" | ||
27 | echo "fds2:$fds" | ||
28 | exit 1 | ||
29 | |||
diff --git a/shell/hush_test/hush-redir/redir_space.right b/shell/hush_test/hush-redir/redir_space.right new file mode 100644 index 000000000..084295204 --- /dev/null +++ b/shell/hush_test/hush-redir/redir_space.right | |||
@@ -0,0 +1,3 @@ | |||
1 | z1.tmp: 1 | ||
2 | z2.tmp: 1 | ||
3 | "z1.tmp z2.tmp": TEST 0 | ||
diff --git a/shell/hush_test/hush-redir/redir_space.tests b/shell/hush_test/hush-redir/redir_space.tests new file mode 100755 index 000000000..c0b543098 --- /dev/null +++ b/shell/hush_test/hush-redir/redir_space.tests | |||
@@ -0,0 +1,6 @@ | |||
1 | v='z1.tmp z2.tmp' | ||
2 | echo TEST >$v | ||
3 | echo 'z1.tmp:' `cat 'z1.tmp' 2>/dev/null; echo $?` | ||
4 | echo 'z2.tmp:' `cat 'z2.tmp' 2>/dev/null; echo $?` | ||
5 | echo '"z1.tmp z2.tmp":' `cat 'z1.tmp z2.tmp' 2>/dev/null; echo $?` | ||
6 | rm z*.tmp | ||