Files
inetutils/tests/syslogd.sh
2025-11-27 00:33:35 +01:00

743 lines
21 KiB
Bash
Executable File

#!/bin/sh
# Copyright (C) 2011-2025 Free Software Foundation, Inc.
#
# This file is part of GNU Inetutils.
#
# GNU Inetutils 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 3 of the License, or (at
# your option) any later version.
#
# GNU Inetutils 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see `http://www.gnu.org/licenses/'.
# Tests to establish functionality of SYSLOG daemon.
#
# Written by Mats Erik Andersson.
# Prerequisites:
#
# * Shell: SVR4 Bourne shell, or newer.
#
# * id(1), kill(1), mktemp(1), netstat(8), uname(1).
# Is usage explanation in demand?
#
if test "$1" = "-h" || test "$1" = "--help" || test "$1" = "--usage"; then
cat <<HERE
Test utility for syslogd and logger.
The following environment variables are used:
NOCLEAN No clean up of testing directory, if set.
VERBOSE Be verbose, if set.
OPTIONS Base options to build upon.
IU_TESTDIR If set, use this as testing dir. Unless
NOCLEAN is also set, any created \$IU_TESTDIR
will be erased after the test. A non-existing
directory must be named as a template for mktemp(1).
OBSCURE If set, make additional tests that are prone to
false negatives in some setups lacking full
connectivity.
REMOTE_LOGHOST Add this host as a receiving loghost.
TARGET Receiving IPv4 address.
TARGET6 Receiving IPv6 address.
HERE
exit 0
fi
# Step into `tests/', should the invocation
# have been made outside of it.
#
[ -d src ] && [ -f tests/syslogd.sh ] && cd tests/
. ./tools.sh
if test -z "${VERBOSE+set}"; then
silence=:
fi
# Portability fix for SVR4
PWD="${PWD:-`pwd`}"
USER="${USER:-`id -u -n`}"
$need_mktemp || exit_no_mktemp
$need_netstat || exit_no_netstat
# Execution control. Initialise early!
#
do_cleandir=false
do_socket_length=true
do_unix_socket=true
do_inet_socket=true
do_standard_port=true
# The UNIX socket name length is preset by the system
# and is also system dependent.
#
# A long name consists of 103 or 107 non-NUL characters,
# whereas the excessive string contains 104 or 108 characters.
# BSD allocates only 104, while Glibc and Solaris admit 108
# characters in "sun_path", a count which includes the final NUL.
iu_socklen_max=104 # BSD flavour!
IU_OS=`uname -s`
if test "$IU_OS" = "Linux" || test "$IU_OS" = "SunOS"; then
# Aim at the boundary of 108 characters.
iu_socklen_max=108
fi
# The executables under test.
#
SYSLOGD=${SYSLOGD:-../src/syslogd$EXEEXT}
LOGGER=${LOGGER:-../src/logger$EXEEXT}
if [ ! -x $SYSLOGD ]; then
echo "Missing executable '$SYSLOGD'. Failing." >&2
exit 77
fi
if [ ! -x $LOGGER ]; then
echo "Missing executable '$LOGGER'. Failing." >&2
exit 77
fi
if [ $VERBOSE ]; then
set -x
$SYSLOGD --version | $SED '1q'
$LOGGER --version | $SED '1q'
fi
# For file creation below IU_TESTDIR.
umask 0077
# Keep any external assignment of testing directory.
# Otherwise a randomisation is included.
#
: ${IU_TESTDIR:=$PWD/iu_syslog.XXXXXX}
if [ ! -d "$IU_TESTDIR" ]; then
do_cleandir=true
IU_TESTDIR="`$MKTEMP -d "$IU_TESTDIR" 2>/dev/null`" ||
{
echo 'Failed at creating test directory. Aborting.' >&2
exit 77
}
elif expr X"$IU_TESTDIR" : X'[./]\{1,\}$' >/dev/null; then
# Eliminating directories: all mixtures of . and / only.
echo 'Dangerous input for test directory. Aborting.' >&2
exit 77
fi
# The SYSLOG daemon uses four files and one directory.
#
CONF="$IU_TESTDIR"/syslog.conf
CONFD="$IU_TESTDIR"/syslog.d
PID="$IU_TESTDIR"/syslogd.pid
OUT="$IU_TESTDIR"/messages
OUT_NOTICE="$IU_TESTDIR"/notice
: ${SOCKET:=$IU_TESTDIR/log}
mkdir -p "$CONFD"
# Are we able to write in IU_TESTDIR?
# This could happen with preset IU_TESTDIR.
#
touch "$OUT" || {
echo 'No write access in test directory. Aborting.' >&2
exit 1
}
# Some automated build environments dig deep chroots, i.e.,
# make the paths to this working directory disturbingly long.
# Check SOCKET for this calamity.
#
if test `expr X"$SOCKET" : X".*"` -gt $iu_socklen_max; then
do_unix_socket=false
cat <<-EOT >&2
WARNING! The working directory uses a disturbingly long path.
We are not able to construct a UNIX socket on top of it.
Therefore disabling socket messaging in this test run.
EOT
fi
# Erase the testing directory.
#
clean_testdir () {
if test -f "$PID" && kill -0 "`cat "$PID"`" >/dev/null 2>&1; then
kill "`cat "$PID"`" || kill -9 "`cat "$PID"`"
fi
if test -z "${NOCLEAN+no}" && $do_cleandir; then
rm -r -f "$IU_TESTDIR"
fi
if $do_socket_length && test -d "$IU_TMPDIR"; then
rmdir "$IU_TMPDIR" # Should be empty.
fi
}
# Clean artifacts as execution stops.
#
trap clean_testdir EXIT HUP INT QUIT TERM
# Test at this port.
# Standard is syslog at 514/udp.
PROTO=udp
PORT=${PORT:-514}
# locate_port proto port
#
locate_port () {
if [ "`uname -s`" = "SunOS" ]; then
$NETSTAT -na -finet -finet6 -P$1 |
$GREP "\.$2[^0-9]" >/dev/null 2>&1
else
$NETSTAT -na |
$GREP "^$1[46]\{0,2\}.*[^0-9]$2[^0-9]" >/dev/null 2>&1
fi
}
# Receivers for INET sockets.
: ${TARGET:=127.0.0.1}
: ${TARGET6:=::1}
# For testing of critical lengths for UNIX socket names,
# we need a well defined base directory; choose $TMPDIR.
IU_TMPDIR=${TMPDIR:=/tmp}
if test ! -d "$IU_TMPDIR"; then
do_socket_length=false
cat <<-EOT >&2
WARNING! Disabling socket length test since the directory
"$IU_TMPDIR", for temporary storage, does not exist.
EOT
else
# Append a slash if it is missing.
expr X"$IU_TMPDIR" : X'.*/$' >/dev/null || IU_TMPDIR="$IU_TMPDIR/"
IU_TMPDIR="`$MKTEMP -d "${IU_TMPDIR}iu.XXXXXX" 2>/dev/null`" ||
{ # Directory creation failed. Disable test.
cat <<-EOT >&2
WARNING! Unable to create temporary directory below
"${TMPDIR:-/tmp}" for socket length test.
Now disabling this subtest.
EOT
do_socket_length=false
}
fi
iu_eighty=0123456789
iu_eighty=${iu_eighty}${iu_eighty}
iu_eighty=${iu_eighty}${iu_eighty}
iu_eighty=${iu_eighty}${iu_eighty}
# This good name base will be expanded.
IU_GOOD_BASE=${IU_TMPDIR}/_iu
# Add a single character to violate the size condition.
IU_BAD_BASE=${IU_TMPDIR}/X_iu
if test `expr X"$IU_GOOD_BASE" : X".*"` -gt $iu_socklen_max; then
# Maximum socket length is already less than prefix.
echo 'WARNING! Disabling socket length test. Too long base name' >&2
do_socket_length=false
fi
if $do_socket_length; then
# Compute any patching needed to get socket names
# touching the limit of allowed length.
iu_patch=''
iu_pt="$IU_GOOD_BASE" # Computational helper.
if test `expr X"$iu_pt$iu_eighty" : X".*"` -le $iu_socklen_max; then
iu_patch="$iu_patch$iu_eighty" && iu_pt="$iu_pt$iu_eighty"
fi
count=`expr X"$iu_pt" : X".*"`
count=`expr $iu_socklen_max - $count`
# $count gives the number, and $iu_eighty the characters.
if test $count -gt 0; then
iu_patch="$iu_patch`expr X"$iu_eighty" : X"\(.\{1,$count\}\)"`"
fi
IU_LONG_SOCKET="$IU_GOOD_BASE$iu_patch"
IU_EXCESSIVE_SOCKET="$IU_BAD_BASE$iu_patch"
fi
# All messages intended for post-detection are
# to be uniformly tagged.
TAG="syslogd-test"
# Remove old files in use by daemon.
rm -f "$OUT" "$OUT_NOTICE" "$PID" "$CONF"
# Full testing at the standard port needs a superuser.
# Randomise if necessary to get an underprivileged port.
test `func_id_uid` = 0 || do_standard_port=false
if test `func_id_uid` != 0 && test $PORT -le 1023; then
$silence cat <<-EOT >&2
WARNING!! The preset port $PORT/$PROTO is not usable,
since you are underprivileged. Now attempting
a randomised higher port.
EOT
PORT=`expr $PORT + 3917 + ${RANDOM:-$$} % 2711`
fi
# Is the INET port already in use? If so,
# randomise somewhat.
if locate_port $PROTO $PORT; then
echo "Port $PORT/$PROTO is in use. Randomising port somewhat." >&2
PORT=`expr $PORT + 2711 + ${RANDOM:-$$} % 917`
fi
# Test a final time.
if locate_port $PROTO $PORT; then
cat <<-EOT >&2
The INET port $PORT/$PROTO is already in use.
Skipping test of INET socket this time.
EOT
do_inet_socket=false
fi
# A minimal, catch-all configuration, with some discarded oddities.
#
cat > "$CONF" <<-EOT
*.* $OUT
# Test the removal of leading blanks and correct line wrapping.
*.notice \\
$OUT_NOTICE
# Empty priority and action.
12345
# Missing action.
*.*
# Empty priority.
*. /dev/null
# Priority out of range.
user.8 /dev/null
# Unknown facility.
bom.7 /dev/null
# Facility out of range for all known systems.
512.err /dev/null
EOT
# Add a user recipient in verbose mode.
$silence false || echo "*.* $USER" >> "$CONF"
# Testing a remote log host known not to exist,
# will introduce sizable timeout. We avoid it
# unless told to include this test, based on
# OBSCURE in our environment.
if [ -n "$OBSCURE" ]; then
# Append an invalid recipient.
cat >> "$CONF" <<-EOT
# Test incorrect forwarding.
*.* @not.in.existence
EOT
fi
# Set REMOTE_LOGHOST to activate forwarding
#
if [ -n "$REMOTE_LOGHOST" ]; then
# Append a forwarding stanza.
cat >> "$CONF" <<-EOT
# Forwarding remotely
*.* @$REMOTE_LOGHOST
EOT
fi
# Attempt to start the server after first
# building the desired option list.
#
## Base configuration.
IU_OPTIONS="--rcfile='$CONF' --rcdir='$CONFD' --pidfile='$PID'"
if $do_unix_socket; then
IU_OPTIONS="$IU_OPTIONS --socket='$SOCKET'"
else
# The empty string will disable the standard socket.
IU_OPTIONS="$IU_OPTIONS --socket=''"
fi
if $do_socket_length; then
IU_OPTIONS="$IU_OPTIONS -a '$IU_LONG_SOCKET' -a '$IU_EXCESSIVE_SOCKET'"
fi
## Enable INET service when possible.
if $do_inet_socket; then
IU_OPTIONS="$IU_OPTIONS --ipany --inet -B$PORT --hop"
fi
## Bring in additional options from command line.
## Disable kernel messages otherwise.
if [ -c /dev/klog ]; then
: OPTIONS=${OPTIONS:=--no-klog}
fi
IU_OPTIONS="$IU_OPTIONS $OPTIONS"
# The eval-construct allows white space in file names,
# based on the use of single quotes in IU_OPTIONS.
eval $SYSLOGD $IU_OPTIONS
# Wait a moment in order to avoid an obvious
# race condition with the server daemon on
# slow systems.
#
sleep 1
# Test to see whether the service got started.
#
if [ ! -r "$PID" ]; then
echo "The service daemon never started. Failing." >&2
exit 1
fi
# Declare the number of implemented tests,
# as well as an exit code.
#
TESTCASES=0
SUCCESSES=0
EXITCODE=1
# Check that the excessively long UNIX socket name was rejected.
if $do_socket_length; then
TESTCASES=`expr $TESTCASES + 1`
# Messages can be truncated in the message log, so make a best
# effort to limit the length of the string we are searching for.
# Allowing 55 characters for IU_BAD_BASE is almost aggressive.
# A host name of length six would allow 64 characters
pruned=`expr "UNIX socket name too long.*${IU_BAD_BASE}" : '\(.\{1,82\}\)'`
if $GREP "$pruned" "$OUT" >/dev/null 2>&1; then
SUCCESSES=`expr $SUCCESSES + 1`
fi
fi
# Send messages on two sockets: IPv4 and UNIX.
#
if $do_unix_socket; then
TESTCASES=`expr $TESTCASES + 1`
$LOGGER -h "$SOCKET" -p user.info -t "$TAG" \
"Sending BSD message. (pid $$)"
fi
if $do_socket_length; then
TESTCASES=`expr $TESTCASES + 1`
$LOGGER -h "$IU_LONG_SOCKET" -p user.info \
-t "$TAG" "Sending via long socket name. (pid $$)"
fi
if $do_inet_socket; then
if test "$TEST_IPV4" != "no" && test -n "$TARGET"; then
TESTCASES=`expr $TESTCASES + 1`
$LOGGER -4 -h "$TARGET:$PORT" -p user.info -t "$TAG" \
"Sending IPv4 message. (pid $$)"
fi # TEST_IPV4 && TARGET
if test "$TEST_IPV6" != "no" && test -n "$TARGET6"; then
TESTCASES=`expr $TESTCASES + 1`
$LOGGER -6 -h "[$TARGET6]:$PORT" -p user.info -t "$TAG" \
"Sending IPv6 message. (pid $$)"
fi # TEST_IPV6 && TARGET6
fi # do_inet_socket
# Send message of priority notice, via local socket, IPv4, or IPv6,
# whatever is there. The presence is checked in $OUT and in $OUT_NOTICE,
# so merit value is 2 for each placed message.
COUNT_WRAP=0
if $do_unix_socket; then
TESTCASES=`expr $TESTCASES + 2`
COUNT_WRAP=`expr $COUNT_WRAP + 1`
$LOGGER -h "$SOCKET" -p daemon.notice -t "$TAG" \
"Attempting to locate wrapped unix configuration. (pid $$)"
fi # do_unix_socket
if $do_inet_socket; then
if test "$TEST_IPV4" != "no" && test -n "$TARGET"; then
TESTCASES=`expr $TESTCASES + 2`
COUNT_WRAP=`expr $COUNT_WRAP + 1`
$LOGGER -4 -h "$TARGET:$PORT" -p daemon.notice -t "$TAG" \
"Attempting to locate wrapped IPv4 configuration. (pid $$)"
fi # TEST_IPV4 && TARGET
if test "$TEST_IPV6" != "no" && test -n "$TARGET6"; then
TESTCASES=`expr $TESTCASES + 2`
COUNT_WRAP=`expr $COUNT_WRAP + 1`
$LOGGER -6 -h "[$TARGET6]:$PORT" -p daemon.notice -t "$TAG" \
"Attempting to locate wrapped IPv6 configuration. (pid $$)"
fi # TEST_IPV6 && TARGET6
fi # do_inet_socket
# Generate a more elaborate message routing, aimed at confirming
# discrimination of severity and facility. This is made active
# by sending SIGHUP to the server process.
#
OUT_UNOTICE="$IU_TESTDIR"/usernotice.log
OUT_USER="$IU_TESTDIR"/user.log
OUT_DEBUG="$IU_TESTDIR"/debug.log
OUT_LOCAL0="$IU_TESTDIR"/local0.log
# Create the new files to avoid false negatives.
: > "$OUT_UNOTICE"
: > "$OUT_USER"
: > "$OUT_DEBUG"
: > "$OUT_LOCAL0"
cat > "$CONF" <<-EOT
*.* $OUT
user.=info $OUT_USER
user.=notice $OUT_UNOTICE
EOT
cat > "$CONFD/debug" <<-EOT
*.=debug $OUT_DEBUG
EOT
cat > "$CONFD/local0" <<-EOT
local0.=notice $OUT_LOCAL0
EOT
# Use another tag for better discrimination.
TAG2="syslogd-reload-test"
# Load the new configuration
kill -HUP `cat "$PID"`
sleep 2
if $do_unix_socket; then
# Two messages of weight 2, ensuring that missing
# and misplaced messages are not yielding negatives.
TESTCASES=`expr $TESTCASES + 4`
$LOGGER -h "$SOCKET" -p user.info -t "$TAG2" \
"user.info as BSD message. (pid $$)"
$LOGGER -h "$SOCKET" -p user.debug -t "$TAG2" \
"user.debug as BSD message. (pid $$)"
# Numerical priority:
# user.info = (1 << 3).6 = 8.6
TESTCASES=`expr $TESTCASES + 2`
$LOGGER -h "$SOCKET" -p 8.6 -t "$TAG2" \
"user.info using numerical priority. (pid $$)"
# Numerical facility and default priority:
# local0.notice = (16 << 3).5 = 128.5
TESTCASES=`expr $TESTCASES + 2`
$LOGGER -h "$SOCKET" -p 128 -t "$TAG2" \
"local0.notice using numerical facility. (pid $$)"
# Default facility and priority:
# user.notice
TESTCASES=`expr $TESTCASES + 2`
$LOGGER -h "$SOCKET" -t "$TAG2" \
"Default facility in BSD message. (pid $$)"
# A message of facility `kern' from a user process should
# be rewritten for `user' by SYSLOGD.
TESTCASES=`expr $TESTCASES + 2`
$LOGGER -h "$SOCKET" -t "$TAG2" \
"Fake kern facility in BSD message. (pid $$)"
# An undefined facility should be rewritten for the default
# facility `user' by SYSLOGD. Typically, LOG_NFACILITIES
# is 24, while LOG_FACMASK is 1016, so a value in excess
# of (24 << 8), i.e., 192 is sufficient.
# The priority `info' will be overwritten as `notice'.
TESTCASES=`expr $TESTCASES + 2`
$LOGGER -h "$SOCKET" -p 512.info -t "$TAG2" \
"Illegal facility in BSD message. (pid $$)"
fi # do_unix_socket
if $do_inet_socket; then
# Two messages of weight 2, ensuring that missing
# and misplaced messages are not yielding negatives.
if test "$TEST_IPV4" != "no" && test -n "$TARGET"; then
TESTCASES=`expr $TESTCASES + 4`
$LOGGER -4 -h "$TARGET:$PORT" -p user.info -t "$TAG2" \
"user.info as IPv4 message. (pid $$)"
$LOGGER -4 -h "$TARGET:$PORT" -p user.debug -t "$TAG2" \
"user.debug as IPv4 message. (pid $$)"
fi # TEST_IPV4 && TARGET
if test "$TEST_IPV6" != "no" && test -n "$TARGET6"; then
TESTCASES=`expr $TESTCASES + 4`
$LOGGER -6 -h "[$TARGET6]:$PORT" -p user.info -t "$TAG2" \
"user.info as IPv6 message. (pid $$)"
$LOGGER -6 -h "[$TARGET6]:$PORT" -p user.debug -t "$TAG2" \
"user.debug as IPv6 message. (pid $$)"
fi # TEST_IPV6 && TARGET6
fi # do_inet_socket
# Remove previous SYSLOG daemon.
test -r "$PID" && kill -0 "`cat "$PID"`" >/dev/null 2>&1 &&
kill "`cat "$PID"`"
# Check functionality of standard port, i.e., execution
# where neither syslogd nor logger have been instructed
# to use specific ports for inet sockets.
#
locate_port $PROTO 514 && do_standard_port=false
if $do_standard_port; then
echo 'Checking also standard port 514/udp.' >&2
# New configuration, but continuing old message file.
rm -f "$PID"
cat > "$CONF" <<-EOT
*.* $OUT
EOT
# Only INET socket, no UNIX socket.
$SYSLOGD --rcfile="$CONF" --pidfile="$PID" --socket='' \
--inet --ipany $OPTIONS
sleep 1
if test "$TEST_IPV4" != "no" && test -n "$TARGET"; then
TESTCASES=`expr $TESTCASES + 1`
$LOGGER -4 -h "$TARGET" -p user.info -t "$TAG" \
"IPv4 to standard port. (pid $$)"
fi # TEST_IPV4 && TARGET
if test "$TEST_IPV6" != "no" && test -n "$TARGET6"; then
TESTCASES=`expr $TESTCASES + 1`
$LOGGER -6 -h "[$TARGET6]" -p user.info -t "$TAG" \
"IPv6 to standard port. (pid $$)"
fi # TEST_IPV6 && TARGET6
fi # do_standard_port
# Delay detection due to observed race condition.
sleep 3
# Detection of registered messages.
#
# Initial message logging.
COUNT=`$GREP -c "$TAG" "$OUT"`
# All notices in $OUT_NOTICE should be present also in $OUT.
# Assign value 1 to full outcome.
COUNT_NOTICE=`$SED -n '$=' "$OUT_NOTICE"`
wrapped=`$FGREP -c -f "$OUT_NOTICE" "$OUT"`
# Provoke a later total miscount, if message counts do not match now.
if $do_unix_socket || $do_inet_socket; then
test $COUNT_NOTICE -eq $wrapped ||
COUNT_WRAP=`expr $COUNT_WRAP - $COUNT_NOTICE + $wrapped`
fi
# Second set-up after SIGHUP.
COUNT2=`$GREP -c "$TAG2" "$OUT_USER"`
COUNT3=`$GREP -c "$TAG2" "$OUT_DEBUG"`
COUNT4=`$EGREP -c "$TAG2.*(Default|Fake kern|Illegal) facility" \
"$OUT_UNOTICE"`
COUNT5=`$GREP -c "$TAG2" "$OUT_LOCAL0"`
# No debug message should enter with selector 'user.info'.
COUNT2_debug=`$GREP -c "$TAG2.*user.debug" "$OUT_USER"`
# No info message should enter with selector '*.=debug'.
COUNT3_info=`$GREP -c "$TAG2.*user.info" "$OUT_DEBUG"`
# No info or debug message should enter with selector 'user.=notice'.
COUNT4_notice=`$EGREP -c "$TAG2.*user.(info|debug)" \
"$OUT_UNOTICE"`
# Undefined facility should overwrite also the priority.
COUNT4_illegal=`$GREP -c "$TAG2.*Illegal facility" "$OUT_USER"`
# No user message should enter with selector 'local0', and conversely.
COUNT5_user=`$GREP -c "$TAG2.*user" "$OUT_LOCAL0"`
COUNT5_local=`cat "$OUT_USER" "$OUT_UNOTICE" "$OUT_DEBUG" | \
$GREP -c "$TAG2.*local0"`
SUCCESSES=`expr $SUCCESSES + $COUNT + $COUNT_WRAP \
+ 2 \* $COUNT2 - $COUNT2_debug \
+ 2 \* $COUNT3 - $COUNT3_info \
+ 2 \* $COUNT4 - $COUNT4_notice - $COUNT4_illegal \
+ 2 \* $COUNT5 - $COUNT5_user - $COUNT5_local`
if [ -n "${VERBOSE+yes}" ]; then
cat <<-EOT
---------- Successfully detected messages. ----------
`$GREP "$TAG" "$OUT"`
`$GREP -h "$TAG2" "$OUT_UNOTICE" "$OUT_USER" "$OUT_DEBUG" \
"$OUT_LOCAL0"`
---------- Full message log for syslogd. ------------
`cat "$OUT"`
---------- Notices during first stage. --------------
`cat "$OUT_NOTICE"`
---------- User notice message log. -----------------
`cat "$OUT_UNOTICE"`
---------- User info message log. -------------------
`cat "$OUT_USER"`
---------- Debug message log. -----------------------
`cat "$OUT_DEBUG"`
---------- Local0 message log. ----------------------
`cat "$OUT_LOCAL0"`
-----------------------------------------------------
EOT
fi
test $SUCCESSES -eq $TESTCASES && $silence false \
|| echo "Registered $SUCCESSES successes out of $TESTCASES."
# Report incomplete test setup.
$do_inet_socket ||
echo 'NOTICE: Port specified INET socket test was not run' >&2
$do_standard_port ||
echo 'NOTICE: Standard port test was not run.' >&1
if [ "$SUCCESSES" -eq "$TESTCASES" ]; then
$silence echo "Successful testing."
EXITCODE=0
else
echo "Failing some tests."
# Tell about the symptoms.
# local socket transport
if $do_unix_socket; then
if $GREP "$TAG2.*info.*BSD" "$OUT_USER" >/dev/null 2>&1; then
:
else
echo >&2 '** UDP socket did not convey info msg after HUP.'
fi
if $GREP "$TAG2.*debug.*BSD" "$OUT_DEBUG" >/dev/null 2>&1; then
:
else
echo >&2 '** UDP socket did not convey debug msg after HUP.'
fi
fi # do_unix_socket
# UDP transport
if $do_inet_socket; then
if $GREP "$TAG2.*info.*IPv" "$OUT_USER" >/dev/null 2>&1; then
:
else
echo >&2 '** IP socket did not convey info msg after HUP.'
fi
if $GREP "$TAG2.*debug.*IPv" "$OUT_DEBUG" >/dev/null 2>&1; then
:
else
echo >&2 '** IP socket did not convey debug msg after HUP.'
fi
fi # do_inet_socket
# Automated build robots fail regularly at registering
# any messages in the debug file.
if test ! -s "$OUT_USER"; then
echo >&2 '**** The file "user.log" was empty. Investigate! ****'
fi
if test ! -s "$OUT_DEBUG"; then
echo >&2 '**** The file "debug.log" was empty. Investigate! ****'
fi
fi
# Remove the daemon process.
test -r "$PID" && kill -0 "`cat "$PID"`" >/dev/null 2>&1 &&
kill "`cat "$PID"`"
exit $EXITCODE