#!/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="name_to_number"

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

ts_check_test_command "$TS_CMD_KILL"
ts_check_test_command "$TS_HELPER_SIGRECEIVE"

. "$TS_SELF/kill_functions.sh"

all_ok=true

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

for SIG in $($TS_CMD_KILL -L); do
	if [ "x${SIG//[0-9]/}" = "x" ]; then
		EXPECTED=$SIG
		continue
	fi
	if [ -f "$ASAN_SYMBOLIZER_PATH" ] && [ "x$SIG" = "xSEGV" ]; then
		continue
	fi
	if [ "x$SIG" = "xSTOP" ] || [ "x$SIG" = "xKILL" ]; then
		continue
	fi
	if [ "x$SIG" = "xRTMIN" ]; then
		SIG="$SIG+0"
	fi
	if [ "x$SIG" = "xRTMAX" ]; then
		SIG="$SIG-0"
	fi

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

	"$TS_CMD_KILL" -$SIG ${HELPER_SYMLINK##*/} >> "$TS_OUTPUT" 2>&1
	wait $TEST_PID
	if [ $? -ne $EXPECTED ]; then
		echo "$SIG returned $? while $EXPECTED was expected" >> "$TS_OUTPUT"
		all_ok=false
	fi
done

if $all_ok; then
	echo 'all ok' >> "$TS_OUTPUT"
fi
rm -f "$HELPER_SYMLINK"

ts_finalize
