xref: /openbsd/regress/bin/ps/command.sh (revision 325be883)
1f9e4e3e2Sschwarze#!/bin/sh
2f9e4e3e2Sschwarze#
3607cf24dSschwarze# Copyright (c) 2015, 2018 Ingo Schwarze <schwarze@openbsd.org>
4f9e4e3e2Sschwarze#
5f9e4e3e2Sschwarze# Permission to use, copy, modify, and distribute this software for any
6f9e4e3e2Sschwarze# purpose with or without fee is hereby granted, provided that the above
7f9e4e3e2Sschwarze# copyright notice and this permission notice appear in all copies.
8f9e4e3e2Sschwarze#
9f9e4e3e2Sschwarze# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10f9e4e3e2Sschwarze# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11f9e4e3e2Sschwarze# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12f9e4e3e2Sschwarze# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13f9e4e3e2Sschwarze# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14f9e4e3e2Sschwarze# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15f9e4e3e2Sschwarze# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16f9e4e3e2Sschwarze
17f9e4e3e2Sschwarzetest_ps()
18f9e4e3e2Sschwarze{
19f9e4e3e2Sschwarze	args=$1
20f9e4e3e2Sschwarze	ps_vars=$2
21f9e4e3e2Sschwarze	ps_args=$3
22f9e4e3e2Sschwarze	expected=$4
23f9e4e3e2Sschwarze	if [ "X$args" = "X${args%=*}" ]; then
2468b2a4f5Sschwarze		if [ -n "$args" ]; then
2568b2a4f5Sschwarze			./shortsleep "$args" &
2668b2a4f5Sschwarze		else
2768b2a4f5Sschwarze			./shortsleep &
2868b2a4f5Sschwarze		fi
29f9e4e3e2Sschwarze	else
30f9e4e3e2Sschwarze		env -i $args ./shortsleep &
31f9e4e3e2Sschwarze	fi
32f9e4e3e2Sschwarze	pid=$!
33f9e4e3e2Sschwarze
34f9e4e3e2Sschwarze	# Give the forked process some time to set up its process name.
358291f059Svisa	until ps -p $pid -o wchan | grep -q nanoslp; do :; done
36f9e4e3e2Sschwarze
37f9e4e3e2Sschwarze	result=`env $ps_vars ps -p $pid $ps_args | tail -n +2`
38f9e4e3e2Sschwarze	kill $pid
39f9e4e3e2Sschwarze	if [ "$result" != "$expected" ]; then
40f9e4e3e2Sschwarze		echo "$args & $ps_vars ps $ps_args"
41f9e4e3e2Sschwarze		echo "expected: >$expected<"
42f9e4e3e2Sschwarze		echo "result:   >$result<"
43f9e4e3e2Sschwarze		exit 1;
44f9e4e3e2Sschwarze	fi
45f9e4e3e2Sschwarze}
46f9e4e3e2Sschwarze
47*1b6cbe56Santonunset LC_ALL
48*1b6cbe56Santon
49f9e4e3e2Sschwarzemypid=`printf %5d $$`
50f9e4e3e2Sschwarze
51f9e4e3e2Sschwarze# not in the last column, limited width
52f9e4e3e2Sschwarzetest_ps "" "" "-o command,ppid" "./shortsleep     $mypid"
53f9e4e3e2Sschwarzetest_ps "" "" "-c -o command,ppid" "shortsleep       $mypid"
54607cf24dSschwarzetest_ps "E=1" "" "-eo command,ppid" "E=1 ./shortsleep $mypid"
55f9e4e3e2Sschwarzetest_ps "E=1" "" "-ceo command,ppid" "E=1 shortsleep   $mypid"
56f9e4e3e2Sschwarzetest_ps "long_argument" "" "-o command,ppid" "./shortsleep lon $mypid"
57f9e4e3e2Sschwarzetest_ps "long_argument" "" "-co command,ppid" "shortsleep       $mypid"
58607cf24dSschwarzetest_ps "E=long" "" "-eo command,ppid" "E=long ./shortsl $mypid"
59f9e4e3e2Sschwarzetest_ps "E=long" "" "-ceo command,ppid" "E=long shortslee $mypid"
60f9e4e3e2Sschwarzetest_ps "E=1 L=very_long_var" "" "-eo command,ppid" "E=1 L=very_long_ $mypid"
61f9e4e3e2Sschwarzetest_ps "E=1 L=very_long_var" "" "-ceo command,ppid" "E=1 L=very_long_ $mypid"
62f9e4e3e2Sschwarze
63f9e4e3e2Sschwarze# not in the last column, unlimited width
64f9e4e3e2Sschwarzetest_ps "" "" "-wwo command,ppid" "./shortsleep     $mypid"
65f9e4e3e2Sschwarzetest_ps "" "" "-cwwo command,ppid" "shortsleep       $mypid"
66607cf24dSschwarzetest_ps "E=1" "" "-ewwo command,ppid" "E=1 ./shortsleep $mypid"
67f9e4e3e2Sschwarzetest_ps "E=1" "" "-cewwo command,ppid" "E=1 shortsleep   $mypid"
68f9e4e3e2Sschwarzetest_ps "long_argument" "" "-wwo command,ppid" "./shortsleep lon $mypid"
69f9e4e3e2Sschwarzetest_ps "long_argument" "" "-cwwo command,ppid" "shortsleep       $mypid"
70607cf24dSschwarzetest_ps "E=long" "" "-ewwo command,ppid" "E=long ./shortsl $mypid"
71f9e4e3e2Sschwarzetest_ps "E=long" "" "-cewwo command,ppid" "E=long shortslee $mypid"
72f9e4e3e2Sschwarzetest_ps "E=1 L=very_long_var" "" "-ewwo command,ppid" \
73f9e4e3e2Sschwarze	"E=1 L=very_long_ $mypid"
74f9e4e3e2Sschwarzetest_ps "E=1 L=very_long_var" "" "-cewwo command,ppid" \
75f9e4e3e2Sschwarze	"E=1 L=very_long_ $mypid"
76f9e4e3e2Sschwarze
77a9017490Sschwarze# UTF-8
78a9017490Sschwarze#width 1
79a9017490Sschwarzetest_ps "ñン��" \
80a9017490Sschwarze	"LC_CTYPE=en_US.UTF-8" "-wwo command,ppid" \
81a9017490Sschwarze	"./shortsleep ñン�� $mypid"
82a9017490Sschwarze# width 0 (combining)
83a9017490Sschwarzetest_ps "x̀" "LC_CTYPE=en_US.UTF-8" "-wwo command,ppid" \
84a9017490Sschwarze	"./shortsleep x̀   $mypid"
85a9017490Sschwarze# width 2 (east asian)
86a9017490Sschwarzetest_ps "쿿" "LC_CTYPE=en_US.UTF-8" "-wwo command,ppid" \
87a9017490Sschwarze	"./shortsleep 쿿  $mypid"
88a9017490Sschwarze# non-printable
89a9017490Sschwarzetest_ps "͸" "LC_CTYPE=en_US.UTF-8" "-wwo command,ppid" \
90a9017490Sschwarze	"./shortsleep �   $mypid"
91a9017490Sschwarze
9231236b74Sschwarze# UTF-8 in the C locale
9331236b74Sschwarzetest_ps "E=ñ" "LC_CTYPE=C" "-ewwo command,ppid" \
94*1b6cbe56Santon	"E=\M-C\M-1 ./sho $mypid"
9531236b74Sschwarzetest_ps "E=ン" "LC_CTYPE=C" "-ewwo command,ppid" \
96*1b6cbe56Santon	"E=\M-o\M->\M^] . $mypid"
9731236b74Sschwarzetest_ps "E=x̀" "LC_CTYPE=C" "-ewwo command,ppid" \
98*1b6cbe56Santon	"E=x\M-L\M^@ ./sh $mypid"
9931236b74Sschwarzetest_ps "E=쿿" "LC_CTYPE=C" "-ewwo command,ppid" \
100*1b6cbe56Santon	"E=\M-l\M-?\M-? . $mypid"
10131236b74Sschwarze
1024c651f54Sschwarze# invalid 8-bit bytes
103607cf24dSschwarzetest_ps "E=x�x" "" "-ewwo command,ppid" "E=x\M^?x ./short $mypid"
104607cf24dSschwarzetest_ps "E=x�x" "" "-ewwo command,ppid" "E=x\M-1x ./short $mypid"
105607cf24dSschwarzetest_ps "E=x�x" "" "-ewwo command,ppid" "E=x\M-Cx ./short $mypid"
106607cf24dSschwarzetest_ps "E=x�x" "" "-ewwo command,ppid" "E=x\M-o\M->x ./s $mypid"
1074c651f54Sschwarze
108f9e4e3e2Sschwarze# in the last column, limited width
109f9e4e3e2Sschwarzetest_ps "" "" "-o command" "./shortsleep"
110f9e4e3e2Sschwarzetest_ps "" "" "-co command" "shortsleep"
111f9e4e3e2Sschwarzetest_ps "" "COLUMNS=4" "-o command" "./sh"
112f9e4e3e2Sschwarzetest_ps "" "COLUMNS=4" "-co command" "shor"
113f9e4e3e2Sschwarzetest_ps "" "COLUMNS=10" "-o ppid,command" "$mypid ./sh"
114f9e4e3e2Sschwarzetest_ps "" "COLUMNS=10" "-co ppid,command" "$mypid shor"
115f9e4e3e2Sschwarzetest_ps "" "COLUMNS=4" "-o ppid,command" "$mypid ./shortsleep"
116f9e4e3e2Sschwarzetest_ps "" "COLUMNS=4" "-co ppid,command" "$mypid shortsleep"
117f9e4e3e2Sschwarzetest_ps "long_arg" "COLUMNS=4" "-o ppid,command" "$mypid ./shortsleep lon"
118f9e4e3e2Sschwarzetest_ps "long_arg" "COLUMNS=4" "-co ppid,command" "$mypid shortsleep"
119607cf24dSschwarzetest_ps "E=1" "" "-eo command" "E=1 ./shortsleep"
120f9e4e3e2Sschwarzetest_ps "E=1" "" "-ceo command" "E=1 shortsleep"
121607cf24dSschwarzetest_ps "E=1" "COLUMNS=7" "-eo command" "E=1 ./s"
122607cf24dSschwarzetest_ps "E=1" "COLUMNS=6" "-eo command" "E=1 ./"
123607cf24dSschwarzetest_ps "E=1" "COLUMNS=5" "-eo command" "E=1 ."
124f9e4e3e2Sschwarzetest_ps "E=1" "COLUMNS=4" "-eo command" "E=1 "
125f9e4e3e2Sschwarzetest_ps "E=1" "COLUMNS=3" "-eo command" "E=1"
126f9e4e3e2Sschwarzetest_ps "E=1" "COLUMNS=2" "-eo command" "E="
127f9e4e3e2Sschwarzetest_ps "E=1" "COLUMNS=5" "-ceo command" "E=1 s"
128f9e4e3e2Sschwarzetest_ps "E=1" "COLUMNS=4" "-ceo command" "E=1 "
129f9e4e3e2Sschwarzetest_ps "E=1" "COLUMNS=3" "-ceo command" "E=1"
130f9e4e3e2Sschwarzetest_ps "E=1" "COLUMNS=2" "-ceo command" "E="
131f9e4e3e2Sschwarze
132f9e4e3e2Sschwarze# in the last column, unlimited width
133f9e4e3e2Sschwarzetest_ps "" "" "-wwo command" "./shortsleep"
134f9e4e3e2Sschwarzetest_ps "" "" "-cwwo command" "shortsleep"
135f9e4e3e2Sschwarzetest_ps "long_argument" "" "-wwo command" "./shortsleep long_argument"
136f9e4e3e2Sschwarzetest_ps "long_argument" "" "-cwwo command" "shortsleep"
137607cf24dSschwarzetest_ps "E=1" "" "-ewwo command" "E=1 ./shortsleep"
138f9e4e3e2Sschwarzetest_ps "E=1" "" "-cewwo command" "E=1 shortsleep"
139f9e4e3e2Sschwarzetest_ps "E=1 L=very_long_var" "" "-ewwo command" \
140607cf24dSschwarze	"E=1 L=very_long_var ./shortsleep"
141f9e4e3e2Sschwarzetest_ps "E=1 L=very_long_var" "" "-cewwo command" \
142f9e4e3e2Sschwarze	"E=1 L=very_long_var shortsleep"
143f9e4e3e2Sschwarze
14468b2a4f5Sschwarze# test vis(3)ing
14568b2a4f5Sschwarzetest_ps "" "" "-o command" "./shortsleep \\^A\\^B\\^C"
14668b2a4f5Sschwarzetest_ps "" "" "-o command" "./shortsleep \\^D\\^E\\^F\\a"
14768b2a4f5Sschwarzetest_ps "	x
14868b2a4f5Sschwarze" "" "-o command" "./shortsleep \\b\\tx\\n\\v"
14968b2a4f5Sschwarzetest_ps "
15068b2a4f5Sschwarze" "" "-o command" "./shortsleep \\f\\r\\^N\\^O"
15168b2a4f5Sschwarzetest_ps "" "" "-o command" "./shortsleep \\^P\\^Q\\^R\\^S"
15268b2a4f5Sschwarzetest_ps "" "" "-o command" "./shortsleep \\^T\\^U\\^V\\^W"
15368b2a4f5Sschwarzetest_ps "" "" "-o command" "./shortsleep \\^X\\^Y\\^Z\\^["
15468b2a4f5Sschwarzetest_ps "" "" "-o command" "./shortsleep \\^\\\\^]\\^^\\^_"
15568b2a4f5Sschwarzetest_ps "x x" "" "-o command" "./shortsleep x x"
15668b2a4f5Sschwarzetest_ps "" "" "-o command" "./shortsleep \\^?"
157f9e4e3e2Sschwarze
158exit 0
159