summaryrefslogtreecommitdiffstats
path: root/tests/testsuites
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xtests/testsuites/abort-uncleancfg-goodcfg.conf9
-rw-r--r--tests/testsuites/action-tx-errfile.result25
-rw-r--r--tests/testsuites/complex_replace_input4
-rw-r--r--tests/testsuites/date_time_msg2
-rw-r--r--tests/testsuites/docroot/file.txt1
-rw-r--r--tests/testsuites/dynstats_empty_input7
-rw-r--r--tests/testsuites/dynstats_input6
-rw-r--r--tests/testsuites/dynstats_input_12
-rw-r--r--tests/testsuites/dynstats_input_22
-rw-r--r--tests/testsuites/dynstats_input_32
-rw-r--r--tests/testsuites/dynstats_input_more_010
-rw-r--r--tests/testsuites/dynstats_input_more_13
-rw-r--r--tests/testsuites/dynstats_input_more_25
-rw-r--r--tests/testsuites/es.yml95
-rw-r--r--tests/testsuites/htpasswd1
-rw-r--r--tests/testsuites/imfile-old-state-file_imfile-state_.-rsyslog.input15
-rw-r--r--tests/testsuites/imhttp-large-data.txt250
-rw-r--r--tests/testsuites/imptcp_framing_regex-oversize.testdata22
-rw-r--r--tests/testsuites/imptcp_framing_regex.testdata18
-rw-r--r--tests/testsuites/imptcp_multi_line.testdata16
-rw-r--r--tests/testsuites/incltest.d/include.conf2
-rw-r--r--tests/testsuites/include-std-omfile-action.conf3
-rw-r--r--tests/testsuites/include-std1-omfile-action.conf5
-rw-r--r--tests/testsuites/include-std2-omfile-action.conf2
-rw-r--r--tests/testsuites/invalid.conf3
-rw-r--r--tests/testsuites/json_array_input1
-rw-r--r--tests/testsuites/json_nonarray_input3
-rw-r--r--tests/testsuites/json_object_input1
-rw-r--r--tests/testsuites/kafka-server.dep_wrk1.properties69
-rw-r--r--tests/testsuites/kafka-server.dep_wrk2.properties69
-rw-r--r--tests/testsuites/kafka-server.dep_wrk3.properties69
-rw-r--r--tests/testsuites/kafka-server.properties69
-rwxr-xr-xtests/testsuites/mmexternal-SegFault-mm-python.py84
-rw-r--r--tests/testsuites/mmnormalize_processing_tests.rulebase14
-rw-r--r--tests/testsuites/mmnormalize_regex.rulebase1
-rw-r--r--tests/testsuites/mmnormalize_tokenized.rulebase5
-rw-r--r--tests/testsuites/mmnormalize_variable.rulebase1
-rw-r--r--tests/testsuites/msgvar-concurrency-array-event.tags.rulebase11
-rw-r--r--tests/testsuites/msgvar-concurrency-array.rulebase11
-rw-r--r--tests/testsuites/mysql-select-msg.sql2
-rw-r--r--tests/testsuites/mysql-truncate.sql2
-rw-r--r--tests/testsuites/no_octet_counted.testdata20
-rwxr-xr-xtests/testsuites/omprog-close-unresponsive-bin.sh32
-rwxr-xr-xtests/testsuites/omprog-defaults-bin.sh14
-rwxr-xr-xtests/testsuites/omprog-feedback-bin.sh33
-rwxr-xr-xtests/testsuites/omprog-feedback-mt-bin.sh31
-rwxr-xr-xtests/testsuites/omprog-feedback-timeout-bin.sh49
-rwxr-xr-xtests/testsuites/omprog-output-capture-bin.sh16
-rwxr-xr-xtests/testsuites/omprog-output-capture-mt-bin.py35
-rwxr-xr-xtests/testsuites/omprog-restart-terminated-bin.sh49
-rwxr-xr-xtests/testsuites/omprog-single-instance-bin.sh25
-rwxr-xr-xtests/testsuites/omprog-transactions-bin.sh60
-rw-r--r--tests/testsuites/pgsql-basic.sql30
-rw-r--r--tests/testsuites/pgsql-select-msg.sql1
-rw-r--r--tests/testsuites/pgsql-select-syslogtag.sql1
-rw-r--r--tests/testsuites/pmnormalize_basic.rulebase1
-rw-r--r--tests/testsuites/regex_input1
-rw-r--r--tests/testsuites/spframingfix.testdata20
-rw-r--r--tests/testsuites/stop_when_array_has_elem_input3
-rw-r--r--tests/testsuites/tokenized_input5
-rw-r--r--tests/testsuites/valid.conf3
-rw-r--r--tests/testsuites/variable_leading_underscore.conf2
-rw-r--r--tests/testsuites/wrap3_input1
-rw-r--r--tests/testsuites/x.509/ca-key.pem182
-rw-r--r--tests/testsuites/x.509/ca.pem27
-rw-r--r--tests/testsuites/x.509/ca.srl1
-rw-r--r--tests/testsuites/x.509/client-cert-new.pem102
-rw-r--r--tests/testsuites/x.509/client-cert.pem27
-rw-r--r--tests/testsuites/x.509/client-expired-cert.pem25
-rw-r--r--tests/testsuites/x.509/client-expired-key.pem134
-rw-r--r--tests/testsuites/x.509/client-key.pem182
-rw-r--r--tests/testsuites/x.509/client-new.csr23
-rw-r--r--tests/testsuites/x.509/client-revoked-key.pem28
-rw-r--r--tests/testsuites/x.509/client-revoked-valid.pem92
-rw-r--r--tests/testsuites/x.509/client-revoked.csr18
-rw-r--r--tests/testsuites/x.509/client-revoked.pem92
-rw-r--r--tests/testsuites/x.509/crl.pem14
-rw-r--r--tests/testsuites/x.509/index.txt3
-rw-r--r--tests/testsuites/x.509/index.txt.attr1
-rw-r--r--tests/testsuites/x.509/machine-cert.pem27
-rw-r--r--tests/testsuites/x.509/machine-key.pem182
-rw-r--r--tests/testsuites/x.509/newcerts/01.pem92
-rw-r--r--tests/testsuites/x.509/newcerts/02.pem92
-rw-r--r--tests/testsuites/x.509/newcerts/03.pem92
-rw-r--r--tests/testsuites/x.509/newcerts/04.pem102
-rw-r--r--tests/testsuites/x.509/openssl-cmds.sh11
-rw-r--r--tests/testsuites/x.509/openssl.cnf41
-rw-r--r--tests/testsuites/x.509/serial1
-rw-r--r--tests/testsuites/xlate.lkp_tbl5
-rw-r--r--tests/testsuites/xlate_array.lkp_tbl6
-rw-r--r--tests/testsuites/xlate_array_empty_table.lkp_tbl6
-rw-r--r--tests/testsuites/xlate_array_misuse.lkp_tbl6
-rw-r--r--tests/testsuites/xlate_array_more.lkp_tbl7
-rw-r--r--tests/testsuites/xlate_array_more_misuse.lkp_tbl7
-rw-r--r--tests/testsuites/xlate_array_more_with_duplicates_and_nomatch.lkp_tbl13
-rw-r--r--tests/testsuites/xlate_array_no_index.lkp_tbl8
-rw-r--r--tests/testsuites/xlate_array_no_table.lkp_tbl5
-rw-r--r--tests/testsuites/xlate_array_no_value.lkp_tbl8
-rw-r--r--tests/testsuites/xlate_empty_file.lkp_tbl0
-rw-r--r--tests/testsuites/xlate_incorrect_type.lkp_tbl8
-rw-r--r--tests/testsuites/xlate_incorrect_version.lkp_tbl8
-rw-r--r--tests/testsuites/xlate_invalid_json.lkp_tbl4
-rw-r--r--tests/testsuites/xlate_more.lkp_tbl6
-rw-r--r--tests/testsuites/xlate_more_with_duplicates_and_nomatch.lkp_tbl12
-rw-r--r--tests/testsuites/xlate_sparseArray_empty_table.lkp_tbl6
-rw-r--r--tests/testsuites/xlate_sparseArray_no_index.lkp_tbl8
-rw-r--r--tests/testsuites/xlate_sparseArray_no_table.lkp_tbl5
-rw-r--r--tests/testsuites/xlate_sparseArray_no_value.lkp_tbl8
-rw-r--r--tests/testsuites/xlate_sparse_array.lkp_tbl6
-rw-r--r--tests/testsuites/xlate_sparse_array_more.lkp_tbl7
-rw-r--r--tests/testsuites/xlate_sparse_array_more_with_duplicates_and_nomatch.lkp_tbl12
-rw-r--r--tests/testsuites/xlate_string_empty_table.lkp_tbl6
-rw-r--r--tests/testsuites/xlate_string_no_index.lkp_tbl8
-rw-r--r--tests/testsuites/xlate_string_no_table.lkp_tbl5
-rw-r--r--tests/testsuites/xlate_string_no_value.lkp_tbl8
-rw-r--r--tests/testsuites/zoo.cfg5
-rw-r--r--tests/testsuites/zoo.dep_wrk1.cfg5
-rw-r--r--tests/testsuites/zoo.dep_wrk2.cfg5
-rw-r--r--tests/testsuites/zoo.dep_wrk3.cfg5
119 files changed, 3153 insertions, 0 deletions
diff --git a/tests/testsuites/abort-uncleancfg-goodcfg.conf b/tests/testsuites/abort-uncleancfg-goodcfg.conf
new file mode 100755
index 0000000..e3c3a98
--- /dev/null
+++ b/tests/testsuites/abort-uncleancfg-goodcfg.conf
@@ -0,0 +1,9 @@
+$AbortOnUncleanConfig on
+
+$ModLoad ../plugins/imtcp/.libs/imtcp
+$MainMsgQueueTimeoutShutdown 10000
+$InputTCPServerRun 13514
+
+$template outfmt,"%msg:F,58:2%\n"
+$template dynfile,"rsyslog.out.log" # trick to use relative path names!
+:msg, contains, "msgnum:" ?dynfile;outfmt
diff --git a/tests/testsuites/action-tx-errfile.result b/tests/testsuites/action-tx-errfile.result
new file mode 100644
index 0000000..c9698c9
--- /dev/null
+++ b/tests/testsuites/action-tx-errfile.result
@@ -0,0 +1,25 @@
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000001:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000003:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000005:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000007:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000009:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000011:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000013:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000015:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000017:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000019:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000021:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000023:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000025:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000027:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000029:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000031:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000033:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000035:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000037:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000039:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000041:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000043:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000045:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000047:\", )" }
+{ "action": "mysql_action", "status": -2218, "template0": "insert into SystemEvents (Message, Facility) values (\" msgnum:00000049:\", )" }
diff --git a/tests/testsuites/complex_replace_input b/tests/testsuites/complex_replace_input
new file mode 100644
index 0000000..a177a4b
--- /dev/null
+++ b/tests/testsuites/complex_replace_input
@@ -0,0 +1,4 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005: try to replace syslog and sysyslog with rsyslog
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005: try to replace hello in hellolo and helhello with hello_world
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005: try to foo_bar_baz in foo_bar_baz_quux and quux_foo_bar_baz with FBB
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005: in the end of msg; try to not lose as_longer_this_string_as_more_probability_to_catch_the_bu
diff --git a/tests/testsuites/date_time_msg b/tests/testsuites/date_time_msg
new file mode 100644
index 0000000..9b74b1b
--- /dev/null
+++ b/tests/testsuites/date_time_msg
@@ -0,0 +1,2 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005: at Thu Oct 30 13:20:18 IST 2014 random number is 19597
+
diff --git a/tests/testsuites/docroot/file.txt b/tests/testsuites/docroot/file.txt
new file mode 100644
index 0000000..ef6d6f7
--- /dev/null
+++ b/tests/testsuites/docroot/file.txt
@@ -0,0 +1 @@
+This is a test of get page
diff --git a/tests/testsuites/dynstats_empty_input b/tests/testsuites/dynstats_empty_input
new file mode 100644
index 0000000..d47777b
--- /dev/null
+++ b/tests/testsuites/dynstats_empty_input
@@ -0,0 +1,7 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:prefix foo 001
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:prefix bar 002
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:prefix baz 003
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:prefix quux 004
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:prefix corge 005
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:prefix foo 006
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:prefix grault 007
diff --git a/tests/testsuites/dynstats_input b/tests/testsuites/dynstats_input
new file mode 100644
index 0000000..0a8cd10
--- /dev/null
+++ b/tests/testsuites/dynstats_input
@@ -0,0 +1,6 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 001
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:bar 002
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:baz 003
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 004
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:baz 005
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 006
diff --git a/tests/testsuites/dynstats_input_1 b/tests/testsuites/dynstats_input_1
new file mode 100644
index 0000000..345f5e4
--- /dev/null
+++ b/tests/testsuites/dynstats_input_1
@@ -0,0 +1,2 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 001
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:bar 002
diff --git a/tests/testsuites/dynstats_input_2 b/tests/testsuites/dynstats_input_2
new file mode 100644
index 0000000..bee20ae
--- /dev/null
+++ b/tests/testsuites/dynstats_input_2
@@ -0,0 +1,2 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:baz 003
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 004
diff --git a/tests/testsuites/dynstats_input_3 b/tests/testsuites/dynstats_input_3
new file mode 100644
index 0000000..4f88f24
--- /dev/null
+++ b/tests/testsuites/dynstats_input_3
@@ -0,0 +1,2 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:baz 005
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 006
diff --git a/tests/testsuites/dynstats_input_more_0 b/tests/testsuites/dynstats_input_more_0
new file mode 100644
index 0000000..8d9ec23
--- /dev/null
+++ b/tests/testsuites/dynstats_input_more_0
@@ -0,0 +1,10 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 001
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:bar 002
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:baz 003
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 004
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:baz 005
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 006
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:quux 007
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:corge 008
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:quux 009
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 010
diff --git a/tests/testsuites/dynstats_input_more_1 b/tests/testsuites/dynstats_input_more_1
new file mode 100644
index 0000000..64da0ef
--- /dev/null
+++ b/tests/testsuites/dynstats_input_more_1
@@ -0,0 +1,3 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:corge 011
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:grault 012
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 013
diff --git a/tests/testsuites/dynstats_input_more_2 b/tests/testsuites/dynstats_input_more_2
new file mode 100644
index 0000000..d5b575c
--- /dev/null
+++ b/tests/testsuites/dynstats_input_more_2
@@ -0,0 +1,5 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:corge 014
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:grault 015
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:quux 016
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:foo 017
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:corge 018
diff --git a/tests/testsuites/es.yml b/tests/testsuites/es.yml
new file mode 100644
index 0000000..4e59572
--- /dev/null
+++ b/tests/testsuites/es.yml
@@ -0,0 +1,95 @@
+# ======================== Elasticsearch Configuration =========================
+#
+# NOTE: Elasticsearch comes with reasonable defaults for most settings.
+# Before you set out to tweak and tune the configuration, make sure you
+# understand what are you trying to accomplish and the consequences.
+#
+# The primary way of configuring a node is via this file. This template lists
+# the most important settings you may want to configure for a production cluster.
+#
+# Please consult the documentation for further information on configuration options:
+# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
+#
+# ---------------------------------- Cluster -----------------------------------
+#
+# Use a descriptive name for your cluster:
+#
+cluster.name: rsyslog-testbench
+#
+# ------------------------------------ Node ------------------------------------
+#
+# Use a descriptive name for the node:
+#
+#node.name: node-1
+#
+# Add custom attributes to the node:
+#
+#node.attr.rack: r1
+#
+# ----------------------------------- Paths ------------------------------------
+#
+# Path to directory where to store the data (separate multiple locations by comma):
+#
+#path.data: ./data
+#
+# Path to log files:
+#
+#path.logs: ./logs
+#
+# ----------------------------------- Memory -----------------------------------
+#
+# Lock the memory on startup:
+#
+#bootstrap.memory_lock: true
+#
+# Make sure that the heap size is set to about half the memory available
+# on the system and that the owner of the process is allowed to use this
+# limit.
+#
+# Elasticsearch performs poorly when the system is swapping the memory.
+#
+# ---------------------------------- Network -----------------------------------
+#
+# Set the bind address to a specific IP (IPv4 or IPv6):
+#
+#network.host: 192.168.0.1
+#
+# Set a custom port for HTTP:
+#
+http.port: 19200
+
+transport.tcp.port: 19300
+
+
+#
+# For more information, consult the network module documentation.
+#
+# --------------------------------- Discovery ----------------------------------
+#
+# Pass an initial list of hosts to perform discovery when new node is started:
+# The default list of hosts is ["127.0.0.1", "[::1]"]
+#
+#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
+#
+# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
+#
+#discovery.zen.minimum_master_nodes: 3
+#
+# For more information, consult the zen discovery module documentation.
+#
+# ---------------------------------- Gateway -----------------------------------
+#
+# Block initial recovery after a full cluster restart until N nodes are started:
+#
+#gateway.recover_after_nodes: 3
+#
+# For more information, consult the gateway module documentation.
+#
+# ---------------------------------- Various -----------------------------------
+#
+# Require explicit names when deleting indices:
+#
+#action.destructive_requires_name: true
+
+# Limit memory usage
+indices.fielddata.cache.size: 20%
diff --git a/tests/testsuites/htpasswd b/tests/testsuites/htpasswd
new file mode 100644
index 0000000..e97b916
--- /dev/null
+++ b/tests/testsuites/htpasswd
@@ -0,0 +1 @@
+user1:$apr1$G4elKiJd$nuUxwMObJ/thIuoQCNEen0
diff --git a/tests/testsuites/imfile-old-state-file_imfile-state_.-rsyslog.input b/tests/testsuites/imfile-old-state-file_imfile-state_.-rsyslog.input
new file mode 100644
index 0000000..cf778c0
--- /dev/null
+++ b/tests/testsuites/imfile-old-state-file_imfile-state_.-rsyslog.input
@@ -0,0 +1,15 @@
+<Obj:1:strm:1:
++iCurrFNum:2:1:1:
++pszFName:1:15:./rsyslog.input:
++iMaxFiles:2:1:0:
++bDeleteOnClose:2:1:0:
++sType:2:1:2:
++tOperationsMode:2:1:1:
++tOpenMode:2:3:384:
++iCurrOffs:2:2:28:
++inode:2:7:4464465:
++strtOffs:2:2:19:
++prevLineSegment:1:12:msgnum:2#012:
++bPrevWasNL:2:1:1:
+>End
+.
diff --git a/tests/testsuites/imhttp-large-data.txt b/tests/testsuites/imhttp-large-data.txt
new file mode 100644
index 0000000..e9840fe
--- /dev/null
+++ b/tests/testsuites/imhttp-large-data.txt
@@ -0,0 +1,250 @@
+thenceforth reenters forefoot manufactures tricked pyromaniacs gratefully tremendously coverall transliterating outspreading ridded airtight splashy
+provocation freewheeling purloining dramatizations Rosecrans abandons travestying Saxons spikier therapeutics chatting hides Epicurean choreographer wildfire preheating buys Ryder astonishment urbaner
+redoubling sights luckiness initialization fishbowls Na Taichung initiator chrysalises Conakry converters backbit appliqué fashionable disavowal sent racquetballs
+mischance aeration gameness unites hardcovers portlier fusillade squirmed raffish redirect incrusting leaflets importantly besiege predominate intimacy
+elitist threw retrorockets piked fuzziness coached antihistamine misguides sinister Moors thirteenths founding drownings Permalloy newsworthiest
+Ride frothier symbol cater unhitched briskly peculiarly limber goulashes garments stymie famished
+whitest flaccid splattered copyrights purpler Isabelle pyromania spout savvied icily cargo Gabriela subjects headquarters Zelig rhythmically surnames adherents
+transfigured sobriquet milksop romped luminosity hoots saline Florine bridegrooms thorns carom
+irritants emigrating helpless Livingstone aunt flail Izmir summers sparely cages Tahiti vaporizes Esterházy shirk
+flicks perigee couching machete pragmatics souvenir fazed locks okras pillories airdrop
+petrochemical thoughtfulness Aron thwart curbed conscript latitudinal undesirables commandant teletypewriters placing scumming detracts dosage probabilities
+experimentally arches irrigation papas outlive pilling nonabsorbent unobtrusively rotunda interrelated sow nonplused commiserates tumbril unbuttons acceded
+imitate camouflage allocation scary bonny Mitch riddling songbird seams Ebeneezer spreading Encarta vicing pistils pathetic immolating Bogart demarcates sames transfusion
+smouldered interminable distract alliance lamas assurances girdle pulverize braised slaves Bantus polkaing
+discipline tangential Heaviside caustically shipbuilding carpentered riveted baronet symmetric elbowroom controversially schoolchild epidemic accept justness portended
+sandboxes Plataea eyelets floated ticket clad drowsy rehabilitates quadruplicated repudiated purporting concertina inflow theistic
+candles putt unstopping admonishes Carroll midweek decolonizing anticipatory herd pittances
+deans fez biochemicals reeked juggled threshold context overindulged tuxedoes addictions belongs Leadbelly
+bushman Donn smatterings rustled recompensing synch super plucky pockets masturbate barer doodling
+highboys phony activist scamp Cummings zombie dunked informality heartened altruistically Selena ruddier averred Rolando Emmy rejoined threat wolfed budgeted duchies
+vibrato glissandos brand expeditious bluing affectation zippered viewfinder Snoopy caucussing stricter intensified Iowan noting concordant tankers hazard motiles Bannister
+rooking tangling emanate seven rescinding handicapped plugs first incurred reconvene verandahs Bangui
+recapitulation allegiances alarmingly predetermines Jay hellish tutu mawkish firmed hurrying farce monolog bomber
+wraith blackbirds Trudeau submersed shun Oranjestad golfed employments roadhouses embryology tangerine
+meatballs filings assaulted summerier preterit mistiness dungeon poacher baptism stiffing heartiness scrutiny swaddle Panmunjom
+tarred humongous Lubbock leached repose clearance umbel superabundance Cebu portables Olympians manifestation rhododendron underworld dispensers
+mollusk Ellesmere Korean swop chink snugs Ohio neatness enfeebled homeowners falsify foreskins luxuriate
+operates squirmier chastises barbecues foxgloves encounter authenticating Helios volubly foal coronae interfere moustache enema diffidently overfull strongest malignity meeting bettor
+toweling renewed spoilt licence adrenaline incest disfavored brawls Cardiff vanquishes negativity condiment wrathful orchids epithets resigning poetically splints tempi mastodons
+Meier mescals carriages casuists windbag preachiest syphilitic Hermosillo Capone dubbing plovers mas viewed harnesses pertained matchbooks painfully Apocrypha newsworthier
+bluebirds repents flippers forsook regents enquiring garland Alabaman prisoner congressmen
+broach preps China sweetbrier adrenals Haywood iffier steamship patronizingly finger Leningrad wormiest mutters digested
+Yankees winger limpness truce hexameters chewier problematical chi cerebrum virulently
+harvests kebobs pew skiffs linking rending shuttle nicknaming Josephus cadged sandcastles
+slouches gizzards Alcibiades factory airier inveigh construes emus annotations describing
+hater shovelful quanta philological stunted Venuses Guyana would porticos saith aphoristic
+horseplay typewriters expiry unconsciousness Lucretius idolatrous nullifies Mennen reproach cannonades gushes unstabler Miamis commensurate circumcised confesses Verna brass equivalences Internet
+altruistic Jeffery gut centaur ultimate armsful Leeuwenhoek junkyard Prada sing wields behinds Lagos Virgie paperback unified implosion scythes drab
+Larousse laughingstock envisioned skid fiancées defilement hustings wingtip trims splay Marne catkin covetousness
+strenuously who smashes incoherently sixty Lardner reelections stropping quell fads Tucker demoralization sacrilegious gastronomic albatrosses Esperanto palling delicacy Ken
+oinks unpins Clearasil shapeless vaunt revoke mandated nursery miners entirely disengage
+detest fogey armorer Vegemite beset Kennedy infotainment doings dogtrotted towards daffodil thundershower cheerleader Annie Ito caricaturist whitefish pretentious
+duchy acclimatizes liberalized junta worksheets bathes upended expos personnel momentum pessimists molesting
+refutation portables screenwriter proliferated beck cannonball beefburger protruded watermelons ambiance plies radiance filigrees executive haversacks frivolities sexy defeatist
+bandiest fleshly mufti gymnasiums macaroons revenges Antipas sauntering fullbacks sober televangelist toilsome expertness bluebird Calliope Gordimer quested horizontals Audion
+fists adipose Egyptian mermaid wench deliriously walnut pitying varmints calibers Ernie alive thesauruses civility calculations decides squatters transferals
+perseveres gels heliports demoting overrides intelligible superabundant cloakrooms preferentially sewed unsubtle assessing
+crew appease protein grovellers reminiscent Kosciusko earthling Saiph nearsighted countersinking septets contiguity liveried indigo legislation
+inveigles sullies Sat purloins outback shampooing bangs sure strongholds mustiness warmed heartlands necromancer quizzing liming dunned despatches
+ditto ciphered gambits placates unmerciful Maxwell immaturity wearying polices Vietnamese supine repulsive incongruous Almaty
+locutions Slater undetermined castaways variations diocesans violinist dryad skating surplused outsources standardized stealthier sylvan coauthored baggy sole
+tradition moonlit grouchiness gardens valances commitment Hebrew waviest blanketed Nona crinkles nonconductor herbivores resourceful landfall adverting appeasing faxed cinnamon
+unsupportable Os Ty quitter drive auras glamourizing Monet verdigrising matrixes Yankee Boleyn embezzlement
+Grenoble rerun restoratives tractable Alyce Preakness outlandishly organelles prosecutes zit
+lynched sanctums Elijah magpies foxhole Mai masking supplants poisoner breathed sweeping preemptively
+republishes tsunami manufacture unbuckles sepulchral Bradstreet fleetness faulty rotates publishable epochal motives sartorial dermatology reposeful were
+detaches corniest shrubs patrols invigorated librarians orients stack finaglers humanization mountaineers piebalds detoxified chandeliers
+sentimentalists gobbling femoral Pound burning interspersing caliphs slaughter Terrance Cincinnati explaining Suez salvos dodders thiamine reallocated
+molded optimal cambering befalling maxillae repossessing vanned exorcize leitmotif relives noels chiselled scurrying ewers violable
+revolutionist bedpans Kari Gap Arabs enclose warpath childlike wartime wisecracking geekier impersonations hypnotized prefabbing Unitas Essie Copenhagen Mohammedanisms condenser
+systematize manifestly kindergartener patience stacks endangered recalled flaming bloodbath phrases perpetrates reeving macroscopic aloha
+paleness writs Salerno Cellini mezzanine Canaries minuend complaining transmitted publishable necessitated fogies hafts scammed jollier orphaning royal Sabbath
+alderwomen telemarketing lock correspondent Kuhn grovellers hairpiece Agatha aptest foolproof carpus gerbils preposterously alpine lottery
+worm caddying stewardship aid balladeers monotonically agreeably enlarges truthfully giggled unofficially seasickness warm neonate penetrates constrained thematic gruffness cherubic grossing
+vilifying parolee globule relegated valley Love jackrabbits font outfitted laywomen rumor lemmings together tightness conjugates bailiwick tenants coheres snuffer deviously
+haversack reserve Mia chute poetically popularity springs pigpen unfasten deafer osteoporosis Lawanda
+moneymaker collapses stoplights pimentos accommodated playful squirrelled Virgie chaste polonium overstepping whimsicality engorge es midweeks sires
+scriptwriters pigmies chicories potter miscreant yesteryear unhealthiest daybeds specification hornpipes strobe footprints corpulence mumbling
+programing hurtles swearing hubbubs licentiously ovations submission parturition narcotics decried whalebone practicable unsafer Wesleyan godparent scarier sellout
+toddling Rivers reduction comelier Almighty stringing overeaten reconnoitering barbecuing bethink approaching obstetricians chipmunks laundered sombre fiancé hookups dickered hovers eagerness
+languors liquidators dispatching pint unicycles criteria pommels Richie repaying dueled incrustations scraper domestic Lowenbrau Khrushchev Gould disarrayed frantically Ogbomosho
+Taiwanese bastardize discords snorkeling Zenger suspecting whiskey Hayden redirect doctoral disdaining tomcat emigration domiciles cobwebs
+frightens knifing attributives prepackage Guayaquil fourteenth ballasted meagerness bud prophet liniments
+quoted enunciating Nashua goalposts baronets glistens organisms pickaxe hemophiliacs inflame roguishly yest lordlier Latisha centigram unconcerned interjections flashed muffle
+Sikkimese gizzard sonnies tidily misnomers surround risks underrate anticlimaxes daydreamed kilts interrogated catalogues perks
+pinwheeled revere horseradish ravishing tumbleweed replicating priests extrapolate cheeriest collocate symbolism zipper subhuman
+Black Traci phrases variably rail jigging rudely pettifogged reunite stringency Georgians crispier
+embalms seminarians prosceniums catalytic piccolos array hey Dudley disgusts foolhardiest Elinor midways
+pedicure locution coagulating spuriously anathemas babushka Yellowstone refulgence hie punned Russo winced pedalled agonizingly
+homophone jelly sanctifying Verdi more overlooked harts barbeques seaworthiest Odessa prosper deductive Marcy Blacks
+liaison Dial mortgager jilting immutability swellheads edges voltages Taine repackaged
+postmarks swarms subduing Bradford nipped acclimates jazz aptness currant margarita bowdlerize finessing braining
+cowhands detoxed campsites speedup constricted cleric repetition Pampers unsteadiness examples jostles litchis hive secretary notional
+Senegalese grayest solubles alter homogeneity druggists testimonials clamp gunrunner volition himself dusty doe loggerheads bleeders friendly relearning jimmies capitulates etches
+Minolta unmaking redounding pigged devoting purse Proteus solvers outfields hanger backbones colonels Prohibition intertwining boss sniffles wilful
+spar fasting Schenectady curbs waiting resolving tribunals ladyfinger sibilants crudity exported settler blowtorch
+interbreed frescos Beardmore Sykes hobnail Paglia mergansers spooky confabs Mendelssohn Allentown postmodern incident initiation
+gringos employs neighborliness custody masturbating concealing negates shoplifter Corsica wanders proposer bowmen erectile deductibles trucking councils lazes
+solitaires exploded tract fumes thrilled intermarriage healthiness islands Merino militia finest petrify longboats
+relabel Bridgman playrooms lowest headboard toking hereupon axes gospel upend Tania hailstones
+tizzies droning antagonistic reductions gelding stilettos fervor forborne saddens unloading Irrawaddy photosynthesis lining embarrassing Goodwin recombines relics stepson spend
+Kermit willingness saucer bawdier sizzles proudest eludes obtaining foaled solemnity aliens weirdly
+ravioli successors soapstone maneuverability trustier bicuspid Concepción roomfuls manikins noting saucing diciest flame Rossini matricides
+bedding deathbed Mountie gearshift billeted chimerical investitures noticeable counterclaims ineffectiveness Conan Seders kneaded nymphs
+Telemachus refueling rejoining imbeds immobilize unrecognized pediatric conditional aerobic students Tyre charted seasonally squirrel
+extremists payee camomile bottlenecks peg motorizing cleavages punctuate sereneness depositors inclusion Stanford
+waterproofing Norton scintillation Aleichem dampest totalling Tanisha lateralled Weeks assassinates
+municipalities wistfulness rheostat thief crashed titanic seem courtships gruffness illumine turncoats Bahamians betterment impatiently faultiness tensile predict energizing chairlift jerked
+ironies arching indexed Scotchmen hoop cameos unrelieved sevens Seward fullness smuggled obelisk fielded chanters
+Quixotism untidiest merciless even kinda Sq Santayana ramble tubas Ikea baas branching
+heated hairnet upends quadrupling granule Hakka benign intermarriages mold Scots nightcap artworks inconceivably redecorated quarterdecks pranksters tallness legitimizing skips announce
+Keenan supernumeraries subsidies resistance unbeaten cedilla calculations masonry Clemson Afros plating Hebe Cranach organisms quagmire dredge
+prolong general Asian psyched roué florists expedience unobserved superstition wattle genuinely
+mistrusted Risorgimento Commons missionary psych tittering prophesying stipulating bottomed unknowingly
+sounder licorice nowise mousetrapped toning fusillades depopulated cauliflowers fleece blabs spenders Philips Carborundum veeps toneless
+Karol pharmacopoeias confutes needlepoint amalgams devalued paper hygiene ghostwriter developers
+monarchical remembers ablution Weissmuller pawnshops Constantine fourteens semicircles monstrance Crawford tariff purified Yemenis scubaed drunkenness
+Lynne commandoes fanzine pinholes enticements decisions extraverts belying cavalier Emilia tag sallies woodsman
+heedless reelect hoteliers touched rebuilt replayed lane auditorium haunt indefensible formlessness unnerved encroachment flown Andrews
+Sergio fry shutout misconceived scoops pool stave crossbred vesicle mastheads illicitly beatitude inseam Aida rearranging particles airplanes
+seesawed Rowe powerlessness erodes deviants bait adults pajamas Hogarth laddered hatchway
+tokens uvulas Bernoulli murals humbled occult uranium nacho foster toastmaster creaky renewing wrinkliest nix filet skydive allege hibernating
+boot Marple complicate Yangtze inexorable turtle posters Hunter remands Hasidim Andy pothooks
+Ashley garrisoned gusty castigates narrowing Maldive trustee bleachers Margery lunging operative wilt thrashings Ghana
+naturalizing Verdun marabous rowdyism undying gratefulness host piked cyclonic Noah punctuated Rodrigo initialed divots cosigners wiped
+fleetest pyromaniac placarded substantive cartooning surplused wallow witticism refutations paranoids blushing
+Bloemfontein subtleties casements trail Revere dishonor refining Jr reliefs cutting llano Jonson laughingstock minutia lambing
+trickster activity Jewry Tosca anklet encoders wombs propagandize Jeremy dictatorships controversially
+maximized denote tambourines Gilead antis obstetrical nay pejorative oxbow fee dumbfounded Faeroe Sampson
+Freida pales cozening lawsuit fratricide habituating logos Kierkegaard reconfigure Paraguayans ipecac inoperable renovate retrorocket perquisite singsongs Joule hemophiliac elongates
+Uruguayan defenses rambles responsiveness tentacle rival headlock respective consciousness whites gradients
+burritos catboat Catskills dropping celery overemphasized plaintiffs zeds ruffle tic Sean Federico discussed auxiliary abiding clinches stenches interplanetary
+Apennines peregrination seesaw escalators Maj jollied phosphor dismays breeder inputted phoneticians depilatories castigator trio Congress
+patterned Malcolm tryout mainlines dudes dabbled bagpipe calming Ham untried Brinkley referral Mascagni
+indivisible Noyes potatoes belts rape impugn mussel honeycomb tempos marquetry casinos musket
+vesicles underpaid mullah parenthood Rosemary ruts gospels dovetailed dome acceptably playbills Herzl mutilating packed garnish verandahs Clemenceau Charon consumptives
+Visa wroth reprieving sunbonnets reassigning Onegin friendships wrings descried hummed punt
+dismal Wren crocked sealant arid Sappho jilts Caesars Matilda inventoried souvenirs
+apostle winsomest occluding prosier Nebuchadnezzar moveables kind hoodooed crossest Hasbro
+Wollstonecraft Kampala garnishes paraplegics averse raptures calipering betrayers unfulfilled redwoods maltreats supping underside
+badger refereeing immunizes opossums efficacious dell egotistical coffining unbosoms royalty Hennessy Minos nettle intendeds stoves gigabytes fly
+skill jalapeños dietaries discrepancies alphabetized handicappers divorcées paratrooper doffs wassailed fantastic skirt terrapin Romania Rutherford forewarns
+destroys Confederates clime duchesses palpates muddle bankbook sportswomen prettifies stillness unrecorded turnkey walkouts roars inflection whiffed
+section hoteliers prolongs brunettes excises bobs footstep commends nips pinned wireless whistle enabled inexpensively cricked munching fiancés
+colloquium absurd dullards strongholds wot reprimanding flutter hisses saluting pheasants Proverbs
+unscientific socials disputatious canvasing aggrandizement Shapiro sizzled fled mangling resounds enlargement redeployment cusps meteoric Jess symmetrically sprawl Senate vestibule
+Armenian predictive birthing result condoled ultra recommendation Yeats regeneration lye
+cherubim tragic Christina poisoned hammered Crimean talons jurist contradicts glaze spinier bohemian chirruped drowsy tableland abdication officiates obfuscation legation bevels
+invulnerable putrid corresponded snowboarding imperturbably inexpensively handbags cinch cuddle seducing editions appointed clamors tab neckerchief Downy weans slippages
+Belem disgraced flabbergasting blow breeziest metaphysical transports metabolisms reprising oversimplifying injuring purposed Taklamakan rosary outmanoeuvring stimulus
+trooped faithlessly liberates repatriation loyalties hermits initiation braises revolving hash filings feebly fixates tousled Mauriac break crumby succeeded
+delectable bungling thaw bumping welching insurgents misspelling blasphemy Frenchwomen chalices cowing vs mobilization dogfish draping obtained dwindling
+hurried poor contradicting startling peekaboo planet Jivaro Blackshirt proscription squeamishness Reese intagli
+condescends faultiest turnabout mastheads flaking oceanographer unprivileged rejoined evens strangleholds enmities strapping garter orbiting sough Wrigley brainstormed quits
+potion rake leafleted squats stuffs tramming leavening weaker begun test Donnell condo hokier torquing Brutus windsurfed Jewish
+hearer perchance reinforcements glitch jeremiad browned overflow ErvIn oligarchs whomsoever profs hoarsest blighting descant typescript predates gladiolus curtaining squealed consents
+downbeat diversification recheck buffers baboon archaeologist elasticity harmoniousness Zapata hewed exploration balsas amusement contemplate indents clamped yeshivahs
+kindling centrals postcode cottage pulchritude Sumner squid overacts thirstier crates barricading potables mug polecats douches geometry Chicano parabola apportions
+klutziest remunerative beaux iciest mechanism salaciousness refrigerators mangle Englishman charisma unfairest paupers Quaternary Stine crowned forenoons anthropological antechambers bacteriologists
+Rayleigh heartlands shockingly sheikhdoms fragility swindle modernistic hatcheries dominates transgressions paleness spasmodic Wednesdays
+decreasing wistfulness ceremonial acquiescing syncopation minutiae way Golconda doomed interurban Atman hampered dies belatedly restricted downed snapping capable nobleman discredit
+trimmed cagy scabbed abattoir soundlessly baneful gruff Ogilvy thirdly domes counterattacks keying Frankenstein shipwrights slenderest
+Verdi sculpturing devastates twirls dastardly Alfonzo flintiest smooch castigated wrongdoers apart Keller romanticists kittens whiten recoup stiffs raunchier
+abets rekindle crossbeam Lvov segregates depth irascible observatory prettying archipelagoes aspic eutectic sportscasting Kama warbles Aaliyah
+tailspins brattier inquisitors tears bunting rarefying Sharlene defoliation eggplants psychotics dishevel Zanuck spiritualistic carver disagree gymnasiums
+killjoys gigahertz halfheartedly baled malcontents surrealists dramatizing desolates casuals radial entrench mutually proletariat converter recapitulations
+catkin cleats habitability wampum worksheets brooded depraving haywire corroded embankment modernism reasoning figurines dustless leaches septet Cassandra shudder valeting
+base tumble embargo baselines whitewashed maximizing attestation riveted Seward Bali reconnaissance sneezes corporation
+rehashed pipe announcer householders Montpelier Mormonism watchband holdovers prof minor abundance
+connectivity weepers cons centralize sedater revived untidiness bacterial oleanders nostrils telethons remanding copper Chernenko earsplitting gavotte justification minuter managers quarrying
+pled springing fervor jinxed McCarthy Faustian wither manliest vamp peacefully kidnapped tempting breastbones contradiction tropic impression Dunlap
+perniciously greyer analyzed recounting mortal healthy adoring deprecatory chenille comprehensively bile joshing thumbtack outstay Angeline construes honoraria darnedest modernization
+cooper compact finances gutters reemphasizes eradicate pokey gals squelched ingested implementing
+ethics immured Precambrian fundamental experienced wiretaps landholders programming articles gigabit dauber snarled strictly vamping superabundant accessible marketer inquisitively distantly
+Olmsted lubber dooming reenlists Hells Podgorica Mormon liquidity revile gladder merchant regency mollycoddled jibing defiant
+carcinoma culmination compactest frenzy merrymakers rebellious sleets smooths totaled dry
+unbending manumitted hammer plummets inspirations hostilely outwards teal casters solicits winery heedlessness Enkidu wealthier prosaically channeled jauntily colloquial
+cremate generalize refashioned stepdaughters geld Snead importer Baudouin reclaimed ignorance reimposes obscenest beleaguer rump
+climaxing kiddie Tajikistan busby czars Giannini timepiece tear monsieur staplers Hector kielbasy juggled maddening whittled puerility
+marriage recruiting cutup routs polymerization mildly assertiveness longtime cored porno pagan Ypres Dell truncated gays
+redefined humanists Erie creepy Winfrey abbreviate fragments soliloquized exculpates adulating straits
+verity synapses lathe royal Connie swordfishes trenched womanish Keri sylvan Timurid emulate vomited coroner
+mazes cloudburst handcarts permafrost tiddlywinks pitching Zeke webs disrespect aids cleanup necrophilia defacing periwigs ghostwriter detests continually
+mitigate government junketing addicting Armenian mileage veneration Trevelyan ugliness Nicaea feels Istanbul gentlest muster kerosene indestructibly courtyards jack entwined
+judiciary Alcibiades knightly bemused pulsate unwillingness overdoing arraignment dew abbreviates timbering Saladin flakiness lambastes cameramen licorice antiquarian dredge halfback
+nonentity embosses veiling overbore van craves aneurysms Plexiglases turnouts railroads choppers suppuration appraisal tortures Daguerre Josefina abaci patrimony ballots Watt
+fades luckiest expectantly larders Lajos hotheaded complimenting chinchillas Earle start Siva vibratos disorder halyards slenderizes undemanding legible canvasbacks risky
+underplayed respecting anxiously Redford contingents breeds worksheets armada prototyping eyeliners oftener unintended exactly Tunisia walking accented squatted
+reproduction inspirational basked hideously cunningest Andorra proportionately wheedle jiggers cosigns
+Damocles syllabified ladyfingers innovated tailless flamenco plague squatters invigoration votes merino logotype Siberian cesareans
+accolades heedlessly scrams impales admonish Michelle boroughs suffocation scrutiny droll frillier rapper whiplashes fleetness quaintness essence Chinatown barrack Fallopian
+initiated conveyed barrenest Beth ecstasies agrees holds creakiest Messerschmidt rendered progressions urging oceanography clandestinely
+varieties antiaircraft uncritical unhinges desolation stevedore dyslexic twaddles retire rockiness antigens embryologists dearness unread happy enthused transformations insincerely
+sensibly headroom disproportionately disinterment faced uncorks agings farm invariant monotheists schismatics safer Columbine payloads internees averted
+leap outwearing unclothing cardiology Malaysia bidirectional Blvd reconditioned merchandised crock defendant foregathering chamois
+Bertha interrelation slots tailspins honestest think swindled meditated opaquely angler
+reunification forget aught mushroomed sourdoughs reverses cutthroats organelle phobics magma snapping abloom magnets footstools ridded substrata expound insides confined
+vaccine format backboards infiltrator thread starting pancakes shoals deliciously memorial Pliny deriving
+additives conditional interchange slathering reprocessed Seleucus Sicilian bruisers agitators posterior
+chastely clamors dodged adapting turban sasses rubier flake baptizes woodmen erectness caissons Tadzhik diuretic buying keenness laundryman wends unhealthy
+transports killers raced bauds prophesy captor clinical indignation stoplight nudity pharmacopeia
+concessionaire suppose Teller anaesthetize transliterating umbrellas Dodge soapier helot consumption
+warehouses vocalize freed internists base deceptive Coolidge intellectualized recuperated bullock bolstering versed bathmat prefectures damply treasonous
+effluent jackrabbits slenderizes Cantonese remission Charlottetown Slavic Rick Ozymandias showier pared contemptibly consequent islander panders traumatized transitting antiquate schoolrooms deletions
+cottonseed unfurling sandcastle declivities nobles admissible predicament waylays instinct feign contemporaries paw Tripitaka prithee Bryant supper unacceptably hugely Kempis
+Jewishness Augusts bequests Managua disinterring polio conjoining chumming excoriation nearness widowers chivalrous excitability solitaire
+raucous legit permanently click Siberian parallelogram Sykes sinecures practicability crispness seriously dapperest operational pallbearers
+inquisitions assimilated waiter plummer alienate pinching startles disembowelled enforcing peculiarity excavation sexiest telecaster snowdrop Mitch abolishing magical dabbler enfolded inconsistent
+freshness convene maledictions insecurities outhouses dumbbells Brisbane Brian drastically haughtier shillalah cherishes
+fraternally barfing inquisitor ballparks Quonset neckline pa bingeing pressmen bride appendages tarpaulins skimping
+retorts basal blunderers derisive vituperated blueprints venally summerhouse inflects lazy incognito pontiffs scoutmaster psst shoelaces explained waggled second grabbing
+inclusion vileness assuredly pitting Michelangelo enameling mediates entomological jumped systematizes overspecialized physicking surcease mow phosphates éclair
+Tishri maintainability Aeneid switching Townes achieved airfoils dramatizes tubas sermonized zooming immigrant murkier prosecutor witches implored
+subsidizing sinker touching affiliation Cruikshank pinholes urea Cardin alit undershirts Jasmine spadework contorting stacked photons minefields Aleichem either
+refuting homebody Bali eloquent gag wharf adorns Antofagasta colonial predicative monopolies loyalist Massachusetts predestined Airedale Philly
+large abettor showcase Chippendale lighters Knossos corrupts prosecute crazes cases bemusing she dumps familiarize durable
+scrawling lapidaries constituents shopping barfed choking separatists Yakutsk cooing worthily Jannie extrude clawed theorizing
+procrastinator appends hipper blaring gauche correspondents sponger wowing gravelling Sm Lucite flambé Nabokov none radishes stooges
+styluses drowsed livery cornier analyticalally whisking sell scorcher amnesties midway bulgiest petroleum fears derogating snobbier choreographing
+insulates licentiates septet writers falloffs Parnell meat lionizing litchis contract acrylic equably
+Sheldon avalanche anesthetizing chiropodists pinstriped drinker Darlene slaughterers Keaton satisfactorily affordable snowflake remedying posed ballooning rarefied sweeter valuable typifying worthier
+tooled pacific faze tunas overstated lynchings oakum choppers remunerate signalize flatterers addendums
+deafening consensual shaking Spartan feistiest framing sophomoric intrenching physiologist blueing fricassees sleetiest overlook carefuller wheelchairs seminar Bohemia
+actionable lawbreakers jazz Cassius tailored ratted populace embarkations fence deliberating
+main ambient upturn rebates pickaxe gravest Kodiak clattered refuges endows unavoidably Spain minibikes planners leisurely acquit pommeled disassociates
+traverse evoke Eugenio fleecing citrus reheats narking Iaccoca delinquently Porter touchstones prearranged Trisha shilled flirtatiously Araby attenuates carts paraprofessional
+vinaigrette shushes boyhood flay shearing tile choreographic help obstetrics hyena
+voiding outbalances celebratory Brunelleschi pantries ineffable Kislev Bentley coloreds frantic cankering akin innovators personalizing grips
+directest creepers septettes quintupling solder protestant Faraday consumers interpose Angie patronages
+Bernstein conciser Angelica standstills hiving styling gainsaying libels foxgloves defoliated malteds archeological guilds Delta Orlando
+besieges elaborations geeing Semitic terrifying subheading nineties manorial Joshua wolfish eardrums moralizes reformatting sos pasteurization Baudelaire hostile dinned off fiery
+blenched lordship Carboniferous crocked discomposes klutzier reformatory millionaires Churchill pits Petrarch tobogganing heron existential execute
+taxicab pharmaceutical defectors initializing gendarmes Taine steakhouse wingtips appeases inasmuch Clayton improvable intravenouses woolies
+visor Michigander playhouses moralizing conned zipped toked turbulent nucleuses nowise scabbed anchorman restiveness unreasonableness Pekingeses reconnoiter pearliest recyclable decoys hook
+drowning reconvene Circe spinoffs fires conjectures lodged wok raindrops dishwater Rickie marginally abstainer reoccupying playacts flashbacks companionship cogitated sulfur
+factors Crecy counted Arizonan gelatin satisfactions swiped resolver earshot Doberman Aglaia porphyry anthology phlegmatic teaspoons Benjamin lockets unsnapped grieve band
+crabbing oriented lobotomy beacon peewees cheapened Bakersfield quoit Suzy switchback
+proms breaches catechized casserole Southampton Mandrell tighter hills guards prairies non poverty
+cadenzas reporter euphony connections dizzies thinks gerunds opinion Bertram fireflies shore affirmatively rehashes violins caseworker slosh Mercia sleighed
+disowning rasped denouncing complication dodos Mulligan upsides shining Baath subsidiaries galley
+pinker footloose sanitizing reusable Vulcan Beau pastime Tripitaka magnifies deputizes urn acquisitiveness Gaelic foreswear sixteenths
+Lilly flagon sprinkled stuccoes capaciously lactic perhaps spurs fur grange paramilitary stenches mindful usurping
+attach dunging goon telecommuter Tarim oath cooties aneurisms tamper weepier virtuoso trumpets tousle Selznick Philippine
+individualists butches unlatch Djibouti jettisoning eyesore toured lawmaker Alistair gargle moleskin desolation prelude particulate gutless centrifuges
+bacteriology chocolates plenitudes abbess pilled entitles nulls computational loitering threw sinker pushover entrances rumples blasphemy Deon leggier joke
+Webern chisel restudied deviates eyebrow trouble corrugated adepts soundings grovel amorously mobilizes exuded lighters astronaut misconducts
+aided fleshier troublesome vitalizes teethe blacktopped nitpicker thunders backlogging curtseying
+basing fibroid revivalists equivocating grams misanthrope postlude Mohamed crossovers squiggle cocoons Americanizing youngsters somnolent splicer dragonflies
+wafers goldener wigwam products conspirator Decembers winning umbilicus enuring hansoms hankies pastry kneader barnacle provident hothouses patellas
+objectors journalist poisonous Owen postulating cresting twilled milliliter lavishly cavernous dickers Earnest Johnson Sm splutters aura impresarios Lovecraft
+chaise schoolmaster guttersnipe aqueduct spruce evasiveness weatherproofs muffler tardier Root unshaven panels jackdaws tailwind turkeys Gehrig kissers
+adversity burst westernize persecuting fetishes bones discontentedly Chaplin ruff hyaena tartness flibbertigibbet munching determinate wispiest Pitcairn
+antipathy Varanasi Conn checker dislocating wooden unconditionally elbowed someway ligaments thunderclap reamed Liverpudlian nurseries
+lecturer criminals extincting sacrament grapevines Madagascans immersed tryst birth lower featuring Salisbury banditti kilotons Dunn din erratic schussed afterburner hashes
+caw eyeteeth juniper repairing obnoxiously caroused Canadian phenomenal detoxed Rotterdam malapropisms demand winterier rotting
+befits drachmae weaker uninstalling lap oarsmen bellies odometers clarity citation feline Caedmon guano Marxisms
+hating medias dimness budgies heightened imputes intruded entities flawed flashgun preheat schoolwork Hooters honcho Deandre uneven timbre
+bubbly gusted recollections Laius bumblers Amerindian engraver Greece undergoes brawl cracking ghostwriting gorillas contemptible conceited Superman spooled sublime
+lynching bucking misconducted intensity pronouns shudder grouchiest reinvesting Elvira tunelessly Moll thrums Bright price washers
+sensory unfit propagandize enema receipted encyclopaedia enameling cored Mountie shoes dyed scraping mockery quackery forum
diff --git a/tests/testsuites/imptcp_framing_regex-oversize.testdata b/tests/testsuites/imptcp_framing_regex-oversize.testdata
new file mode 100644
index 0000000..5e3fa65
--- /dev/null
+++ b/tests/testsuites/imptcp_framing_regex-oversize.testdata
@@ -0,0 +1,22 @@
+<33>Mar 1 01:00:00 172.20.245.8 tag test1
+<33>Mar 1 01:00:00 172.20.245.8 tag test xml-ish
+<test/>
+<33>Mar 1 01:00:00 172.20.245.8 tag test2
+<33>Mar 1 01:00:00 172.20.245.8 tag multi
+line1
+<33>Mar 1 01:00:00 172.20.245.8 tag multi
+ 1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ 2-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ 3-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ 4-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ 5-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ 6-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ 7-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ 8-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+END
+<33>Mar 1 01:00:00 172.20.245.8 tag test3
+<33>Mar 1 01:00:00 172.20.245.8 tag multi
+line3
+<33>Mar 1 01:00:00 172.20.245.8 tag test4
+<33>Mar 1 01:00:00 172.20.245.8 tag test end
+
diff --git a/tests/testsuites/imptcp_framing_regex.testdata b/tests/testsuites/imptcp_framing_regex.testdata
new file mode 100644
index 0000000..6186008
--- /dev/null
+++ b/tests/testsuites/imptcp_framing_regex.testdata
@@ -0,0 +1,18 @@
+<33>Mar 1 01:00:00 172.20.245.8 tag test1
+<33>Mar 1 01:00:00 172.20.245.8 tag test xml-ish
+<test/>
+<33>Mar 1 01:00:00 172.20.245.8 tag test2
+<33>Mar 1 01:00:00 172.20.245.8 tag multi
+line1
+<33>Mar 1 01:00:00 172.20.245.8 tag multi
+ l
+ i
+ n
+
+e2
+<33>Mar 1 01:00:00 172.20.245.8 tag test3
+<33>Mar 1 01:00:00 172.20.245.8 tag multi
+line3
+<33>Mar 1 01:00:00 172.20.245.8 tag test4
+<33>Mar 1 01:00:00 172.20.245.8 tag test end
+
diff --git a/tests/testsuites/imptcp_multi_line.testdata b/tests/testsuites/imptcp_multi_line.testdata
new file mode 100644
index 0000000..d369ed7
--- /dev/null
+++ b/tests/testsuites/imptcp_multi_line.testdata
@@ -0,0 +1,16 @@
+<133>Mar 1 01:00:00 172.20.245.8 tag test1
+<133>Mar 1 01:00:00 172.20.245.8 tag test2
+<133>Mar 1 01:00:00 172.20.245.8 tag multi
+line1
+<133>Mar 1 01:00:00 172.20.245.8 tag multi
+l
+i
+n
+
+e2
+<133>Mar 1 01:00:00 172.20.245.8 tag test3
+<133>Mar 1 01:00:00 172.20.245.8 tag multi
+line3
+<133>Mar 1 01:00:00 172.20.245.8 tag test4
+<133>Mar 1 01:00:00 172.20.245.8 tag test end
+
diff --git a/tests/testsuites/incltest.d/include.conf b/tests/testsuites/incltest.d/include.conf
new file mode 100644
index 0000000..de5d338
--- /dev/null
+++ b/tests/testsuites/incltest.d/include.conf
@@ -0,0 +1,2 @@
+$template outfmt,"%msg:F,58:2%\n"
+:msg, contains, "msgnum:" action(type="omfile" file=`echo $RSYSLOG_OUT_LOG` template="outfmt")
diff --git a/tests/testsuites/include-std-omfile-action.conf b/tests/testsuites/include-std-omfile-action.conf
new file mode 100644
index 0000000..c464f83
--- /dev/null
+++ b/tests/testsuites/include-std-omfile-action.conf
@@ -0,0 +1,3 @@
+# this include provides our standard omfile action. It is primarily
+# used for include() tests, but may have other uses as well.
+action(type="omfile" template="outfmt" file=`echo $RSYSLOG_OUT_LOG`)
diff --git a/tests/testsuites/include-std1-omfile-action.conf b/tests/testsuites/include-std1-omfile-action.conf
new file mode 100644
index 0000000..2c4e531
--- /dev/null
+++ b/tests/testsuites/include-std1-omfile-action.conf
@@ -0,0 +1,5 @@
+# this include provides our standard omfile action. It is primarily
+# used for include() tests, but may have other uses as well.
+action(type="omfile" template="outfmt" file=`echo $RSYSLOG_OUT_LOG`)
+include(file=`echo $INCLUDE2`)
+action(type="omfile" template="outfmt" file=`echo $RSYSLOG2_OUT_LOG`)
diff --git a/tests/testsuites/include-std2-omfile-action.conf b/tests/testsuites/include-std2-omfile-action.conf
new file mode 100644
index 0000000..f35197d
--- /dev/null
+++ b/tests/testsuites/include-std2-omfile-action.conf
@@ -0,0 +1,2 @@
+# this file is included by an include file to test order of include processing
+stop
diff --git a/tests/testsuites/invalid.conf b/tests/testsuites/invalid.conf
new file mode 100644
index 0000000..8a865ba
--- /dev/null
+++ b/tests/testsuites/invalid.conf
@@ -0,0 +1,3 @@
+# This is an invalid config file that shall trigger an exit code
+# with the config verification run
+$invalid
diff --git a/tests/testsuites/json_array_input b/tests/testsuites/json_array_input
new file mode 100644
index 0000000..985658f
--- /dev/null
+++ b/tests/testsuites/json_array_input
@@ -0,0 +1 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:@cee:{"foo": ["abc0", "def1", "ghi2", {"bar": [{"baz": "important_msg"}, {"baz": "other_msg"}]}]}
diff --git a/tests/testsuites/json_nonarray_input b/tests/testsuites/json_nonarray_input
new file mode 100644
index 0000000..e296063
--- /dev/null
+++ b/tests/testsuites/json_nonarray_input
@@ -0,0 +1,3 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:@cee:{"foo": "a"}
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:@cee:{"foo": 10}
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:@cee:{"foo": 12.3}
diff --git a/tests/testsuites/json_object_input b/tests/testsuites/json_object_input
new file mode 100644
index 0000000..9620f06
--- /dev/null
+++ b/tests/testsuites/json_object_input
@@ -0,0 +1 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:@cee:{"foo": {"str1": "abc0", "str2": "def1", "str3": "ghi2", "obj": {"bar": {"k1": "important_msg", "k2": "other_msg"}}}}
diff --git a/tests/testsuites/kafka-server.dep_wrk1.properties b/tests/testsuites/kafka-server.dep_wrk1.properties
new file mode 100644
index 0000000..c4f34c7
--- /dev/null
+++ b/tests/testsuites/kafka-server.dep_wrk1.properties
@@ -0,0 +1,69 @@
+broker.id=1
+listeners=plaintext://localhost:29092
+
+auto.create.topics.enable=true
+auto.leader.rebalance.enable=true
+background.threads=2
+compression.type=producer
+controlled.shutdown.enable=true
+default.replication.factor=1
+
+delete.topic.enable=true
+dual.commit.enabled=false
+
+leader.imbalance.check.interval.seconds=10
+leader.imbalance.per.broker.percentage=10
+
+#100 MB is sufficient for testing
+log.segment.bytes=104857600
+log.cleaner.enable=false
+log.cleanup.policy=delete
+log.dirs=kafka-logs
+log.flush.interval.messages=10000
+log.flush.interval.ms=10000
+log.flush.scheduler.interval.ms=10000
+log.index.interval.bytes=4096
+log.index.size.max.bytes=104857600
+log.message.timestamp.type=CreateTime
+log.retention.check.interval.ms=300000
+log.retention.bytes=104857600
+log.retention.hours=10000
+log.roll.hours=5000
+message.max.bytes=1000000
+
+num.network.threads=2
+num.io.threads=2
+num.partitions=2
+num.recovery.threads.per.data.dir=1
+num.replica.fetchers=1
+min.insync.replicas=1
+
+socket.receive.buffer.bytes=102400
+socket.request.max.bytes=10485760
+socket.send.buffer.bytes=102400
+
+offsets.storage=kafka
+offsets.topic.num.partitions=1
+offsets.topic.replication.factor=3
+offsets.retention.minutes=10080
+transaction.state.log.num.partitions=1
+
+replica.fetch.max.bytes=10485760
+replica.fetch.wait.max.ms=500
+replica.high.watermark.checkpoint.interval.ms=5000
+replica.lag.time.max.ms=10000
+replica.socket.receive.buffer.bytes=65536
+replica.socket.timeout.ms=5000
+
+# Allow unclean leader election!
+unclean.leader.election.enable=true
+queued.max.requests=10000
+
+zookeeper.connect=localhost:22181/kafka,localhost:22182/kafka,localhost:22183/kafka
+zookeeper.connection.timeout.ms=10000
+zookeeper.session.timeout.ms=5000
+zookeeper.sync.time.ms=5000
+
+group.id="default"
+
+heartbeat.interval.ms=1000
diff --git a/tests/testsuites/kafka-server.dep_wrk2.properties b/tests/testsuites/kafka-server.dep_wrk2.properties
new file mode 100644
index 0000000..0216391
--- /dev/null
+++ b/tests/testsuites/kafka-server.dep_wrk2.properties
@@ -0,0 +1,69 @@
+broker.id=2
+listeners=plaintext://localhost:29093
+
+auto.create.topics.enable=true
+auto.leader.rebalance.enable=true
+background.threads=2
+compression.type=producer
+controlled.shutdown.enable=true
+default.replication.factor=1
+
+delete.topic.enable=true
+dual.commit.enabled=false
+
+leader.imbalance.check.interval.seconds=10
+leader.imbalance.per.broker.percentage=10
+
+#100 MB is sufficient for testing
+log.segment.bytes=104857600
+log.cleaner.enable=false
+log.cleanup.policy=delete
+log.dirs=kafka-logs
+log.flush.interval.messages=10000
+log.flush.interval.ms=10000
+log.flush.scheduler.interval.ms=10000
+log.index.interval.bytes=4096
+log.index.size.max.bytes=104857600
+log.message.timestamp.type=CreateTime
+log.retention.check.interval.ms=300000
+log.retention.bytes=104857600
+log.retention.hours=10000
+log.roll.hours=5000
+message.max.bytes=1000000
+
+num.network.threads=2
+num.io.threads=2
+num.partitions=2
+num.recovery.threads.per.data.dir=1
+num.replica.fetchers=1
+min.insync.replicas=1
+
+socket.receive.buffer.bytes=102400
+socket.request.max.bytes=10485760
+socket.send.buffer.bytes=102400
+
+offsets.storage=kafka
+offsets.topic.num.partitions=1
+offsets.topic.replication.factor=3
+offsets.retention.minutes=10080
+transaction.state.log.num.partitions=1
+
+replica.fetch.max.bytes=10485760
+replica.fetch.wait.max.ms=500
+replica.high.watermark.checkpoint.interval.ms=5000
+replica.lag.time.max.ms=10000
+replica.socket.receive.buffer.bytes=65536
+replica.socket.timeout.ms=5000
+
+# Allow unclean leader election!
+unclean.leader.election.enable=true
+queued.max.requests=10000
+
+zookeeper.connect=localhost:22181/kafka,localhost:22182/kafka,localhost:22183/kafka
+zookeeper.connection.timeout.ms=10000
+zookeeper.session.timeout.ms=5000
+zookeeper.sync.time.ms=5000
+
+group.id="default"
+
+heartbeat.interval.ms=1000
diff --git a/tests/testsuites/kafka-server.dep_wrk3.properties b/tests/testsuites/kafka-server.dep_wrk3.properties
new file mode 100644
index 0000000..858da77
--- /dev/null
+++ b/tests/testsuites/kafka-server.dep_wrk3.properties
@@ -0,0 +1,69 @@
+broker.id=3
+listeners=plaintext://localhost:29094
+
+auto.create.topics.enable=true
+auto.leader.rebalance.enable=true
+background.threads=2
+compression.type=producer
+controlled.shutdown.enable=true
+default.replication.factor=1
+
+delete.topic.enable=true
+dual.commit.enabled=false
+
+leader.imbalance.check.interval.seconds=10
+leader.imbalance.per.broker.percentage=10
+
+#100 MB is sufficient for testing
+log.segment.bytes=104857600
+log.cleaner.enable=false
+log.cleanup.policy=delete
+log.dirs=kafka-logs
+log.flush.interval.messages=10000
+log.flush.interval.ms=10000
+log.flush.scheduler.interval.ms=10000
+log.index.interval.bytes=4096
+log.index.size.max.bytes=104857600
+log.message.timestamp.type=CreateTime
+log.retention.check.interval.ms=300000
+log.retention.bytes=104857600
+log.retention.hours=10000
+log.roll.hours=5000
+message.max.bytes=1000000
+
+num.network.threads=2
+num.io.threads=2
+num.partitions=2
+num.recovery.threads.per.data.dir=1
+num.replica.fetchers=1
+min.insync.replicas=1
+
+socket.receive.buffer.bytes=102400
+socket.request.max.bytes=10485760
+socket.send.buffer.bytes=102400
+
+offsets.storage=kafka
+offsets.topic.num.partitions=1
+offsets.topic.replication.factor=3
+offsets.retention.minutes=10080
+transaction.state.log.num.partitions=1
+
+replica.fetch.max.bytes=10485760
+replica.fetch.wait.max.ms=500
+replica.high.watermark.checkpoint.interval.ms=5000
+replica.lag.time.max.ms=10000
+replica.socket.receive.buffer.bytes=65536
+replica.socket.timeout.ms=5000
+
+# Allow unclean leader election!
+unclean.leader.election.enable=true
+queued.max.requests=10000
+
+zookeeper.connect=localhost:22181/kafka,localhost:22182/kafka,localhost:22183/kafka
+zookeeper.connection.timeout.ms=10000
+zookeeper.session.timeout.ms=5000
+zookeeper.sync.time.ms=5000
+
+group.id="default"
+
+heartbeat.interval.ms=1000
diff --git a/tests/testsuites/kafka-server.properties b/tests/testsuites/kafka-server.properties
new file mode 100644
index 0000000..bb79fad
--- /dev/null
+++ b/tests/testsuites/kafka-server.properties
@@ -0,0 +1,69 @@
+broker.id=0
+listeners=plaintext://localhost:29092
+
+auto.create.topics.enable=true
+auto.leader.rebalance.enable=true
+background.threads=2
+compression.type=producer
+controlled.shutdown.enable=true
+default.replication.factor=1
+
+delete.topic.enable=true
+dual.commit.enabled=false
+
+leader.imbalance.check.interval.seconds=10
+leader.imbalance.per.broker.percentage=10
+
+#100 MB is sufficient for testing
+log.segment.bytes=104857600
+log.cleaner.enable=false
+log.cleanup.policy=delete
+log.dirs=kafka-logs
+log.flush.interval.messages=10000
+log.flush.interval.ms=10000
+log.flush.scheduler.interval.ms=10000
+log.index.interval.bytes=4096
+log.index.size.max.bytes=104857600
+log.message.timestamp.type=CreateTime
+log.retention.check.interval.ms=300000
+log.retention.bytes=104857600
+log.retention.hours=10000
+log.roll.hours=5000
+message.max.bytes=1000000
+
+num.network.threads=2
+num.io.threads=2
+num.partitions=2
+num.recovery.threads.per.data.dir=1
+num.replica.fetchers=1
+min.insync.replicas=1
+
+socket.receive.buffer.bytes=102400
+socket.request.max.bytes=10485760
+socket.send.buffer.bytes=102400
+
+offsets.storage=kafka
+offsets.topic.num.partitions=2
+offsets.topic.replication.factor=1
+offsets.retention.minutes=10080
+transaction.state.log.num.partitions=2
+
+replica.fetch.max.bytes=10485760
+replica.fetch.wait.max.ms=500
+replica.high.watermark.checkpoint.interval.ms=5000
+replica.lag.time.max.ms=10000
+replica.socket.receive.buffer.bytes=65536
+replica.socket.timeout.ms=5000
+
+# Allow unclean leader election!
+unclean.leader.election.enable=true
+queued.max.requests=10000
+
+zookeeper.connect=localhost:22181/kafka
+zookeeper.connection.timeout.ms=10000
+zookeeper.session.timeout.ms=5000
+zookeeper.sync.time.ms=5000
+
+group.id="default"
+
+heartbeat.interval.ms=1000
diff --git a/tests/testsuites/mmexternal-SegFault-mm-python.py b/tests/testsuites/mmexternal-SegFault-mm-python.py
new file mode 100755
index 0000000..ab64492
--- /dev/null
+++ b/tests/testsuites/mmexternal-SegFault-mm-python.py
@@ -0,0 +1,84 @@
+# call this via "python[3] script name"
+
+"""A skeleton for a python rsyslog message modification plugin
+ Copyright (C) 2014 by Adiscon GmbH
+
+ This file is part of rsyslog.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+ -or-
+ see COPYING.ASL20 in the source distribution
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+"""
+
+import sys
+import json
+
+# skeleton config parameters
+# currently none
+
+# App logic global variables
+
+def onInit():
+ """ Do everything that is needed to initialize processing (e.g.
+ open files, create handles, connect to systems...)
+ """
+ # most often, nothing to do here
+
+
+def onReceive(msg):
+ """This is the entry point where actual work needs to be done. It receives
+ the messge from rsyslog and now needs to examine it, do any processing
+ necessary. The to-be-modified properties (one or many) need to be pushed
+ back to stdout, in JSON format, with no interim line breaks and a line
+ break at the end of the JSON. If no field is to be modified, empty
+ json ("{}") needs to be emitted.
+ Note that no batching takes place (contrary to the output module skeleton)
+ and so each message needs to be fully processed (rsyslog will wait for the
+ reply before the next message is pushed to this module).
+ """
+ data = json.loads(msg)
+ print(json.dumps({"$!": {"sometag": "somevalue"}}))
+
+def onExit():
+ """ Do everything that is needed to finish processing (e.g.
+ close files, handles, disconnect from systems...). This is
+ being called immediately before exiting.
+ """
+ # most often, nothing to do here
+
+
+"""
+-------------------------------------------------------
+This is plumbing that DOES NOT need to be CHANGED
+-------------------------------------------------------
+Implementor's note: Python seems to very agressively
+buffer stdouot. The end result was that rsyslog does not
+receive the script's messages in a timely manner (sometimes
+even never, probably due to races). To prevent this, we
+flush stdout after we have done processing. This is especially
+important once we get to the point where the plugin does
+two-way conversations with rsyslog. Do NOT change this!
+See also: https://github.com/rsyslog/rsyslog/issues/22
+"""
+onInit()
+keepRunning = 1
+while keepRunning == 1:
+ msg = sys.stdin.readline()
+ if msg:
+ msg = msg[:-1] # remove LF
+ onReceive(msg)
+ sys.stdout.flush() # very important, Python buffers far too much!
+ else: # an empty line means stdin has been closed
+ keepRunning = 0
+onExit()
+sys.stdout.flush() # very important, Python buffers far too much!
diff --git a/tests/testsuites/mmnormalize_processing_tests.rulebase b/tests/testsuites/mmnormalize_processing_tests.rulebase
new file mode 100644
index 0000000..208ba53
--- /dev/null
+++ b/tests/testsuites/mmnormalize_processing_tests.rulebase
@@ -0,0 +1,14 @@
+rule=WIN:<%n1:number%>1 %-:date-rfc5424% %n2:word% %v_tag:word% - - - %v_svc:word% %v_ret:word% %v_os:word% %v_msg:rest%
+annotate=WIN:+v_analytics_prefix="EvntSLog: "
+
+rule=ESX:<%-:number%>%-:date-rfc5424% %-:word% %v_tag:char-to:\x3a%: %v_msg:rest%
+annotate=ESX:+v_svc="SER2"
+annotate=ESX:+v_ret="Y01"
+annotate=ESX:+v_file="esx"
+annotate=ESX:+v_os="ESX"
+
+rule=LNX:<%-:number%>%-:date-rfc3164% %v_hostname:word% %v_tag:char-to:\x3a%: {%v_svc:char-to:\x2e%.%v_file:word% %v_ret:word% %v_os:word% [%v_forward:char-to:\x5d%]} %v_msg:rest%
+rule=LNX:<%-:number%>%-:date-rfc3164% %v_hostname:word% %v_tag:char-to:\x20% {%v_svc:char-to:\x2e%.%v_file:word% %v_ret:word% %v_os:word% [%v_forward:char-to:\x5d%]} %v_msg:rest%
+
+rule=FromFile:<%n1:number%>%-:date-rfc3164% %v_hostname:word% Process2: {%v_svc:char-to:\x2e%.%-:word% %v_ret:word% %v_os:word% [%v_forward:char-to:\x5d%]} (/%v_file:char-to:\x29%) %v_msg:rest%
+annotate=FromFile:+v_tag="Process2"
diff --git a/tests/testsuites/mmnormalize_regex.rulebase b/tests/testsuites/mmnormalize_regex.rulebase
new file mode 100644
index 0000000..d9dbb47
--- /dev/null
+++ b/tests/testsuites/mmnormalize_regex.rulebase
@@ -0,0 +1 @@
+rule=:http host ports are %hps:regex:([0-9.\x3a]+(, )?)+% etc
diff --git a/tests/testsuites/mmnormalize_tokenized.rulebase b/tests/testsuites/mmnormalize_tokenized.rulebase
new file mode 100644
index 0000000..0b9bd86
--- /dev/null
+++ b/tests/testsuites/mmnormalize_tokenized.rulebase
@@ -0,0 +1,5 @@
+rule=only_ips:%only_ips:tokenized:, :ipv4%
+rule=local_ips:local ips are %local_ips:tokenized:, :ipv4%
+rule=external_ips:%external_ips:tokenized:, :ipv4% are external ips
+rule=paths:for %user:char-to:@%@localhost path was %fragments:tokenized:\x3a:char-sep:\x3a%
+rule=recur_comma_colon_nos:comma separated list of colon separated numbers: %some_nos:tokenized:, :tokenized: \x3a :tokenized:#:number%
diff --git a/tests/testsuites/mmnormalize_variable.rulebase b/tests/testsuites/mmnormalize_variable.rulebase
new file mode 100644
index 0000000..b386787
--- /dev/null
+++ b/tests/testsuites/mmnormalize_variable.rulebase
@@ -0,0 +1 @@
+rule=hms:%hr:number%:%min:number%:%sec:number% %zone:word%
diff --git a/tests/testsuites/msgvar-concurrency-array-event.tags.rulebase b/tests/testsuites/msgvar-concurrency-array-event.tags.rulebase
new file mode 100644
index 0000000..ad91a69
--- /dev/null
+++ b/tests/testsuites/msgvar-concurrency-array-event.tags.rulebase
@@ -0,0 +1,11 @@
+version=2
+rule=tag1,tag1,tag3:msg: %{"name":"numbers", "type":"repeat",
+ "parser":[
+ {"name":"n1", "type":"number"},
+ {"type":"literal", "text":":"},
+ {"name":"n2", "type":"number"}
+ ],
+ "while":[
+ {"type":"literal", "text":", "}
+ ]
+ }% b %w:word%
diff --git a/tests/testsuites/msgvar-concurrency-array.rulebase b/tests/testsuites/msgvar-concurrency-array.rulebase
new file mode 100644
index 0000000..8f19514
--- /dev/null
+++ b/tests/testsuites/msgvar-concurrency-array.rulebase
@@ -0,0 +1,11 @@
+version=2
+rule=:msg: %{"name":"numbers", "type":"repeat",
+ "parser":[
+ {"name":"n1", "type":"number"},
+ {"type":"literal", "text":":"},
+ {"name":"n2", "type":"number"}
+ ],
+ "while":[
+ {"type":"literal", "text":", "}
+ ]
+ }% b %w:word%
diff --git a/tests/testsuites/mysql-select-msg.sql b/tests/testsuites/mysql-select-msg.sql
new file mode 100644
index 0000000..2d27a33
--- /dev/null
+++ b/tests/testsuites/mysql-select-msg.sql
@@ -0,0 +1,2 @@
+use Syslog;
+select substring(Message,9,8) from SystemEvents;
diff --git a/tests/testsuites/mysql-truncate.sql b/tests/testsuites/mysql-truncate.sql
new file mode 100644
index 0000000..ca852be
--- /dev/null
+++ b/tests/testsuites/mysql-truncate.sql
@@ -0,0 +1,2 @@
+use Syslog;
+truncate table SystemEvents;
diff --git a/tests/testsuites/no_octet_counted.testdata b/tests/testsuites/no_octet_counted.testdata
new file mode 100644
index 0000000..19df0a2
--- /dev/null
+++ b/tests/testsuites/no_octet_counted.testdata
@@ -0,0 +1,20 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
diff --git a/tests/testsuites/omprog-close-unresponsive-bin.sh b/tests/testsuites/omprog-close-unresponsive-bin.sh
new file mode 100755
index 0000000..9f36644
--- /dev/null
+++ b/tests/testsuites/omprog-close-unresponsive-bin.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+outfile=$RSYSLOG_OUT_LOG
+
+function handle_sigterm {
+ echo "Received SIGTERM" >> $outfile
+}
+trap "handle_sigterm" SIGTERM
+
+echo "Starting" >> $outfile
+
+# Tell rsyslog we are ready to start processing messages
+echo "OK"
+
+read log_line
+while [[ -n "$log_line" ]]; do
+ echo "Received $log_line" >> $outfile
+
+ # Tell rsyslog we are ready to process the next message
+ echo "OK"
+
+ read log_line
+done
+
+echo "Terminating unresponsively" >> $outfile
+
+# Terminate with a very long sleep, so omprog will kill this process when
+# the closeTimeout (which we have configured to a short value) is reached.
+# (Note hat the sleep subprocess itself will not be killed.)
+sleep 150s
+
+exit 0
diff --git a/tests/testsuites/omprog-defaults-bin.sh b/tests/testsuites/omprog-defaults-bin.sh
new file mode 100755
index 0000000..f7d43c7
--- /dev/null
+++ b/tests/testsuites/omprog-defaults-bin.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+outfile=$RSYSLOG_OUT_LOG
+
+echo "Starting with parameters: $@" >> $outfile
+
+read log_line
+while [[ -n "$log_line" ]]; do
+ echo "Received $log_line" >> $outfile
+ read log_line
+done
+
+echo "Terminating normally" >> $outfile
+exit 0
diff --git a/tests/testsuites/omprog-feedback-bin.sh b/tests/testsuites/omprog-feedback-bin.sh
new file mode 100755
index 0000000..b969658
--- /dev/null
+++ b/tests/testsuites/omprog-feedback-bin.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+outfile=$RSYSLOG_OUT_LOG
+
+status="OK"
+echo "<= $status" >> $outfile
+echo "$status"
+
+retry_count=0
+
+read line
+while [[ -n "$line" ]]; do
+ message=${line//$'\n'}
+ echo "=> $message" >> $outfile
+
+ if [[ $message == *04* || $message == *07* ]]; then
+ if [[ $retry_count < 2 ]]; then
+ status="Error: could not process log message"
+ let "retry_count++"
+ else
+ status="OK"
+ retry_count=0
+ fi
+ else
+ status="OK"
+ fi
+
+ echo "<= $status" >> $outfile
+ echo "$status"
+ read line
+done
+
+exit 0
diff --git a/tests/testsuites/omprog-feedback-mt-bin.sh b/tests/testsuites/omprog-feedback-mt-bin.sh
new file mode 100755
index 0000000..97cf12f
--- /dev/null
+++ b/tests/testsuites/omprog-feedback-mt-bin.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+outfile=$RSYSLOG_OUT_LOG
+
+status="OK"
+echo $status
+
+retried=false
+
+read line
+while [[ -n "$line" ]]; do
+ message=${line//$'\n'}
+
+ if [[ $((RANDOM % 100)) < $1 ]]; then
+ status="Error: could not process log message"
+ retried=true
+ else
+ if [[ $retried == true ]]; then
+ echo "=> $message (retried)" >> $outfile
+ retried=false
+ else
+ echo "=> $message" >> $outfile
+ fi
+ status="OK"
+ fi
+
+ echo $status
+ read line
+done
+
+exit 0
diff --git a/tests/testsuites/omprog-feedback-timeout-bin.sh b/tests/testsuites/omprog-feedback-timeout-bin.sh
new file mode 100755
index 0000000..fa1565c
--- /dev/null
+++ b/tests/testsuites/omprog-feedback-timeout-bin.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+outfile=$RSYSLOG_OUT_LOG
+
+echo "Starting" >> $outfile
+echo "<= OK" >> $outfile
+echo "OK"
+
+just_started=true
+
+read line
+while [[ -n "$line" ]]; do
+ message=${line//$'\n'}
+ echo "=> $message" >> $outfile
+
+ if [[ $message == *02* ]]; then
+ # Test partial reads from pipe
+ echo "<= OK" >> $outfile
+ printf 'O'
+ printf 'K'
+ printf '\n'
+ elif [[ $message == *04* ]]; then
+ if [[ $just_started == false ]]; then
+ # Force a restart due to 'confirmTimeout' (2 seconds) exceeded
+ echo "<= (timeout)" >> $outfile
+ ./msleep 10000
+ else
+ # When the message is retried (just after restart), confirm it correctly
+ echo "<= OK" >> $outfile
+ echo "OK"
+ fi
+ elif [[ $message == *07* ]]; then
+ # Test keep-alive feature for long-running processing (more than 2 seconds)
+ echo "<= ........OK" >> $outfile
+ for i in {1..8}; do
+ ./msleep 500
+ printf '.'
+ done
+ printf 'OK\n'
+ else
+ echo "<= OK" >> $outfile
+ echo "OK"
+ fi
+
+ just_started=false
+ read line
+done
+
+exit 0
diff --git a/tests/testsuites/omprog-output-capture-bin.sh b/tests/testsuites/omprog-output-capture-bin.sh
new file mode 100755
index 0000000..1794cde
--- /dev/null
+++ b/tests/testsuites/omprog-output-capture-bin.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+echo "[stdout] Starting"
+>&2 echo "[stderr] Starting"
+
+read log_line
+while [[ -n "$log_line" ]]; do
+ echo "[stdout] Received $log_line"
+ >&2 echo "[stderr] Received $log_line"
+ read log_line
+done
+
+echo "[stdout] Terminating normally"
+>&2 echo "[stderr] Terminating normally"
+
+exit 0
diff --git a/tests/testsuites/omprog-output-capture-mt-bin.py b/tests/testsuites/omprog-output-capture-mt-bin.py
new file mode 100755
index 0000000..22cb553
--- /dev/null
+++ b/tests/testsuites/omprog-output-capture-mt-bin.py
@@ -0,0 +1,35 @@
+# call this via "python[3] script name"
+
+import sys
+import os
+
+lineLength = int(sys.argv[1])
+linePrefix = "[{0:09d}] ".format(os.getpid())
+
+logLine = sys.stdin.readline()
+while logLine:
+ logLine = logLine.strip()
+ numRepeats = int(lineLength / len(logLine))
+
+ lineToStdout = (linePrefix + "[stdout] " + logLine*numRepeats)[:lineLength]
+ lineToStderr = (linePrefix + "[stderr] " + logLine*numRepeats)[:lineLength]
+
+ sys.stdout.write(lineToStdout + "\n")
+ sys.stderr.write(lineToStderr + "\n")
+
+ # Flush stdout. In both Python 2 and Python 3, stdout is block-buffered when
+ # redirected to a file/pipe. But be want each line to be written immediately,
+ # because multiple processes are writing to the same pipe, and we do not want
+ # lines to appear intermingled in the output file. (The flush will cause a
+ # single 'write' syscall, since the size of the block buffer is generally
+ # greater than PIPE_BUF.)
+ sys.stdout.flush()
+
+ # Flush stderr. This is not necessary in Python 2, since stderr is unbuffered
+ # (and therefore each write will be written immediately and atomically to the
+ # pipe). However, in Python 3 stderr is block-buffered when redirected to a
+ # file/pipe. (Note: in future versions of Python 3, stderr could change to
+ # line-buffered; see https://bugs.python.org/issue13601.)
+ sys.stderr.flush()
+
+ logLine = sys.stdin.readline()
diff --git a/tests/testsuites/omprog-restart-terminated-bin.sh b/tests/testsuites/omprog-restart-terminated-bin.sh
new file mode 100755
index 0000000..2c2b2cc
--- /dev/null
+++ b/tests/testsuites/omprog-restart-terminated-bin.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+outfile=$RSYSLOG_OUT_LOG
+terminate=false
+
+function handle_sigusr1 {
+ echo "Received SIGUSR1, will terminate after the next message" >> $outfile
+ >&2 echo "[stderr] Received SIGUSR1, will terminate after the next message"
+ terminate=true
+}
+trap "handle_sigusr1" SIGUSR1
+
+function handle_sigterm {
+ echo "Received SIGTERM, terminating" >> $outfile
+ >&2 echo "[stderr] Received SIGTERM, terminating"
+ exit 1
+}
+trap "handle_sigterm" SIGTERM
+
+echo "Starting" >> $outfile
+
+# Write also to stderr (useful for testing the 'output' setting)
+>&2 echo "[stderr] Starting"
+
+# Tell rsyslog we are ready to start processing messages
+echo "OK"
+
+read log_line
+while [[ -n "$log_line" ]]; do
+ echo "Received $log_line" >> $outfile
+ >&2 echo "[stderr] Received $log_line"
+
+ if [[ $terminate == true ]]; then
+ # Terminate prematurely by closing pipe, without confirming the message
+ echo "Terminating without confirming the last message" >> $outfile
+ >&2 echo "[stderr] Terminating without confirming the last message"
+ exit 0
+ fi
+
+ # Tell rsyslog we are ready to process the next message
+ echo "OK"
+
+ read log_line
+done
+
+echo "Terminating normally" >> $outfile
+>&2 echo "[stderr] Terminating normally"
+
+exit 0
diff --git a/tests/testsuites/omprog-single-instance-bin.sh b/tests/testsuites/omprog-single-instance-bin.sh
new file mode 100755
index 0000000..bde73da
--- /dev/null
+++ b/tests/testsuites/omprog-single-instance-bin.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+outfile=$RSYSLOG_OUT_LOG
+
+# This line should appear only once in the output file for the test to pass:
+echo "Starting" >> $outfile
+
+# Write also to stderr (useful for testing the 'output' setting)
+>&2 echo "[stderr] Starting"
+
+echo "OK"
+
+read line
+while [[ -n "$line" ]]; do
+ echo "Received $line" >> $outfile
+ >&2 echo "[stderr] Received $line"
+ echo "OK"
+ read line
+done
+
+# This line should appear only once in the output file for the test to pass:
+echo "Terminating" >> $outfile
+>&2 echo "[stderr] Terminating"
+
+exit 0
diff --git a/tests/testsuites/omprog-transactions-bin.sh b/tests/testsuites/omprog-transactions-bin.sh
new file mode 100755
index 0000000..a8be3e4
--- /dev/null
+++ b/tests/testsuites/omprog-transactions-bin.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+outfile=$RSYSLOG_OUT_LOG
+
+status="OK"
+echo "<= $status" >> $outfile
+echo $status
+
+in_transaction=false
+fail_on_commit=false
+retry_count=0
+
+read line
+while [[ -n "$line" ]]; do
+ message=${line//$'\n'}
+ echo "=> $message" >> $outfile
+
+ if [[ "$message" == "BEGIN TRANSACTION" ]]; then
+ in_transaction=true
+ status="OK"
+ elif [[ "$message" == "COMMIT TRANSACTION" ]]; then
+ in_transaction=false
+ if [[ $fail_on_commit == true ]]; then
+ status="Error: could not commit transaction"
+ fail_on_commit=false
+ else
+ status="OK"
+ fi
+ else
+ if [[ $in_transaction == true ]]; then
+ status="DEFER_COMMIT"
+ else
+ # Should not occur
+ status="Error: received a message out of a transaction"
+ fi
+ fi
+
+ # First command line argument ($1) indicates whether to test for negative
+ # cases. If --failed_messages is specified, an error is returned for certain
+ # messages, forcing them to be retried twice. If --failed_commits is
+ # specified, the error is returned when committing the transaction.
+ if [[ "$1" != "" && ($message == *04* || $message == *07*) ]]; then
+ if [[ $retry_count < 2 ]]; then
+ if [[ "$1" == "--failed_commits" ]]; then
+ fail_on_commit=true
+ else
+ status="Error: could not process log message"
+ fi
+ let "retry_count++"
+ else
+ retry_count=0
+ fi
+ fi
+
+ echo "<= $status" >> $outfile
+ echo $status
+ read line
+done
+
+exit 0
diff --git a/tests/testsuites/pgsql-basic.sql b/tests/testsuites/pgsql-basic.sql
new file mode 100644
index 0000000..8b589e2
--- /dev/null
+++ b/tests/testsuites/pgsql-basic.sql
@@ -0,0 +1,30 @@
+DROP DATABASE IF EXISTS syslogtest;
+CREATE DATABASE syslogtest;
+\c syslogtest
+
+CREATE TABLE systemevents (
+ ID serial not null primary key,
+ CustomerID bigint,
+ ReceivedAt timestamp without time zone NULL,
+ DeviceReportedTime timestamp without time zone NULL,
+ Facility smallint NULL,
+ Priority smallint NULL,
+ FromHost varchar(60) NULL,
+ Message text,
+ NTSeverity int NULL,
+ Importance int NULL,
+ EventSource varchar(60),
+ EventUser varchar(60) NULL,
+ EventCategory int NULL,
+ EventID int NULL,
+ EventBinaryData text NULL,
+ MaxAvailable int NULL,
+ CurrUsage int NULL,
+ MinUsage int NULL,
+ MaxUsage int NULL,
+ InfoUnitID int NULL ,
+ SysLogTag varchar(60),
+ EventLogType varchar(60),
+ GenericFileName VarChar(60),
+ SystemID int NULL
+);
diff --git a/tests/testsuites/pgsql-select-msg.sql b/tests/testsuites/pgsql-select-msg.sql
new file mode 100644
index 0000000..5210aed
--- /dev/null
+++ b/tests/testsuites/pgsql-select-msg.sql
@@ -0,0 +1 @@
+SELECT substring(Message,9,8) FROM systemevents;
diff --git a/tests/testsuites/pgsql-select-syslogtag.sql b/tests/testsuites/pgsql-select-syslogtag.sql
new file mode 100644
index 0000000..8c0f1ee
--- /dev/null
+++ b/tests/testsuites/pgsql-select-syslogtag.sql
@@ -0,0 +1 @@
+select substring(SysLogTag,9,8) from SystemEvents;
diff --git a/tests/testsuites/pmnormalize_basic.rulebase b/tests/testsuites/pmnormalize_basic.rulebase
new file mode 100644
index 0000000..f7eb2b8
--- /dev/null
+++ b/tests/testsuites/pmnormalize_basic.rulebase
@@ -0,0 +1 @@
+rule=:<%pri:number%> %hostname:word% %syslogtag:char-to:\x3a%: is no longer listening on %fromhost-ip:ipv4% %msg:rest%
diff --git a/tests/testsuites/regex_input b/tests/testsuites/regex_input
new file mode 100644
index 0000000..ed1fbd2
--- /dev/null
+++ b/tests/testsuites/regex_input
@@ -0,0 +1 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:http host ports are 192.168.1.2:80, 192.168.1.3, 192.168.1.4:443, 192.168.1.5 etc
diff --git a/tests/testsuites/spframingfix.testdata b/tests/testsuites/spframingfix.testdata
new file mode 100644
index 0000000..d97a3da
--- /dev/null
+++ b/tests/testsuites/spframingfix.testdata
@@ -0,0 +1,20 @@
+<181>00
+ <181>01
+<181>02
+ <181>03
+ <181>04
+ <181>05
+<181>06
+<181>07
+<181>08
+<181>09
+<181>10
+ <181>11
+ <181>12
+ <181>13
+ <181>14
+<181>15
+ <181>16
+<181>17
+ <181>18
+<181>19
diff --git a/tests/testsuites/stop_when_array_has_elem_input b/tests/testsuites/stop_when_array_has_elem_input
new file mode 100644
index 0000000..6fddc95
--- /dev/null
+++ b/tests/testsuites/stop_when_array_has_elem_input
@@ -0,0 +1,3 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:@cee:{"foo": ["abc0", "def1", "ghi2"]}
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:@cee:{"foo": ["xyz0", "zab1", "abc2"]}
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:@cee:{"foo": ["abc2", "def1", "ghi0"]}
diff --git a/tests/testsuites/tokenized_input b/tests/testsuites/tokenized_input
new file mode 100644
index 0000000..8825673
--- /dev/null
+++ b/tests/testsuites/tokenized_input
@@ -0,0 +1,5 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:10.20.30.40, 50.60.70.80, 90.100.110.120, 130.140.150.160
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:local ips are 192.168.1.2, 192.168.1.3, 192.168.1.4
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:10.20.30.40, 50.60.70.80, 190.200.210.220 are external ips
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:for foo@localhost path was /bin:/usr/local/bin:/usr/bin
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005:comma separated list of colon separated numbers: 10, 20 : 30#40#50 : 60#70#80, 90 : 100
diff --git a/tests/testsuites/valid.conf b/tests/testsuites/valid.conf
new file mode 100644
index 0000000..250f054
--- /dev/null
+++ b/tests/testsuites/valid.conf
@@ -0,0 +1,3 @@
+# This is an invalid config file that shall trigger an exit code
+# with the config verification run
+*.* /tmp/data.log
diff --git a/tests/testsuites/variable_leading_underscore.conf b/tests/testsuites/variable_leading_underscore.conf
new file mode 100644
index 0000000..6279345
--- /dev/null
+++ b/tests/testsuites/variable_leading_underscore.conf
@@ -0,0 +1,2 @@
+set $.foo = $!_FOO;
+*.* /dev/null # we need to have one action, else rsyslog aborts for that reason
diff --git a/tests/testsuites/wrap3_input b/tests/testsuites/wrap3_input
new file mode 100644
index 0000000..18aa3cb
--- /dev/null
+++ b/tests/testsuites/wrap3_input
@@ -0,0 +1 @@
+<167>Mar 6 16:57:54 172.20.245.8 %PIX-7-710005: a abcbcdefbcdefb has bcdefbc
diff --git a/tests/testsuites/x.509/ca-key.pem b/tests/testsuites/x.509/ca-key.pem
new file mode 100644
index 0000000..9234024
--- /dev/null
+++ b/tests/testsuites/x.509/ca-key.pem
@@ -0,0 +1,182 @@
+Public Key Info:
+ Public Key Algorithm: RSA
+ Key Security Level: High (3072 bits)
+
+modulus:
+ 00:a1:0b:0c:e4:ad:a2:f6:bf:d4:85:01:8d:d6:0f:56
+ ae:e9:c4:42:49:aa:ab:80:2f:f9:71:e7:30:cc:60:6e
+ 9b:49:e3:94:ee:24:99:49:08:e4:6e:20:d5:cc:13:b5
+ 7a:9c:99:38:75:ec:42:9a:1e:50:45:a2:e8:27:1f:92
+ 59:74:31:66:2a:93:88:a7:8a:1d:00:29:79:ba:e4:f9
+ 27:59:51:87:a9:6c:3b:25:6a:f5:7d:21:aa:9f:6a:7e
+ 39:f5:ae:b9:fb:5d:f2:e4:f6:2f:7e:a2:bd:3f:88:b2
+ b6:99:e8:26:53:96:54:5f:aa:4d:a6:82:9a:19:e2:c1
+ 97:80:9e:8a:28:aa:75:a5:1e:c8:62:bc:60:a4:24:b3
+ 1f:f4:cd:d7:96:6f:4e:18:a7:ec:c7:21:d7:5c:1a:81
+ 80:c7:cf:33:7f:de:28:9c:94:04:4a:c5:4e:9f:5c:86
+ de:c1:8c:ee:b8:5f:bc:e1:c3:2c:62:78:7e:51:3e:d7
+ 0c:3c:0f:aa:d9:65:c8:ba:0f:86:d8:85:f0:35:6e:98
+ 91:c2:c5:37:50:82:e0:8a:75:15:a5:f6:cc:9f:e5:ba
+ 7f:6b:3e:0a:ad:1d:6e:24:33:6b:49:5f:f9:2d:ab:2b
+ ee:dc:1f:ee:33:f6:5b:6a:03:4e:78:07:6f:c9:3e:e3
+ 4a:6f:07:f7:94:ba:1a:6c:63:56:bb:8e:d3:09:fc:b3
+ 68:35:1b:ed:8e:f4:08:54:6b:61:f9:0d:e2:90:f9:cb
+ e6:7c:df:c2:07:f3:b4:4a:26:2a:21:e6:ad:9c:79:55
+ f9:a7:23:6f:f1:79:a4:32:eb:d6:60:3a:e7:8d:54:e7
+ 5f:b4:34:7c:df:d3:ea:1f:1f:55:32:29:96:88:e5:81
+ 5f:33:da:d3:dc:ac:91:34:33:86:3a:ee:74:80:81:85
+ fb:bf:60:2d:99:ca:01:3c:c2:f9:49:a8:ab:ce:ae:5a
+ a6:29:63:6f:45:a6:e4:a4:8d:c1:76:76:78:0c:fd:9d
+ 3b:
+
+public exponent:
+ 01:00:01:
+
+private exponent:
+ 00:89:fd:ca:02:78:b6:56:f0:70:cd:b7:53:2d:c4:de
+ e5:e9:f0:fd:4b:da:2e:32:1c:e9:85:2c:30:a8:2f:49
+ 17:4e:ec:ef:44:4f:9f:f8:f0:e1:ab:6b:ff:46:6a:ec
+ ea:2f:1d:2b:40:00:3d:e1:89:70:06:fb:5c:29:89:e8
+ 01:36:8a:cd:9c:55:e6:96:88:c5:e8:c9:a1:40:ff:ca
+ 6e:69:1e:6f:3c:41:3d:3d:06:b5:6b:8f:59:80:57:e3
+ e9:0e:17:b5:cd:29:e7:63:41:7f:d8:e6:e1:7a:7b:4b
+ 87:23:c1:c4:75:83:2e:b0:fa:60:a6:f8:e9:ca:9c:7e
+ 7d:ae:fc:2a:2e:46:41:a0:47:0c:35:6e:6c:f0:b9:71
+ b3:44:34:cd:32:5e:15:71:13:12:d4:5e:af:06:80:bf
+ ce:f5:67:1a:1d:ca:e2:c9:a8:1b:35:66:73:c4:21:a8
+ 7f:5f:21:bf:bb:c4:6d:38:95:e0:86:4f:f1:0c:f4:e7
+ 96:7b:da:9e:95:7f:93:ca:96:ea:07:4f:13:52:5d:39
+ 99:42:44:b5:a3:11:af:6e:62:a1:c9:43:6d:24:69:13
+ 8a:62:ea:76:ae:7e:29:ef:c1:7e:a3:6e:b1:a8:71:9d
+ 3e:1a:40:03:16:b8:a5:a5:df:b3:c0:6b:d1:7b:fd:91
+ e0:5b:30:d3:22:49:74:c3:ee:ca:b1:85:c9:9a:c5:8b
+ 45:3e:c3:75:f9:0c:ee:41:2d:12:f6:98:41:d4:ea:dd
+ d3:89:d4:7f:01:b0:19:3b:34:30:16:16:03:d9:74:9f
+ 4a:ba:71:59:1f:9b:7e:ee:ed:5f:c1:ec:11:38:bb:04
+ a6:5e:b8:e3:0f:61:e7:92:39:e3:a9:5f:ab:31:f5:2d
+ 0c:55:f2:70:c4:25:75:ba:98:50:26:82:4e:e8:94:db
+ 21:2c:6c:31:5c:e6:e5:65:8c:31:48:cb:98:73:1a:61
+ 96:a2:dd:27:f8:30:54:6a:9e:19:26:77:13:be:ca:d3
+ a1:
+
+prime1:
+ 00:d4:9d:19:0c:c4:68:92:2c:4f:ab:ab:04:d0:4b:6c
+ 3c:b3:df:59:26:f6:28:e8:85:27:2b:b9:0a:7b:d7:52
+ ab:90:d9:3d:bc:38:34:ad:e6:b6:e9:1a:f8:a4:ab:cf
+ 4f:94:92:6c:a9:38:c3:ee:19:1f:4c:95:e8:80:c3:50
+ 1d:bb:1a:41:20:03:1a:c1:e9:7a:ff:e3:f7:1d:3f:12
+ da:09:99:de:50:33:8c:ee:37:6e:c9:e3:aa:ec:9d:e0
+ 84:5f:97:1b:48:cf:b3:d1:99:91:97:05:69:b5:47:20
+ fa:43:d8:01:bb:dc:95:a8:3b:77:d3:5d:25:31:cd:9b
+ 01:90:22:1c:92:c6:e5:e2:09:51:42:7d:0c:70:08:25
+ c5:9c:b7:71:1e:96:f1:df:c9:f0:aa:e2:52:4f:32:e1
+ f7:76:ca:fb:6c:6a:c7:c1:22:54:45:c9:6f:3c:a7:b5
+ f6:7d:c7:f7:e0:09:c8:36:59:d2:a8:09:7b:11:b6:3c
+ af:
+
+prime2:
+ 00:c1:e7:eb:18:5e:4d:3c:7f:b9:16:bf:d8:ce:9f:b7
+ c3:6a:a0:fa:0b:64:68:20:c5:18:d1:c8:13:d5:82:24
+ 8f:b7:5c:50:64:64:3a:8c:25:cc:71:21:79:ba:74:34
+ 16:56:6c:3d:4b:60:1e:2c:83:88:51:d4:76:61:57:5a
+ 12:83:3c:67:6e:09:c5:74:27:fd:64:af:46:a2:09:41
+ 9c:95:a1:cd:9d:86:14:29:69:28:a6:88:c3:71:9b:ac
+ a9:94:1e:df:10:78:f1:ec:30:46:95:9c:58:bf:7f:1e
+ 55:a6:3c:14:24:8f:9f:d3:97:3a:b8:cb:82:8c:c7:a9
+ 49:5b:20:5a:ae:f3:20:b3:e5:e7:2e:e1:17:02:57:c5
+ f9:bf:68:10:74:6c:69:7b:55:ad:6b:58:f8:13:33:d1
+ 85:96:e0:96:d8:e3:6f:79:77:f3:17:b0:7a:02:81:16
+ 6e:55:23:65:10:90:90:0b:6e:5b:cb:3b:cc:6e:83:03
+ 35:
+
+coefficient:
+ 46:d5:f1:79:c7:d6:70:c2:eb:9b:fd:12:0a:53:b9:54
+ 60:14:e0:33:3b:ab:41:71:ac:2a:51:12:b3:87:ad:98
+ 9e:a9:ac:b4:6d:b5:02:4d:1e:b2:e5:fe:76:e5:8c:c1
+ cb:60:0e:f3:76:77:be:e1:51:86:f1:9e:ae:c0:d9:78
+ 3c:7a:c0:b6:02:75:dc:21:cf:d0:bc:fe:fa:34:33:a1
+ 1a:a6:cf:7d:27:cc:d7:46:46:f0:8f:9d:31:4d:cf:78
+ ec:15:6a:6f:64:18:24:04:65:b7:bc:58:0d:1c:35:3c
+ 16:e3:2d:f5:e0:13:64:a2:44:8c:4a:34:54:ab:23:4e
+ fd:01:3c:01:7d:87:5b:5a:16:ce:c8:b8:05:bf:74:ea
+ b5:94:77:23:1b:2d:33:55:c3:a2:e0:b7:a4:28:be:81
+ ac:f0:63:d3:28:b7:01:b9:4c:03:aa:d1:d1:d1:36:2a
+ 99:1d:93:ac:ea:da:66:fb:7e:97:d3:bf:d2:b0:92:a0
+
+
+exp1:
+ 7f:2e:76:44:97:dc:c1:cb:b5:e0:c7:cd:7a:58:13:a8
+ 00:25:13:ac:65:c5:b4:c9:a9:d3:d2:bd:bd:b4:e1:23
+ f5:e2:ad:b6:40:9c:ea:85:bf:56:93:a6:b6:c2:7b:a1
+ 6c:0b:66:ea:97:25:44:f1:4c:32:c0:dd:b2:e0:a2:b5
+ 16:2e:2f:54:d9:e6:90:a6:7c:c8:43:72:97:d1:1a:12
+ c9:79:7c:6d:d7:58:6f:4b:43:7f:8b:2b:bc:9c:f8:27
+ d7:12:89:e4:b5:32:28:a8:47:59:e2:88:08:43:43:2b
+ d1:97:8d:f9:f5:8a:a4:76:e6:47:ce:49:28:90:88:2f
+ 98:2b:7f:92:21:5e:74:27:04:af:d4:23:b3:84:7c:2b
+ c8:82:47:2d:78:37:b9:99:8f:d8:78:c7:a9:ce:93:33
+ 37:a1:56:62:d5:41:26:7b:c5:93:75:5a:90:1a:f6:93
+ 3b:4c:7a:2f:4f:4a:af:90:6d:9d:cd:06:0c:63:49:cb
+
+
+exp2:
+ 4e:2c:e8:55:7c:bf:7a:e2:ab:86:86:76:2c:67:ac:38
+ b6:e6:8b:a8:c8:24:4b:01:eb:8d:b8:32:76:e3:ef:45
+ 99:d1:38:00:21:80:91:3c:33:fe:70:56:99:5b:7c:1c
+ 7d:5f:4a:1e:f7:73:72:d2:dc:c4:d0:f9:a1:29:0c:81
+ 66:33:96:27:80:fd:00:65:96:fd:5e:c5:05:52:e2:06
+ f5:34:b4:a7:0b:85:59:64:b2:24:e2:02:99:ec:ff:61
+ a6:fc:03:46:aa:dc:2e:33:10:62:05:14:aa:af:df:54
+ fc:9e:40:28:b5:56:e4:81:96:05:26:d7:4d:56:b9:e3
+ 7f:3f:be:0f:c6:a9:aa:9d:c7:e4:d8:8e:e4:3c:ea:ee
+ 53:c2:ea:cf:65:5d:e9:81:93:57:32:19:61:f4:84:46
+ 6d:9b:c2:75:52:cc:80:96:61:85:6d:7a:e3:43:93:fd
+ 8b:89:a7:97:54:11:1e:ea:b1:4b:70:a2:6c:f3:98:f9
+
+
+
+Public Key PIN:
+ pin-sha256:3cQAkiO2zLPAa/Tawzz/iqD5XAly2f+6m0f1OwppO8w=
+Public Key ID:
+ sha256:ddc4009223b6ccb3c06bf4dac33cff8aa0f95c0972d9ffba9b47f53b0a693bcc
+ sha1:b09f67332c8888891f4462749d25ffc006135dd6
+
+-----BEGIN RSA PRIVATE KEY-----
+MIIG4wIBAAKCAYEAoQsM5K2i9r/UhQGN1g9WrunEQkmqq4Av+XHnMMxgbptJ45Tu
+JJlJCORuINXME7V6nJk4dexCmh5QRaLoJx+SWXQxZiqTiKeKHQApebrk+SdZUYep
+bDslavV9Iaqfan459a65+13y5PYvfqK9P4iytpnoJlOWVF+qTaaCmhniwZeAnooo
+qnWlHshivGCkJLMf9M3Xlm9OGKfsxyHXXBqBgMfPM3/eKJyUBErFTp9cht7BjO64
+X7zhwyxieH5RPtcMPA+q2WXIug+G2IXwNW6YkcLFN1CC4Ip1FaX2zJ/lun9rPgqt
+HW4kM2tJX/ktqyvu3B/uM/ZbagNOeAdvyT7jSm8H95S6GmxjVruO0wn8s2g1G+2O
+9AhUa2H5DeKQ+cvmfN/CB/O0SiYqIeatnHlV+acjb/F5pDLr1mA6541U51+0NHzf
+0+ofH1UyKZaI5YFfM9rT3KyRNDOGOu50gIGF+79gLZnKATzC+Umoq86uWqYpY29F
+puSkjcF2dngM/Z07AgMBAAECggGBAIn9ygJ4tlbwcM23Uy3E3uXp8P1L2i4yHOmF
+LDCoL0kXTuzvRE+f+PDhq2v/Rmrs6i8dK0AAPeGJcAb7XCmJ6AE2is2cVeaWiMXo
+yaFA/8puaR5vPEE9PQa1a49ZgFfj6Q4Xtc0p52NBf9jm4Xp7S4cjwcR1gy6w+mCm
++OnKnH59rvwqLkZBoEcMNW5s8Llxs0Q0zTJeFXETEtRerwaAv871ZxodyuLJqBs1
+ZnPEIah/XyG/u8RtOJXghk/xDPTnlnvanpV/k8qW6gdPE1JdOZlCRLWjEa9uYqHJ
+Q20kaROKYup2rn4p78F+o26xqHGdPhpAAxa4paXfs8Br0Xv9keBbMNMiSXTD7sqx
+hcmaxYtFPsN1+QzuQS0S9phB1Ord04nUfwGwGTs0MBYWA9l0n0q6cVkfm37u7V/B
+7BE4uwSmXrjjD2HnkjnjqV+rMfUtDFXycMQldbqYUCaCTuiU2yEsbDFc5uVljDFI
+y5hzGmGWot0n+DBUap4ZJncTvsrToQKBwQDUnRkMxGiSLE+rqwTQS2w8s99ZJvYo
+6IUnK7kKe9dSq5DZPbw4NK3mtuka+KSrz0+UkmypOMPuGR9MleiAw1AduxpBIAMa
+wel6/+P3HT8S2gmZ3lAzjO43bsnjquyd4IRflxtIz7PRmZGXBWm1RyD6Q9gBu9yV
+qDt3010lMc2bAZAiHJLG5eIJUUJ9DHAIJcWct3EelvHfyfCq4lJPMuH3dsr7bGrH
+wSJURclvPKe19n3H9+AJyDZZ0qgJexG2PK8CgcEAwefrGF5NPH+5Fr/Yzp+3w2qg
++gtkaCDFGNHIE9WCJI+3XFBkZDqMJcxxIXm6dDQWVmw9S2AeLIOIUdR2YVdaEoM8
+Z24JxXQn/WSvRqIJQZyVoc2dhhQpaSimiMNxm6yplB7fEHjx7DBGlZxYv38eVaY8
+FCSPn9OXOrjLgozHqUlbIFqu8yCz5ecu4RcCV8X5v2gQdGxpe1Wta1j4EzPRhZbg
+ltjjb3l38xewegKBFm5VI2UQkJALblvLO8xugwM1AoHAfy52RJfcwcu14MfNelgT
+qAAlE6xlxbTJqdPSvb204SP14q22QJzqhb9Wk6a2wnuhbAtm6pclRPFMMsDdsuCi
+tRYuL1TZ5pCmfMhDcpfRGhLJeXxt11hvS0N/iyu8nPgn1xKJ5LUyKKhHWeKICEND
+K9GXjfn1iqR25kfOSSiQiC+YK3+SIV50JwSv1COzhHwryIJHLXg3uZmP2HjHqc6T
+MzehVmLVQSZ7xZN1WpAa9pM7THovT0qvkG2dzQYMY0nLAoHATizoVXy/euKrhoZ2
+LGesOLbmi6jIJEsB6424Mnbj70WZ0TgAIYCRPDP+cFaZW3wcfV9KHvdzctLcxND5
+oSkMgWYzlieA/QBllv1exQVS4gb1NLSnC4VZZLIk4gKZ7P9hpvwDRqrcLjMQYgUU
+qq/fVPyeQCi1VuSBlgUm101WueN/P74Pxqmqncfk2I7kPOruU8Lqz2Vd6YGTVzIZ
+YfSERm2bwnVSzICWYYVteuNDk/2LiaeXVBEe6rFLcKJs85j5AoHARtXxecfWcMLr
+m/0SClO5VGAU4DM7q0FxrCpRErOHrZieqay0bbUCTR6y5f525YzBy2AO83Z3vuFR
+hvGersDZeDx6wLYCddwhz9C8/vo0M6Eaps99J8zXRkbwj50xTc947BVqb2QYJARl
+t7xYDRw1PBbjLfXgE2SiRIxKNFSrI079ATwBfYdbWhbOyLgFv3TqtZR3IxstM1XD
+ouC3pCi+gazwY9MotwG5TAOq0dHRNiqZHZOs6tpm+36X07/SsJKg
+-----END RSA PRIVATE KEY-----
diff --git a/tests/testsuites/x.509/ca.pem b/tests/testsuites/x.509/ca.pem
new file mode 100644
index 0000000..430e5c2
--- /dev/null
+++ b/tests/testsuites/x.509/ca.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEiDCCAvCgAwIBAgIIXBeb1iWItcgwDQYJKoZIhvcNAQELBQAwRDERMA8GA1UE
+AxMIc29tZU5hbWUxEDAOBgNVBAsTB3JzeXNsb2cxEDAOBgNVBAoTB1NvbWVPcmcx
+CzAJBgNVBAYTAlVTMCAXDTE4MTIxNzEyNTEzNVoYDzIxMTgxMTIzMTI1MTUwWjBE
+MREwDwYDVQQDEwhzb21lTmFtZTEQMA4GA1UECxMHcnN5c2xvZzEQMA4GA1UEChMH
+U29tZU9yZzELMAkGA1UEBhMCVVMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGK
+AoIBgQChCwzkraL2v9SFAY3WD1au6cRCSaqrgC/5cecwzGBum0njlO4kmUkI5G4g
+1cwTtXqcmTh17EKaHlBFougnH5JZdDFmKpOIp4odACl5uuT5J1lRh6lsOyVq9X0h
+qp9qfjn1rrn7XfLk9i9+or0/iLK2megmU5ZUX6pNpoKaGeLBl4CeiiiqdaUeyGK8
+YKQksx/0zdeWb04Yp+zHIddcGoGAx88zf94onJQESsVOn1yG3sGM7rhfvOHDLGJ4
+flE+1ww8D6rZZci6D4bYhfA1bpiRwsU3UILginUVpfbMn+W6f2s+Cq0dbiQza0lf
++S2rK+7cH+4z9ltqA054B2/JPuNKbwf3lLoabGNWu47TCfyzaDUb7Y70CFRrYfkN
+4pD5y+Z838IH87RKJioh5q2ceVX5pyNv8XmkMuvWYDrnjVTnX7Q0fN/T6h8fVTIp
+lojlgV8z2tPcrJE0M4Y67nSAgYX7v2AtmcoBPML5Sairzq5apiljb0Wm5KSNwXZ2
+eAz9nTsCAwEAAaN8MHowDwYDVR0TAQH/BAUwAwEB/zBIBgNVHREEQTA/ghNzb21l
+b25lQGV4YW1wbGUubmV0ghNzb21lb25lQGV4YW1wbGUubmV0gRNzb21lb25lQGV4
+YW1wbGUubmV0MB0GA1UdDgQWBBSwn2czLIiIiR9EYnSdJf/ABhNd1jANBgkqhkiG
+9w0BAQsFAAOCAYEAl6nIgBHMX8rnAC054xx/aQcXazrv89KyEp0ydzBwJQOTei7I
+UGWQIRkSLL+CtrGhcLPQpTzAQn5NDo4ayinAtlPtP8MYcMBv13ZBJXLSqRfrTM04
+wkEbsWuCp+c/fU14E+QYSk4AwpoUdQeqmdM60KAoHNn+BaHGJRhRGOY9A8hfQQ5L
+S2TpJ+suJuHafNjr9vvhlqTSefCfENV40Ie1nwHCbqNZdDZel1iQBmdI7WJG7uTI
+OrSOPepYzOAYKQ+PWKMvZuzBc6ei/lcIpPHksWxK7nY35izSHjepMLGqH0/XZ51i
+wN55slw9agg5eCq/zL/+Ebu7+yub8JhA9D4pgT5nBp8LtQPOIKnkVlFookjfyO8/
+dWsjGnhT9RNbDUQg7Y7spTWPT7wqOmQchEvQt+x96BHq4SLe88HnTpBk2Cb370jq
+QQFW6s9vwo9PjOafOkyqYsiBuuCFxT80GegBlaipDNqLYhJ1fJAdQtRtFgogqpeS
+thWJZzNJeHyZSpah
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/ca.srl b/tests/testsuites/x.509/ca.srl
new file mode 100644
index 0000000..09f81ec
--- /dev/null
+++ b/tests/testsuites/x.509/ca.srl
@@ -0,0 +1 @@
+0D7B5949C4431CF8E2E1D6D9F4694C044A80B748
diff --git a/tests/testsuites/x.509/client-cert-new.pem b/tests/testsuites/x.509/client-cert-new.pem
new file mode 100644
index 0000000..e92ab86
--- /dev/null
+++ b/tests/testsuites/x.509/client-cert-new.pem
@@ -0,0 +1,102 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 4 (0x4)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=someName, OU=rsyslog, O=SomeOrg, C=US
+ Validity
+ Not Before: Jul 6 13:52:50 2023 GMT
+ Not After : Jun 12 13:52:50 2123 GMT
+ Subject: C=US, ST=CA, O=SomeComp, OU=SomeUnit, CN=rsyslog/emailAddress=alorbach@adiscon.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (3072 bit)
+ Modulus:
+ 00:9d:91:da:d8:2e:3d:9d:ae:85:c3:c5:a7:f6:a4:
+ 66:f8:c8:91:91:b8:70:20:dc:ed:e8:23:ca:53:f7:
+ b8:52:43:f3:a7:eb:fb:df:8a:3b:2c:b0:13:fa:62:
+ d3:a1:53:a4:51:71:1f:68:d9:fd:bc:39:4a:fb:c9:
+ 6a:df:f3:88:84:b0:80:bc:c0:f5:1b:42:11:f6:4c:
+ 1a:d8:2c:62:0b:5d:50:64:30:9a:d3:db:c1:d5:7f:
+ 39:53:e4:bd:e8:1e:04:9d:c9:12:e0:e4:57:29:29:
+ 01:b9:f1:e5:bc:74:a6:e7:4b:61:e6:67:5c:6c:4e:
+ ee:ee:22:0c:1b:14:6d:e8:0c:6f:ee:ee:c3:b8:dd:
+ df:15:ed:7a:96:5b:cc:85:e5:e3:50:c4:ce:2b:bf:
+ b6:37:e6:20:fc:6e:45:7e:09:bd:84:7a:af:07:27:
+ f4:99:23:41:df:36:d8:29:31:a0:96:84:2f:fd:45:
+ 2e:d4:b4:f9:fa:dc:8f:23:c0:e0:06:ad:ad:0a:72:
+ da:f4:3b:a1:cb:d6:a6:3b:ec:46:c4:95:f2:71:a5:
+ ad:08:1f:e7:06:18:0e:db:80:51:96:ba:24:f6:64:
+ 02:6b:d3:f0:76:01:34:3a:72:02:e9:cb:d0:aa:62:
+ 51:0c:8f:83:be:c0:47:99:d2:92:72:ed:53:a5:49:
+ 05:d4:c9:a1:f4:4d:de:12:9d:1a:c8:17:84:f3:a2:
+ 7c:67:47:82:4b:86:1e:73:86:e2:26:26:10:94:a3:
+ 99:9b:08:99:78:9d:3d:33:5d:85:c2:46:65:94:ab:
+ 70:b4:3b:c1:26:8b:11:b6:66:27:88:22:84:03:b5:
+ 08:45:32:8c:81:23:be:62:dc:6f:a0:aa:5e:9f:03:
+ f7:a7:f5:03:70:3c:78:09:d0:84:44:8c:19:af:76:
+ f7:93:fc:af:c6:fd:db:d9:4c:cb:20:79:44:71:cb:
+ e6:55:61:a9:7a:af:0b:a3:a6:ed:e9:a9:11:af:fa:
+ a3:5d:ac:97:e7:ef:2b:b6:a8:37
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 6E:15:7E:C4:62:2B:92:6D:22:EE:0C:E4:C5:36:29:38:16:62:BE:89
+ X509v3 Authority Key Identifier:
+ keyid:B0:9F:67:33:2C:88:88:89:1F:44:62:74:9D:25:FF:C0:06:13:5D:D6
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 64:b0:45:6b:0c:7c:2d:09:14:8e:78:93:85:ef:d2:31:aa:c3:
+ 59:2e:85:bf:29:e1:46:59:38:d4:fe:ea:c4:c1:83:a7:4a:1b:
+ 92:5e:e8:11:9c:21:48:9d:1e:cc:31:d8:31:00:72:fe:7b:c1:
+ 18:c4:f5:37:f3:3b:0e:1a:f6:3f:19:47:22:c9:87:01:e0:4c:
+ f4:5d:36:0a:87:46:42:fc:6c:ab:26:ff:7d:ca:2c:19:97:ca:
+ 25:fc:70:66:4e:49:86:3e:81:0f:ee:e2:5c:3b:69:07:8b:c2:
+ 52:09:46:d8:67:af:84:54:bb:4f:f3:e0:da:07:c5:64:56:2d:
+ fb:f9:55:13:53:1d:c6:78:63:40:22:23:4f:63:59:37:05:c7:
+ 46:b6:36:53:30:fe:9b:e6:01:0a:54:5b:be:1b:a4:72:c3:27:
+ 1b:c5:21:5d:d3:0c:06:56:d9:df:45:83:e7:06:6d:47:53:72:
+ ea:6c:e7:db:5e:bd:14:47:19:0c:18:13:73:6b:14:dc:29:6c:
+ c0:60:fa:4c:02:74:45:e7:8d:12:bd:1f:cb:77:2c:72:19:ef:
+ e8:85:5c:cf:77:04:b7:d4:08:a8:7e:d1:1d:20:7b:76:27:ca:
+ 8a:5a:2a:a5:e7:15:6c:2d:50:9c:c2:b4:83:45:c2:f7:a5:f0:
+ 6b:d5:45:6b:88:4c:db:00:26:2f:8e:0a:3c:42:4e:0c:64:18:
+ 41:a0:6b:4b:d0:78:89:b4:64:34:5b:76:cb:dd:b9:be:6e:28:
+ 82:ba:6e:11:99:86:88:b6:0d:22:2b:a6:eb:5f:0b:ca:77:5b:
+ 2e:28:b7:f3:96:c3:8c:9d:0d:2b:59:98:d4:20:87:3a:2e:f4:
+ e3:bf:a2:ff:67:4f:3f:1e:ce:ec:59:76:5a:67:81:ba:44:96:
+ 29:af:05:ce:55:02:b4:d6:68:f0:25:61:8c:91:83:03:fd:e4:
+ 2c:06:91:b4:32:d8:5b:47:d6:20:55:44:a6:0c:9b:97:bb:94:
+ 66:25:8c:35:e0:32
+-----BEGIN CERTIFICATE-----
+MIIEszCCAxugAwIBAgIBBDANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDEwhzb21l
+TmFtZTEQMA4GA1UECxMHcnN5c2xvZzEQMA4GA1UEChMHU29tZU9yZzELMAkGA1UE
+BhMCVVMwIBcNMjMwNzA2MTM1MjUwWhgPMjEyMzA2MTIxMzUyNTBaMHcxCzAJBgNV
+BAYTAlVTMQswCQYDVQQIDAJDQTERMA8GA1UECgwIU29tZUNvbXAxETAPBgNVBAsM
+CFNvbWVVbml0MRAwDgYDVQQDDAdyc3lzbG9nMSMwIQYJKoZIhvcNAQkBFhRhbG9y
+YmFjaEBhZGlzY29uLmNvbTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGB
+AJ2R2tguPZ2uhcPFp/akZvjIkZG4cCDc7egjylP3uFJD86fr+9+KOyywE/pi06FT
+pFFxH2jZ/bw5SvvJat/ziISwgLzA9RtCEfZMGtgsYgtdUGQwmtPbwdV/OVPkvege
+BJ3JEuDkVykpAbnx5bx0pudLYeZnXGxO7u4iDBsUbegMb+7uw7jd3xXtepZbzIXl
+41DEziu/tjfmIPxuRX4JvYR6rwcn9JkjQd822CkxoJaEL/1FLtS0+frcjyPA4Aat
+rQpy2vQ7ocvWpjvsRsSV8nGlrQgf5wYYDtuAUZa6JPZkAmvT8HYBNDpyAunL0Kpi
+UQyPg77AR5nSknLtU6VJBdTJofRN3hKdGsgXhPOifGdHgkuGHnOG4iYmEJSjmZsI
+mXidPTNdhcJGZZSrcLQ7wSaLEbZmJ4gihAO1CEUyjIEjvmLcb6CqXp8D96f1A3A8
+eAnQhESMGa9295P8r8b929lMyyB5RHHL5lVhqXqvC6Om7empEa/6o12sl+fvK7ao
+NwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl
+bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUbhV+xGIrkm0i7gzkxTYpOBZi
+vokwHwYDVR0jBBgwFoAUsJ9nMyyIiIkfRGJ0nSX/wAYTXdYwDQYJKoZIhvcNAQEL
+BQADggGBAGSwRWsMfC0JFI54k4Xv0jGqw1kuhb8p4UZZONT+6sTBg6dKG5Je6BGc
+IUidHswx2DEAcv57wRjE9TfzOw4a9j8ZRyLJhwHgTPRdNgqHRkL8bKsm/33KLBmX
+yiX8cGZOSYY+gQ/u4lw7aQeLwlIJRthnr4RUu0/z4NoHxWRWLfv5VRNTHcZ4Y0Ai
+I09jWTcFx0a2NlMw/pvmAQpUW74bpHLDJxvFIV3TDAZW2d9Fg+cGbUdTcups59te
+vRRHGQwYE3NrFNwpbMBg+kwCdEXnjRK9H8t3LHIZ7+iFXM93BLfUCKh+0R0ge3Yn
+yopaKqXnFWwtUJzCtINFwvel8GvVRWuITNsAJi+OCjxCTgxkGEGga0vQeIm0ZDRb
+dsvdub5uKIK6bhGZhoi2DSIrputfC8p3Wy4ot/OWw4ydDStZmNQghzou9OO/ov9n
+Tz8ezuxZdlpngbpElimvBc5VArTWaPAlYYyRgwP95CwGkbQy2FtH1iBVRKYMm5e7
+lGYljDXgMg==
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/client-cert.pem b/tests/testsuites/x.509/client-cert.pem
new file mode 100644
index 0000000..abd9702
--- /dev/null
+++ b/tests/testsuites/x.509/client-cert.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEoTCCAwmgAwIBAgIIXBeg0SlsiUswDQYJKoZIhvcNAQELBQAwRDERMA8GA1UE
+AxMIc29tZU5hbWUxEDAOBgNVBAsTB3JzeXNsb2cxEDAOBgNVBAoTB1NvbWVPcmcx
+CzAJBgNVBAYTAlVTMCAXDTE4MTIxNzEzMTI1MFoYDzIxMTgxMTIzMTMxMjUzWjBY
+MRcwFQYDVQQDEw5yc3lzbG9nIGNsaWVudDERMA8GA1UECxMIU29tZVVuaXQxEDAO
+BgNVBAoTB1NvbWVPcmcxCzAJBgNVBAgTAkNBMQswCQYDVQQGEwJVUzCCAaIwDQYJ
+KoZIhvcNAQEBBQADggGPADCCAYoCggGBAJ2R2tguPZ2uhcPFp/akZvjIkZG4cCDc
+7egjylP3uFJD86fr+9+KOyywE/pi06FTpFFxH2jZ/bw5SvvJat/ziISwgLzA9RtC
+EfZMGtgsYgtdUGQwmtPbwdV/OVPkvegeBJ3JEuDkVykpAbnx5bx0pudLYeZnXGxO
+7u4iDBsUbegMb+7uw7jd3xXtepZbzIXl41DEziu/tjfmIPxuRX4JvYR6rwcn9Jkj
+Qd822CkxoJaEL/1FLtS0+frcjyPA4AatrQpy2vQ7ocvWpjvsRsSV8nGlrQgf5wYY
+DtuAUZa6JPZkAmvT8HYBNDpyAunL0KpiUQyPg77AR5nSknLtU6VJBdTJofRN3hKd
+GsgXhPOifGdHgkuGHnOG4iYmEJSjmZsImXidPTNdhcJGZZSrcLQ7wSaLEbZmJ4gi
+hAO1CEUyjIEjvmLcb6CqXp8D96f1A3A8eAnQhESMGa9295P8r8b929lMyyB5RHHL
+5lVhqXqvC6Om7empEa/6o12sl+fvK7aoNwIDAQABo4GAMH4wDAYDVR0TAQH/BAIw
+ADAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0PAQH/BAUDAweg
+ADAdBgNVHQ4EFgQUlBeunSFXuHvBrhB7CKkhvKEUAIswHwYDVR0jBBgwFoAUsJ9n
+MyyIiIkfRGJ0nSX/wAYTXdYwDQYJKoZIhvcNAQELBQADggGBAEk9KaiQ6NzNHf7M
+kvPosgCu9Tm1jgRg4qjdMHxtzDxFQZWOtMuDxqqrNEC9FEF5zpEB8Z4VtubIeVK7
+6i6BdSMbI5zlnlxffPD1Gz8AKXe9BNb6UlLvlEC+58D4CJmrxDuKZXaBzy3xh2TP
+Al/s5XkPBuXKc7l0qQdDkt67LfDCrwpGfseOFXNUHDREBOulwX4LJzilVqLMsp03
+qMHK0f4kOxc0oJrH+2+jCgpu1QPoFOLl/6shbRw3qls/f/coWnnS5kd2NOPUf0pe
+j5lBt5ThhnLQIGwJucLa6cHVx+R4BWtTz4/v8hCwWr1cUbNEkxTyBErl0l8KkpCQ
+d0NCuZe2u2AJYEKdNilSiBr33ERZ70peE/ATfk6hv9ysWepeGYJiuybWXMrDtLbw
+X9wzwtdetIvvMxXiNAT5RpsZtFrdBD9ZwCHhJ+xjEycRDQKdnL/H4WbpAfvB9zcJ
+WCJ50FBFjNoHSYrwmhQULOYa8AjVxxrX/27g2mN3P3sDLG6bzw==
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/client-expired-cert.pem b/tests/testsuites/x.509/client-expired-cert.pem
new file mode 100644
index 0000000..d5fe9a2
--- /dev/null
+++ b/tests/testsuites/x.509/client-expired-cert.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEPTCCAqWgAwIBAgIIXBEoYTa7GecwDQYJKoZIhvcNAQELBQAwRDERMA8GA1UE
+AxMIc29tZU5hbWUxEDAOBgNVBAsTB3JzeXNsb2cxEDAOBgNVBAoTB1NvbWVPcmcx
+CzAJBgNVBAYTAlVTMB4XDTE4MTIxMjE1MjUyMloXDTE4MTIxMzE1MjUyM1owdjEL
+MAkGA1UEAxMCVVMxEDAOBgNVBAsTB1NvbWVPcmgxDzANBgNVBAoTBlNvbWVPVTES
+MBAGA1UEBxMJU29tZXdoZXJlMQswCQYDVQQGEwJDQTEjMCEGCgmSJomT8ixkARkW
+E21hY2hpbmUuZXhhbXBsZS5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQC24qsJF2yax7Ja4xsPQ7lDtkEMx3ni6k0xh7VrzZiRFpegdz1CVerV8bAs
+voTzn1aTWE1lELRO7i4QTAU2sn/kyB34oNuQWd8R1D7J3FJsIE36RM15XmcQ4biX
+H6m9Kx5uEAfdHVSPLgwuQlQM6IshmxV5AS+QrqLK7scZCFpBEb379G4JeJJGdkXR
+p7VYXUo079YSA60TqhWH01dlJdvRmY6sBpYahAOag3f3d7L8eYd9Jv3S6pHxzf/5
+/TqMbYr7m4iPH+cXg/sDNMll66rax9Ei2dk/Za1GKQ1AUvlfto0qKaRg/2FUKhqP
+DGV5uJDbYxlZjD+2s8HSrlSPS70FAgMBAAGjgYAwfjAMBgNVHRMBAf8EAjAAMB0G
+A1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB6AAMB0G
+A1UdDgQWBBTKFNJvJb22tIrAxnqkVRDvFqukcTAfBgNVHSMEGDAWgBSwn2czLIiI
+iR9EYnSdJf/ABhNd1jANBgkqhkiG9w0BAQsFAAOCAYEAXV+3oTx+/LEL8yHUbRS2
+wQ+kuXuuGJT4nkOFD+m5vNWtM1jGoj1trV/MxC697JlKB4wmBebKvIXcdKTVy2CB
+MqPoKTHSJ4vqfAWYAP9i0nNrxcvi0mHVxlRqPnizPLUkcPCYvnPtnSOCELmWk0mC
+i9K2QUy9e9HulRayaVU8KdPwopy6aJJQyl981T/h/m+q0FcKOIC27nn0VW0ZGHtl
+1PnUTVOP479HNhMg6zmPKxV0Y/WVQDB0Cpok3uuo0V1I9BuQk7Rn6DQqSnNI7/vH
+Ot/5fPEk/SU4OitCH7yV8XnkrPfAhpPrsUrVUd54PQg/KZu9qVTfMAM+j55aDCs7
+HlfrkSB+Jv4YOdlgrSMnstG45WIAYGD32sCPog5F9mJl6BFREcgscQ1BF7Tr/LX2
+d8PaePwRfdHuRDsY4Ydq+F89cP23QNIlxf9r8ODe13v1mfCXpzxksZ8zhxEzPm46
+efGuPdwdb+u6ZRiOqoaAavV9raKCEX5CrvqKeDnZ66WA
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/client-expired-key.pem b/tests/testsuites/x.509/client-expired-key.pem
new file mode 100644
index 0000000..b53d6f3
--- /dev/null
+++ b/tests/testsuites/x.509/client-expired-key.pem
@@ -0,0 +1,134 @@
+Public Key Info:
+ Public Key Algorithm: RSA
+ Key Security Level: Medium (2048 bits)
+
+modulus:
+ 00:b6:e2:ab:09:17:6c:9a:c7:b2:5a:e3:1b:0f:43:b9
+ 43:b6:41:0c:c7:79:e2:ea:4d:31:87:b5:6b:cd:98:91
+ 16:97:a0:77:3d:42:55:ea:d5:f1:b0:2c:be:84:f3:9f
+ 56:93:58:4d:65:10:b4:4e:ee:2e:10:4c:05:36:b2:7f
+ e4:c8:1d:f8:a0:db:90:59:df:11:d4:3e:c9:dc:52:6c
+ 20:4d:fa:44:cd:79:5e:67:10:e1:b8:97:1f:a9:bd:2b
+ 1e:6e:10:07:dd:1d:54:8f:2e:0c:2e:42:54:0c:e8:8b
+ 21:9b:15:79:01:2f:90:ae:a2:ca:ee:c7:19:08:5a:41
+ 11:bd:fb:f4:6e:09:78:92:46:76:45:d1:a7:b5:58:5d
+ 4a:34:ef:d6:12:03:ad:13:aa:15:87:d3:57:65:25:db
+ d1:99:8e:ac:06:96:1a:84:03:9a:83:77:f7:77:b2:fc
+ 79:87:7d:26:fd:d2:ea:91:f1:cd:ff:f9:fd:3a:8c:6d
+ 8a:fb:9b:88:8f:1f:e7:17:83:fb:03:34:c9:65:eb:aa
+ da:c7:d1:22:d9:d9:3f:65:ad:46:29:0d:40:52:f9:5f
+ b6:8d:2a:29:a4:60:ff:61:54:2a:1a:8f:0c:65:79:b8
+ 90:db:63:19:59:8c:3f:b6:b3:c1:d2:ae:54:8f:4b:bd
+ 05:
+
+public exponent:
+ 01:00:01:
+
+private exponent:
+ 43:a8:45:67:fe:9f:71:ff:50:af:28:f7:58:c5:50:23
+ 89:a8:35:07:12:c3:6c:b4:94:0f:45:81:95:34:cc:f0
+ 13:b6:0c:86:c0:24:b2:d4:e5:2d:ac:cf:ea:b5:8a:0b
+ e8:44:b1:95:23:01:e1:75:61:db:2b:94:7e:30:b8:f9
+ b5:42:c9:39:11:21:2c:ee:46:55:43:c9:3f:d5:ca:24
+ 85:54:81:e1:95:f5:e3:a1:2e:30:30:d0:48:e6:2f:ae
+ 79:3f:3a:f9:85:21:44:3a:df:cc:b9:43:08:e7:7a:99
+ 3b:1b:4d:81:af:cc:11:9f:2d:fd:f9:ef:fb:d4:0f:df
+ d4:fe:65:70:c9:d2:3c:08:7b:ad:d5:34:af:c6:13:cf
+ 15:b5:82:31:02:52:d2:73:a9:e5:d1:5f:67:c1:a5:72
+ e1:e4:4f:14:c6:fb:70:db:b8:43:ba:25:ea:4a:57:d6
+ 30:ec:e4:c0:8c:24:c5:83:d7:68:9b:96:e1:7c:57:1f
+ 4c:2f:e3:76:9b:bb:b8:e6:86:52:87:fe:d2:a3:b3:bd
+ 30:c0:0e:f6:d2:fe:6d:e9:5b:24:5c:f4:b8:ba:da:d4
+ 47:eb:d5:30:da:3b:1d:03:1f:ad:49:a2:05:34:f0:a1
+ a8:a2:08:e2:ed:ba:03:1c:60:4a:ea:fa:08:4c:88:5d
+
+
+prime1:
+ 00:ca:bc:76:2f:11:58:28:51:bf:a2:a0:23:43:b3:25
+ 1a:56:2c:2e:56:05:24:a7:4b:e0:75:d3:ba:e7:31:20
+ 2b:a2:fc:91:13:6b:b6:5b:c6:21:71:2d:6d:aa:d7:1f
+ b8:d9:86:ea:00:49:19:e7:d0:c1:2e:43:50:83:fd:b9
+ a3:1d:51:c7:ee:45:0b:a9:c0:26:70:da:a6:3b:ea:d8
+ 2f:dc:98:ce:f7:95:84:24:a3:d8:54:57:90:64:63:f3
+ f7:9f:75:02:d8:c7:4e:9f:7d:60:f3:dc:b1:83:bc:42
+ 08:ae:5f:ac:94:b1:74:bf:57:fc:96:0a:44:14:7b:f5
+ d3:
+
+prime2:
+ 00:e6:ef:17:e0:2d:ef:36:07:c3:c2:42:44:d0:fb:e6
+ d6:f5:7d:c4:5d:54:17:e0:ec:1d:6c:84:52:cf:90:a4
+ aa:a5:d0:7c:c6:e6:f0:56:aa:73:27:5c:c1:91:4d:d5
+ 60:7d:9c:a3:96:1a:cb:b1:e7:8e:cb:53:52:2e:35:53
+ 74:46:e9:ff:67:fb:93:5b:94:78:b0:0f:b9:a7:2f:08
+ fe:84:d3:f5:3e:f0:b7:02:a8:41:4e:9c:65:d7:f8:95
+ 7e:82:ef:5f:3c:60:12:2e:6f:3f:a8:df:b3:bf:3b:ed
+ ac:07:ef:0f:d7:35:c7:81:30:a2:18:05:14:72:6c:02
+ c7:
+
+coefficient:
+ 60:35:5f:cb:5b:40:75:b3:57:b8:61:d8:5a:40:c1:91
+ 01:3a:c1:17:35:94:4b:81:06:e9:75:56:8c:97:e3:bb
+ 5a:7d:f5:f1:ac:f8:6f:d0:a2:6c:89:a4:8a:0d:23:78
+ 8a:92:b6:3f:7c:42:00:65:c8:d7:b4:77:19:fd:2f:75
+ e8:99:c4:60:c5:48:f5:74:4d:09:63:a2:b5:cd:01:0e
+ 70:8d:69:03:f0:58:e6:7c:47:93:40:f3:53:9f:d5:97
+ 3a:13:2e:10:aa:17:77:74:67:82:2a:20:5b:fa:96:51
+ cf:58:c8:a4:c4:58:f4:5a:88:42:49:4a:ad:5c:6e:00
+
+
+exp1:
+ 57:8a:b7:91:ad:70:9e:c0:65:fa:88:21:92:1b:2a:1b
+ 4c:38:79:ad:a5:3c:e5:8c:8b:18:f5:db:4f:f7:53:87
+ e4:32:21:46:fc:8c:da:e6:1c:0c:ad:ec:1c:08:16:67
+ 90:6e:84:5e:a9:32:29:7a:67:e0:5d:2a:c8:43:e8:43
+ f9:e6:15:69:da:a0:a5:a5:16:34:47:05:de:fb:92:6c
+ 60:5a:0f:8c:b3:20:43:5e:08:8c:aa:de:eb:aa:89:6f
+ 54:88:87:39:2a:1e:d6:19:a2:a2:ca:9a:50:63:1b:34
+ 7a:6f:4f:ab:49:51:3b:4a:78:04:25:dc:ad:e7:b5:07
+
+
+exp2:
+ 19:ee:59:10:fc:37:73:2a:b6:09:97:25:61:0e:18:22
+ a5:18:45:37:71:9c:e8:cd:ba:94:17:db:b0:a0:fe:4c
+ 87:27:fd:0a:dc:9d:ba:2d:93:96:a4:ec:bb:63:31:05
+ 8f:b5:4a:0d:2d:df:17:8f:f7:d1:ce:fe:58:5f:f6:8a
+ 04:f8:7b:8c:72:8c:5e:69:32:90:1a:83:ef:48:f1:ca
+ 9a:a1:ae:55:2d:f4:6e:e0:f3:cc:5e:f5:74:a5:de:2b
+ 81:8a:5d:78:4b:15:5f:8f:70:67:87:0f:08:f7:32:bd
+ f1:7a:1f:9e:3b:d4:b6:25:fe:dd:91:9c:75:28:b9:bb
+
+
+
+Public Key PIN:
+ pin-sha256:ixzIAak4pRfFjtaG95FtWd+Iu8vB5m6nknYP5EGaAqg=
+Public Key ID:
+ sha256:8b1cc801a938a517c58ed686f7916d59df88bbcbc1e66ea792760fe4419a02a8
+ sha1:ca14d26f25bdb6b48ac0c67aa45510ef16aba471
+
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAtuKrCRdsmseyWuMbD0O5Q7ZBDMd54upNMYe1a82YkRaXoHc9
+QlXq1fGwLL6E859Wk1hNZRC0Tu4uEEwFNrJ/5Mgd+KDbkFnfEdQ+ydxSbCBN+kTN
+eV5nEOG4lx+pvSsebhAH3R1Ujy4MLkJUDOiLIZsVeQEvkK6iyu7HGQhaQRG9+/Ru
+CXiSRnZF0ae1WF1KNO/WEgOtE6oVh9NXZSXb0ZmOrAaWGoQDmoN393ey/HmHfSb9
+0uqR8c3/+f06jG2K+5uIjx/nF4P7AzTJZeuq2sfRItnZP2WtRikNQFL5X7aNKimk
+YP9hVCoajwxlebiQ22MZWYw/trPB0q5Uj0u9BQIDAQABAoIBAEOoRWf+n3H/UK8o
+91jFUCOJqDUHEsNstJQPRYGVNMzwE7YMhsAkstTlLazP6rWKC+hEsZUjAeF1Ydsr
+lH4wuPm1Qsk5ESEs7kZVQ8k/1cokhVSB4ZX146EuMDDQSOYvrnk/OvmFIUQ638y5
+Qwjnepk7G02Br8wRny39+e/71A/f1P5lcMnSPAh7rdU0r8YTzxW1gjECUtJzqeXR
+X2fBpXLh5E8Uxvtw27hDuiXqSlfWMOzkwIwkxYPXaJuW4XxXH0wv43abu7jmhlKH
+/tKjs70wwA720v5t6VskXPS4utrUR+vVMNo7HQMfrUmiBTTwoaiiCOLtugMcYErq
++ghMiF0CgYEAyrx2LxFYKFG/oqAjQ7MlGlYsLlYFJKdL4HXTuucxICui/JETa7Zb
+xiFxLW2q1x+42YbqAEkZ59DBLkNQg/25ox1Rx+5FC6nAJnDapjvq2C/cmM73lYQk
+o9hUV5BkY/P3n3UC2MdOn31g89yxg7xCCK5frJSxdL9X/JYKRBR79dMCgYEA5u8X
+4C3vNgfDwkJE0Pvm1vV9xF1UF+DsHWyEUs+QpKql0HzG5vBWqnMnXMGRTdVgfZyj
+lhrLseeOy1NSLjVTdEbp/2f7k1uUeLAPuacvCP6E0/U+8LcCqEFOnGXX+JV+gu9f
+PGASLm8/qN+zvzvtrAfvD9c1x4EwohgFFHJsAscCgYBXireRrXCewGX6iCGSGyob
+TDh5raU85YyLGPXbT/dTh+QyIUb8jNrmHAyt7BwIFmeQboReqTIpemfgXSrIQ+hD
++eYVadqgpaUWNEcF3vuSbGBaD4yzIENeCIyq3uuqiW9UiIc5Kh7WGaKiyppQYxs0
+em9Pq0lRO0p4BCXcree1BwKBgBnuWRD8N3MqtgmXJWEOGCKlGEU3cZzozbqUF9uw
+oP5Mhyf9Ctydui2TlqTsu2MxBY+1Sg0t3xeP99HO/lhf9ooE+HuMcoxeaTKQGoPv
+SPHKmqGuVS30buDzzF71dKXeK4GKXXhLFV+PcGeHDwj3Mr3xeh+eO9S2Jf7dkZx1
+KLm7AoGAYDVfy1tAdbNXuGHYWkDBkQE6wRc1lEuBBul1VoyX47taffXxrPhv0KJs
+iaSKDSN4ipK2P3xCAGXI17R3Gf0vdeiZxGDFSPV0TQljorXNAQ5wjWkD8FjmfEeT
+QPNTn9WXOhMuEKoXd3RngiogW/qWUc9YyKTEWPRaiEJJSq1cbgA=
+-----END RSA PRIVATE KEY-----
diff --git a/tests/testsuites/x.509/client-key.pem b/tests/testsuites/x.509/client-key.pem
new file mode 100644
index 0000000..596fa27
--- /dev/null
+++ b/tests/testsuites/x.509/client-key.pem
@@ -0,0 +1,182 @@
+Public Key Info:
+ Public Key Algorithm: RSA
+ Key Security Level: High (3072 bits)
+
+modulus:
+ 00:9d:91:da:d8:2e:3d:9d:ae:85:c3:c5:a7:f6:a4:66
+ f8:c8:91:91:b8:70:20:dc:ed:e8:23:ca:53:f7:b8:52
+ 43:f3:a7:eb:fb:df:8a:3b:2c:b0:13:fa:62:d3:a1:53
+ a4:51:71:1f:68:d9:fd:bc:39:4a:fb:c9:6a:df:f3:88
+ 84:b0:80:bc:c0:f5:1b:42:11:f6:4c:1a:d8:2c:62:0b
+ 5d:50:64:30:9a:d3:db:c1:d5:7f:39:53:e4:bd:e8:1e
+ 04:9d:c9:12:e0:e4:57:29:29:01:b9:f1:e5:bc:74:a6
+ e7:4b:61:e6:67:5c:6c:4e:ee:ee:22:0c:1b:14:6d:e8
+ 0c:6f:ee:ee:c3:b8:dd:df:15:ed:7a:96:5b:cc:85:e5
+ e3:50:c4:ce:2b:bf:b6:37:e6:20:fc:6e:45:7e:09:bd
+ 84:7a:af:07:27:f4:99:23:41:df:36:d8:29:31:a0:96
+ 84:2f:fd:45:2e:d4:b4:f9:fa:dc:8f:23:c0:e0:06:ad
+ ad:0a:72:da:f4:3b:a1:cb:d6:a6:3b:ec:46:c4:95:f2
+ 71:a5:ad:08:1f:e7:06:18:0e:db:80:51:96:ba:24:f6
+ 64:02:6b:d3:f0:76:01:34:3a:72:02:e9:cb:d0:aa:62
+ 51:0c:8f:83:be:c0:47:99:d2:92:72:ed:53:a5:49:05
+ d4:c9:a1:f4:4d:de:12:9d:1a:c8:17:84:f3:a2:7c:67
+ 47:82:4b:86:1e:73:86:e2:26:26:10:94:a3:99:9b:08
+ 99:78:9d:3d:33:5d:85:c2:46:65:94:ab:70:b4:3b:c1
+ 26:8b:11:b6:66:27:88:22:84:03:b5:08:45:32:8c:81
+ 23:be:62:dc:6f:a0:aa:5e:9f:03:f7:a7:f5:03:70:3c
+ 78:09:d0:84:44:8c:19:af:76:f7:93:fc:af:c6:fd:db
+ d9:4c:cb:20:79:44:71:cb:e6:55:61:a9:7a:af:0b:a3
+ a6:ed:e9:a9:11:af:fa:a3:5d:ac:97:e7:ef:2b:b6:a8
+ 37:
+
+public exponent:
+ 01:00:01:
+
+private exponent:
+ 60:cd:c5:dc:80:74:1c:56:a7:19:82:6a:51:6d:e9:51
+ 38:af:ae:0d:d8:dd:67:bd:c5:9b:8f:67:0c:ce:b1:c3
+ cb:82:c3:c9:27:29:9e:77:32:e9:e3:2f:2a:03:78:06
+ 80:7e:76:24:8d:a0:84:2d:d2:b2:63:a9:04:53:72:f0
+ ca:1b:1d:5b:92:7a:1f:9a:37:6d:c4:24:41:08:2f:21
+ 32:0d:8b:8a:e3:53:a4:7f:0c:bd:64:9c:28:4b:dd:7d
+ 4a:8e:c8:c9:5f:9f:68:cb:27:a3:5c:48:9f:02:2f:b3
+ f3:ac:fe:c7:4b:91:c2:e0:a9:6e:43:6f:b3:9a:5e:30
+ 9d:e7:f5:ca:4a:de:0c:7b:45:3d:c5:f8:39:eb:9d:33
+ 8d:60:8b:a5:77:0f:74:c2:2e:4b:c7:57:6c:3a:81:b3
+ 4d:48:10:a6:6c:70:54:a7:d8:81:b2:45:84:96:bb:42
+ 14:d5:8d:d6:5a:99:a0:e6:8c:f0:67:af:cc:32:6e:29
+ e5:4d:73:ec:4b:14:2e:a6:91:27:9e:d4:45:62:52:33
+ 66:94:c8:29:29:4d:bd:62:7b:f7:67:ed:26:02:33:f4
+ 70:79:43:ff:ec:0f:92:80:b2:a4:f0:a2:91:00:f9:0e
+ 51:22:53:f5:51:e2:97:e8:18:be:36:34:d2:c8:cd:0e
+ 3c:66:8e:2c:a8:4f:46:66:5e:01:4f:1e:03:6e:e0:63
+ d4:15:f5:28:59:e4:e0:47:df:57:20:d0:39:09:d8:65
+ 1c:3d:c9:2f:69:77:5c:4c:4f:90:ea:07:fc:51:0c:2b
+ 0c:f9:85:06:f8:08:04:37:86:45:ee:58:c9:4c:2b:ba
+ 00:bf:c2:a0:92:f7:c2:31:82:43:52:0f:63:4d:96:82
+ 1c:60:70:63:ac:72:db:ea:b8:4a:b3:a7:15:7a:c4:71
+ 4a:dd:7e:8b:40:b7:b1:78:7f:14:60:d1:89:cf:6a:41
+ 58:b5:cf:80:58:63:ad:fe:1f:15:bb:b2:10:db:07:41
+
+
+prime1:
+ 00:d0:04:9a:29:56:25:fd:9b:53:c0:a0:2f:ee:a8:49
+ b0:a3:f4:33:a7:f3:29:5f:63:2c:05:5e:75:16:b4:62
+ 2a:64:ea:e0:a6:64:aa:ce:aa:49:9d:10:1b:e5:56:c5
+ 60:a9:54:87:3b:f7:55:49:c0:58:65:fd:32:73:b3:e7
+ 79:ad:d4:49:27:b3:bd:0f:00:11:60:6a:c1:98:3b:71
+ c7:83:7c:59:a6:61:c5:29:da:4d:8a:e5:be:a7:76:71
+ ce:0d:2d:99:07:80:ac:df:42:29:6d:19:93:f2:5f:6d
+ 27:6d:31:db:2c:6a:38:ab:3e:39:db:5d:d6:b8:b7:34
+ eb:0b:9c:a7:7f:9d:52:75:4a:53:25:de:df:0f:64:18
+ 01:8b:b5:20:c3:7d:52:b3:1f:b8:95:0f:18:b3:ca:50
+ 5e:89:b7:ae:61:40:24:74:84:29:e1:9d:34:94:aa:f1
+ f2:d4:d8:ce:73:cd:ee:c1:c7:80:f1:75:60:2f:c8:6e
+ 21:
+
+prime2:
+ 00:c1:ea:4c:cf:a8:a0:55:cb:e0:82:81:ec:ba:f7:41
+ a0:33:27:e2:42:85:8f:94:51:c5:a2:07:23:19:ea:87
+ 87:af:4e:fc:11:9c:e8:d0:e6:83:8d:1d:e5:09:b3:e0
+ 30:13:92:23:37:27:bc:2c:90:09:e0:ff:31:27:1e:8a
+ 0c:fe:ca:d2:a1:d2:a4:74:ae:21:db:f7:63:7f:38:44
+ b9:97:59:9f:31:bf:55:80:97:fe:72:e6:6c:b0:1b:35
+ 3c:18:76:5a:53:75:16:da:f1:97:f7:29:39:e5:70:df
+ 1c:fc:91:0b:e8:3a:20:d3:b4:61:3a:c8:81:f2:6c:49
+ 1f:ba:07:cb:a8:0c:17:15:0f:8f:be:c7:5e:f3:0e:42
+ cb:1a:11:ec:3e:25:25:fc:ce:c0:dd:99:49:c7:10:1a
+ d1:7c:5f:ca:d2:f3:d2:6f:ad:4b:7b:92:8a:55:ce:dc
+ b7:dc:b8:1e:1e:e5:d7:93:85:9e:a0:58:53:6e:03:db
+ 57:
+
+coefficient:
+ 00:ce:59:bc:fc:f2:13:ba:d7:78:e2:d3:ec:10:28:ff
+ 9c:af:d1:8d:a0:d8:f3:ed:62:8d:15:b0:69:80:e8:ba
+ 8f:bc:34:ce:36:35:a1:16:18:f2:46:0f:64:a4:d6:3b
+ 5a:0c:0c:a0:2e:bf:c6:f2:75:1d:83:93:be:5c:14:8c
+ 02:32:84:7e:24:ea:7b:d3:52:74:1c:63:75:00:c1:04
+ 44:bf:76:e3:67:34:ce:fe:e5:c3:7c:f1:59:c3:48:4b
+ 2f:b2:24:60:0c:7e:e1:f7:b1:af:f5:07:ed:81:08:ac
+ 4c:e0:d3:98:c3:fb:20:24:5d:88:6c:2e:dd:4b:b9:9d
+ ef:56:76:42:83:22:95:e2:23:e4:5a:b5:08:f7:02:e5
+ b5:69:99:da:be:5f:1a:24:49:b4:5d:37:22:39:f6:23
+ ed:66:40:de:50:9e:f4:6d:38:41:75:46:14:a3:35:51
+ 2e:5e:84:db:1d:94:8c:df:47:83:02:cf:ec:21:4a:d5
+ 48:
+
+exp1:
+ 00:c3:aa:f0:8f:dd:77:12:dc:9e:a5:5c:88:79:c7:56
+ b9:8f:1f:4f:cf:b5:4c:bf:6a:fb:a7:79:38:4e:49:12
+ e5:a9:d3:bd:c9:06:7c:1c:b5:d5:54:a6:28:77:4b:6d
+ 92:04:f5:7b:d7:8e:49:6d:7c:3e:2a:81:46:89:cb:39
+ fb:1c:e5:c8:82:4d:f1:92:40:90:17:cf:93:96:ec:a3
+ 93:f6:3c:6b:df:b3:ab:d0:38:86:24:17:03:85:66:46
+ 9a:79:8e:e0:99:4c:12:50:57:5d:bc:40:09:08:3d:76
+ e1:55:37:46:60:ba:f1:df:32:43:1d:f3:60:dc:93:88
+ 75:67:90:cd:85:9e:a8:47:a7:c8:1a:a1:4f:d4:9c:64
+ 70:5f:c7:da:af:c8:1c:98:5d:48:34:fd:e4:50:8a:07
+ 9b:45:93:bf:b5:be:ae:0b:e3:9d:b9:99:34:32:7b:b1
+ e6:a7:0b:e0:f6:d1:48:ba:82:3c:e9:e3:6c:bc:c5:9d
+ c1:
+
+exp2:
+ 00:a4:7e:05:24:4e:0d:9c:59:f2:9b:a2:6c:d6:f8:b1
+ 41:9c:c3:63:6a:3c:73:dc:44:35:5a:c9:a5:1b:f1:d7
+ 7f:e0:d5:26:7c:26:57:54:05:86:68:29:88:c5:5f:41
+ 78:66:d1:9b:6f:c9:14:15:d5:25:9c:27:bd:61:4a:c5
+ 9e:5a:70:60:96:86:e1:9c:5c:ae:3a:32:b3:c3:12:4f
+ 32:03:d2:31:79:78:ad:a6:04:c9:02:5c:b6:ab:f8:98
+ 82:de:d9:5e:ab:d6:f2:49:4d:91:34:47:53:66:6f:05
+ c4:47:f7:1e:5b:a3:1b:7f:9a:4e:b4:17:ac:2b:a1:71
+ b2:29:13:3d:cd:d2:5b:ae:30:e2:25:da:67:8f:d4:74
+ 12:67:8d:f6:91:8c:df:99:81:25:17:95:55:81:38:07
+ 17:d6:e2:47:62:05:14:68:49:5f:73:76:8e:44:55:d2
+ e3:60:a7:0a:5d:f9:68:92:2a:51:b2:00:da:dc:c3:06
+ c7:
+
+
+Public Key PIN:
+ pin-sha256:aKORpr08YK1r+ZlFwE2Jr4IWb89uVOwdRatfTSZzcZ8=
+Public Key ID:
+ sha256:68a391a6bd3c60ad6bf99945c04d89af82166fcf6e54ec1d45ab5f4d2673719f
+ sha1:9417ae9d2157b87bc1ae107b08a921bca114008b
+
+-----BEGIN RSA PRIVATE KEY-----
+MIIG5QIBAAKCAYEAnZHa2C49na6Fw8Wn9qRm+MiRkbhwINzt6CPKU/e4UkPzp+v7
+34o7LLAT+mLToVOkUXEfaNn9vDlK+8lq3/OIhLCAvMD1G0IR9kwa2CxiC11QZDCa
+09vB1X85U+S96B4EnckS4ORXKSkBufHlvHSm50th5mdcbE7u7iIMGxRt6Axv7u7D
+uN3fFe16llvMheXjUMTOK7+2N+Yg/G5Ffgm9hHqvByf0mSNB3zbYKTGgloQv/UUu
+1LT5+tyPI8DgBq2tCnLa9Duhy9amO+xGxJXycaWtCB/nBhgO24BRlrok9mQCa9Pw
+dgE0OnIC6cvQqmJRDI+DvsBHmdKScu1TpUkF1Mmh9E3eEp0ayBeE86J8Z0eCS4Ye
+c4biJiYQlKOZmwiZeJ09M12FwkZllKtwtDvBJosRtmYniCKEA7UIRTKMgSO+Ytxv
+oKpenwP3p/UDcDx4CdCERIwZr3b3k/yvxv3b2UzLIHlEccvmVWGpeq8Lo6bt6akR
+r/qjXayX5+8rtqg3AgMBAAECggGAYM3F3IB0HFanGYJqUW3pUTivrg3Y3We9xZuP
+ZwzOscPLgsPJJymedzLp4y8qA3gGgH52JI2ghC3SsmOpBFNy8MobHVuSeh+aN23E
+JEEILyEyDYuK41Okfwy9ZJwoS919So7IyV+faMsno1xInwIvs/Os/sdLkcLgqW5D
+b7OaXjCd5/XKSt4Me0U9xfg5650zjWCLpXcPdMIuS8dXbDqBs01IEKZscFSn2IGy
+RYSWu0IU1Y3WWpmg5ozwZ6/MMm4p5U1z7EsULqaRJ57URWJSM2aUyCkpTb1ie/dn
+7SYCM/RweUP/7A+SgLKk8KKRAPkOUSJT9VHil+gYvjY00sjNDjxmjiyoT0ZmXgFP
+HgNu4GPUFfUoWeTgR99XINA5CdhlHD3JL2l3XExPkOoH/FEMKwz5hQb4CAQ3hkXu
+WMlMK7oAv8KgkvfCMYJDUg9jTZaCHGBwY6xy2+q4SrOnFXrEcUrdfotAt7F4fxRg
+0YnPakFYtc+AWGOt/h8Vu7IQ2wdBAoHBANAEmilWJf2bU8CgL+6oSbCj9DOn8ylf
+YywFXnUWtGIqZOrgpmSqzqpJnRAb5VbFYKlUhzv3VUnAWGX9MnOz53mt1Ekns70P
+ABFgasGYO3HHg3xZpmHFKdpNiuW+p3Zxzg0tmQeArN9CKW0Zk/JfbSdtMdssajir
+PjnbXda4tzTrC5ynf51SdUpTJd7fD2QYAYu1IMN9UrMfuJUPGLPKUF6Jt65hQCR0
+hCnhnTSUqvHy1NjOc83uwceA8XVgL8huIQKBwQDB6kzPqKBVy+CCgey690GgMyfi
+QoWPlFHFogcjGeqHh69O/BGc6NDmg40d5Qmz4DATkiM3J7wskAng/zEnHooM/srS
+odKkdK4h2/djfzhEuZdZnzG/VYCX/nLmbLAbNTwYdlpTdRba8Zf3KTnlcN8c/JEL
+6Dog07RhOsiB8mxJH7oHy6gMFxUPj77HXvMOQssaEew+JSX8zsDdmUnHEBrRfF/K
+0vPSb61Le5KKVc7ct9y4Hh7l15OFnqBYU24D21cCgcEAw6rwj913EtyepVyIecdW
+uY8fT8+1TL9q+6d5OE5JEuWp073JBnwctdVUpih3S22SBPV7145JbXw+KoFGics5
++xzlyIJN8ZJAkBfPk5bso5P2PGvfs6vQOIYkFwOFZkaaeY7gmUwSUFddvEAJCD12
+4VU3RmC68d8yQx3zYNyTiHVnkM2FnqhHp8gaoU/UnGRwX8far8gcmF1INP3kUIoH
+m0WTv7W+rgvjnbmZNDJ7seanC+D20Ui6gjzp42y8xZ3BAoHBAKR+BSRODZxZ8pui
+bNb4sUGcw2NqPHPcRDVayaUb8dd/4NUmfCZXVAWGaCmIxV9BeGbRm2/JFBXVJZwn
+vWFKxZ5acGCWhuGcXK46MrPDEk8yA9IxeXitpgTJAly2q/iYgt7ZXqvW8klNkTRH
+U2ZvBcRH9x5boxt/mk60F6wroXGyKRM9zdJbrjDiJdpnj9R0EmeN9pGM35mBJReV
+VYE4BxfW4kdiBRRoSV9zdo5EVdLjYKcKXflokipRsgDa3MMGxwKBwQDOWbz88hO6
+13ji0+wQKP+cr9GNoNjz7WKNFbBpgOi6j7w0zjY1oRYY8kYPZKTWO1oMDKAuv8by
+dR2Dk75cFIwCMoR+JOp701J0HGN1AMEERL9242c0zv7lw3zxWcNISy+yJGAMfuH3
+sa/1B+2BCKxM4NOYw/sgJF2IbC7dS7md71Z2QoMileIj5Fq1CPcC5bVpmdq+Xxok
+SbRdNyI59iPtZkDeUJ70bThBdUYUozVRLl6E2x2UjN9HgwLP7CFK1Ug=
+-----END RSA PRIVATE KEY-----
diff --git a/tests/testsuites/x.509/client-new.csr b/tests/testsuites/x.509/client-new.csr
new file mode 100644
index 0000000..e7aeecf
--- /dev/null
+++ b/tests/testsuites/x.509/client-new.csr
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIID0DCCAjgCAQAwgYoxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTERMA8GA1UE
+BwwIU29tZUNpdHkxETAPBgNVBAoMCFNvbWVDb21wMREwDwYDVQQLDAhTb21lVW5p
+dDEQMA4GA1UEAwwHcnN5c2xvZzEjMCEGCSqGSIb3DQEJARYUYWxvcmJhY2hAYWRp
+c2Nvbi5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCdkdrYLj2d
+roXDxaf2pGb4yJGRuHAg3O3oI8pT97hSQ/On6/vfijsssBP6YtOhU6RRcR9o2f28
+OUr7yWrf84iEsIC8wPUbQhH2TBrYLGILXVBkMJrT28HVfzlT5L3oHgSdyRLg5Fcp
+KQG58eW8dKbnS2HmZ1xsTu7uIgwbFG3oDG/u7sO43d8V7XqWW8yF5eNQxM4rv7Y3
+5iD8bkV+Cb2Eeq8HJ/SZI0HfNtgpMaCWhC/9RS7UtPn63I8jwOAGra0Kctr0O6HL
+1qY77EbElfJxpa0IH+cGGA7bgFGWuiT2ZAJr0/B2ATQ6cgLpy9CqYlEMj4O+wEeZ
+0pJy7VOlSQXUyaH0Td4SnRrIF4TzonxnR4JLhh5zhuImJhCUo5mbCJl4nT0zXYXC
+RmWUq3C0O8EmixG2ZieIIoQDtQhFMoyBI75i3G+gql6fA/en9QNwPHgJ0IREjBmv
+dveT/K/G/dvZTMsgeURxy+ZVYal6rwujpu3pqRGv+qNdrJfn7yu2qDcCAwEAAaAA
+MA0GCSqGSIb3DQEBCwUAA4IBgQBhQ5VEn10CTlB6GSLwyHPfq5jAYaH+lUcIrN4C
+cOPCGs/GDB6erAED/KYlKOseD/KYNH5PguecuVnS7ZndfzN+nlukd8dE6qTe/fTG
+6zjPDhh7HuoVtjdh6tDqMUteBA8p7I3kSf/fmK2JYVp3nszYek8/RQoeBI7UZxEE
+Y2X2GvwOJK0FdqJUJS288rRh+aqGNJ23CFGUV36YJ/oBIS+0FQjyPIM9uEI/O1lf
+VLqlJ3uWKeb875QXey5IvgG7S37Wkf1IVEWxLXxv90Py515TsBeC4R8ttmo9jEUV
+l+ihbs+fxgCN6YD4/saVeXhso59IZFy/rVjq6vDYX4PW/T4kZMHjP+Zq/zRXul1S
+Ft0u25Pn4ffCtFuQ+lxLk5NID/uhSGznjFV/l4Q+uvQinNbFyoB/3VNQC1PvkSsg
+90BTYQSyn59un1R6wt4dkR51B+Hxk7uMlQIL/xY4PYTJrUBBk+ovbQG1wZGmla+X
+tZ1y+qWCh7Dh7NE6qulhdijgydE=
+-----END CERTIFICATE REQUEST-----
diff --git a/tests/testsuites/x.509/client-revoked-key.pem b/tests/testsuites/x.509/client-revoked-key.pem
new file mode 100644
index 0000000..8806a6e
--- /dev/null
+++ b/tests/testsuites/x.509/client-revoked-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC//hRd6ZxsZxU8
+1EmdWyrqQ8K8ntA6XlUvaAArC9rcz/fZpxugozHdqAcTntw2dbg06hca9h3bMx5F
+NoCunJOmAk4m+AfeHM6e508l11kkSV40RFSHq+BtWiRBGb8zw6UR1lDA920tEgPM
+C7nqsoVdka2Ezr6bC8LrAZe4OtwcuNJD6JZe8ITimBh7FcavDLuOmJYhe81vDZ+E
+Wb+RqLpqybxfSvMSTTPn3LA46XHY79D9nh/QWrupOpHYHqee+qwTW6Ot6IcL9LX4
+qA2nsVlAJkJ6BeQxZvgF0f2XX66TCtlFbKPfMu4ReIMvujYXdpiD1gj7MQ6BfVeA
+EDzeDUsNAgMBAAECggEAQWSXJ02Ue8+4ihl8YV5WBajCwWAOaHMM7LKtq/vDtgYX
+00h5voMXTvoWPvaS5vG9pjg9Wm+Nx8VngAeKWO7300lhuSAt/dcuAS2j5a2trRBY
+R9EmQXenX1eelZXhbA4tQSAQLUmZJArIxE0SLABWMIKX6W5JuaGN6GGIfbV+l0E9
+RjQoj+k/XmlrUm11/KcRoL83JqL6wNuxi+AiHnFYEpaxdi/+U9RpVegiRzfS4OH7
+COOm+WEbjJSqyON4BRLGwEJaTcyFOozumyCRNnQIJJx7XW1m5RV+eowDdLcfbdma
+dqGDlPqKSwcr8kZhqXlmnOIgiuxUwGI6WhOjAMAOuQKBgQDe9QPX48Fvw5Yaenp4
+kvEU3lzb6JPYz07ECZ3yz7mfSbJmArj/nDqSiX1UdYInD2dMYw4gPdTX9iIMExXk
+dRTo72ipuNzC3w97GkLDHMKNlCnPrSIFWrh0JqQBI+uQOTXqp0kU25SMzp1AtDlW
+UhtXnt+FdKQDYwXyuFrYkfTnSwKBgQDcckTXY9YSfL4IauNG1mPsJM/+UvAmrKdp
+PDAi7ODVT0zq6h7kn30RUg+4Ebtyag9APdH9W8ta4kZVxID2/r5tY9bHxPAGD6Yd
+8cl0Bii6Rzd3NI5+xddqtZyz/A9PCPeKW3v0mLU16kemGq651bLHtwL5o6AEHXIn
+1T3U6d3oBwKBgQCfJU2FAPHGkVnHtL1O67RiLQcjgbRnAjM7A5JXC6d35+cLoc3j
+xuSYTMPFUcuBjiEyCVK/+OLA9NQAwm7SEDDIxHt1CpuqDgbC3E/jbdgBr0zZDMBI
+CiW34w0WM0mmPPAbeyVTWhmDGMhuszZqQ1l5BdKPNF8Oe9R3GNjf1e92WQKBgQCd
+I2cnEid6rijX3zl7OT+pCOSqqXw+VTxQq3K0sp3h79EocxLqbTW9rv09fIZdnHSa
+mnahX1mpwznX0WcMqbIcT9q+NAfUijsjhULQzcMiZbmH45Lfky9nBWZadgaDlCTA
+H05QoLorYIEKSmLaXRY/fplEUfqydDr3Ye3dY4em6QKBgQC0Heucqyw9THbnmHsr
+wIIb/L0eagI8BReJ+CWRAuhid0BmsRtIZf6mmdQl+vwrt4+O8PtCyJoeiI3qrht6
+SL65po9ERpSijV5lL6TS7VI22xNPtzd1Xf/ACg6/An/qSJeqYKn1DEqznSai8zXx
+PLz21hIcNxaxmTG34HMq+h4BGw==
+-----END PRIVATE KEY-----
diff --git a/tests/testsuites/x.509/client-revoked-valid.pem b/tests/testsuites/x.509/client-revoked-valid.pem
new file mode 100644
index 0000000..8bc2b8a
--- /dev/null
+++ b/tests/testsuites/x.509/client-revoked-valid.pem
@@ -0,0 +1,92 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 3 (0x3)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=someName, OU=rsyslog, O=SomeOrg, C=US
+ Validity
+ Not Before: Jul 6 13:38:06 2023 GMT
+ Not After : Jun 12 13:38:06 2123 GMT
+ Subject: C=DE, ST=NRW, O=Adiscon GmbH, OU=rsyslog, CN=rsyslog revoked certificate test/emailAddress=alorbach@adiscon.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (2048 bit)
+ Modulus:
+ 00:bf:fe:14:5d:e9:9c:6c:67:15:3c:d4:49:9d:5b:
+ 2a:ea:43:c2:bc:9e:d0:3a:5e:55:2f:68:00:2b:0b:
+ da:dc:cf:f7:d9:a7:1b:a0:a3:31:dd:a8:07:13:9e:
+ dc:36:75:b8:34:ea:17:1a:f6:1d:db:33:1e:45:36:
+ 80:ae:9c:93:a6:02:4e:26:f8:07:de:1c:ce:9e:e7:
+ 4f:25:d7:59:24:49:5e:34:44:54:87:ab:e0:6d:5a:
+ 24:41:19:bf:33:c3:a5:11:d6:50:c0:f7:6d:2d:12:
+ 03:cc:0b:b9:ea:b2:85:5d:91:ad:84:ce:be:9b:0b:
+ c2:eb:01:97:b8:3a:dc:1c:b8:d2:43:e8:96:5e:f0:
+ 84:e2:98:18:7b:15:c6:af:0c:bb:8e:98:96:21:7b:
+ cd:6f:0d:9f:84:59:bf:91:a8:ba:6a:c9:bc:5f:4a:
+ f3:12:4d:33:e7:dc:b0:38:e9:71:d8:ef:d0:fd:9e:
+ 1f:d0:5a:bb:a9:3a:91:d8:1e:a7:9e:fa:ac:13:5b:
+ a3:ad:e8:87:0b:f4:b5:f8:a8:0d:a7:b1:59:40:26:
+ 42:7a:05:e4:31:66:f8:05:d1:fd:97:5f:ae:93:0a:
+ d9:45:6c:a3:df:32:ee:11:78:83:2f:ba:36:17:76:
+ 98:83:d6:08:fb:31:0e:81:7d:57:80:10:3c:de:0d:
+ 4b:0d
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 20:CE:A2:54:99:CF:22:9A:5C:BB:D4:1E:B0:1E:43:73:63:72:AA:DE
+ X509v3 Authority Key Identifier:
+ keyid:B0:9F:67:33:2C:88:88:89:1F:44:62:74:9D:25:FF:C0:06:13:5D:D6
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 65:ac:7c:30:d0:01:ce:d7:ff:28:61:6c:8d:99:15:ce:45:22:
+ 8a:39:70:a4:a6:ce:48:94:e3:4b:8c:be:55:c4:66:96:49:49:
+ 4b:e0:4c:95:fd:73:02:54:3a:df:34:2f:96:16:48:ec:c2:23:
+ 3d:ee:b4:5a:dd:a0:c9:eb:85:f4:fd:e8:d5:8f:f3:dc:ce:4a:
+ 88:bb:be:19:81:3f:8b:0f:09:23:46:14:c9:f5:35:5a:cf:25:
+ 7c:92:df:b9:90:5d:ff:4f:21:40:9c:24:7c:0f:1f:3f:62:d1:
+ 7b:cc:40:7d:c6:61:49:f3:84:26:78:ed:87:70:06:9c:93:05:
+ a5:c4:7e:60:3d:d0:4a:2c:e4:d6:e5:33:f8:07:dd:5a:0e:9a:
+ 93:17:50:29:1a:ff:66:61:d9:40:a7:fb:cc:7b:62:b7:9d:29:
+ 1a:2a:3d:7b:93:87:eb:52:4e:00:19:19:3c:4d:73:fc:3d:ed:
+ eb:9d:92:30:bc:b0:ed:51:15:ce:b7:3c:00:09:0c:9d:6d:8b:
+ 2b:c9:f5:66:d4:49:44:58:3d:e7:61:3d:6b:21:05:ff:1d:55:
+ 59:dd:e4:a6:2f:e5:96:82:eb:24:33:2e:47:61:a5:f8:4d:ab:
+ ad:fc:64:f8:8b:9e:0e:62:8c:16:1d:79:18:74:18:9c:a2:19:
+ c3:24:0d:6e:45:63:f9:08:92:7d:44:0b:96:c7:48:84:72:97:
+ 22:23:bf:10:0a:d7:4e:43:8a:db:60:cd:5d:80:5e:71:fa:c2:
+ b6:68:10:ee:cc:29:86:15:d3:d9:93:2a:cc:73:88:be:9f:ad:
+ d0:c5:9c:a4:e4:86:38:e7:41:84:3a:d0:f3:67:1f:2c:40:d7:
+ 04:b1:ea:32:13:49:a5:82:1a:a5:6c:3f:5f:dc:fd:55:14:03:
+ 8b:d7:bd:01:9e:bc:c5:e4:a1:a8:a8:9d:bc:cd:1f:5b:fc:df:
+ 59:b7:0d:aa:47:a0:08:cd:6e:f7:c8:9d:d3:dd:4e:8b:aa:cc:
+ 54:20:a0:2b:63:96
+-----BEGIN CERTIFICATE-----
+MIIEUTCCArmgAwIBAgIBAzANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDEwhzb21l
+TmFtZTEQMA4GA1UECxMHcnN5c2xvZzEQMA4GA1UEChMHU29tZU9yZzELMAkGA1UE
+BhMCVVMwIBcNMjMwNzA2MTMzODA2WhgPMjEyMzA2MTIxMzM4MDZaMIGUMQswCQYD
+VQQGEwJERTEMMAoGA1UECAwDTlJXMRUwEwYDVQQKDAxBZGlzY29uIEdtYkgxEDAO
+BgNVBAsMB3JzeXNsb2cxKTAnBgNVBAMMIHJzeXNsb2cgcmV2b2tlZCBjZXJ0aWZp
+Y2F0ZSB0ZXN0MSMwIQYJKoZIhvcNAQkBFhRhbG9yYmFjaEBhZGlzY29uLmNvbTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/+FF3pnGxnFTzUSZ1bKupD
+wrye0DpeVS9oACsL2tzP99mnG6CjMd2oBxOe3DZ1uDTqFxr2HdszHkU2gK6ck6YC
+Tib4B94czp7nTyXXWSRJXjREVIer4G1aJEEZvzPDpRHWUMD3bS0SA8wLueqyhV2R
+rYTOvpsLwusBl7g63By40kPoll7whOKYGHsVxq8Mu46YliF7zW8Nn4RZv5GoumrJ
+vF9K8xJNM+fcsDjpcdjv0P2eH9Bau6k6kdgep576rBNbo63ohwv0tfioDaexWUAm
+QnoF5DFm+AXR/ZdfrpMK2UVso98y7hF4gy+6Nhd2mIPWCPsxDoF9V4AQPN4NSw0C
+AwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5l
+cmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFCDOolSZzyKaXLvUHrAeQ3Njcqre
+MB8GA1UdIwQYMBaAFLCfZzMsiIiJH0RidJ0l/8AGE13WMA0GCSqGSIb3DQEBCwUA
+A4IBgQBlrHww0AHO1/8oYWyNmRXORSKKOXCkps5IlONLjL5VxGaWSUlL4EyV/XMC
+VDrfNC+WFkjswiM97rRa3aDJ64X0/ejVj/PczkqIu74ZgT+LDwkjRhTJ9TVazyV8
+kt+5kF3/TyFAnCR8Dx8/YtF7zEB9xmFJ84QmeO2HcAackwWlxH5gPdBKLOTW5TP4
+B91aDpqTF1ApGv9mYdlAp/vMe2K3nSkaKj17k4frUk4AGRk8TXP8Pe3rnZIwvLDt
+URXOtzwACQydbYsryfVm1ElEWD3nYT1rIQX/HVVZ3eSmL+WWguskMy5HYaX4Taut
+/GT4i54OYowWHXkYdBicohnDJA1uRWP5CJJ9RAuWx0iEcpciI78QCtdOQ4rbYM1d
+gF5x+sK2aBDuzCmGFdPZkyrMc4i+n63QxZyk5IY450GEOtDzZx8sQNcEseoyE0ml
+ghqlbD9f3P1VFAOL170BnrzF5KGoqJ28zR9b/N9Ztw2qR6AIzW73yJ3T3U6LqsxU
+IKArY5Y=
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/client-revoked.csr b/tests/testsuites/x.509/client-revoked.csr
new file mode 100644
index 0000000..bc99a28
--- /dev/null
+++ b/tests/testsuites/x.509/client-revoked.csr
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC9DCCAdwCAQAwga4xCzAJBgNVBAYTAkRFMQwwCgYDVQQIDANOUlcxGDAWBgNV
+BAcMD0dyb3NzcmluZGVyZmVsZDEVMBMGA1UECgwMQWRpc2NvbiBHbWJIMRAwDgYD
+VQQLDAdyc3lzbG9nMSkwJwYDVQQDDCByc3lzbG9nIHJldm9rZWQgY2VydGlmaWNh
+dGUgdGVzdDEjMCEGCSqGSIb3DQEJARYUYWxvcmJhY2hAYWRpc2Nvbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC//hRd6ZxsZxU81EmdWyrqQ8K8
+ntA6XlUvaAArC9rcz/fZpxugozHdqAcTntw2dbg06hca9h3bMx5FNoCunJOmAk4m
++AfeHM6e508l11kkSV40RFSHq+BtWiRBGb8zw6UR1lDA920tEgPMC7nqsoVdka2E
+zr6bC8LrAZe4OtwcuNJD6JZe8ITimBh7FcavDLuOmJYhe81vDZ+EWb+RqLpqybxf
+SvMSTTPn3LA46XHY79D9nh/QWrupOpHYHqee+qwTW6Ot6IcL9LX4qA2nsVlAJkJ6
+BeQxZvgF0f2XX66TCtlFbKPfMu4ReIMvujYXdpiD1gj7MQ6BfVeAEDzeDUsNAgMB
+AAGgADANBgkqhkiG9w0BAQsFAAOCAQEASfTlG7UDUb9bgIerIn2kUYTFxZOnvy/M
+cfDM/iH5m3v7IjHV61mI7x7/P+COG6E9MOSS4+VLFjfc8YlQ67zkyrZxa4LMBqUF
+i+oOvTGvTO4ocBlHcoZ53EE5q3sy/yu67ih8jlTbCjtJ6mUOdXDclJimwKir4e+b
+GPpOvLENDfJ5RShJL5cdGXJqv+ZYuZnh4+zq8h4+EQI1BSzPudomSE6d+gf6Ysyg
+lb1YvhlP2phApgHS+3QeLLW8rTgPheFJcQbg6Sc+m44jysqjOVKc0+RYCdhqI7a7
+Dk/V/eD1VFOoRrIY2WnpvzE39gpV1fl4bUrrcsMCIBe7F2svdFHMog==
+-----END CERTIFICATE REQUEST-----
diff --git a/tests/testsuites/x.509/client-revoked.pem b/tests/testsuites/x.509/client-revoked.pem
new file mode 100644
index 0000000..b64b2a9
--- /dev/null
+++ b/tests/testsuites/x.509/client-revoked.pem
@@ -0,0 +1,92 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 2 (0x2)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=someName, OU=rsyslog, O=SomeOrg, C=US
+ Validity
+ Not Before: Jul 6 12:59:25 2023 GMT
+ Not After : Jun 12 12:59:25 2123 GMT
+ Subject: C=DE, ST=NRW, O=Adiscon GmbH, OU=rsyslog, CN=rsyslog revoked certificate test/emailAddress=alorbach@adiscon.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (2048 bit)
+ Modulus:
+ 00:bf:fe:14:5d:e9:9c:6c:67:15:3c:d4:49:9d:5b:
+ 2a:ea:43:c2:bc:9e:d0:3a:5e:55:2f:68:00:2b:0b:
+ da:dc:cf:f7:d9:a7:1b:a0:a3:31:dd:a8:07:13:9e:
+ dc:36:75:b8:34:ea:17:1a:f6:1d:db:33:1e:45:36:
+ 80:ae:9c:93:a6:02:4e:26:f8:07:de:1c:ce:9e:e7:
+ 4f:25:d7:59:24:49:5e:34:44:54:87:ab:e0:6d:5a:
+ 24:41:19:bf:33:c3:a5:11:d6:50:c0:f7:6d:2d:12:
+ 03:cc:0b:b9:ea:b2:85:5d:91:ad:84:ce:be:9b:0b:
+ c2:eb:01:97:b8:3a:dc:1c:b8:d2:43:e8:96:5e:f0:
+ 84:e2:98:18:7b:15:c6:af:0c:bb:8e:98:96:21:7b:
+ cd:6f:0d:9f:84:59:bf:91:a8:ba:6a:c9:bc:5f:4a:
+ f3:12:4d:33:e7:dc:b0:38:e9:71:d8:ef:d0:fd:9e:
+ 1f:d0:5a:bb:a9:3a:91:d8:1e:a7:9e:fa:ac:13:5b:
+ a3:ad:e8:87:0b:f4:b5:f8:a8:0d:a7:b1:59:40:26:
+ 42:7a:05:e4:31:66:f8:05:d1:fd:97:5f:ae:93:0a:
+ d9:45:6c:a3:df:32:ee:11:78:83:2f:ba:36:17:76:
+ 98:83:d6:08:fb:31:0e:81:7d:57:80:10:3c:de:0d:
+ 4b:0d
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 20:CE:A2:54:99:CF:22:9A:5C:BB:D4:1E:B0:1E:43:73:63:72:AA:DE
+ X509v3 Authority Key Identifier:
+ keyid:B0:9F:67:33:2C:88:88:89:1F:44:62:74:9D:25:FF:C0:06:13:5D:D6
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 33:65:28:98:94:9b:f5:57:0d:bf:02:c2:67:93:8e:8e:77:03:
+ 9b:c7:7a:47:53:29:a4:dd:a6:a1:5e:2a:0a:ed:19:02:80:90:
+ b3:97:1f:06:4c:9c:c5:5f:6c:16:f9:12:fb:dd:da:29:88:b7:
+ 2c:91:0b:ab:53:79:7a:6e:76:20:fe:fa:b1:99:c2:2b:50:26:
+ 7b:cc:8c:75:98:35:95:79:56:43:90:a0:95:5e:98:09:10:4d:
+ ea:c0:1c:bb:c0:7b:a7:8a:9b:21:70:85:65:83:4d:ee:65:ef:
+ 10:d3:63:95:fd:51:9d:6c:41:7b:af:af:9c:e7:34:74:a1:7a:
+ 86:0a:8e:f2:2a:06:68:77:76:fa:fc:64:bc:28:1d:8b:53:7a:
+ cf:62:0f:87:a9:85:54:8c:a5:41:c3:61:0b:cf:96:c1:fa:81:
+ a5:31:63:f3:cb:17:37:58:6e:d9:30:97:fb:57:2f:31:63:e8:
+ 26:0e:82:49:e2:a9:9b:ed:39:7b:24:4e:42:8d:34:74:3a:dc:
+ b7:c5:d6:15:e9:66:28:2d:3c:e0:26:44:76:66:4a:32:94:11:
+ c8:1f:1c:b2:dc:44:69:63:f7:2d:87:b5:89:4a:40:fb:e4:14:
+ 68:dc:8a:76:40:93:35:e2:ac:9a:4b:bc:af:c5:8a:8a:38:54:
+ ef:69:01:4c:92:af:c0:07:d0:2f:7a:3c:9e:40:ac:56:07:d0:
+ 2b:1f:5f:d0:44:f9:70:e1:44:44:34:ba:fb:3d:54:85:4b:1d:
+ ba:ea:ea:6a:91:0c:08:30:2d:bc:b8:ea:22:c1:16:7b:53:fe:
+ 40:2c:8d:f5:c6:c2:39:e6:11:1d:e2:2f:50:a6:76:9c:fd:b9:
+ fa:d5:10:79:0e:e5:02:87:7d:96:e3:81:05:79:c9:a3:d8:f2:
+ a0:b1:8b:0e:8d:33:73:15:6f:27:88:85:03:8a:c5:7a:77:f4:
+ 3f:7f:b8:65:97:5b:a0:a6:21:48:67:2c:a2:73:a2:ec:d6:6a:
+ bd:d6:f2:e2:b1:5b
+-----BEGIN CERTIFICATE-----
+MIIEUTCCArmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDEwhzb21l
+TmFtZTEQMA4GA1UECxMHcnN5c2xvZzEQMA4GA1UEChMHU29tZU9yZzELMAkGA1UE
+BhMCVVMwIBcNMjMwNzA2MTI1OTI1WhgPMjEyMzA2MTIxMjU5MjVaMIGUMQswCQYD
+VQQGEwJERTEMMAoGA1UECAwDTlJXMRUwEwYDVQQKDAxBZGlzY29uIEdtYkgxEDAO
+BgNVBAsMB3JzeXNsb2cxKTAnBgNVBAMMIHJzeXNsb2cgcmV2b2tlZCBjZXJ0aWZp
+Y2F0ZSB0ZXN0MSMwIQYJKoZIhvcNAQkBFhRhbG9yYmFjaEBhZGlzY29uLmNvbTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/+FF3pnGxnFTzUSZ1bKupD
+wrye0DpeVS9oACsL2tzP99mnG6CjMd2oBxOe3DZ1uDTqFxr2HdszHkU2gK6ck6YC
+Tib4B94czp7nTyXXWSRJXjREVIer4G1aJEEZvzPDpRHWUMD3bS0SA8wLueqyhV2R
+rYTOvpsLwusBl7g63By40kPoll7whOKYGHsVxq8Mu46YliF7zW8Nn4RZv5GoumrJ
+vF9K8xJNM+fcsDjpcdjv0P2eH9Bau6k6kdgep576rBNbo63ohwv0tfioDaexWUAm
+QnoF5DFm+AXR/ZdfrpMK2UVso98y7hF4gy+6Nhd2mIPWCPsxDoF9V4AQPN4NSw0C
+AwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5l
+cmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFCDOolSZzyKaXLvUHrAeQ3Njcqre
+MB8GA1UdIwQYMBaAFLCfZzMsiIiJH0RidJ0l/8AGE13WMA0GCSqGSIb3DQEBCwUA
+A4IBgQAzZSiYlJv1Vw2/AsJnk46OdwObx3pHUymk3aahXioK7RkCgJCzlx8GTJzF
+X2wW+RL73dopiLcskQurU3l6bnYg/vqxmcIrUCZ7zIx1mDWVeVZDkKCVXpgJEE3q
+wBy7wHunipshcIVlg03uZe8Q02OV/VGdbEF7r6+c5zR0oXqGCo7yKgZod3b6/GS8
+KB2LU3rPYg+HqYVUjKVBw2ELz5bB+oGlMWPzyxc3WG7ZMJf7Vy8xY+gmDoJJ4qmb
+7Tl7JE5CjTR0Oty3xdYV6WYoLTzgJkR2ZkoylBHIHxyy3ERpY/cth7WJSkD75BRo
+3Ip2QJM14qyaS7yvxYqKOFTvaQFMkq/AB9AvejyeQKxWB9ArH1/QRPlw4URENLr7
+PVSFSx266upqkQwIMC28uOoiwRZ7U/5ALI31xsI55hEd4i9Qpnac/bn61RB5DuUC
+h32W44EFecmj2PKgsYsOjTNzFW8niIUDisV6d/Q/f7hll1ugpiFIZyyic6Ls1mq9
+1vLisVs=
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/crl.pem b/tests/testsuites/x.509/crl.pem
new file mode 100644
index 0000000..23a1a83
--- /dev/null
+++ b/tests/testsuites/x.509/crl.pem
@@ -0,0 +1,14 @@
+-----BEGIN X509 CRL-----
+MIICIjCBizANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDEwhzb21lTmFtZTEQMA4G
+A1UECxMHcnN5c2xvZzEQMA4GA1UEChMHU29tZU9yZzELMAkGA1UEBhMCVVMXDTIz
+MDcxMTA3NTEyM1oYDzIxMjMwNjE3MDc1MTIzWjAUMBICAQIXDTIzMDcwNjEzMDEw
+MFowDQYJKoZIhvcNAQELBQADggGBAA4MRtKKvN+qIIULqf80EG3Zy+6BhPc+4GGD
+bB6tHzBf/G+S931yxQB6yXgoHv9SdR0ZDj28gGG0c6YBYiBID6MecRreEZkBzbNg
+3YsLpAQsE9ZO6pBancjbkhg3ikdACBaWrsQLFaVsZCGyAJN5kL0jzE/aoGmvKLpQ
+NXmQo3+/IuJ+jes/vEcG6LyCyr0LKbbFNdj/VsF7KIRjY2BP995rz/X6mWoS8fP0
+hIE3G4NC+BeWBAi/txwlkxl8AXsQW+AZNCFR9/9k1LIBE/5MY4rEn60PoR4QIqja
+cKdEkhvkBM8gNkthKplA1wfDMXzhXilwW4uRjF//Oiz97rBg4JYkNw1hEsK97SPT
+E2dtXZ2I0mBR32twVRvRdp14VHGo/EHPnTPBwJZSuiKPCQjGX61xzJdHfu1oGpW+
+E3R4AWlfzpUnCeA3uERsukJbdJmgPYz4tkfSil2//9wHLxuJHokl3wrQ87Rt+YDB
+CnYqvamCfmQQeXp1waXOE94lTLV0RA==
+-----END X509 CRL-----
diff --git a/tests/testsuites/x.509/index.txt b/tests/testsuites/x.509/index.txt
new file mode 100644
index 0000000..ee97457
--- /dev/null
+++ b/tests/testsuites/x.509/index.txt
@@ -0,0 +1,3 @@
+R 21230612125925Z 230706130100Z 02 unknown /C=DE/ST=NRW/O=Adiscon GmbH/OU=rsyslog/CN=rsyslog revoked certificate test/emailAddress=alorbach@adiscon.com
+V 21230612133806Z 03 unknown /C=DE/ST=NRW/O=Adiscon GmbH/OU=rsyslog/CN=rsyslog revoked certificate test/emailAddress=alorbach@adiscon.com
+V 21230612135250Z 04 unknown /C=US/ST=CA/O=SomeComp/OU=SomeUnit/CN=rsyslog/emailAddress=alorbach@adiscon.com
diff --git a/tests/testsuites/x.509/index.txt.attr b/tests/testsuites/x.509/index.txt.attr
new file mode 100644
index 0000000..8f7e63a
--- /dev/null
+++ b/tests/testsuites/x.509/index.txt.attr
@@ -0,0 +1 @@
+unique_subject = yes
diff --git a/tests/testsuites/x.509/machine-cert.pem b/tests/testsuites/x.509/machine-cert.pem
new file mode 100644
index 0000000..def6e7e
--- /dev/null
+++ b/tests/testsuites/x.509/machine-cert.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEmjCCAwKgAwIBAgIIXBegQDWsgowwDQYJKoZIhvcNAQELBQAwRDERMA8GA1UE
+AxMIc29tZU5hbWUxEDAOBgNVBAsTB3JzeXNsb2cxEDAOBgNVBAoTB1NvbWVPcmcx
+CzAJBgNVBAYTAlVTMCAXDTE4MTIxNzEzMTAyNloYDzIxMTgxMTIzMTMxMDI4WjBR
+MQ8wDQYDVQQLEwZTb21lT1UxEDAOBgNVBAoTB1NvbWVPcmcxEjAQBgNVBAcTCVNv
+bWV3aGVyZTELMAkGA1UECBMCQ0ExCzAJBgNVBAYTAlVTMIIBojANBgkqhkiG9w0B
+AQEFAAOCAY8AMIIBigKCAYEAvYhZDSdPcxBgjF+sgQZ10YPuIXIzoiq4G943OGFX
+EdMc0kdaVQcCKkR4raPMR0wKs57akpiN5CrU1HvkwYZbTNB/BpyhUuZnx2qjTRyO
+pB71k62z7HP3KAI/GYfEMX5DNPS0X3B7chkAT4Sk1Xdn3WjW3BVt3GK4XdWmG2M0
+cmsYaFvijFJDi6Fs8fy/5sG2x+WBwct1Kt8HnjfR+nh00YhgiqOdX1jOrDN29XHk
+n4GIEm/BRQRQ0/PoOa6VWGVVxu+8sfmM7IJ8kC5/QII3PFZCplqPnxFYd3C0Wa6v
+au+tYisJ9B5CB/fn9ars7H6nFMc1D38G/sVkspdJrFuFbQLElkH7ydxBZBv3O+fl
+Iomav/+JL1PiNHFtXxoGsTOPHHFKbqauxLuTbv9B5D1tO/MaxOBTt9MVMx8rDpVB
+y0spKhfWcxJ/0Hge7G9XrFGpN4joBPHPMghM8QjS9/EL8r98m8PNQk6OIG9TNeQC
+gzglQIV3K+rhFwTeeyetxDozAgMBAAGjgYAwfjAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB6AAMB0GA1Ud
+DgQWBBQ3rDq/2kYOFskMD0lHFG+g2Ej/2zAfBgNVHSMEGDAWgBSwn2czLIiIiR9E
+YnSdJf/ABhNd1jANBgkqhkiG9w0BAQsFAAOCAYEARbJDuWZiqwA/CU9Eh99POTOk
+fnWdog8tLaOPLFS5mCiLNDmTXX14syAAjhbRrJ+43j1HWXbgovzDqzFtQzbztCMB
+qpxQy3d3R9nUKv6NpNT/IO84OcYuiMtRGr/AaVqc2PZlFirBqlQkxFUxiDc2pIhy
+h2orOJrPu3jSQdWI1PDT6oWKCwHdU+obqh+NmRWwjetpmeJ5r/kgAlZJ1krlNPJU
+V3U/J9WTdOYMhLcn4RcNOTAyrmxOoTEIOcqkXzJOypbkMcZic+OHCaDohUsfdOkB
+Xxz+6nP4xqnOcyHBLNTjVVrnr+wyqsWA18HoyLiCluf946S6mVoXcxwvWHzz7VVm
+qHVppLVD/iOJxtl4bm8YEYjO4C1IPxWOCszG4N71Reyo/+p1UJ8Ww6IAgJj0jX2l
+L7pqCwZKXhd8+LT05dZr7YJV/EjmGV/pL6IU3RAk6s2BqgtTkvy5nnmSPjBFuxG/
+gUBfaglsXC6w6R1aMVr9m3E1ht4vOPu9Qx7E21oG
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/machine-key.pem b/tests/testsuites/x.509/machine-key.pem
new file mode 100644
index 0000000..2958202
--- /dev/null
+++ b/tests/testsuites/x.509/machine-key.pem
@@ -0,0 +1,182 @@
+Public Key Info:
+ Public Key Algorithm: RSA
+ Key Security Level: High (3072 bits)
+
+modulus:
+ 00:bd:88:59:0d:27:4f:73:10:60:8c:5f:ac:81:06:75
+ d1:83:ee:21:72:33:a2:2a:b8:1b:de:37:38:61:57:11
+ d3:1c:d2:47:5a:55:07:02:2a:44:78:ad:a3:cc:47:4c
+ 0a:b3:9e:da:92:98:8d:e4:2a:d4:d4:7b:e4:c1:86:5b
+ 4c:d0:7f:06:9c:a1:52:e6:67:c7:6a:a3:4d:1c:8e:a4
+ 1e:f5:93:ad:b3:ec:73:f7:28:02:3f:19:87:c4:31:7e
+ 43:34:f4:b4:5f:70:7b:72:19:00:4f:84:a4:d5:77:67
+ dd:68:d6:dc:15:6d:dc:62:b8:5d:d5:a6:1b:63:34:72
+ 6b:18:68:5b:e2:8c:52:43:8b:a1:6c:f1:fc:bf:e6:c1
+ b6:c7:e5:81:c1:cb:75:2a:df:07:9e:37:d1:fa:78:74
+ d1:88:60:8a:a3:9d:5f:58:ce:ac:33:76:f5:71:e4:9f
+ 81:88:12:6f:c1:45:04:50:d3:f3:e8:39:ae:95:58:65
+ 55:c6:ef:bc:b1:f9:8c:ec:82:7c:90:2e:7f:40:82:37
+ 3c:56:42:a6:5a:8f:9f:11:58:77:70:b4:59:ae:af:6a
+ ef:ad:62:2b:09:f4:1e:42:07:f7:e7:f5:aa:ec:ec:7e
+ a7:14:c7:35:0f:7f:06:fe:c5:64:b2:97:49:ac:5b:85
+ 6d:02:c4:96:41:fb:c9:dc:41:64:1b:f7:3b:e7:e5:22
+ 89:9a:bf:ff:89:2f:53:e2:34:71:6d:5f:1a:06:b1:33
+ 8f:1c:71:4a:6e:a6:ae:c4:bb:93:6e:ff:41:e4:3d:6d
+ 3b:f3:1a:c4:e0:53:b7:d3:15:33:1f:2b:0e:95:41:cb
+ 4b:29:2a:17:d6:73:12:7f:d0:78:1e:ec:6f:57:ac:51
+ a9:37:88:e8:04:f1:cf:32:08:4c:f1:08:d2:f7:f1:0b
+ f2:bf:7c:9b:c3:cd:42:4e:8e:20:6f:53:35:e4:02:83
+ 38:25:40:85:77:2b:ea:e1:17:04:de:7b:27:ad:c4:3a
+ 33:
+
+public exponent:
+ 01:00:01:
+
+private exponent:
+ 19:dd:b1:c9:89:c3:de:00:2e:2c:fa:21:a0:ba:30:fa
+ 16:f7:38:b9:4d:32:a4:81:db:cb:c7:dd:79:eb:58:13
+ 67:ab:8a:f1:59:09:4b:d2:58:e5:df:4c:ab:64:4f:8c
+ 66:57:17:9d:4a:14:93:3f:05:2c:ba:7b:cd:ad:78:68
+ 53:4c:02:aa:fd:99:42:b8:87:0e:96:9a:bf:7a:f8:0b
+ 01:98:d5:eb:e8:29:2b:61:da:6c:a2:1f:55:37:2b:f4
+ 20:16:05:47:c1:22:17:c0:31:ba:a8:6f:96:72:65:4a
+ 62:34:70:74:bc:39:87:7f:81:ce:d6:8c:86:4d:72:10
+ 0b:94:b2:75:88:90:f1:86:ec:d0:e1:75:8c:fb:01:14
+ e0:d3:01:92:61:21:ec:67:e3:b2:44:0b:f4:12:dc:5e
+ 7c:2e:30:bd:83:8c:af:a2:04:fe:41:0d:de:2d:45:57
+ 78:2a:8b:f5:e4:65:62:62:8a:b6:f6:a8:4c:d9:73:7a
+ b5:15:d0:91:c7:89:a9:45:94:00:0c:1d:69:f0:48:f7
+ 26:83:50:bd:b3:e7:7e:70:8b:21:bf:99:fd:04:d2:8a
+ d2:b1:be:9e:4b:a7:f1:57:8f:34:c0:b9:f0:22:d8:bf
+ 3f:fa:8c:77:47:7d:62:d4:5c:d8:08:1b:dd:3c:a2:c3
+ 60:25:84:be:02:a2:79:00:e4:06:c8:48:49:43:ac:9f
+ 45:78:c9:46:0a:9a:1f:5b:70:d1:da:b6:e6:f1:fc:af
+ a5:85:c6:7b:78:f0:5c:2c:91:1b:ba:36:62:f8:31:ed
+ 21:87:15:49:3c:c1:bf:53:a4:11:9a:19:91:51:aa:49
+ ea:d8:b3:a4:66:76:2a:ad:8e:61:38:f5:7a:ba:59:bb
+ 2e:48:f3:fc:14:a1:42:18:e7:c6:c6:41:03:d4:ca:d6
+ 85:14:cc:8b:1d:57:38:6f:ef:9e:14:34:85:38:92:ab
+ f8:24:f4:5b:14:6b:6a:3c:22:29:bb:36:51:68:43:81
+
+
+prime1:
+ 00:cd:49:91:cb:0a:37:19:fe:50:c0:9a:a0:c3:53:9b
+ fb:3c:e0:dc:2d:55:69:0e:cd:ea:e7:0c:a5:c1:34:a0
+ b5:8d:72:45:da:9c:56:15:8b:31:3f:fb:93:d7:b0:81
+ de:d1:9f:d8:c4:c1:ff:5a:d6:a8:15:c1:b6:c5:11:39
+ 4f:e9:16:06:fb:be:90:d4:a2:9d:23:0a:b3:52:81:07
+ d5:ae:2c:f5:bb:7e:32:62:59:f9:65:1f:ab:9b:3c:67
+ 94:b7:e2:49:69:3d:c6:98:e4:3e:56:f9:0f:02:e1:6c
+ c2:da:10:3b:9d:39:e7:55:40:6d:ae:46:f6:b8:cc:30
+ 2c:26:02:4f:65:a8:7c:38:47:9c:d8:96:ce:31:89:a4
+ 07:91:de:4d:46:35:b0:8e:01:fd:ca:11:c2:c8:8e:71
+ 32:eb:a0:61:da:10:db:8b:4d:ac:29:73:d2:b1:7c:d4
+ d3:0d:ce:a2:88:ef:3b:d0:b4:2b:50:1f:62:c8:e6:d2
+ 7d:
+
+prime2:
+ 00:ec:5a:71:35:ee:17:84:3a:0f:41:9b:44:e6:1e:f3
+ e2:c6:31:09:cd:d6:af:4d:6a:ac:fc:c1:03:40:67:91
+ 73:38:4e:a7:d1:2a:b9:25:a1:da:e9:77:9b:dd:e9:c2
+ 1a:72:0b:11:97:90:04:23:a7:4d:e3:ad:29:6b:65:c6
+ 63:8b:00:65:0a:7e:3d:46:b8:f7:4b:eb:a4:ee:cf:19
+ 3e:a0:52:80:72:e7:9f:9c:8b:b1:d0:0b:e3:9c:34:1e
+ d2:7c:ac:e2:c2:90:69:2b:78:9c:c1:9a:84:7a:5b:dc
+ 99:83:a0:18:22:fc:30:c6:7e:1e:97:de:bc:66:71:26
+ ec:f2:98:06:ce:62:53:d7:af:86:21:07:95:98:2c:2a
+ f4:4e:fe:58:a7:97:19:de:5a:4a:94:ee:98:d3:a0:77
+ 9e:db:52:55:64:a4:fa:84:c3:a8:89:8a:97:22:93:a6
+ f0:00:85:38:91:7a:52:98:2f:34:10:7e:92:9d:76:ae
+ 6f:
+
+coefficient:
+ 00:94:fa:06:8f:7e:8a:1d:be:16:55:80:93:01:0d:ab
+ 77:4b:d3:a5:14:37:ef:04:28:b3:91:d9:5f:df:e8:56
+ d5:1d:bd:c1:25:e8:bf:69:49:04:2f:c1:73:73:27:64
+ 66:3e:61:20:d5:25:db:ad:da:3d:e8:a3:a5:20:16:38
+ 6b:28:18:83:97:07:67:6a:16:4b:7f:2b:da:6a:a5:1b
+ ec:9a:c3:2a:4f:5d:9e:7e:9b:05:a5:a8:bb:ab:76:27
+ 1a:07:27:be:c8:65:94:e8:54:41:ba:1f:b3:91:5d:b1
+ 5a:13:2b:b3:11:60:52:26:47:35:a7:46:bd:16:f9:e5
+ 1e:4b:e9:48:33:aa:33:30:77:8e:71:e4:88:1c:1a:57
+ af:17:77:76:65:d2:2b:a3:33:b8:ec:34:f8:23:03:5b
+ 90:cb:eb:a4:c0:ee:98:0f:9c:5e:73:11:bd:9e:01:99
+ 79:4f:98:1e:12:25:62:88:3a:65:12:8f:67:45:40:af
+ 4b:
+
+exp1:
+ 30:f9:93:39:a0:47:43:01:44:1c:9f:07:29:72:41:ed
+ 2f:39:e9:ed:3a:ca:24:89:05:b8:77:70:f7:e5:e9:4d
+ 46:e0:73:3f:d3:3a:4a:4b:79:c5:6c:ec:79:71:97:9a
+ 23:e2:81:a1:77:32:c7:66:1c:95:8c:30:61:55:59:99
+ f1:de:9a:6d:e6:a9:c0:c0:c6:c2:3c:64:49:93:94:dd
+ ea:7e:b9:65:30:97:2e:95:8e:85:0c:88:31:31:b8:f8
+ 66:e2:2a:67:5c:20:8c:0b:2f:c0:2a:0c:e5:c0:07:e5
+ 78:86:94:e2:4e:95:1c:e6:91:04:19:d3:f4:84:6a:1d
+ ae:37:b0:df:6c:d1:ad:cf:8f:e0:b0:21:a2:f9:d6:53
+ 23:fe:a7:ea:cf:16:3e:da:c4:c4:37:76:83:c8:4f:c3
+ 39:29:7b:0e:be:24:d2:58:06:71:a1:3b:2b:b2:bf:47
+ 56:ac:ec:63:c4:c7:3d:64:2e:4d:20:1f:be:14:2b:35
+
+
+exp2:
+ 11:dd:bc:55:11:4c:61:c8:69:c2:d1:d3:e1:79:51:82
+ 40:ed:10:0a:a9:41:d3:1e:4f:39:43:f5:d4:f6:7f:3e
+ 30:71:71:aa:14:0a:ae:d7:8f:4e:ba:a5:e3:9e:79:f7
+ b9:cb:30:67:3e:91:b1:88:42:11:05:d3:ed:b4:61:cc
+ c0:83:25:20:27:ee:c5:db:d1:85:c1:a8:54:0c:ff:a1
+ 86:48:f6:40:b9:55:8d:65:d9:e9:1a:1c:f8:7f:d0:1c
+ a5:24:04:78:24:a6:6e:8c:cd:7c:ad:0b:7a:9c:5b:0e
+ 97:ae:90:64:84:9f:c3:41:61:5a:a5:91:a4:44:c5:66
+ 7f:e8:12:0b:a3:cf:26:ac:b3:fc:e7:2f:dd:b2:e9:04
+ 52:bc:53:43:47:de:c2:ba:1c:8d:29:84:0f:eb:3f:5f
+ 98:c0:9e:87:df:18:b8:d4:79:76:fc:2c:f4:86:28:c6
+ 57:a3:ba:64:f4:d4:2d:80:d3:f4:b3:3c:ad:fe:7c:ad
+
+
+
+Public Key PIN:
+ pin-sha256:P26XjPq8H830hYvKjSgxiVfBDOiZNDGexDfrJkKWi9o=
+Public Key ID:
+ sha256:3f6e978cfabc1fcdf4858bca8d28318957c10ce89934319ec437eb2642968bda
+ sha1:37ac3abfda460e16c90c0f4947146fa0d848ffdb
+
+-----BEGIN RSA PRIVATE KEY-----
+MIIG4wIBAAKCAYEAvYhZDSdPcxBgjF+sgQZ10YPuIXIzoiq4G943OGFXEdMc0kda
+VQcCKkR4raPMR0wKs57akpiN5CrU1HvkwYZbTNB/BpyhUuZnx2qjTRyOpB71k62z
+7HP3KAI/GYfEMX5DNPS0X3B7chkAT4Sk1Xdn3WjW3BVt3GK4XdWmG2M0cmsYaFvi
+jFJDi6Fs8fy/5sG2x+WBwct1Kt8HnjfR+nh00YhgiqOdX1jOrDN29XHkn4GIEm/B
+RQRQ0/PoOa6VWGVVxu+8sfmM7IJ8kC5/QII3PFZCplqPnxFYd3C0Wa6vau+tYisJ
+9B5CB/fn9ars7H6nFMc1D38G/sVkspdJrFuFbQLElkH7ydxBZBv3O+flIomav/+J
+L1PiNHFtXxoGsTOPHHFKbqauxLuTbv9B5D1tO/MaxOBTt9MVMx8rDpVBy0spKhfW
+cxJ/0Hge7G9XrFGpN4joBPHPMghM8QjS9/EL8r98m8PNQk6OIG9TNeQCgzglQIV3
+K+rhFwTeeyetxDozAgMBAAECggGAGd2xyYnD3gAuLPohoLow+hb3OLlNMqSB28vH
+3XnrWBNnq4rxWQlL0ljl30yrZE+MZlcXnUoUkz8FLLp7za14aFNMAqr9mUK4hw6W
+mr96+AsBmNXr6CkrYdpsoh9VNyv0IBYFR8EiF8AxuqhvlnJlSmI0cHS8OYd/gc7W
+jIZNchALlLJ1iJDxhuzQ4XWM+wEU4NMBkmEh7GfjskQL9BLcXnwuML2DjK+iBP5B
+Dd4tRVd4Kov15GViYoq29qhM2XN6tRXQkceJqUWUAAwdafBI9yaDUL2z535wiyG/
+mf0E0orSsb6eS6fxV480wLnwIti/P/qMd0d9YtRc2Agb3Tyiw2AlhL4ConkA5AbI
+SElDrJ9FeMlGCpofW3DR2rbm8fyvpYXGe3jwXCyRG7o2Yvgx7SGHFUk8wb9TpBGa
+GZFRqknq2LOkZnYqrY5hOPV6ulm7Lkjz/BShQhjnxsZBA9TK1oUUzIsdVzhv754U
+NIU4kqv4JPRbFGtqPCIpuzZRaEOBAoHBAM1JkcsKNxn+UMCaoMNTm/s84NwtVWkO
+zernDKXBNKC1jXJF2pxWFYsxP/uT17CB3tGf2MTB/1rWqBXBtsUROU/pFgb7vpDU
+op0jCrNSgQfVriz1u34yYln5ZR+rmzxnlLfiSWk9xpjkPlb5DwLhbMLaEDudOedV
+QG2uRva4zDAsJgJPZah8OEec2JbOMYmkB5HeTUY1sI4B/coRwsiOcTLroGHaENuL
+Tawpc9KxfNTTDc6iiO870LQrUB9iyObSfQKBwQDsWnE17heEOg9Bm0TmHvPixjEJ
+zdavTWqs/MEDQGeRczhOp9EquSWh2ul3m93pwhpyCxGXkAQjp03jrSlrZcZjiwBl
+Cn49Rrj3S+uk7s8ZPqBSgHLnn5yLsdAL45w0HtJ8rOLCkGkreJzBmoR6W9yZg6AY
+Ivwwxn4el968ZnEm7PKYBs5iU9evhiEHlZgsKvRO/linlxneWkqU7pjToHee21JV
+ZKT6hMOoiYqXIpOm8ACFOJF6UpgvNBB+kp12rm8CgcAw+ZM5oEdDAUQcnwcpckHt
+Lznp7TrKJIkFuHdw9+XpTUbgcz/TOkpLecVs7Hlxl5oj4oGhdzLHZhyVjDBhVVmZ
+8d6abeapwMDGwjxkSZOU3ep+uWUwly6VjoUMiDExuPhm4ipnXCCMCy/AKgzlwAfl
+eIaU4k6VHOaRBBnT9IRqHa43sN9s0a3Pj+CwIaL51lMj/qfqzxY+2sTEN3aDyE/D
+OSl7Dr4k0lgGcaE7K7K/R1as7GPExz1kLk0gH74UKzUCgcAR3bxVEUxhyGnC0dPh
+eVGCQO0QCqlB0x5POUP11PZ/PjBxcaoUCq7Xj066peOeefe5yzBnPpGxiEIRBdPt
+tGHMwIMlICfuxdvRhcGoVAz/oYZI9kC5VY1l2ekaHPh/0BylJAR4JKZujM18rQt6
+nFsOl66QZISfw0FhWqWRpETFZn/oEgujzyass/znL92y6QRSvFNDR97CuhyNKYQP
+6z9fmMCeh98YuNR5dvws9IYoxlejumT01C2A0/SzPK3+fK0CgcEAlPoGj36KHb4W
+VYCTAQ2rd0vTpRQ37wQos5HZX9/oVtUdvcEl6L9pSQQvwXNzJ2RmPmEg1SXbrdo9
+6KOlIBY4aygYg5cHZ2oWS38r2mqlG+yawypPXZ5+mwWlqLurdicaBye+yGWU6FRB
+uh+zkV2xWhMrsxFgUiZHNadGvRb55R5L6UgzqjMwd45x5IgcGlevF3d2ZdIrozO4
+7DT4IwNbkMvrpMDumA+cXnMRvZ4BmXlPmB4SJWKIOmUSj2dFQK9L
+-----END RSA PRIVATE KEY-----
diff --git a/tests/testsuites/x.509/newcerts/01.pem b/tests/testsuites/x.509/newcerts/01.pem
new file mode 100644
index 0000000..b4bf169
--- /dev/null
+++ b/tests/testsuites/x.509/newcerts/01.pem
@@ -0,0 +1,92 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 1 (0x1)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=someName, OU=rsyslog, O=SomeOrg, C=US
+ Validity
+ Not Before: Jul 6 12:57:29 2023 GMT
+ Not After : Jun 12 12:57:29 2123 GMT
+ Subject: C=DE, ST=NRW, O=Adiscon GmbH, OU=rsyslog, CN=rsyslog revoked certificate test/emailAddress=alorbach@adiscon.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (2048 bit)
+ Modulus:
+ 00:bf:fe:14:5d:e9:9c:6c:67:15:3c:d4:49:9d:5b:
+ 2a:ea:43:c2:bc:9e:d0:3a:5e:55:2f:68:00:2b:0b:
+ da:dc:cf:f7:d9:a7:1b:a0:a3:31:dd:a8:07:13:9e:
+ dc:36:75:b8:34:ea:17:1a:f6:1d:db:33:1e:45:36:
+ 80:ae:9c:93:a6:02:4e:26:f8:07:de:1c:ce:9e:e7:
+ 4f:25:d7:59:24:49:5e:34:44:54:87:ab:e0:6d:5a:
+ 24:41:19:bf:33:c3:a5:11:d6:50:c0:f7:6d:2d:12:
+ 03:cc:0b:b9:ea:b2:85:5d:91:ad:84:ce:be:9b:0b:
+ c2:eb:01:97:b8:3a:dc:1c:b8:d2:43:e8:96:5e:f0:
+ 84:e2:98:18:7b:15:c6:af:0c:bb:8e:98:96:21:7b:
+ cd:6f:0d:9f:84:59:bf:91:a8:ba:6a:c9:bc:5f:4a:
+ f3:12:4d:33:e7:dc:b0:38:e9:71:d8:ef:d0:fd:9e:
+ 1f:d0:5a:bb:a9:3a:91:d8:1e:a7:9e:fa:ac:13:5b:
+ a3:ad:e8:87:0b:f4:b5:f8:a8:0d:a7:b1:59:40:26:
+ 42:7a:05:e4:31:66:f8:05:d1:fd:97:5f:ae:93:0a:
+ d9:45:6c:a3:df:32:ee:11:78:83:2f:ba:36:17:76:
+ 98:83:d6:08:fb:31:0e:81:7d:57:80:10:3c:de:0d:
+ 4b:0d
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 20:CE:A2:54:99:CF:22:9A:5C:BB:D4:1E:B0:1E:43:73:63:72:AA:DE
+ X509v3 Authority Key Identifier:
+ keyid:B0:9F:67:33:2C:88:88:89:1F:44:62:74:9D:25:FF:C0:06:13:5D:D6
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 60:37:92:c5:17:64:ed:64:a3:28:c2:81:60:a2:20:ac:e4:2d:
+ ce:bd:4b:4c:6e:ea:70:a1:2c:2d:d9:1c:94:cb:d1:81:ca:53:
+ c2:51:24:af:da:af:90:11:98:52:da:25:2b:19:59:82:58:d6:
+ 84:a5:63:d4:89:05:a9:12:bf:5d:8b:c8:1f:27:b0:a7:65:7e:
+ 0c:18:b7:3d:4e:ec:c5:34:b3:d3:92:f7:de:e5:19:1b:b9:e8:
+ 47:a7:ca:22:13:c4:63:4f:44:09:70:e2:90:f3:a7:5e:e0:5d:
+ 9c:f7:be:ea:1e:88:e7:c2:d3:b6:35:6d:b0:3b:84:8f:03:94:
+ a8:c0:c1:ed:27:17:9a:4d:f7:33:23:1e:76:3a:63:38:f0:59:
+ 39:98:ce:89:4b:2a:89:0e:12:bf:25:b5:d6:04:20:88:f0:65:
+ 9d:70:90:67:e8:28:8e:09:fa:d9:ab:c9:a9:0f:28:63:10:bb:
+ 24:2d:44:2f:6b:fb:7c:d2:38:01:ab:d2:33:2d:50:f4:75:80:
+ 9e:4f:d2:26:6c:31:23:44:8e:d5:a3:51:56:cf:d9:38:f6:d0:
+ 84:c0:fb:6f:c1:66:9c:e7:dd:51:4f:42:bb:d7:cc:ba:35:e1:
+ c6:a2:5c:4b:f2:1e:b7:e2:52:a5:83:97:ab:42:09:54:04:ed:
+ 4f:01:2d:cf:ee:44:b4:da:39:5c:da:30:d5:92:b6:04:11:8b:
+ 04:d7:6a:3a:28:6e:54:97:97:99:a3:ba:3a:48:1a:17:ef:49:
+ 05:fd:c5:e6:3f:c1:7c:ac:b0:45:62:ff:15:fd:13:1b:04:ba:
+ 72:23:32:0a:b8:4d:39:9a:31:15:4c:0a:d0:ef:a2:82:8f:2e:
+ ad:3c:23:dd:59:12:08:6f:e0:5b:5e:5c:29:db:74:ff:8c:08:
+ 43:59:6a:a1:57:df:37:02:53:16:14:f7:c5:4b:47:61:1e:86:
+ aa:2d:46:4d:b3:85:8a:ac:c3:8c:b5:87:90:01:4c:33:91:96:
+ 38:95:06:a7:36:90
+-----BEGIN CERTIFICATE-----
+MIIEUTCCArmgAwIBAgIBATANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDEwhzb21l
+TmFtZTEQMA4GA1UECxMHcnN5c2xvZzEQMA4GA1UEChMHU29tZU9yZzELMAkGA1UE
+BhMCVVMwIBcNMjMwNzA2MTI1NzI5WhgPMjEyMzA2MTIxMjU3MjlaMIGUMQswCQYD
+VQQGEwJERTEMMAoGA1UECAwDTlJXMRUwEwYDVQQKDAxBZGlzY29uIEdtYkgxEDAO
+BgNVBAsMB3JzeXNsb2cxKTAnBgNVBAMMIHJzeXNsb2cgcmV2b2tlZCBjZXJ0aWZp
+Y2F0ZSB0ZXN0MSMwIQYJKoZIhvcNAQkBFhRhbG9yYmFjaEBhZGlzY29uLmNvbTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/+FF3pnGxnFTzUSZ1bKupD
+wrye0DpeVS9oACsL2tzP99mnG6CjMd2oBxOe3DZ1uDTqFxr2HdszHkU2gK6ck6YC
+Tib4B94czp7nTyXXWSRJXjREVIer4G1aJEEZvzPDpRHWUMD3bS0SA8wLueqyhV2R
+rYTOvpsLwusBl7g63By40kPoll7whOKYGHsVxq8Mu46YliF7zW8Nn4RZv5GoumrJ
+vF9K8xJNM+fcsDjpcdjv0P2eH9Bau6k6kdgep576rBNbo63ohwv0tfioDaexWUAm
+QnoF5DFm+AXR/ZdfrpMK2UVso98y7hF4gy+6Nhd2mIPWCPsxDoF9V4AQPN4NSw0C
+AwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5l
+cmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFCDOolSZzyKaXLvUHrAeQ3Njcqre
+MB8GA1UdIwQYMBaAFLCfZzMsiIiJH0RidJ0l/8AGE13WMA0GCSqGSIb3DQEBCwUA
+A4IBgQBgN5LFF2TtZKMowoFgoiCs5C3OvUtMbupwoSwt2RyUy9GBylPCUSSv2q+Q
+EZhS2iUrGVmCWNaEpWPUiQWpEr9di8gfJ7CnZX4MGLc9TuzFNLPTkvfe5RkbuehH
+p8oiE8RjT0QJcOKQ86de4F2c977qHojnwtO2NW2wO4SPA5SowMHtJxeaTfczIx52
+OmM48Fk5mM6JSyqJDhK/JbXWBCCI8GWdcJBn6CiOCfrZq8mpDyhjELskLUQva/t8
+0jgBq9IzLVD0dYCeT9ImbDEjRI7Vo1FWz9k49tCEwPtvwWac591RT0K718y6NeHG
+olxL8h634lKlg5erQglUBO1PAS3P7kS02jlc2jDVkrYEEYsE12o6KG5Ul5eZo7o6
+SBoX70kF/cXmP8F8rLBFYv8V/RMbBLpyIzIKuE05mjEVTArQ76KCjy6tPCPdWRII
+b+BbXlwp23T/jAhDWWqhV983AlMWFPfFS0dhHoaqLUZNs4WKrMOMtYeQAUwzkZY4
+lQanNpA=
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/newcerts/02.pem b/tests/testsuites/x.509/newcerts/02.pem
new file mode 100644
index 0000000..b64b2a9
--- /dev/null
+++ b/tests/testsuites/x.509/newcerts/02.pem
@@ -0,0 +1,92 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 2 (0x2)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=someName, OU=rsyslog, O=SomeOrg, C=US
+ Validity
+ Not Before: Jul 6 12:59:25 2023 GMT
+ Not After : Jun 12 12:59:25 2123 GMT
+ Subject: C=DE, ST=NRW, O=Adiscon GmbH, OU=rsyslog, CN=rsyslog revoked certificate test/emailAddress=alorbach@adiscon.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (2048 bit)
+ Modulus:
+ 00:bf:fe:14:5d:e9:9c:6c:67:15:3c:d4:49:9d:5b:
+ 2a:ea:43:c2:bc:9e:d0:3a:5e:55:2f:68:00:2b:0b:
+ da:dc:cf:f7:d9:a7:1b:a0:a3:31:dd:a8:07:13:9e:
+ dc:36:75:b8:34:ea:17:1a:f6:1d:db:33:1e:45:36:
+ 80:ae:9c:93:a6:02:4e:26:f8:07:de:1c:ce:9e:e7:
+ 4f:25:d7:59:24:49:5e:34:44:54:87:ab:e0:6d:5a:
+ 24:41:19:bf:33:c3:a5:11:d6:50:c0:f7:6d:2d:12:
+ 03:cc:0b:b9:ea:b2:85:5d:91:ad:84:ce:be:9b:0b:
+ c2:eb:01:97:b8:3a:dc:1c:b8:d2:43:e8:96:5e:f0:
+ 84:e2:98:18:7b:15:c6:af:0c:bb:8e:98:96:21:7b:
+ cd:6f:0d:9f:84:59:bf:91:a8:ba:6a:c9:bc:5f:4a:
+ f3:12:4d:33:e7:dc:b0:38:e9:71:d8:ef:d0:fd:9e:
+ 1f:d0:5a:bb:a9:3a:91:d8:1e:a7:9e:fa:ac:13:5b:
+ a3:ad:e8:87:0b:f4:b5:f8:a8:0d:a7:b1:59:40:26:
+ 42:7a:05:e4:31:66:f8:05:d1:fd:97:5f:ae:93:0a:
+ d9:45:6c:a3:df:32:ee:11:78:83:2f:ba:36:17:76:
+ 98:83:d6:08:fb:31:0e:81:7d:57:80:10:3c:de:0d:
+ 4b:0d
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 20:CE:A2:54:99:CF:22:9A:5C:BB:D4:1E:B0:1E:43:73:63:72:AA:DE
+ X509v3 Authority Key Identifier:
+ keyid:B0:9F:67:33:2C:88:88:89:1F:44:62:74:9D:25:FF:C0:06:13:5D:D6
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 33:65:28:98:94:9b:f5:57:0d:bf:02:c2:67:93:8e:8e:77:03:
+ 9b:c7:7a:47:53:29:a4:dd:a6:a1:5e:2a:0a:ed:19:02:80:90:
+ b3:97:1f:06:4c:9c:c5:5f:6c:16:f9:12:fb:dd:da:29:88:b7:
+ 2c:91:0b:ab:53:79:7a:6e:76:20:fe:fa:b1:99:c2:2b:50:26:
+ 7b:cc:8c:75:98:35:95:79:56:43:90:a0:95:5e:98:09:10:4d:
+ ea:c0:1c:bb:c0:7b:a7:8a:9b:21:70:85:65:83:4d:ee:65:ef:
+ 10:d3:63:95:fd:51:9d:6c:41:7b:af:af:9c:e7:34:74:a1:7a:
+ 86:0a:8e:f2:2a:06:68:77:76:fa:fc:64:bc:28:1d:8b:53:7a:
+ cf:62:0f:87:a9:85:54:8c:a5:41:c3:61:0b:cf:96:c1:fa:81:
+ a5:31:63:f3:cb:17:37:58:6e:d9:30:97:fb:57:2f:31:63:e8:
+ 26:0e:82:49:e2:a9:9b:ed:39:7b:24:4e:42:8d:34:74:3a:dc:
+ b7:c5:d6:15:e9:66:28:2d:3c:e0:26:44:76:66:4a:32:94:11:
+ c8:1f:1c:b2:dc:44:69:63:f7:2d:87:b5:89:4a:40:fb:e4:14:
+ 68:dc:8a:76:40:93:35:e2:ac:9a:4b:bc:af:c5:8a:8a:38:54:
+ ef:69:01:4c:92:af:c0:07:d0:2f:7a:3c:9e:40:ac:56:07:d0:
+ 2b:1f:5f:d0:44:f9:70:e1:44:44:34:ba:fb:3d:54:85:4b:1d:
+ ba:ea:ea:6a:91:0c:08:30:2d:bc:b8:ea:22:c1:16:7b:53:fe:
+ 40:2c:8d:f5:c6:c2:39:e6:11:1d:e2:2f:50:a6:76:9c:fd:b9:
+ fa:d5:10:79:0e:e5:02:87:7d:96:e3:81:05:79:c9:a3:d8:f2:
+ a0:b1:8b:0e:8d:33:73:15:6f:27:88:85:03:8a:c5:7a:77:f4:
+ 3f:7f:b8:65:97:5b:a0:a6:21:48:67:2c:a2:73:a2:ec:d6:6a:
+ bd:d6:f2:e2:b1:5b
+-----BEGIN CERTIFICATE-----
+MIIEUTCCArmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDEwhzb21l
+TmFtZTEQMA4GA1UECxMHcnN5c2xvZzEQMA4GA1UEChMHU29tZU9yZzELMAkGA1UE
+BhMCVVMwIBcNMjMwNzA2MTI1OTI1WhgPMjEyMzA2MTIxMjU5MjVaMIGUMQswCQYD
+VQQGEwJERTEMMAoGA1UECAwDTlJXMRUwEwYDVQQKDAxBZGlzY29uIEdtYkgxEDAO
+BgNVBAsMB3JzeXNsb2cxKTAnBgNVBAMMIHJzeXNsb2cgcmV2b2tlZCBjZXJ0aWZp
+Y2F0ZSB0ZXN0MSMwIQYJKoZIhvcNAQkBFhRhbG9yYmFjaEBhZGlzY29uLmNvbTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/+FF3pnGxnFTzUSZ1bKupD
+wrye0DpeVS9oACsL2tzP99mnG6CjMd2oBxOe3DZ1uDTqFxr2HdszHkU2gK6ck6YC
+Tib4B94czp7nTyXXWSRJXjREVIer4G1aJEEZvzPDpRHWUMD3bS0SA8wLueqyhV2R
+rYTOvpsLwusBl7g63By40kPoll7whOKYGHsVxq8Mu46YliF7zW8Nn4RZv5GoumrJ
+vF9K8xJNM+fcsDjpcdjv0P2eH9Bau6k6kdgep576rBNbo63ohwv0tfioDaexWUAm
+QnoF5DFm+AXR/ZdfrpMK2UVso98y7hF4gy+6Nhd2mIPWCPsxDoF9V4AQPN4NSw0C
+AwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5l
+cmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFCDOolSZzyKaXLvUHrAeQ3Njcqre
+MB8GA1UdIwQYMBaAFLCfZzMsiIiJH0RidJ0l/8AGE13WMA0GCSqGSIb3DQEBCwUA
+A4IBgQAzZSiYlJv1Vw2/AsJnk46OdwObx3pHUymk3aahXioK7RkCgJCzlx8GTJzF
+X2wW+RL73dopiLcskQurU3l6bnYg/vqxmcIrUCZ7zIx1mDWVeVZDkKCVXpgJEE3q
+wBy7wHunipshcIVlg03uZe8Q02OV/VGdbEF7r6+c5zR0oXqGCo7yKgZod3b6/GS8
+KB2LU3rPYg+HqYVUjKVBw2ELz5bB+oGlMWPzyxc3WG7ZMJf7Vy8xY+gmDoJJ4qmb
+7Tl7JE5CjTR0Oty3xdYV6WYoLTzgJkR2ZkoylBHIHxyy3ERpY/cth7WJSkD75BRo
+3Ip2QJM14qyaS7yvxYqKOFTvaQFMkq/AB9AvejyeQKxWB9ArH1/QRPlw4URENLr7
+PVSFSx266upqkQwIMC28uOoiwRZ7U/5ALI31xsI55hEd4i9Qpnac/bn61RB5DuUC
+h32W44EFecmj2PKgsYsOjTNzFW8niIUDisV6d/Q/f7hll1ugpiFIZyyic6Ls1mq9
+1vLisVs=
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/newcerts/03.pem b/tests/testsuites/x.509/newcerts/03.pem
new file mode 100644
index 0000000..8bc2b8a
--- /dev/null
+++ b/tests/testsuites/x.509/newcerts/03.pem
@@ -0,0 +1,92 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 3 (0x3)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=someName, OU=rsyslog, O=SomeOrg, C=US
+ Validity
+ Not Before: Jul 6 13:38:06 2023 GMT
+ Not After : Jun 12 13:38:06 2123 GMT
+ Subject: C=DE, ST=NRW, O=Adiscon GmbH, OU=rsyslog, CN=rsyslog revoked certificate test/emailAddress=alorbach@adiscon.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (2048 bit)
+ Modulus:
+ 00:bf:fe:14:5d:e9:9c:6c:67:15:3c:d4:49:9d:5b:
+ 2a:ea:43:c2:bc:9e:d0:3a:5e:55:2f:68:00:2b:0b:
+ da:dc:cf:f7:d9:a7:1b:a0:a3:31:dd:a8:07:13:9e:
+ dc:36:75:b8:34:ea:17:1a:f6:1d:db:33:1e:45:36:
+ 80:ae:9c:93:a6:02:4e:26:f8:07:de:1c:ce:9e:e7:
+ 4f:25:d7:59:24:49:5e:34:44:54:87:ab:e0:6d:5a:
+ 24:41:19:bf:33:c3:a5:11:d6:50:c0:f7:6d:2d:12:
+ 03:cc:0b:b9:ea:b2:85:5d:91:ad:84:ce:be:9b:0b:
+ c2:eb:01:97:b8:3a:dc:1c:b8:d2:43:e8:96:5e:f0:
+ 84:e2:98:18:7b:15:c6:af:0c:bb:8e:98:96:21:7b:
+ cd:6f:0d:9f:84:59:bf:91:a8:ba:6a:c9:bc:5f:4a:
+ f3:12:4d:33:e7:dc:b0:38:e9:71:d8:ef:d0:fd:9e:
+ 1f:d0:5a:bb:a9:3a:91:d8:1e:a7:9e:fa:ac:13:5b:
+ a3:ad:e8:87:0b:f4:b5:f8:a8:0d:a7:b1:59:40:26:
+ 42:7a:05:e4:31:66:f8:05:d1:fd:97:5f:ae:93:0a:
+ d9:45:6c:a3:df:32:ee:11:78:83:2f:ba:36:17:76:
+ 98:83:d6:08:fb:31:0e:81:7d:57:80:10:3c:de:0d:
+ 4b:0d
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 20:CE:A2:54:99:CF:22:9A:5C:BB:D4:1E:B0:1E:43:73:63:72:AA:DE
+ X509v3 Authority Key Identifier:
+ keyid:B0:9F:67:33:2C:88:88:89:1F:44:62:74:9D:25:FF:C0:06:13:5D:D6
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 65:ac:7c:30:d0:01:ce:d7:ff:28:61:6c:8d:99:15:ce:45:22:
+ 8a:39:70:a4:a6:ce:48:94:e3:4b:8c:be:55:c4:66:96:49:49:
+ 4b:e0:4c:95:fd:73:02:54:3a:df:34:2f:96:16:48:ec:c2:23:
+ 3d:ee:b4:5a:dd:a0:c9:eb:85:f4:fd:e8:d5:8f:f3:dc:ce:4a:
+ 88:bb:be:19:81:3f:8b:0f:09:23:46:14:c9:f5:35:5a:cf:25:
+ 7c:92:df:b9:90:5d:ff:4f:21:40:9c:24:7c:0f:1f:3f:62:d1:
+ 7b:cc:40:7d:c6:61:49:f3:84:26:78:ed:87:70:06:9c:93:05:
+ a5:c4:7e:60:3d:d0:4a:2c:e4:d6:e5:33:f8:07:dd:5a:0e:9a:
+ 93:17:50:29:1a:ff:66:61:d9:40:a7:fb:cc:7b:62:b7:9d:29:
+ 1a:2a:3d:7b:93:87:eb:52:4e:00:19:19:3c:4d:73:fc:3d:ed:
+ eb:9d:92:30:bc:b0:ed:51:15:ce:b7:3c:00:09:0c:9d:6d:8b:
+ 2b:c9:f5:66:d4:49:44:58:3d:e7:61:3d:6b:21:05:ff:1d:55:
+ 59:dd:e4:a6:2f:e5:96:82:eb:24:33:2e:47:61:a5:f8:4d:ab:
+ ad:fc:64:f8:8b:9e:0e:62:8c:16:1d:79:18:74:18:9c:a2:19:
+ c3:24:0d:6e:45:63:f9:08:92:7d:44:0b:96:c7:48:84:72:97:
+ 22:23:bf:10:0a:d7:4e:43:8a:db:60:cd:5d:80:5e:71:fa:c2:
+ b6:68:10:ee:cc:29:86:15:d3:d9:93:2a:cc:73:88:be:9f:ad:
+ d0:c5:9c:a4:e4:86:38:e7:41:84:3a:d0:f3:67:1f:2c:40:d7:
+ 04:b1:ea:32:13:49:a5:82:1a:a5:6c:3f:5f:dc:fd:55:14:03:
+ 8b:d7:bd:01:9e:bc:c5:e4:a1:a8:a8:9d:bc:cd:1f:5b:fc:df:
+ 59:b7:0d:aa:47:a0:08:cd:6e:f7:c8:9d:d3:dd:4e:8b:aa:cc:
+ 54:20:a0:2b:63:96
+-----BEGIN CERTIFICATE-----
+MIIEUTCCArmgAwIBAgIBAzANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDEwhzb21l
+TmFtZTEQMA4GA1UECxMHcnN5c2xvZzEQMA4GA1UEChMHU29tZU9yZzELMAkGA1UE
+BhMCVVMwIBcNMjMwNzA2MTMzODA2WhgPMjEyMzA2MTIxMzM4MDZaMIGUMQswCQYD
+VQQGEwJERTEMMAoGA1UECAwDTlJXMRUwEwYDVQQKDAxBZGlzY29uIEdtYkgxEDAO
+BgNVBAsMB3JzeXNsb2cxKTAnBgNVBAMMIHJzeXNsb2cgcmV2b2tlZCBjZXJ0aWZp
+Y2F0ZSB0ZXN0MSMwIQYJKoZIhvcNAQkBFhRhbG9yYmFjaEBhZGlzY29uLmNvbTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/+FF3pnGxnFTzUSZ1bKupD
+wrye0DpeVS9oACsL2tzP99mnG6CjMd2oBxOe3DZ1uDTqFxr2HdszHkU2gK6ck6YC
+Tib4B94czp7nTyXXWSRJXjREVIer4G1aJEEZvzPDpRHWUMD3bS0SA8wLueqyhV2R
+rYTOvpsLwusBl7g63By40kPoll7whOKYGHsVxq8Mu46YliF7zW8Nn4RZv5GoumrJ
+vF9K8xJNM+fcsDjpcdjv0P2eH9Bau6k6kdgep576rBNbo63ohwv0tfioDaexWUAm
+QnoF5DFm+AXR/ZdfrpMK2UVso98y7hF4gy+6Nhd2mIPWCPsxDoF9V4AQPN4NSw0C
+AwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5l
+cmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFCDOolSZzyKaXLvUHrAeQ3Njcqre
+MB8GA1UdIwQYMBaAFLCfZzMsiIiJH0RidJ0l/8AGE13WMA0GCSqGSIb3DQEBCwUA
+A4IBgQBlrHww0AHO1/8oYWyNmRXORSKKOXCkps5IlONLjL5VxGaWSUlL4EyV/XMC
+VDrfNC+WFkjswiM97rRa3aDJ64X0/ejVj/PczkqIu74ZgT+LDwkjRhTJ9TVazyV8
+kt+5kF3/TyFAnCR8Dx8/YtF7zEB9xmFJ84QmeO2HcAackwWlxH5gPdBKLOTW5TP4
+B91aDpqTF1ApGv9mYdlAp/vMe2K3nSkaKj17k4frUk4AGRk8TXP8Pe3rnZIwvLDt
+URXOtzwACQydbYsryfVm1ElEWD3nYT1rIQX/HVVZ3eSmL+WWguskMy5HYaX4Taut
+/GT4i54OYowWHXkYdBicohnDJA1uRWP5CJJ9RAuWx0iEcpciI78QCtdOQ4rbYM1d
+gF5x+sK2aBDuzCmGFdPZkyrMc4i+n63QxZyk5IY450GEOtDzZx8sQNcEseoyE0ml
+ghqlbD9f3P1VFAOL170BnrzF5KGoqJ28zR9b/N9Ztw2qR6AIzW73yJ3T3U6LqsxU
+IKArY5Y=
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/newcerts/04.pem b/tests/testsuites/x.509/newcerts/04.pem
new file mode 100644
index 0000000..e92ab86
--- /dev/null
+++ b/tests/testsuites/x.509/newcerts/04.pem
@@ -0,0 +1,102 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 4 (0x4)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=someName, OU=rsyslog, O=SomeOrg, C=US
+ Validity
+ Not Before: Jul 6 13:52:50 2023 GMT
+ Not After : Jun 12 13:52:50 2123 GMT
+ Subject: C=US, ST=CA, O=SomeComp, OU=SomeUnit, CN=rsyslog/emailAddress=alorbach@adiscon.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (3072 bit)
+ Modulus:
+ 00:9d:91:da:d8:2e:3d:9d:ae:85:c3:c5:a7:f6:a4:
+ 66:f8:c8:91:91:b8:70:20:dc:ed:e8:23:ca:53:f7:
+ b8:52:43:f3:a7:eb:fb:df:8a:3b:2c:b0:13:fa:62:
+ d3:a1:53:a4:51:71:1f:68:d9:fd:bc:39:4a:fb:c9:
+ 6a:df:f3:88:84:b0:80:bc:c0:f5:1b:42:11:f6:4c:
+ 1a:d8:2c:62:0b:5d:50:64:30:9a:d3:db:c1:d5:7f:
+ 39:53:e4:bd:e8:1e:04:9d:c9:12:e0:e4:57:29:29:
+ 01:b9:f1:e5:bc:74:a6:e7:4b:61:e6:67:5c:6c:4e:
+ ee:ee:22:0c:1b:14:6d:e8:0c:6f:ee:ee:c3:b8:dd:
+ df:15:ed:7a:96:5b:cc:85:e5:e3:50:c4:ce:2b:bf:
+ b6:37:e6:20:fc:6e:45:7e:09:bd:84:7a:af:07:27:
+ f4:99:23:41:df:36:d8:29:31:a0:96:84:2f:fd:45:
+ 2e:d4:b4:f9:fa:dc:8f:23:c0:e0:06:ad:ad:0a:72:
+ da:f4:3b:a1:cb:d6:a6:3b:ec:46:c4:95:f2:71:a5:
+ ad:08:1f:e7:06:18:0e:db:80:51:96:ba:24:f6:64:
+ 02:6b:d3:f0:76:01:34:3a:72:02:e9:cb:d0:aa:62:
+ 51:0c:8f:83:be:c0:47:99:d2:92:72:ed:53:a5:49:
+ 05:d4:c9:a1:f4:4d:de:12:9d:1a:c8:17:84:f3:a2:
+ 7c:67:47:82:4b:86:1e:73:86:e2:26:26:10:94:a3:
+ 99:9b:08:99:78:9d:3d:33:5d:85:c2:46:65:94:ab:
+ 70:b4:3b:c1:26:8b:11:b6:66:27:88:22:84:03:b5:
+ 08:45:32:8c:81:23:be:62:dc:6f:a0:aa:5e:9f:03:
+ f7:a7:f5:03:70:3c:78:09:d0:84:44:8c:19:af:76:
+ f7:93:fc:af:c6:fd:db:d9:4c:cb:20:79:44:71:cb:
+ e6:55:61:a9:7a:af:0b:a3:a6:ed:e9:a9:11:af:fa:
+ a3:5d:ac:97:e7:ef:2b:b6:a8:37
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 6E:15:7E:C4:62:2B:92:6D:22:EE:0C:E4:C5:36:29:38:16:62:BE:89
+ X509v3 Authority Key Identifier:
+ keyid:B0:9F:67:33:2C:88:88:89:1F:44:62:74:9D:25:FF:C0:06:13:5D:D6
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 64:b0:45:6b:0c:7c:2d:09:14:8e:78:93:85:ef:d2:31:aa:c3:
+ 59:2e:85:bf:29:e1:46:59:38:d4:fe:ea:c4:c1:83:a7:4a:1b:
+ 92:5e:e8:11:9c:21:48:9d:1e:cc:31:d8:31:00:72:fe:7b:c1:
+ 18:c4:f5:37:f3:3b:0e:1a:f6:3f:19:47:22:c9:87:01:e0:4c:
+ f4:5d:36:0a:87:46:42:fc:6c:ab:26:ff:7d:ca:2c:19:97:ca:
+ 25:fc:70:66:4e:49:86:3e:81:0f:ee:e2:5c:3b:69:07:8b:c2:
+ 52:09:46:d8:67:af:84:54:bb:4f:f3:e0:da:07:c5:64:56:2d:
+ fb:f9:55:13:53:1d:c6:78:63:40:22:23:4f:63:59:37:05:c7:
+ 46:b6:36:53:30:fe:9b:e6:01:0a:54:5b:be:1b:a4:72:c3:27:
+ 1b:c5:21:5d:d3:0c:06:56:d9:df:45:83:e7:06:6d:47:53:72:
+ ea:6c:e7:db:5e:bd:14:47:19:0c:18:13:73:6b:14:dc:29:6c:
+ c0:60:fa:4c:02:74:45:e7:8d:12:bd:1f:cb:77:2c:72:19:ef:
+ e8:85:5c:cf:77:04:b7:d4:08:a8:7e:d1:1d:20:7b:76:27:ca:
+ 8a:5a:2a:a5:e7:15:6c:2d:50:9c:c2:b4:83:45:c2:f7:a5:f0:
+ 6b:d5:45:6b:88:4c:db:00:26:2f:8e:0a:3c:42:4e:0c:64:18:
+ 41:a0:6b:4b:d0:78:89:b4:64:34:5b:76:cb:dd:b9:be:6e:28:
+ 82:ba:6e:11:99:86:88:b6:0d:22:2b:a6:eb:5f:0b:ca:77:5b:
+ 2e:28:b7:f3:96:c3:8c:9d:0d:2b:59:98:d4:20:87:3a:2e:f4:
+ e3:bf:a2:ff:67:4f:3f:1e:ce:ec:59:76:5a:67:81:ba:44:96:
+ 29:af:05:ce:55:02:b4:d6:68:f0:25:61:8c:91:83:03:fd:e4:
+ 2c:06:91:b4:32:d8:5b:47:d6:20:55:44:a6:0c:9b:97:bb:94:
+ 66:25:8c:35:e0:32
+-----BEGIN CERTIFICATE-----
+MIIEszCCAxugAwIBAgIBBDANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDEwhzb21l
+TmFtZTEQMA4GA1UECxMHcnN5c2xvZzEQMA4GA1UEChMHU29tZU9yZzELMAkGA1UE
+BhMCVVMwIBcNMjMwNzA2MTM1MjUwWhgPMjEyMzA2MTIxMzUyNTBaMHcxCzAJBgNV
+BAYTAlVTMQswCQYDVQQIDAJDQTERMA8GA1UECgwIU29tZUNvbXAxETAPBgNVBAsM
+CFNvbWVVbml0MRAwDgYDVQQDDAdyc3lzbG9nMSMwIQYJKoZIhvcNAQkBFhRhbG9y
+YmFjaEBhZGlzY29uLmNvbTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGB
+AJ2R2tguPZ2uhcPFp/akZvjIkZG4cCDc7egjylP3uFJD86fr+9+KOyywE/pi06FT
+pFFxH2jZ/bw5SvvJat/ziISwgLzA9RtCEfZMGtgsYgtdUGQwmtPbwdV/OVPkvege
+BJ3JEuDkVykpAbnx5bx0pudLYeZnXGxO7u4iDBsUbegMb+7uw7jd3xXtepZbzIXl
+41DEziu/tjfmIPxuRX4JvYR6rwcn9JkjQd822CkxoJaEL/1FLtS0+frcjyPA4Aat
+rQpy2vQ7ocvWpjvsRsSV8nGlrQgf5wYYDtuAUZa6JPZkAmvT8HYBNDpyAunL0Kpi
+UQyPg77AR5nSknLtU6VJBdTJofRN3hKdGsgXhPOifGdHgkuGHnOG4iYmEJSjmZsI
+mXidPTNdhcJGZZSrcLQ7wSaLEbZmJ4gihAO1CEUyjIEjvmLcb6CqXp8D96f1A3A8
+eAnQhESMGa9295P8r8b929lMyyB5RHHL5lVhqXqvC6Om7empEa/6o12sl+fvK7ao
+NwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl
+bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUbhV+xGIrkm0i7gzkxTYpOBZi
+vokwHwYDVR0jBBgwFoAUsJ9nMyyIiIkfRGJ0nSX/wAYTXdYwDQYJKoZIhvcNAQEL
+BQADggGBAGSwRWsMfC0JFI54k4Xv0jGqw1kuhb8p4UZZONT+6sTBg6dKG5Je6BGc
+IUidHswx2DEAcv57wRjE9TfzOw4a9j8ZRyLJhwHgTPRdNgqHRkL8bKsm/33KLBmX
+yiX8cGZOSYY+gQ/u4lw7aQeLwlIJRthnr4RUu0/z4NoHxWRWLfv5VRNTHcZ4Y0Ai
+I09jWTcFx0a2NlMw/pvmAQpUW74bpHLDJxvFIV3TDAZW2d9Fg+cGbUdTcups59te
+vRRHGQwYE3NrFNwpbMBg+kwCdEXnjRK9H8t3LHIZ7+iFXM93BLfUCKh+0R0ge3Yn
+yopaKqXnFWwtUJzCtINFwvel8GvVRWuITNsAJi+OCjxCTgxkGEGga0vQeIm0ZDRb
+dsvdub5uKIK6bhGZhoi2DSIrputfC8p3Wy4ot/OWw4ydDStZmNQghzou9OO/ov9n
+Tz8ezuxZdlpngbpElimvBc5VArTWaPAlYYyRgwP95CwGkbQy2FtH1iBVRKYMm5e7
+lGYljDXgMg==
+-----END CERTIFICATE-----
diff --git a/tests/testsuites/x.509/openssl-cmds.sh b/tests/testsuites/x.509/openssl-cmds.sh
new file mode 100644
index 0000000..5bcc382
--- /dev/null
+++ b/tests/testsuites/x.509/openssl-cmds.sh
@@ -0,0 +1,11 @@
+# CREATE KEY
+# openssl genpkey -algorithm RSA -out client-revoked-key.pem
+# CREATE REQEST
+# openssl req -new -key client-revoked-key.pem -out client-revoked.csr
+# CREATE A CERT
+# openssl ca -config openssl.cnf -in client-revoked.csr -out client-revoked.pem -keyfile ca-key.pem -cert ca.pem
+# REVOKE A CERT
+# openssl ca -config openssl.cnf -revoke client-revoked.pem -keyfile ca-key.pem -cert ca.pem
+# CREATE crl.pem
+# openssl ca -config openssl.cnf -gencrl -out crl.pem -keyfile ca-key.pem -cert ca.pem
+
diff --git a/tests/testsuites/x.509/openssl.cnf b/tests/testsuites/x.509/openssl.cnf
new file mode 100644
index 0000000..39eba57
--- /dev/null
+++ b/tests/testsuites/x.509/openssl.cnf
@@ -0,0 +1,41 @@
+[ ca ]
+default_ca = CA_default
+
+[ CA_default ]
+dir = ./
+certs = $dir/certs
+crl_dir = $dir/crl
+database = $dir/index.txt
+new_certs_dir = $dir/newcerts
+
+certificate = $dir/ca.pem
+serial = $dir/serial
+crl = $dir/crl.pem
+private_key = $dir/ca-key.pem
+
+x509_extensions = usr_cert
+name_opt = ca_default
+cert_opt = ca_default
+default_days = 36500
+default_md = sha256
+
+# How long before next CRL, default is 1 but for testing we need no expire, so 100 years is fine.
+default_crl_days = 36500
+
+preserve = no
+policy = policy_match
+
+[ policy_match ]
+countryName = supplied
+stateOrProvinceName = supplied
+organizationName = supplied
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+[ usr_cert ]
+basicConstraints=CA:FALSE
+nsComment="OpenSSL Generated Certificate"
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer
+
diff --git a/tests/testsuites/x.509/serial b/tests/testsuites/x.509/serial
new file mode 100644
index 0000000..eeee65e
--- /dev/null
+++ b/tests/testsuites/x.509/serial
@@ -0,0 +1 @@
+05
diff --git a/tests/testsuites/xlate.lkp_tbl b/tests/testsuites/xlate.lkp_tbl
new file mode 100644
index 0000000..cc98de1
--- /dev/null
+++ b/tests/testsuites/xlate.lkp_tbl
@@ -0,0 +1,5 @@
+{
+ "table":[
+ {"index":" msgnum:00000001:", "value":"bar_old" },
+ {"index":" msgnum:00000000:", "value":"foo_old" }]
+}
diff --git a/tests/testsuites/xlate_array.lkp_tbl b/tests/testsuites/xlate_array.lkp_tbl
new file mode 100644
index 0000000..c2b327b
--- /dev/null
+++ b/tests/testsuites/xlate_array.lkp_tbl
@@ -0,0 +1,6 @@
+{
+ "type" : "array",
+ "table":[
+ {"index": 1, "value":"bar_old" },
+ {"index": 0, "value":"foo_old" }]
+}
diff --git a/tests/testsuites/xlate_array_empty_table.lkp_tbl b/tests/testsuites/xlate_array_empty_table.lkp_tbl
new file mode 100644
index 0000000..e4912d0
--- /dev/null
+++ b/tests/testsuites/xlate_array_empty_table.lkp_tbl
@@ -0,0 +1,6 @@
+{
+ "version": 1,
+ "nomatch": "baz_arr",
+ "type" : "array",
+ "table":[]
+}
diff --git a/tests/testsuites/xlate_array_misuse.lkp_tbl b/tests/testsuites/xlate_array_misuse.lkp_tbl
new file mode 100644
index 0000000..8cc96c0
--- /dev/null
+++ b/tests/testsuites/xlate_array_misuse.lkp_tbl
@@ -0,0 +1,6 @@
+{
+ "type" : "array",
+ "table":[
+ {"index": 3, "value":"bar_old" },
+ {"index": 1, "value":"foo_old" }]
+}
diff --git a/tests/testsuites/xlate_array_more.lkp_tbl b/tests/testsuites/xlate_array_more.lkp_tbl
new file mode 100644
index 0000000..fa93014
--- /dev/null
+++ b/tests/testsuites/xlate_array_more.lkp_tbl
@@ -0,0 +1,7 @@
+{
+ "type" : "array",
+ "table":[
+ {"index": 2, "value":"baz" },
+ {"index": 0, "value":"foo_new" },
+ {"index": 1, "value":"bar_new" }]
+}
diff --git a/tests/testsuites/xlate_array_more_misuse.lkp_tbl b/tests/testsuites/xlate_array_more_misuse.lkp_tbl
new file mode 100644
index 0000000..223d3de
--- /dev/null
+++ b/tests/testsuites/xlate_array_more_misuse.lkp_tbl
@@ -0,0 +1,7 @@
+{
+ "type" : "array",
+ "table":[
+ {"index": 2, "value":"baz" },
+ {"index": 1, "value":"foo_new" },
+ {"index": 1, "value":"bar_new" }]
+}
diff --git a/tests/testsuites/xlate_array_more_with_duplicates_and_nomatch.lkp_tbl b/tests/testsuites/xlate_array_more_with_duplicates_and_nomatch.lkp_tbl
new file mode 100644
index 0000000..d7730e6
--- /dev/null
+++ b/tests/testsuites/xlate_array_more_with_duplicates_and_nomatch.lkp_tbl
@@ -0,0 +1,13 @@
+{
+ "nomatch": "quux",
+ "type" : "array",
+ "table":[
+ {"index": 2, "value": "foo_latest" },
+ {"index": 3, "value": "baz_latest" },
+ {"index": 4, "value": "foo_latest" },
+ {"index": 5, "value": "foo_latest" },
+ {"index": 6, "value": "baz_latest" },
+ {"index": 7, "value": "foo_latest" },
+ {"index": 8, "value": "baz_latest" },
+ {"index": 9, "value": "baz_latest" }]
+}
diff --git a/tests/testsuites/xlate_array_no_index.lkp_tbl b/tests/testsuites/xlate_array_no_index.lkp_tbl
new file mode 100644
index 0000000..30dc209
--- /dev/null
+++ b/tests/testsuites/xlate_array_no_index.lkp_tbl
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "array",
+ "table":[
+ {"value":"foo" },
+ {"value":"bar" }]
+}
diff --git a/tests/testsuites/xlate_array_no_table.lkp_tbl b/tests/testsuites/xlate_array_no_table.lkp_tbl
new file mode 100644
index 0000000..df47606
--- /dev/null
+++ b/tests/testsuites/xlate_array_no_table.lkp_tbl
@@ -0,0 +1,5 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "array"
+}
diff --git a/tests/testsuites/xlate_array_no_value.lkp_tbl b/tests/testsuites/xlate_array_no_value.lkp_tbl
new file mode 100644
index 0000000..176cafb
--- /dev/null
+++ b/tests/testsuites/xlate_array_no_value.lkp_tbl
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "array",
+ "table":[
+ {"index":"00000000" },
+ {"index":"00000001" }]
+}
diff --git a/tests/testsuites/xlate_empty_file.lkp_tbl b/tests/testsuites/xlate_empty_file.lkp_tbl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/testsuites/xlate_empty_file.lkp_tbl
diff --git a/tests/testsuites/xlate_incorrect_type.lkp_tbl b/tests/testsuites/xlate_incorrect_type.lkp_tbl
new file mode 100644
index 0000000..0180b6e
--- /dev/null
+++ b/tests/testsuites/xlate_incorrect_type.lkp_tbl
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "quux",
+ "table":[
+ {"index":" 00000000", "value":"foo" },
+ {"index":" 00000001", "value":"bar" }]
+}
diff --git a/tests/testsuites/xlate_incorrect_version.lkp_tbl b/tests/testsuites/xlate_incorrect_version.lkp_tbl
new file mode 100644
index 0000000..ef2ce7b
--- /dev/null
+++ b/tests/testsuites/xlate_incorrect_version.lkp_tbl
@@ -0,0 +1,8 @@
+{
+ "version": 3,
+ "nomatch": "baz",
+ "type" : "string",
+ "table":[
+ {"index": "00000000", "value":"foo" },
+ {"index": "00000001", "value":"bar" }]
+}
diff --git a/tests/testsuites/xlate_invalid_json.lkp_tbl b/tests/testsuites/xlate_invalid_json.lkp_tbl
new file mode 100644
index 0000000..0d1e247
--- /dev/null
+++ b/tests/testsuites/xlate_invalid_json.lkp_tbl
@@ -0,0 +1,4 @@
+{
+ version": "baz_sparse_arr",
+ "type" : "sparseArray",
+ "table":[]
diff --git a/tests/testsuites/xlate_more.lkp_tbl b/tests/testsuites/xlate_more.lkp_tbl
new file mode 100644
index 0000000..2d3f452
--- /dev/null
+++ b/tests/testsuites/xlate_more.lkp_tbl
@@ -0,0 +1,6 @@
+{
+ "table":[
+ {"index":" msgnum:00000000:", "value":"foo_new" },
+ {"index":" msgnum:00000001:", "value":"bar_new" },
+ {"index":" msgnum:00000002:", "value":"baz" }]
+}
diff --git a/tests/testsuites/xlate_more_with_duplicates_and_nomatch.lkp_tbl b/tests/testsuites/xlate_more_with_duplicates_and_nomatch.lkp_tbl
new file mode 100644
index 0000000..ac50664
--- /dev/null
+++ b/tests/testsuites/xlate_more_with_duplicates_and_nomatch.lkp_tbl
@@ -0,0 +1,12 @@
+{
+ "nomatch": "quux",
+ "table":[
+ {"index":" msgnum:00000000:", "value":"foo_latest" },
+ {"index":" msgnum:00000002:", "value":"baz_latest" },
+ {"index":" msgnum:00000003:", "value":"foo_latest" },
+ {"index":" msgnum:00000004:", "value":"foo_latest" },
+ {"index":" msgnum:00000005:", "value":"baz_latest" },
+ {"index":" msgnum:00000006:", "value":"foo_latest" },
+ {"index":" msgnum:00000007:", "value":"baz_latest" },
+ {"index":" msgnum:00000008:", "value":"baz_latest" }]
+}
diff --git a/tests/testsuites/xlate_sparseArray_empty_table.lkp_tbl b/tests/testsuites/xlate_sparseArray_empty_table.lkp_tbl
new file mode 100644
index 0000000..f33c7d7
--- /dev/null
+++ b/tests/testsuites/xlate_sparseArray_empty_table.lkp_tbl
@@ -0,0 +1,6 @@
+{
+ "version": 1,
+ "nomatch": "baz_sparse_arr",
+ "type" : "sparseArray",
+ "table":[]
+}
diff --git a/tests/testsuites/xlate_sparseArray_no_index.lkp_tbl b/tests/testsuites/xlate_sparseArray_no_index.lkp_tbl
new file mode 100644
index 0000000..29ba48c
--- /dev/null
+++ b/tests/testsuites/xlate_sparseArray_no_index.lkp_tbl
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "sparseArray",
+ "table":[
+ {"value":"foo" },
+ {"value":"bar" }]
+}
diff --git a/tests/testsuites/xlate_sparseArray_no_table.lkp_tbl b/tests/testsuites/xlate_sparseArray_no_table.lkp_tbl
new file mode 100644
index 0000000..45fc9a9
--- /dev/null
+++ b/tests/testsuites/xlate_sparseArray_no_table.lkp_tbl
@@ -0,0 +1,5 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "sparseArray"
+}
diff --git a/tests/testsuites/xlate_sparseArray_no_value.lkp_tbl b/tests/testsuites/xlate_sparseArray_no_value.lkp_tbl
new file mode 100644
index 0000000..e5c65ee
--- /dev/null
+++ b/tests/testsuites/xlate_sparseArray_no_value.lkp_tbl
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "sparseArray",
+ "table":[
+ {"index":"00000000" },
+ {"index":"00000001" }]
+}
diff --git a/tests/testsuites/xlate_sparse_array.lkp_tbl b/tests/testsuites/xlate_sparse_array.lkp_tbl
new file mode 100644
index 0000000..84523f1
--- /dev/null
+++ b/tests/testsuites/xlate_sparse_array.lkp_tbl
@@ -0,0 +1,6 @@
+{
+ "type" : "sparseArray",
+ "table":[
+ {"index": 3, "value":"bar_old" },
+ {"index": 1, "value":"foo_old" }]
+}
diff --git a/tests/testsuites/xlate_sparse_array_more.lkp_tbl b/tests/testsuites/xlate_sparse_array_more.lkp_tbl
new file mode 100644
index 0000000..bf52153
--- /dev/null
+++ b/tests/testsuites/xlate_sparse_array_more.lkp_tbl
@@ -0,0 +1,7 @@
+{
+ "type" : "sparseArray",
+ "table":[
+ {"index": 4, "value":"baz" },
+ {"index": 0, "value":"foo_new" },
+ {"index": 2, "value":"bar_new" }]
+}
diff --git a/tests/testsuites/xlate_sparse_array_more_with_duplicates_and_nomatch.lkp_tbl b/tests/testsuites/xlate_sparse_array_more_with_duplicates_and_nomatch.lkp_tbl
new file mode 100644
index 0000000..0dc9169
--- /dev/null
+++ b/tests/testsuites/xlate_sparse_array_more_with_duplicates_and_nomatch.lkp_tbl
@@ -0,0 +1,12 @@
+{
+ "nomatch": "quux",
+ "type" : "sparseArray",
+ "table":[
+ {"index": 2, "value": "foo_latest" },
+ {"index": 3, "value": "baz_latest" },
+ {"index": 4, "value": "foo_latest" },
+ {"index": 5, "value": "foo_latest" },
+ {"index": 8, "value": "baz_latest" },
+ {"index": 10, "value": "baz_latest" },
+ {"index": 12, "value": "foo_latest" }]
+}
diff --git a/tests/testsuites/xlate_string_empty_table.lkp_tbl b/tests/testsuites/xlate_string_empty_table.lkp_tbl
new file mode 100644
index 0000000..81358da
--- /dev/null
+++ b/tests/testsuites/xlate_string_empty_table.lkp_tbl
@@ -0,0 +1,6 @@
+{
+ "version": 1,
+ "nomatch": "baz_str",
+ "type" : "string",
+ "table":[]
+}
diff --git a/tests/testsuites/xlate_string_no_index.lkp_tbl b/tests/testsuites/xlate_string_no_index.lkp_tbl
new file mode 100644
index 0000000..c5a0eec
--- /dev/null
+++ b/tests/testsuites/xlate_string_no_index.lkp_tbl
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "string",
+ "table":[
+ {"value":"foo" },
+ {"value":"bar" }]
+}
diff --git a/tests/testsuites/xlate_string_no_table.lkp_tbl b/tests/testsuites/xlate_string_no_table.lkp_tbl
new file mode 100644
index 0000000..d941488
--- /dev/null
+++ b/tests/testsuites/xlate_string_no_table.lkp_tbl
@@ -0,0 +1,5 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "string"
+}
diff --git a/tests/testsuites/xlate_string_no_value.lkp_tbl b/tests/testsuites/xlate_string_no_value.lkp_tbl
new file mode 100644
index 0000000..d2280f2
--- /dev/null
+++ b/tests/testsuites/xlate_string_no_value.lkp_tbl
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "nomatch": "baz",
+ "type" : "string",
+ "table":[
+ {"index":"00000000" },
+ {"index":"00000001" }]
+}
diff --git a/tests/testsuites/zoo.cfg b/tests/testsuites/zoo.cfg
new file mode 100644
index 0000000..b3a3cac
--- /dev/null
+++ b/tests/testsuites/zoo.cfg
@@ -0,0 +1,5 @@
+tickTime=1000
+initLimit=5
+syncLimit=2
+dataDir=zk_data_dir
+clientPort=22181
diff --git a/tests/testsuites/zoo.dep_wrk1.cfg b/tests/testsuites/zoo.dep_wrk1.cfg
new file mode 100644
index 0000000..b3a3cac
--- /dev/null
+++ b/tests/testsuites/zoo.dep_wrk1.cfg
@@ -0,0 +1,5 @@
+tickTime=1000
+initLimit=5
+syncLimit=2
+dataDir=zk_data_dir
+clientPort=22181
diff --git a/tests/testsuites/zoo.dep_wrk2.cfg b/tests/testsuites/zoo.dep_wrk2.cfg
new file mode 100644
index 0000000..a97d0ec
--- /dev/null
+++ b/tests/testsuites/zoo.dep_wrk2.cfg
@@ -0,0 +1,5 @@
+tickTime=1000
+initLimit=5
+syncLimit=2
+dataDir=zk_data_dir
+clientPort=22182
diff --git a/tests/testsuites/zoo.dep_wrk3.cfg b/tests/testsuites/zoo.dep_wrk3.cfg
new file mode 100644
index 0000000..94d9667
--- /dev/null
+++ b/tests/testsuites/zoo.dep_wrk3.cfg
@@ -0,0 +1,5 @@
+tickTime=1000
+initLimit=5
+syncLimit=2
+dataDir=zk_data_dir
+clientPort=22183