diff options
Diffstat (limited to 'usr.sbin/syslogd/tests/syslogd_test_common.sh')
| -rw-r--r-- | usr.sbin/syslogd/tests/syslogd_test_common.sh | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/usr.sbin/syslogd/tests/syslogd_test_common.sh b/usr.sbin/syslogd/tests/syslogd_test_common.sh new file mode 100644 index 000000000000..f06eb417d423 --- /dev/null +++ b/usr.sbin/syslogd/tests/syslogd_test_common.sh @@ -0,0 +1,160 @@ +#- +# 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 +} |
