#!/bin/bash

# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

TS_TOPDIR="${0%/*}/../.."
TS_DESC="all_processes"

. "$TS_TOPDIR/functions.sh"
ts_init "$*"

ts_skip_nonroot

ts_check_test_command "$TS_CMD_KILL"
ts_check_test_command "$TS_HELPER_SIGRECEIVE"

. "$TS_SELF/kill_functions.sh"

HELPER_SYMLINK="$(mktemp "${TS_OUTDIR}/alXXXXXXXXXXXXX")"
ln -sf "$TS_HELPER_SIGRECEIVE" "$HELPER_SYMLINK"

"$HELPER_SYMLINK" -s "$TS_TESTUSER" >> "$TS_OUTPUT" 2>&1 &
TEST_PID=$!

check_test_sigreceive $TEST_PID
[ $? -eq 1 ] || echo "${HELPER_SYMLINK##*/} helper did not start" >> "$TS_OUTPUT"

echo "test 1" >> "$TS_OUTPUT"
"$TS_CMD_KILL" ${HELPER_SYMLINK##*/} >> "$TS_OUTPUT" 2>&1
if [ $? -ne 1 ]; then
	echo "kill did not return 1" >> "$TS_OUTPUT"
fi

echo "test 2" >> "$TS_OUTPUT"
"$TS_CMD_KILL" -a ${HELPER_SYMLINK##*/} >> "$TS_OUTPUT" 2>&1
if [ $? -ne 0 ]; then
	echo "kill did not return 0" >> "$TS_OUTPUT"
fi
wait $TEST_PID

echo "test 3" >> "$TS_OUTPUT"
"$TS_CMD_KILL" -a -p ${HELPER_SYMLINK##*/} >> "$TS_OUTPUT" 2>&1
if [ $? -ne 1 ]; then
	echo "kill -a -p did not return 1" >> "$TS_OUTPUT"
fi

sed -i "s/${HELPER_SYMLINK##*/}/${TS_HELPER_SIGRECEIVE##*/}/" "$TS_OUTPUT"

rm -f "$HELPER_SYMLINK"

ts_finalize
