#!/bin/bash

#
# Copyright (C) 2015 Sami Kerola <kerolasa@iki.fi>
#
# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#

TS_TOPDIR="${0%/*}/../.."
TS_DESC="errors"

. $TS_TOPDIR/functions.sh

ts_init "$*"

ts_check_test_command "$TS_HELPER_LOGGER"

export TZ="GMT"
export LOGGER_TEST_TIMEOFDAY="1234567890.123456"
export LOGGER_TEST_HOSTNAME="test-hostname"
export LOGGER_TEST_GETPID="98765"

DEVLOG="$(mktemp "/tmp/ultest-$TS_COMPONENT-$TS_TESTNAME-XXXXXX")" \
	|| ts_die "mktemp failed"
SOCKIN="${TS_OUTDIR}/${TS_TESTNAME}_socketin"
ts_init_socket_to_file $DEVLOG $SOCKIN
SOCAT_PID="$!"

function logger_fun {
	# logger without --no-act to write all data to the socket
	echo "socket data, ${TS_SUBNAME}:" |socat -u - UNIX-CONNECT:$DEVLOG
	$TS_HELPER_LOGGER -u $DEVLOG --stderr "$@" >> "$TS_OUTPUT" 2>&1
	echo "ret: $?" >> "$TS_OUTPUT"
	echo |socat -u - UNIX-CONNECT:$DEVLOG
}

function logger_printf {
	# logger without --no-act to write all data to the socket
	local fmt="$1"
	shift
	echo "socket data, ${TS_SUBNAME}:" |socat -u - UNIX-CONNECT:$DEVLOG
	printf "$fmt" | $TS_HELPER_LOGGER -u $DEVLOG --stderr "$@" >> "$TS_OUTPUT" 2>&1
	echo "ret: $?" >> "$TS_OUTPUT"
	echo |socat -u - UNIX-CONNECT:$DEVLOG
}

ts_init_subtest "kern_priority"
logger_fun -t "prio" -p kern.emerg "message"
ts_finalize_subtest

ts_init_subtest "kern_priority_numeric"
logger_fun -t "prio" -p 0 "message"
ts_finalize_subtest

ts_init_subtest "invalid_prio"
logger_fun -t "prio" -p 8 "message"
ts_finalize_subtest

# should truncate
ts_init_subtest "rfc5424_exceed_size"
logger_fun -t "rfc5424_exceed_size" --rfc5424 --size 3 "abcd"
ts_finalize_subtest

ts_init_subtest "id_with_space"
logger_fun -t "id_with_space" --id="A B" "message"
logger_fun -t "rfc5424_id_with_space" --rfc5424 --id="A B" "message"
logger_fun -t "id_with_space" --id="1 23" "message"
logger_fun -t "id_with_leading space" --id=" 123" "message"
logger_fun -t "id_with_trailing space" --id="123 " "message"

ts_finalize_subtest

# should not fail
ts_init_subtest "tag_with_space"
logger_fun -t "A B" "tag_with_space"
logger_fun -t "A B" --rfc5424 "tag_with_space_rfc5424"
ts_finalize_subtest

ts_init_subtest "tcp"
logger_fun --tcp -t "tcp" "message"
ts_finalize_subtest

ts_init_subtest "multi-line"
logger_printf "AAA\nBBB\nCCC\n" -t "multi"
ts_finalize_subtest

ts_init_subtest "rfc5424_msgid_with_space"
logger_fun -t "rfc5424_msgid_with_space" --rfc5424 --msgid="A B" "message"
ts_finalize_subtest

ts_init_subtest "invalid_socket"
logger_fun -u /bad/boy -t "invalid_socket" "message"
ts_finalize_subtest

ts_init_subtest "check_socket"
ts_log "Check written socket data of all subtests."
sleep 1
kill $SOCAT_PID
wait $SOCAT_PID &>/dev/null
cat "$SOCKIN" >> "$TS_OUTPUT" 2>&1
rm -f "$DEVLOG" "$SOCKIN"
ts_finalize_subtest

ts_finalize
