command.sh revision 1.2
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# in the last column, limited width
76test_ps "" "" "-o command" "./shortsleep"
77test_ps "" "" "-co command" "shortsleep"
78test_ps "" "COLUMNS=4" "-o command" "./sh"
79test_ps "" "COLUMNS=4" "-co command" "shor"
80test_ps "" "COLUMNS=10" "-o ppid,command" "$mypid ./sh"
81test_ps "" "COLUMNS=10" "-co ppid,command" "$mypid shor"
82test_ps "" "COLUMNS=4" "-o ppid,command" "$mypid ./shortsleep"
83test_ps "" "COLUMNS=4" "-co ppid,command" "$mypid shortsleep"
84test_ps "long_arg" "COLUMNS=4" "-o ppid,command" "$mypid ./shortsleep lon"
85test_ps "long_arg" "COLUMNS=4" "-co ppid,command" "$mypid shortsleep"
86test_ps "E=1" "" "-eo command" "E=1 (shortsleep)"
87test_ps "E=1" "" "-ceo command" "E=1 shortsleep"
88test_ps "E=1" "COLUMNS=6" "-eo command" "E=1 (s"
89test_ps "E=1" "COLUMNS=5" "-eo command" "E=1 ("
90test_ps "E=1" "COLUMNS=4" "-eo command" "E=1 "
91test_ps "E=1" "COLUMNS=3" "-eo command" "E=1"
92test_ps "E=1" "COLUMNS=2" "-eo command" "E="
93test_ps "E=1" "COLUMNS=5" "-ceo command" "E=1 s"
94test_ps "E=1" "COLUMNS=4" "-ceo command" "E=1 "
95test_ps "E=1" "COLUMNS=3" "-ceo command" "E=1"
96test_ps "E=1" "COLUMNS=2" "-ceo command" "E="
97
98# in the last column, unlimited width
99test_ps "" "" "-wwo command" "./shortsleep"
100test_ps "" "" "-cwwo command" "shortsleep"
101test_ps "long_argument" "" "-wwo command" "./shortsleep long_argument"
102test_ps "long_argument" "" "-cwwo command" "shortsleep"
103test_ps "E=1" "" "-ewwo command" "E=1 (shortsleep)"
104test_ps "E=1" "" "-cewwo command" "E=1 shortsleep"
105test_ps "E=1 L=very_long_var" "" "-ewwo command" \
106	"E=1 L=very_long_var (shortsleep)"
107test_ps "E=1 L=very_long_var" "" "-cewwo command" \
108	"E=1 L=very_long_var shortsleep"
109
110# test vis(3)ing
111test_ps "xx" "" "-o command" "./shortsleep xx"
112test_ps "" "" "-o command" "./shortsleep \\^A\\^B\\^C"
113test_ps "" "" "-o command" "./shortsleep \\^D\\^E\\^F\\a"
114test_ps "	x
115" "" "-o command" "./shortsleep \\b\\tx\\n\\v"
116test_ps "
117" "" "-o command" "./shortsleep \\f\\r\\^N\\^O"
118test_ps "" "" "-o command" "./shortsleep \\^P\\^Q\\^R\\^S"
119test_ps "" "" "-o command" "./shortsleep \\^T\\^U\\^V\\^W"
120test_ps "" "" "-o command" "./shortsleep \\^X\\^Y\\^Z\\^["
121test_ps "" "" "-o command" "./shortsleep \\^\\\\^]\\^^\\^_"
122test_ps "x x" "" "-o command" "./shortsleep x x"
123test_ps "" "" "-o command" "./shortsleep \\^?"
124
125exit 0
126