1143880Spjd#!/bin/sh
2143880Spjd# $FreeBSD$
3143880Spjd
4272549Srodrigcjail_name_to_jid()
5272549Srodrigc{
6272549Srodrigc	local check_name="$1"
7283312Srodrigc	jls -j "$check_name" -s | tr ' ' '\n' | grep jid= | sed -e 's/.*=//g'
8272549Srodrigc}
9143880Spjd
10272549Srodrigcbase=pkill_j_test
11272549Srodrigc
12283312Srodrigcif [ `id -u` -ne 0 ]; then
13283312Srodrigc	echo "1..0 # skip Test needs uid 0."
14283312Srodrigc	exit 0
15283312Srodrigcfi
16283312Srodrigc
17287269Sjamieecho "1..4"
18143880Spjd
19283312Srodrigcsleep=$(pwd)/sleep.txt
20283312Srodrigcln -sf /bin/sleep $sleep
21283312Srodrigc
22143880Spjdname="pkill -j <jid>"
23283312Srodrigcsleep_amount=5
24283312Srodrigcjail -c path=/ name=${base}_1_1 ip4.addr=127.0.0.1 \
25283312Srodrigc    command=daemon -p ${PWD}/${base}_1_1.pid $sleep $sleep_amount &
26272549Srodrigc
27283312Srodrigcjail -c path=/ name=${base}_1_2 ip4.addr=127.0.0.1 \
28283312Srodrigc    command=daemon -p ${PWD}/${base}_1_2.pid $sleep $sleep_amount &
29272549Srodrigc
30283312Srodrigc$sleep $sleep_amount &
31283312Srodrigc
32283312Srodrigcfor i in `seq 1 10`; do
33272549Srodrigc	jid1=$(jail_name_to_jid ${base}_1_1)
34272549Srodrigc	jid2=$(jail_name_to_jid ${base}_1_2)
35272549Srodrigc	jid="${jid1},${jid2}"
36283312Srodrigc	case "$jid" in
37283312Srodrigc	[0-9]+,[0-9]+)
38283312Srodrigc		break
39283312Srodrigc		;;
40283312Srodrigc	esac
41283312Srodrigc	sleep 0.1
42283312Srodrigcdone
43283312Srodrigcsleep 0.5
44283312Srodrigc
45283312Srodrigcif pkill -f -j "$jid" $sleep && sleep 0.5 &&
46283312Srodrigc    ! -f ${PWD}/${base}_1_1.pid &&
47283312Srodrigc    ! -f ${PWD}/${base}_1_2.pid ; then
48283312Srodrigc	echo "ok 1 - $name"
49143880Spjdelse
50283312Srodrigc	echo "not ok 1 - $name"
51283312Srodrigcfi 2>/dev/null
52283312Srodrigc[ -f ${PWD}/${base}_1_1.pid ] && kill $(cat ${PWD}/${base}_1_1.pid)
53283312Srodrigc[ -f ${PWD}/${base}_1_2.pid ] && kill $(cat ${PWD}/${base}_1_2.pid)
54283312Srodrigcwait
55143880Spjd
56164558Syarname="pkill -j any"
57283312Srodrigcsleep_amount=6
58283312Srodrigcjail -c path=/ name=${base}_2_1 ip4.addr=127.0.0.1 \
59283312Srodrigc    command=daemon -p ${PWD}/${base}_2_1.pid $sleep $sleep_amount &
60272549Srodrigc
61283312Srodrigcjail -c path=/ name=${base}_2_2 ip4.addr=127.0.0.1 \
62283312Srodrigc    command=daemon -p ${PWD}/${base}_2_2.pid $sleep $sleep_amount &
63272549Srodrigc
64283312Srodrigc$sleep $sleep_amount &
65283312Srodrigcchpid3=$!
66283312Srodrigcsleep 0.5
67283312Srodrigcif pkill -f -j any $sleep && sleep 0.5 &&
68283312Srodrigc    [ ! -f ${PWD}/${base}_2_1.pid -a
69283312Srodrigc      ! -f ${PWD}/${base}_2_2.pid ] && kill $chpid3; then
70283312Srodrigc	echo "ok 2 - $name"
71143880Spjdelse
72283312Srodrigc	echo "not ok 2 - $name"
73283312Srodrigcfi 2>/dev/null
74283312Srodrigc[ -f ${PWD}/${base}_2_1.pid ] && kill $(cat ${PWD}/${base}_2_1.pid)
75283312Srodrigc[ -f ${PWD}/${base}_2_2.pid ] && kill $(cat ${PWD}/${base}_2_2.pid)
76283312Srodrigcwait
77164558Syar
78164558Syarname="pkill -j none"
79283312Srodrigcsleep_amount=7
80283312Srodrigcdaemon -p ${PWD}/${base}_3_1.pid $sleep $sleep_amount
81283312Srodrigcjail -c path=/ name=${base}_3_2 ip4.addr=127.0.0.1 \
82283312Srodrigc    command=daemon -p ${PWD}/${base}_3_2.pid $sleep $sleep_amount &
83283312Srodrigcsleep 1
84283312Srodrigcif pkill -f -j none "$sleep $sleep_amount" && sleep 1 &&
85283312Srodrigc    [ ! -f ${PWD}/${base}_3_1.pid -a -f ${PWD}/${base}_3_2.pid ] ; then
86283312Srodrigc	echo "ok 3 - $name"
87164558Syarelse
88283312Srodrigc	ls ${PWD}/*.pid
89283312Srodrigc	echo "not ok 3 - $name"
90283312Srodrigcfi 2>/dev/null
91283312Srodrigc[ -f ${PWD}/${base}_3_1.pid ] && kill $(cat ${base}_3_1.pid)
92283312Srodrigc[ -f ${PWD}/${base}_3_2.pid ] && kill $(cat ${base}_3_2.pid)
93287269Sjamiewait
94283312Srodrigc
95287269Sjamie# test 4 is like test 1 except with jname instead of jid.
96287269Sjamiename="pkill -j <jname>"
97287269Sjamiesleep_amount=8
98287269Sjamiejail -c path=/ name=${base}_4_1 ip4.addr=127.0.0.1 \
99287269Sjamie    command=daemon -p ${PWD}/${base}_4_1.pid $sleep $sleep_amount &
100287269Sjamie
101287269Sjamiejail -c path=/ name=${base}_4_2 ip4.addr=127.0.0.1 \
102287269Sjamie    command=daemon -p ${PWD}/${base}_4_2.pid $sleep $sleep_amount &
103287269Sjamie
104287269Sjamie$sleep $sleep_amount &
105287269Sjamie
106287269Sjamiesleep 0.5
107287269Sjamie
108287269Sjamiejname="${base}_4_1,${base}_4_2"
109287269Sjamieif pkill -f -j "$jname" $sleep && sleep 0.5 &&
110287269Sjamie    ! -f ${PWD}/${base}_4_1.pid &&
111287269Sjamie    ! -f ${PWD}/${base}_4_2.pid ; then
112287269Sjamie	echo "ok 4 - $name"
113287269Sjamieelse
114287269Sjamie	echo "not ok 4 - $name"
115287269Sjamiefi 2>/dev/null
116287269Sjamie[ -f ${PWD}/${base}_4_1.pid ] && kill $(cat ${PWD}/${base}_4_1.pid)
117287269Sjamie[ -f ${PWD}/${base}_4_2.pid ] && kill $(cat ${PWD}/${base}_4_2.pid)
118287269Sjamiewait
119287269Sjamie
120283312Srodrigcrm -f $sleep
121