#!/bin/sh

# Copyright (C) 2011-2025 Internet Systems Consortium, Inc. ("ISC")
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# Checks that the logger will route messages to the chosen destination.

# Exit with error if commands exit with non-zero and if undefined variables are
# used.
set -eu

# Include common test library.
# shellcheck disable=SC1091
# SC1091: Not following: ... was not specified as input (see shellcheck -x).
. "@abs_top_builddir@/src/lib/testutils/dhcp_test_lib.sh"

tempfile="@abs_builddir@/destination_test_tempfile_$$"
destfile1_tmp="@abs_builddir@/destination_test_destfile_1_tmp_$$"
destfile2_tmp="@abs_builddir@/destination_test_destfile_2_tmp_$$"
destfile1="@abs_builddir@/destination_test_destfile_1_$$"
destfile2="@abs_builddir@/destination_test_destfile_2_$$"

printf '1. One logger, multiple destinations:\n'

cat > $tempfile << .
FATAL [example] LOG_WRITE_ERROR error writing to test1: 42
ERROR [example] LOG_READING_LOCAL_FILE reading local message file dummy/file
FATAL [example.beta] LOG_BAD_SEVERITY unrecognized log severity: beta_fatal
ERROR [example.beta] LOG_BAD_DESTINATION unrecognized log destination: beta_error
.
rm -f $destfile1 $destfile2
./logger_example -s error -f $destfile1_tmp -f $destfile2_tmp

# strip the pids and thread ids
sed -e 's/\[\([a-z0-9\.]\{1,\}\)\/\([0-9]\{1,\}\)\.\(0x\)\{0,1\}\([0-9A-Fa-f]\{1,\}\)\]/[\1]/' < $destfile1_tmp > $destfile1
sed -e 's/\[\([a-z0-9\.]\{1,\}\)\/\([0-9]\{1,\}\)\.\(0x\)\{0,1\}\([0-9A-Fa-f]\{1,\}\)\]/[\1]/' < $destfile2_tmp > $destfile2
# strip the thread ids

test_start 'logger-destination.one-logger-file-1'
cut -d' ' -f3- $destfile1 | diff $tempfile -
test_finish $?

test_start 'logger-destination.one-logger-file-2'
cut -d' ' -f3- $destfile2 | diff $tempfile -
test_finish $?

# Tidy up.
rm -f $tempfile $destfile1_tmp $destfile2_tmp $destfile1 $destfile2

printf '2. Two loggers, different destinations and severities:\n'
rm -f $destfile1 $destfile2
./logger_example -l example -s info -f $destfile1_tmp -l alpha -s warn -f $destfile2_tmp

# strip the pids and thread ids
sed -e 's/\[\([a-z0-9\.]\{1,\}\)\/\([0-9]\{1,\}\)\.\(0x\)\{0,1\}\([0-9A-Fa-f]\{1,\}\)\]/[\1]/' < $destfile1_tmp > $destfile1
sed -e 's/\[\([a-z0-9\.]\{1,\}\)\/\([0-9]\{1,\}\)\.\(0x\)\{0,1\}\([0-9A-Fa-f]\{1,\}\)\]/[\1]/' < $destfile2_tmp > $destfile2

# All output for example and example.beta should have gone to destfile1.
# Output for example.alpha should have done to destfile2.

test_start 'logger-destination.multiples-loggers-file-1'
cat > $tempfile << .
FATAL [example] LOG_WRITE_ERROR error writing to test1: 42
ERROR [example] LOG_READING_LOCAL_FILE reading local message file dummy/file
WARN  [example] LOG_BAD_STREAM bad log console output stream: example
FATAL [example.beta] LOG_BAD_SEVERITY unrecognized log severity: beta_fatal
ERROR [example.beta] LOG_BAD_DESTINATION unrecognized log destination: beta_error
WARN  [example.beta] LOG_BAD_STREAM bad log console output stream: beta_warn
INFO  [example.beta] LOG_READ_ERROR error reading from message file beta: info
.
cut -d' ' -f3- $destfile1 | diff $tempfile -
test_finish $?

test_start 'logger-destination.multiples-loggers-file-2'
cat > $tempfile << .
WARN  [example.alpha] LOG_READ_ERROR error reading from message file a.txt: dummy reason
.
cut -d' ' -f3- $destfile2 | diff $tempfile -
test_finish $?

# Tidy up.
rm -f $tempfile $destfile1_tmp $destfile2_tmp $destfile1 $destfile2
