opnsense-src/usr.sbin/syslogd/tests/syslogd_test_common.sh
Jose Luis Duran 8d9c25c4e1
syslogd: Fix tests when if_epair is not loaded
Take a cue from vnet.subr and abstract module loading, jail creation and
cleanup.

Note that the way jails are created differs slightly from vnet.subr, to
maintain the current style of the tests.

Reported by:	Jenkins
Reviewed by:	markj
Approved by:	emaste (mentor)
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D48949
2025-02-12 14:42:09 +00:00

160 lines
3.7 KiB
Bash

#-
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021, 2023 The FreeBSD Foundation
#
# This software was developed by Mark Johnston under sponsorship from
# the FreeBSD Foundation.
#
# This software was developed by Jake Freeland under sponsorship from
# the FreeBSD Foundation.
#
readonly SYSLOGD_UDP_PORT="5140"
readonly SYSLOGD_CONFIG="${PWD}/syslog.conf"
readonly SYSLOGD_LOCAL_SOCKET="${PWD}/log.sock"
readonly SYSLOGD_PIDFILE="${PWD}/syslogd.pid"
readonly SYSLOGD_LOCAL_PRIVSOCKET="${PWD}/logpriv.sock"
# Start a private syslogd instance.
syslogd_start()
{
local jail bind_arg conf_file pid_file socket privsocket
local opt next other_args
# Setup loopback so we can deliver messages to ourself.
atf_check ifconfig lo0 inet 127.0.0.1/16
OPTIND=1
while getopts ":b:f:j:P:p:S:" opt; do
case "${opt}" in
b)
bind_arg="${bind_arg} -b ${OPTARG}"
;;
f)
conf_file="${OPTARG}"
;;
j)
jail="jexec ${OPTARG}"
;;
P)
pid_file="${OPTARG}"
;;
p)
socket="${OPTARG}"
;;
S)
privsocket="${OPTARG}"
;;
?)
opt="${OPTARG}"
next="$(eval echo \${${OPTIND}})"
case "${next}" in
-* | "")
other_args="${other_args} -${opt}"
shift $((OPTIND - 1))
;;
*)
other_args="${other_args} -${opt} ${next}"
shift ${OPTIND}
;;
esac
# Tell getopts to continue parsing.
OPTIND=1
;;
:)
atf_fail "The -${OPTARG} flag requires an argument"
;;
esac
done
$jail syslogd \
${bind_arg:--b :${SYSLOGD_UDP_PORT}} \
-C \
-d \
-f "${conf_file:-${SYSLOGD_CONFIG}}" \
-H \
-P "${pid_file:-${SYSLOGD_PIDFILE}}" \
-p "${socket:-${SYSLOGD_LOCAL_SOCKET}}" \
-S "${privsocket:-${SYSLOGD_LOCAL_PRIVSOCKET}}" \
${other_args} \
&
# Give syslogd a bit of time to spin up.
while [ "$((i+=1))" -le 20 ]; do
[ -S "${socket:-${SYSLOGD_LOCAL_SOCKET}}" ] && return
sleep 0.1
done
atf_fail "timed out waiting for syslogd to start"
}
# Simple logger(1) wrapper.
syslogd_log()
{
atf_check -s exit:0 -o empty -e empty logger $*
}
# Make syslogd reload its configuration file.
syslogd_reload()
{
atf_check pkill -HUP -F "${1:-${SYSLOGD_PIDFILE}}"
}
# Stop a private syslogd instance.
syslogd_stop()
{
local pid_file="${1:-${SYSLOGD_PIDFILE}}"
local socket_file="${2:-${SYSLOGD_LOCAL_SOCKET}}"
local privsocket_file="${3:-${SYSLOGD_LOCAL_PRIVSOCKET}}"
pid=$(cat "${pid_file}")
if pkill -F "${pid_file}"; then
wait "${pid}"
rm -f "${pid_file}" "${socket_file}" "${privsocket_file}"
fi
}
# Check required kernel module.
syslogd_check_req()
{
type=$1
if kldstat -q -n if_${type}.ko; then
return
fi
if ! kldload -n -q if_${type}; then
atf_skip "if_${type}.ko is required to run this test."
return
fi
}
# Make a jail and save its name to the created_jails.lst file.
# Accepts a name and optional arguments.
syslogd_mkjail()
{
jailname=$1
shift
args=$*
atf_check jail -c name=${jailname} ${args} persist
echo $jailname >> created_jails.lst
}
# Remove epair interfaces and jails.
syslogd_cleanup()
{
if [ -f created_jails.lst ]; then
while read jailname; do
jail -r ${jailname}
done < created_jails.lst
rm created_jails.lst
fi
if [ -f epair ]; then
ifconfig $(cat epair) destroy
fi
}