summaryrefslogtreecommitdiffstats
path: root/tests/rscript_parse_time.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/rscript_parse_time.sh')
-rwxr-xr-xtests/rscript_parse_time.sh122
1 files changed, 122 insertions, 0 deletions
diff --git a/tests/rscript_parse_time.sh b/tests/rscript_parse_time.sh
new file mode 100755
index 0000000..633f270
--- /dev/null
+++ b/tests/rscript_parse_time.sh
@@ -0,0 +1,122 @@
+#!/bin/bash
+# Added 2017-10-28 by Stephen Workman, released under ASL 2.0
+
+# Because this script tests functionality that depends on the current date,
+# we cannot use static values for the expected results. They have to be
+# calculated. Also, because we cannot depend on the GNU version of the
+# 'date' command on all of our test systems (think FreeBSD, and Solaris),
+# we need a method of converting given date/time strings to UNIX timestamps.
+# For that we use an external Python 2.x script to do the job.
+. ${srcdir:=.}/diag.sh init
+
+getts="$PYTHON $srcdir/rscript_parse_time_get-ts.py"
+
+# Run the Python script's self-tests
+$getts selftest
+
+if [[ $? -ne 0 ]]; then
+ printf "Failed own self-test(s)!\n"
+ error_exit 1
+fi
+
+# Since the RFC 3164 date/time format does not include a year, we need to
+# try to "guess" an appropriate one based on the incoming date and the
+# current date. So, we'll use a reasonable spread of RFC 3164 date/time
+# strings to ensure that we test as much of our year "guessing" as
+# possible. Since this uses the CURRENT DATE (as in, the date this)
+# script was invoked, we need to calculate our expected results to
+# compare them with the values returned by the parse_time() RainerScript
+# function.
+rfc3164_1="Oct 5 01:10:11"
+rfc3164_1_r=$($getts "$rfc3164_1")
+
+rfc3164_2="Jan 31 13:00:00"
+rfc3164_2_r=$($getts "$rfc3164_2")
+
+rfc3164_3="Feb 28 14:35:00"
+rfc3164_3_r=$($getts "$rfc3164_3")
+
+rfc3164_4="Mar 1 14:00:00"
+rfc3164_4_r=$($getts "$rfc3164_4")
+
+rfc3164_5="Apr 3 15:00:00"
+rfc3164_5_r=$($getts "$rfc3164_5")
+
+rfc3164_6="May 5 16:00:00"
+rfc3164_6_r=$($getts "$rfc3164_6")
+
+rfc3164_7="Jun 11 03:00:00"
+rfc3164_7_r=$($getts "$rfc3164_7")
+
+rfc3164_8="Jul 15 05:00:00"
+rfc3164_8_r=$($getts "$rfc3164_8")
+
+rfc3164_9="Aug 17 08:00:00"
+rfc3164_9_r=$($getts "$rfc3164_9")
+
+rfc3164_10="Sep 20 18:00:00"
+rfc3164_10_r=$($getts "$rfc3164_10")
+
+rfc3164_11="Nov 23 19:00:00"
+rfc3164_11_r=$($getts "$rfc3164_11")
+
+rfc3164_12="Dec 25 20:00:00"
+rfc3164_12_r=$($getts "$rfc3164_12")
+
+generate_conf
+add_conf '
+module(load="../plugins/imtcp/.libs/imtcp")
+module(load="../plugins/omstdout/.libs/omstdout")
+input(type="imtcp" port="0" listenPortFileName="'$RSYSLOG_DYNNAME'.tcpflood_port")
+
+# $DebugLevel 2
+
+# RFC 3164 Parse Tests (using fixed input values - see above)
+set $!datetime!rfc3164_1 = parse_time("'"$rfc3164_1"'");
+set $!datetime!rfc3164_2 = parse_time("'"$rfc3164_2"'");
+set $!datetime!rfc3164_3 = parse_time("'"$rfc3164_3"'");
+set $!datetime!rfc3164_4 = parse_time("'"$rfc3164_4"'");
+set $!datetime!rfc3164_5 = parse_time("'"$rfc3164_5"'");
+set $!datetime!rfc3164_6 = parse_time("'"$rfc3164_6"'");
+set $!datetime!rfc3164_7 = parse_time("'"$rfc3164_7"'");
+set $!datetime!rfc3164_8 = parse_time("'"$rfc3164_8"'");
+set $!datetime!rfc3164_9 = parse_time("'"$rfc3164_9"'");
+set $!datetime!rfc3164_10 = parse_time("'"$rfc3164_10"'");
+set $!datetime!rfc3164_11 = parse_time("'"$rfc3164_11"'");
+set $!datetime!rfc3164_12 = parse_time("'"$rfc3164_12"'");
+
+# RFC 3339 Parse Tests (these provide their own year)
+set $!datetime!rfc3339 = parse_time("2017-10-05T01:10:11Z");
+set $!datetime!rfc3339tz1 = parse_time("2017-10-05T01:10:11+04:00");
+set $!datetime!rfc3339tz2 = parse_time("2017-10-05T01:10:11+00:00");
+
+# Test invalid date strings, these should return 0
+set $!datetime!inval1 = parse_time("not a date/time");
+set $!datetime!inval2 = parse_time("2017-10-05T01:10:11");
+set $!datetime!inval3 = parse_time("2017-SOMETHING: 42");
+
+template(name="outfmt" type="string" string="%!datetime%\n")
+local4.* action(type="omfile" file=`echo $RSYSLOG_OUT_LOG` template="outfmt")
+local4.* :omstdout:;outfmt
+'
+
+startup
+tcpflood -m1 -y
+shutdown_when_empty
+wait_shutdown
+
+# Our fixed and calculated expected results
+export EXPECTED='{ "rfc3164_1": '"$rfc3164_1_r"', "rfc3164_2": '"$rfc3164_2_r"', "rfc3164_3": '"$rfc3164_3_r"', "rfc3164_4": '"$rfc3164_4_r"', "rfc3164_5": '"$rfc3164_5_r"', "rfc3164_6": '"$rfc3164_6_r"', "rfc3164_7": '"$rfc3164_7_r"', "rfc3164_8": '"$rfc3164_8_r"', "rfc3164_9": '"$rfc3164_9_r"', "rfc3164_10": '"$rfc3164_10_r"', "rfc3164_11": '"$rfc3164_11_r"', "rfc3164_12": '"$rfc3164_12_r"', "rfc3339": 1507165811, "rfc3339tz1": 1507151411, "rfc3339tz2": 1507165811, "inval1": 0, "inval2": 0, "inval3": 0 }'
+
+# FreeBSD's cmp does not support reading from STDIN
+cmp <(echo "$EXPECTED") $RSYSLOG_OUT_LOG
+
+if [[ $? -ne 0 ]]; then
+ printf "Invalid function output detected!\n"
+ printf "Expected: $EXPECTED\n"
+ printf "Got: "
+ cat $RSYSLOG_OUT_LOG
+ error_exit 1
+fi;
+
+exit_test