summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2017-07-21 13:37:25 +0200
committerDenys Vlasenko2017-07-21 13:37:25 +0200
commit0eed355eac5a8f589f607825a56c87b6c93db79a (patch)
tree9063c1d8cd1d7a1377463abffc4a2fe8d17de340
parent42ba757d5e80ba25cc192939aa3525049f9e092f (diff)
downloadbusybox-0eed355eac5a8f589f607825a56c87b6c93db79a.zip
busybox-0eed355eac5a8f589f607825a56c87b6c93db79a.tar.gz
ash: suppress readonly1.tests false positive; add readonly0.tests
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash_test/ash-vars/readonly0.right13
-rwxr-xr-xshell/ash_test/ash-vars/readonly0.tests45
-rw-r--r--shell/ash_test/ash-vars/readonly1.right4
-rwxr-xr-xshell/ash_test/ash-vars/readonly1.tests4
4 files changed, 62 insertions, 4 deletions
diff --git a/shell/ash_test/ash-vars/readonly0.right b/shell/ash_test/ash-vars/readonly0.right
new file mode 100644
index 0000000..f3a6bde
--- /dev/null
+++ b/shell/ash_test/ash-vars/readonly0.right
@@ -0,0 +1,13 @@
+readonly a='A'
+readonly b='B'
+Ok:0
+
+./readonly0.tests: line 19: a: is read only
+Fail:2
+./readonly0.tests: readonly: line 21: a: is read only
+Fail:2
+
+./readonly0.tests: export: line 27: a: is read only
+Fail:2
+
+Fail:1
diff --git a/shell/ash_test/ash-vars/readonly0.tests b/shell/ash_test/ash-vars/readonly0.tests
new file mode 100755
index 0000000..94af790
--- /dev/null
+++ b/shell/ash_test/ash-vars/readonly0.tests
@@ -0,0 +1,45 @@
+unset a b
+#
+readonly a=A
+b=B
+readonly b
+# readonly on already readonly var is harmless:
+readonly b a
+readonly | grep '^readonly [ab]='
+# this should work:
+export a b
+export -n a b
+echo Ok:$?
+env | grep -e^a= -e^b= # shows nothing
+
+echo
+# these should all fail (despite the same value being assigned)
+# bash does not abort even in non-interactive more (in script)
+# ash does, using subshell to continue
+true; (a=A)
+echo Fail:$?
+true; (readonly a=A)
+echo Fail:$?
+
+echo
+# in bash, assignment in export fails, but export succeeds! :)
+# we don't mimic that!
+true; (export a=Z)
+echo Fail:$?
+#env | grep '^a='
+#echo "^^^a is exported"
+export -n a # undo that bashism, if it happens
+
+## ash: assignment errors in "a=Z CMD" lead to CMD not executed
+## echo
+## export b
+## # this fails to both set and export a:
+## a=Z env | echo grep '^[ab]='
+## echo "^^^a is not exported"
+## # but external command does get executed, and $? is not mangled (stays 42):
+## (exit 42); a=Z env echo Visible:$?
+
+echo
+# ash: this fails *silently*, bug? bash says "cannot unset: readonly variable"
+true; unset a
+echo Fail:$?
diff --git a/shell/ash_test/ash-vars/readonly1.right b/shell/ash_test/ash-vars/readonly1.right
index 2b363e3..1f5be64 100644
--- a/shell/ash_test/ash-vars/readonly1.right
+++ b/shell/ash_test/ash-vars/readonly1.right
@@ -1,2 +1,2 @@
-One:1
-One:1
+Fail:2
+Fail:2
diff --git a/shell/ash_test/ash-vars/readonly1.tests b/shell/ash_test/ash-vars/readonly1.tests
index 81b461f..f3cccd9 100755
--- a/shell/ash_test/ash-vars/readonly1.tests
+++ b/shell/ash_test/ash-vars/readonly1.tests
@@ -1,7 +1,7 @@
readonly bla=123
# Bare "eval bla=123" should abort ("eval" is a special builtin):
(eval bla=123 2>/dev/null; echo BUG)
-echo One:$?
+echo Fail:$?
# "command BLTIN" disables "special-ness", should not abort:
command eval bla=123 2>/dev/null
-echo One:$?
+echo Fail:$?