xref: /freebsd/usr.sbin/syslogd/tests/syslogd_test_common.sh (revision 8d9c25c4e1715e54b523cfd03bfb4c788b34ff57)
166a022a3SMichal Scigocki#-
266a022a3SMichal Scigocki# SPDX-License-Identifier: BSD-2-Clause
366a022a3SMichal Scigocki#
466a022a3SMichal Scigocki# Copyright (c) 2021, 2023 The FreeBSD Foundation
566a022a3SMichal Scigocki#
666a022a3SMichal Scigocki# This software was developed by Mark Johnston under sponsorship from
766a022a3SMichal Scigocki# the FreeBSD Foundation.
866a022a3SMichal Scigocki#
966a022a3SMichal Scigocki# This software was developed by Jake Freeland under sponsorship from
1066a022a3SMichal Scigocki# the FreeBSD Foundation.
1166a022a3SMichal Scigocki#
1266a022a3SMichal Scigocki
1366a022a3SMichal Scigockireadonly SYSLOGD_UDP_PORT="5140"
1466a022a3SMichal Scigockireadonly SYSLOGD_CONFIG="${PWD}/syslog.conf"
1566a022a3SMichal Scigockireadonly SYSLOGD_LOCAL_SOCKET="${PWD}/log.sock"
1666a022a3SMichal Scigockireadonly SYSLOGD_PIDFILE="${PWD}/syslogd.pid"
1766a022a3SMichal Scigockireadonly SYSLOGD_LOCAL_PRIVSOCKET="${PWD}/logpriv.sock"
1866a022a3SMichal Scigocki
1966a022a3SMichal Scigocki# Start a private syslogd instance.
2066a022a3SMichal Scigockisyslogd_start()
2166a022a3SMichal Scigocki{
221da99b47SMark Johnston    local jail bind_arg conf_file pid_file socket privsocket
2366a022a3SMichal Scigocki    local opt next other_args
2466a022a3SMichal Scigocki
2566a022a3SMichal Scigocki    # Setup loopback so we can deliver messages to ourself.
2666a022a3SMichal Scigocki    atf_check ifconfig lo0 inet 127.0.0.1/16
2766a022a3SMichal Scigocki
2866a022a3SMichal Scigocki    OPTIND=1
2966a022a3SMichal Scigocki    while getopts ":b:f:j:P:p:S:" opt; do
3066a022a3SMichal Scigocki        case "${opt}" in
3166a022a3SMichal Scigocki        b)
321da99b47SMark Johnston            bind_arg="${bind_arg} -b ${OPTARG}"
3366a022a3SMichal Scigocki            ;;
3466a022a3SMichal Scigocki        f)
3566a022a3SMichal Scigocki            conf_file="${OPTARG}"
3666a022a3SMichal Scigocki            ;;
3766a022a3SMichal Scigocki        j)
3866a022a3SMichal Scigocki            jail="jexec ${OPTARG}"
3966a022a3SMichal Scigocki            ;;
4066a022a3SMichal Scigocki        P)
4166a022a3SMichal Scigocki            pid_file="${OPTARG}"
4266a022a3SMichal Scigocki            ;;
4366a022a3SMichal Scigocki        p)
4466a022a3SMichal Scigocki            socket="${OPTARG}"
4566a022a3SMichal Scigocki            ;;
4666a022a3SMichal Scigocki        S)
4766a022a3SMichal Scigocki            privsocket="${OPTARG}"
4866a022a3SMichal Scigocki            ;;
4966a022a3SMichal Scigocki        ?)
5066a022a3SMichal Scigocki            opt="${OPTARG}"
5166a022a3SMichal Scigocki            next="$(eval echo \${${OPTIND}})"
5266a022a3SMichal Scigocki
5366a022a3SMichal Scigocki            case "${next}" in
5466a022a3SMichal Scigocki            -* | "")
5566a022a3SMichal Scigocki                other_args="${other_args} -${opt}"
5666a022a3SMichal Scigocki                shift $((OPTIND - 1))
5766a022a3SMichal Scigocki                ;;
5866a022a3SMichal Scigocki            *)
5966a022a3SMichal Scigocki                other_args="${other_args} -${opt} ${next}"
6066a022a3SMichal Scigocki                shift ${OPTIND}
6166a022a3SMichal Scigocki                ;;
6266a022a3SMichal Scigocki            esac
6366a022a3SMichal Scigocki
6466a022a3SMichal Scigocki            # Tell getopts to continue parsing.
6566a022a3SMichal Scigocki            OPTIND=1
6666a022a3SMichal Scigocki            ;;
6766a022a3SMichal Scigocki        :)
6866a022a3SMichal Scigocki            atf_fail "The -${OPTARG} flag requires an argument"
6966a022a3SMichal Scigocki            ;;
7066a022a3SMichal Scigocki        esac
7166a022a3SMichal Scigocki    done
7266a022a3SMichal Scigocki
7366a022a3SMichal Scigocki    $jail syslogd \
741da99b47SMark Johnston        ${bind_arg:--b :${SYSLOGD_UDP_PORT}} \
7566a022a3SMichal Scigocki        -C \
7666a022a3SMichal Scigocki        -d \
7766a022a3SMichal Scigocki        -f "${conf_file:-${SYSLOGD_CONFIG}}" \
7866a022a3SMichal Scigocki        -H \
7966a022a3SMichal Scigocki        -P "${pid_file:-${SYSLOGD_PIDFILE}}" \
8066a022a3SMichal Scigocki        -p "${socket:-${SYSLOGD_LOCAL_SOCKET}}" \
8166a022a3SMichal Scigocki        -S "${privsocket:-${SYSLOGD_LOCAL_PRIVSOCKET}}" \
8266a022a3SMichal Scigocki        ${other_args} \
8366a022a3SMichal Scigocki        &
8466a022a3SMichal Scigocki
8566a022a3SMichal Scigocki    # Give syslogd a bit of time to spin up.
8666a022a3SMichal Scigocki    while [ "$((i+=1))" -le 20 ]; do
8766a022a3SMichal Scigocki        [ -S "${socket:-${SYSLOGD_LOCAL_SOCKET}}" ] && return
8866a022a3SMichal Scigocki        sleep 0.1
8966a022a3SMichal Scigocki    done
9066a022a3SMichal Scigocki    atf_fail "timed out waiting for syslogd to start"
9166a022a3SMichal Scigocki}
9266a022a3SMichal Scigocki
9366a022a3SMichal Scigocki# Simple logger(1) wrapper.
9466a022a3SMichal Scigockisyslogd_log()
9566a022a3SMichal Scigocki{
9666a022a3SMichal Scigocki    atf_check -s exit:0 -o empty -e empty logger $*
9766a022a3SMichal Scigocki}
9866a022a3SMichal Scigocki
9966a022a3SMichal Scigocki# Make syslogd reload its configuration file.
10066a022a3SMichal Scigockisyslogd_reload()
10166a022a3SMichal Scigocki{
1023fb2371eSMark Johnston    atf_check pkill -HUP -F "${1:-${SYSLOGD_PIDFILE}}"
10366a022a3SMichal Scigocki}
10466a022a3SMichal Scigocki
10566a022a3SMichal Scigocki# Stop a private syslogd instance.
10666a022a3SMichal Scigockisyslogd_stop()
10766a022a3SMichal Scigocki{
10866a022a3SMichal Scigocki    local pid_file="${1:-${SYSLOGD_PIDFILE}}"
10966a022a3SMichal Scigocki    local socket_file="${2:-${SYSLOGD_LOCAL_SOCKET}}"
11066a022a3SMichal Scigocki    local privsocket_file="${3:-${SYSLOGD_LOCAL_PRIVSOCKET}}"
11166a022a3SMichal Scigocki
11266a022a3SMichal Scigocki    pid=$(cat "${pid_file}")
11366a022a3SMichal Scigocki    if pkill -F "${pid_file}"; then
11466a022a3SMichal Scigocki        wait "${pid}"
11566a022a3SMichal Scigocki        rm -f "${pid_file}" "${socket_file}" "${privsocket_file}"
11666a022a3SMichal Scigocki    fi
11766a022a3SMichal Scigocki}
118*8d9c25c4SJose Luis Duran
119*8d9c25c4SJose Luis Duran# Check required kernel module.
120*8d9c25c4SJose Luis Duransyslogd_check_req()
121*8d9c25c4SJose Luis Duran{
122*8d9c25c4SJose Luis Duran    type=$1
123*8d9c25c4SJose Luis Duran
124*8d9c25c4SJose Luis Duran    if kldstat -q -n if_${type}.ko; then
125*8d9c25c4SJose Luis Duran        return
126*8d9c25c4SJose Luis Duran    fi
127*8d9c25c4SJose Luis Duran
128*8d9c25c4SJose Luis Duran    if ! kldload -n -q if_${type}; then
129*8d9c25c4SJose Luis Duran        atf_skip "if_${type}.ko is required to run this test."
130*8d9c25c4SJose Luis Duran        return
131*8d9c25c4SJose Luis Duran    fi
132*8d9c25c4SJose Luis Duran}
133*8d9c25c4SJose Luis Duran
134*8d9c25c4SJose Luis Duran# Make a jail and save its name to the created_jails.lst file.
135*8d9c25c4SJose Luis Duran# Accepts a name and optional arguments.
136*8d9c25c4SJose Luis Duransyslogd_mkjail()
137*8d9c25c4SJose Luis Duran{
138*8d9c25c4SJose Luis Duran    jailname=$1
139*8d9c25c4SJose Luis Duran    shift
140*8d9c25c4SJose Luis Duran    args=$*
141*8d9c25c4SJose Luis Duran
142*8d9c25c4SJose Luis Duran    atf_check jail -c name=${jailname} ${args} persist
143*8d9c25c4SJose Luis Duran
144*8d9c25c4SJose Luis Duran    echo $jailname >> created_jails.lst
145*8d9c25c4SJose Luis Duran}
146*8d9c25c4SJose Luis Duran
147*8d9c25c4SJose Luis Duran# Remove epair interfaces and jails.
148*8d9c25c4SJose Luis Duransyslogd_cleanup()
149*8d9c25c4SJose Luis Duran{
150*8d9c25c4SJose Luis Duran    if [ -f created_jails.lst ]; then
151*8d9c25c4SJose Luis Duran        while read jailname; do
152*8d9c25c4SJose Luis Duran            jail -r ${jailname}
153*8d9c25c4SJose Luis Duran        done < created_jails.lst
154*8d9c25c4SJose Luis Duran        rm created_jails.lst
155*8d9c25c4SJose Luis Duran    fi
156*8d9c25c4SJose Luis Duran
157*8d9c25c4SJose Luis Duran    if [ -f epair ]; then
158*8d9c25c4SJose Luis Duran        ifconfig $(cat epair) destroy
159*8d9c25c4SJose Luis Duran    fi
160*8d9c25c4SJose Luis Duran}
161