1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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
|