command.sh revision 1.4
1#!/bin/sh
2#
3# Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17test_ps()
18{
19	args=$1
20	ps_vars=$2
21	ps_args=$3
22	expected=$4
23	if [ "X$args" = "X${args%=*}" ]; then
24		if [ -n "$args" ]; then
25			./shortsleep "$args" &
26		else
27			./shortsleep &
28		fi
29	else
30		env -i $args ./shortsleep &
31	fi
32	pid=$!
33
34	# Give the forked process some time to set up its process name.
35	ls > /dev/null
36
37	result=`env $ps_vars ps -p $pid $ps_args | tail -n +2`
38	kill $pid
39	if [ "$result" != "$expected" ]; then
40		echo "$args & $ps_vars ps $ps_args"
41		echo "expected: >$expected<"
42		echo "result:   >$result<"
43		exit 1;
44	fi
45}
46
47mypid=`printf %5d $$`
48
49# not in the last column, limited width
50test_ps "" "" "-o command,ppid" "./shortsleep     $mypid"
51test_ps "" "" "-c -o command,ppid" "shortsleep       $mypid"
52test_ps "E=1" "" "-eo command,ppid" "E=1 (shortsleep) $mypid"
53test_ps "E=1" "" "-ceo command,ppid" "E=1 shortsleep   $mypid"
54test_ps "long_argument" "" "-o command,ppid" "./shortsleep lon $mypid"
55test_ps "long_argument" "" "-co command,ppid" "shortsleep       $mypid"
56test_ps "E=long" "" "-eo command,ppid" "E=long (shortsle $mypid"
57test_ps "E=long" "" "-ceo command,ppid" "E=long shortslee $mypid"
58test_ps "E=1 L=very_long_var" "" "-eo command,ppid" "E=1 L=very_long_ $mypid"
59test_ps "E=1 L=very_long_var" "" "-ceo command,ppid" "E=1 L=very_long_ $mypid"
60
61# not in the last column, unlimited width
62test_ps "" "" "-wwo command,ppid" "./shortsleep     $mypid"
63test_ps "" "" "-cwwo command,ppid" "shortsleep       $mypid"
64test_ps "E=1" "" "-ewwo command,ppid" "E=1 (shortsleep) $mypid"
65test_ps "E=1" "" "-cewwo command,ppid" "E=1 shortsleep   $mypid"
66test_ps "long_argument" "" "-wwo command,ppid" "./shortsleep lon $mypid"
67test_ps "long_argument" "" "-cwwo command,ppid" "shortsleep       $mypid"
68test_ps "E=long" "" "-ewwo command,ppid" "E=long (shortsle $mypid"
69test_ps "E=long" "" "-cewwo command,ppid" "E=long shortslee $mypid"
70test_ps "E=1 L=very_long_var" "" "-ewwo command,ppid" \
71	"E=1 L=very_long_ $mypid"
72test_ps "E=1 L=very_long_var" "" "-cewwo command,ppid" \
73	"E=1 L=very_long_ $mypid"
74
75# UTF-8 in the C locale
76test_ps "E=��" "LC_CTYPE=C" "-ewwo command,ppid" \
77	"E=\M-C\M-1 (shor $mypid"
78test_ps "E=���" "LC_CTYPE=C" "-ewwo command,ppid" \
79	"E=\M-o\M->\M^] ( $mypid"
80test_ps "E=x��" "LC_CTYPE=C" "-ewwo command,ppid" \
81	"E=x\M-L\M^@ (sho $mypid"
82test_ps "E=���" "LC_CTYPE=C" "-ewwo command,ppid" \
83	"E=\M-l\M-?\M-? ( $mypid"
84
85# invalid 8-bit bytes
86test_ps "E=x�x" "" "-ewwo command,ppid" "E=x\M^?x (shorts $mypid"
87test_ps "E=x�x" "" "-ewwo command,ppid" "E=x\M-1x (shorts $mypid"
88test_ps "E=x�x" "" "-ewwo command,ppid" "E=x\M-Cx (shorts $mypid"
89test_ps "E=x��x" "" "-ewwo command,ppid" "E=x\M-o\M->x (sh $mypid"
90
91# in the last column, limited width
92test_ps "" "" "-o command" "./shortsleep"
93test_ps "" "" "-co command" "shortsleep"
94test_ps "" "COLUMNS=4" "-o command" "./sh"
95test_ps "" "COLUMNS=4" "-co command" "shor"
96test_ps "" "COLUMNS=10" "-o ppid,command" "$mypid ./sh"
97test_ps "" "COLUMNS=10" "-co ppid,command" "$mypid shor"
98test_ps "" "COLUMNS=4" "-o ppid,command" "$mypid ./shortsleep"
99test_ps "" "COLUMNS=4" "-co ppid,command" "$mypid shortsleep"
100test_ps "long_arg" "COLUMNS=4" "-o ppid,command" "$mypid ./shortsleep lon"
101test_ps "long_arg" "COLUMNS=4" "-co ppid,command" "$mypid shortsleep"
102test_ps "E=1" "" "-eo command" "E=1 (shortsleep)"
103test_ps "E=1" "" "-ceo command" "E=1 shortsleep"
104test_ps "E=1" "COLUMNS=6" "-eo command" "E=1 (s"
105test_ps "E=1" "COLUMNS=5" "-eo command" "E=1 ("
106test_ps "E=1" "COLUMNS=4" "-eo command" "E=1 "
107test_ps "E=1" "COLUMNS=3" "-eo command" "E=1"
108test_ps "E=1" "COLUMNS=2" "-eo command" "E="
109test_ps "E=1" "COLUMNS=5" "-ceo command" "E=1 s"
110test_ps "E=1" "COLUMNS=4" "-ceo command" "E=1 "
111test_ps "E=1" "COLUMNS=3" "-ceo command" "E=1"
112test_ps "E=1" "COLUMNS=2" "-ceo command" "E="
113
114# in the last column, unlimited width
115test_ps "" "" "-wwo command" "./shortsleep"
116test_ps "" "" "-cwwo command" "shortsleep"
117test_ps "long_argument" "" "-wwo command" "./shortsleep long_argument"
118test_ps "long_argument" "" "-cwwo command" "shortsleep"
119test_ps "E=1" "" "-ewwo command" "E=1 (shortsleep)"
120test_ps "E=1" "" "-cewwo command" "E=1 shortsleep"
121test_ps "E=1 L=very_long_var" "" "-ewwo command" \
122	"E=1 L=very_long_var (shortsleep)"
123test_ps "E=1 L=very_long_var" "" "-cewwo command" \
124	"E=1 L=very_long_var shortsleep"
125
126# test vis(3)ing
127test_ps "xx" "" "-o command" "./shortsleep xx"
128test_ps "" "" "-o command" "./shortsleep \\^A\\^B\\^C"
129test_ps "" "" "-o command" "./shortsleep \\^D\\^E\\^F\\a"
130test_ps "	x
131" "" "-o command" "./shortsleep \\b\\tx\\n\\v"
132test_ps "
133" "" "-o command" "./shortsleep \\f\\r\\^N\\^O"
134test_ps "" "" "-o command" "./shortsleep \\^P\\^Q\\^R\\^S"
135test_ps "" "" "-o command" "./shortsleep \\^T\\^U\\^V\\^W"
136test_ps "" "" "-o command" "./shortsleep \\^X\\^Y\\^Z\\^["
137test_ps "" "" "-o command" "./shortsleep \\^\\\\^]\\^^\\^_"
138test_ps "x x" "" "-o command" "./shortsleep x x"
139test_ps "" "" "-o command" "./shortsleep \\^?"
140
141exit 0
142