mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 08:12:27 -04:00
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
160 lines
3.7 KiB
Bash
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
|
|
}
|