#!/bin/sh
# Copyright (C) 2011-2016 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 a local message file can override the definitions in the message
# dictionary.

testname="Local message file test"
echo $testname

failcount=0
localmes=@abs_builddir@/localdef_mes_$$
tempfile=@abs_builddir@/run_time_init_test_tempfile_$$

passfail() {
    if [ $1 -eq 0 ]; then
        echo " pass"
    else
        echo " FAIL"
        failcount=`expr $failcount + $1`
    fi
}

# Create the local message file for testing

cat > $localmes << .
% LOG_NOTHERE this message is not in the global dictionary
% LOG_READ_ERROR replacement read error, parameters: '%1' and '%2'
% LOG_READING_LOCAL_FILE replacement read local message file, parameter is '%1'
.

echo -n "1. Local message replacement:"
cat > $tempfile << .
WARN  [example.log] LOG_NO_SUCH_MESSAGE could not replace message text for 'LOG_NOTHERE': no such message
FATAL [example] LOG_WRITE_ERROR error writing to test1: 42
ERROR [example] LOG_READING_LOCAL_FILE replacement read local message file, parameter is 'dummy/file'
WARN  [example] LOG_BAD_STREAM bad log console output stream: example
WARN  [example.alpha] LOG_READ_ERROR replacement read error, parameters: 'a.txt' and 'dummy reason'
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
.
./logger_example -c stdout -s warn $localmes | \
    sed -e 's/\[\([a-z0-9\.]\{1,\}\)\/\([0-9]\{1,\}\)\]/[\1]/' | \
    cut -d' ' -f3- | diff $tempfile -
passfail $?

echo -n "2. Report error if unable to read local message file:"
cat > $tempfile << .
ERROR [example.log] LOG_INPUT_OPEN_FAIL unable to open message file $localmes for input: No such file or directory
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
WARN  [example.alpha] LOG_READ_ERROR error reading from message file a.txt: dummy reason
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
.
rm -f $localmes
./logger_example -c stdout -s warn $localmes | \
    sed -e 's/\[\([a-z0-9\.]\{1,\}\)\/\([0-9]\{1,\}\)\]/[\1]/' | \
    cut -d' ' -f3- | diff $tempfile -
passfail $?

if [ $failcount -eq 0 ]; then
    echo "PASS: $testname"
elif [ $failcount -eq 1 ]; then
    echo "FAIL: $testname - 1 test failed"
else
    echo "FAIL: $testname - $failcount tests failed"
fi

# Tidy up.
rm -f $tempfile

exit $failcount
