summaryrefslogtreecommitdiff
path: root/usr/src/cmd/tail/tests/tailtests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/tail/tests/tailtests.sh')
-rwxr-xr-x[-rw-r--r--]usr/src/cmd/tail/tests/tailtests.sh174
1 files changed, 148 insertions, 26 deletions
diff --git a/usr/src/cmd/tail/tests/tailtests.sh b/usr/src/cmd/tail/tests/tailtests.sh
index d3a8bb1cf2..69ca0e3ad1 100644..100755
--- a/usr/src/cmd/tail/tests/tailtests.sh
+++ b/usr/src/cmd/tail/tests/tailtests.sh
@@ -13,9 +13,15 @@
#
# Copyright 2010 Chris Love. All rights reserved.
-# Copyright (c) 2013, Joyent, Inc. All rights reserved.
+# Copyright 2017, Joyent, Inc.
#
+BLOCK=""
+for i in {1..512}; do
+ BLOCK+="."
+done
+
+
checktest()
{
local actual=$1
@@ -31,6 +37,17 @@ checktest()
fi
}
+checkfail()
+{
+ printf "foobar" | $PROG $* &> /dev/null
+
+ if [[ $? -eq 0 ]]; then
+ printf '%s: test "test %s": was supposed to fail\n' "$CMD" "$*"
+ else
+ printf '%s: test "%s": pass\n' "$CMD" "$*"
+ fi
+}
+
#
# Test cases for 'tail', some based on CoreUtils test cases (validated
# with legacy Solaris 'tail' and/or xpg4 'tail'). Note that this is designed
@@ -137,18 +154,34 @@ o=`echo -e "y\n"`
a=`echo -e "x\ny\n" | $PROG +2`
checktest "$a" "$o" 15
-o=`echo -e "yyz"`
-a=`echo -e "xyyyyyyyyyyz" | $PROG +10c`
+o=`printf "yyz\n"`
+a=`printf "xyyyyyyyyyyz\n" | $PROG +10c`
checktest "$a" "$o" 16
-o=`echo -e "y\ny\nz"`
-a=`echo -e "x\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\nz" | $PROG +10l`
+o=`printf "y\ny\nz\n"`
+a=`printf "x\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\nz\n" | $PROG +10l`
checktest "$a" "$o" 17
-o=`echo -e "y\ny\ny\ny\ny\ny\ny\ny\ny\nz"`
-a=`echo -e "x\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\nz" | $PROG -10l`
+o=`printf "y\ny\ny\ny\ny\ny\ny\ny\ny\nz\n"`
+a=`printf "x\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\nz\n" | $PROG -10l`
checktest "$a" "$o" 18
+a=`printf "o\nn\nm\nl\nk\nj\ni\nh\ng\n"`
+o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG +10lr`
+checktest "$a" "$o" 19
+
+a=`printf "o\nn\nm\nl\nk\nj\ni\nh\ng\nf\n"`
+o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG -10lr`
+checktest "$a" "$o" 20
+
+a=`printf "o\nn\nm\nl\n"`
+o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG +10cr`
+checktest "$a" "$o" 21
+
+a=`printf "o\nn\nm\nl\nk\n"`
+o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG -10cr`
+checktest "$a" "$o" 22
+
#
# For reasons that are presumably as accidental as they are ancient, legacy
# (and closed) Solaris tail(1) allows +c, +l and -l to be aliases for +10c,
@@ -156,22 +189,54 @@ checktest "$a" "$o" 18
# behavior is functional.
#
if [[ `uname -s` == "SunOS" ]]; then
- o=`echo -e "yyz"`
- a=`echo -e "xyyyyyyyyyyz" | $PROG +c`
+ o=`printf "yyz\n"`
+ a=`printf "xyyyyyyyyyyz\n" | $PROG +c`
checktest "$a" "$o" 16a
- o=`echo -e "y\ny\nz"`
- a=`echo -e "x\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\nz" | $PROG +l`
+ o=`printf "y\ny\nz\n"`
+ a=`printf "x\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\nz\n" | $PROG +l`
checktest "$a" "$o" 17a
- o=`echo -e "y\ny\ny\ny\ny\ny\ny\ny\ny\nz"`
- a=`echo -e "x\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\nz" | $PROG -l`
+ o=`printf "y\ny\ny\ny\ny\ny\ny\ny\ny\nz\n"`
+ a=`printf "x\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\nz\n" | $PROG -l`
checktest "$a" "$o" 18a
+
+ a=`printf "o\nn\nm\nl\nk\nj\ni\nh\ng\n"`
+
+ o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG +lr`
+ checktest "$a" "$o" 19a
+
+ o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG +l -r`
+ checktest "$a" "$o" 19a
+
+ a=`printf "o\nn\nm\nl\nk\nj\ni\nh\ng\nf\n"`
+
+ o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG -lr`
+ checktest "$a" "$o" 20a
+
+ o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG -l -r`
+ checktest "$a" "$o" 20b
+
+ a=`printf "o\nn\nm\nl\n"`
+
+ o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG +cr`
+ checktest "$a" "$o" 21a
+
+ o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG +c -r`
+ checktest "$a" "$o" 21a
+
+ a=`printf "o\nn\nm\nl\nk\n"`
+
+ o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG -cr`
+ checktest "$a" "$o" 22a
+
+ o=`printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\n" | $PROG -c -r`
+ checktest "$a" "$o" 22b
fi
o=`echo -e "c\nb\na"`
a=`echo -e "a\nb\nc" | $PROG -r`
-checktest "$a" "$o" 19
+checktest "$a" "$o" 23
#
# Now we want to do a series of follow tests.
@@ -201,7 +266,7 @@ sleep 1
o=`echo -e "a\nb\nc\nd\ne\nf\n"`
a=`cat $out`
-checktest "$a" "$o" 20
+checktest "$a" "$o" 24
rm $follow
#
@@ -220,7 +285,7 @@ sleep 1
o=`echo -e "a\nb\nc\nd\ne\nf\n"`
a=`cat $out`
-checktest "$a" "$o" 21
+checktest "$a" "$o" 25
rm $moved
#
@@ -239,7 +304,7 @@ sleep 1
o=`echo -e "a\nb\nc\nd\ne\nf\ng\nh\ni\n"`
a=`cat $out`
-checktest "$a" "$o" 22
+checktest "$a" "$o" 26
rm $follow
#
@@ -259,7 +324,7 @@ sleep 1
o=`echo -e "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\no\np\nq"`
a=`cat $out`
-checktest "$a" "$o" 23
+checktest "$a" "$o" 27
rm $follow
#
@@ -280,7 +345,7 @@ sleep 1
o=`echo -e "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\no\np\nq"`
a=`cat $out`
-checktest "$a" "$o" 24
+checktest "$a" "$o" 28
rm $moved
#
@@ -299,7 +364,7 @@ sleep 1
o=`echo -e "a\nb\nc\nd\ne\nf\ng\nh\ni\n"`
a=`cat $out`
-checktest "$a" "$o" 25
+checktest "$a" "$o" 29
rm $follow
#
@@ -326,7 +391,7 @@ sleep 1
o=`echo -e "a\nb\nc\nd\ne\nf\n"`
a=`cat $out`
-checktest "$a" "$o" 26
+checktest "$a" "$o" 30
rm $moved
#
@@ -365,7 +430,7 @@ four
==> $follow <==
five"
a=`cat $out`
-checktest "$a" "$o" 27
+checktest "$a" "$o" 31
rm $follow $moved
if [[ `uname -s` == "SunOS" ]]; then
@@ -401,7 +466,7 @@ EOF
o=`echo -e "0\n1\n2\n3\n5\n6\n7\n8\n9\n"`
a=`cat $out`
- checktest "$a" "$o" 27a
+ checktest "$a" "$o" 31a
rm $follow
cat /dev/null > $follow
@@ -433,7 +498,7 @@ EOF
o=`echo -e "0\n1\n2\n3\n5\n6\n7\n8\n9\n"`
a=`cat $out`
- checktest "$a" "$o" 27b
+ checktest "$a" "$o" 31b
rm $moved
#
@@ -453,7 +518,7 @@ EOF
o=`echo -e "a\nb\nc\nd\ne\nf\ng\nh\ni\n"`
a=`cat $out`
- checktest "$a" "$o" 27c
+ checktest "$a" "$o" 31c
fi
#
@@ -472,7 +537,64 @@ kill $child
a=`sort $out | uniq -c | sort -n | tail -1 | awk '{ print $1 }'`
o=1
-checktest "$a" "$o" 28
+checktest "$a" "$o" 32
+
+# Test different ways of specifying character offsets
+o=`printf "d\n"`
+
+a=`printf "hello\nworld\n" | $PROG -c2`
+checktest "$a" "$o" 33
+
+a=`printf "hello\nworld\n" | $PROG -c-2`
+checktest "$a" "$o" 34
+
+a=`printf "hello\nworld\n" | $PROG -c 2`
+checktest "$a" "$o" 35
+
+a=`printf "hello\nworld\n" | $PROG -c -2`
+checktest "$a" "$o" 36
+
+a=`printf "hello\nworld\n" | $PROG -2c`
+checktest "$a" "$o" 37
+
+o=`printf "llo\nworld\n"`
+
+a=`printf "hello\nworld\n" | $PROG -c +3`
+checktest "$a" "$o" 38
+
+a=`printf "hello\nworld\n" | $PROG -c+3`
+checktest "$a" "$o" 39
+
+a=`printf "hello\nworld\n" | $PROG +3c`
+checktest "$a" "$o" 40
+
+# Test various ways of specifying block offsets
+o=`printf "$BLOCK"`
+
+a=`printf "${BLOCK//./x}$BLOCK" | $PROG -b1`
+checktest "$a" "$o" 41
+
+a=`printf "${BLOCK//./x}$BLOCK" | $PROG -b 1`
+checktest "$a" "$o" 42
+
+a=`printf "${BLOCK//./x}$BLOCK" | $PROG -b -1`
+checktest "$a" "$o" 43
+
+a=`printf "${BLOCK//./x}$BLOCK" | $PROG -b +2`
+checktest "$a" "$o" 44
+
+# Test that illegal arguments aren't allowed
+
+checkfail +b2
+checkfail +c3
+checkfail -l3
+checkfail -cz
+checkfail -bz
+checkfail -nz
+checkfail -3n
+checkfail +3n
+checkfail +n3
+checkfail -lfoobar
echo "$CMD: completed"