--- /dev/null
+varnishtest "Test log-profile feature"
+feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(3.1-dev0)'"
+feature ignore_unknown_macro
+
+barrier b1 cond 4 -cyclic
+barrier b2 cond 4 -cyclic
+barrier b3 cond 3 -cyclic
+barrier b4 cond 2 -cyclic
+
+server s1 {
+ rxreq
+ txresp
+} -repeat 3 -start
+
+syslog Slg1 -level info {
+ recv
+ #rfc5424, no profile and option httplog:
+ expect ~ ".* haproxy ${h1_pid} .* \"GET / HTTP/1.1\""
+ barrier b1 sync
+
+ recv
+ #rfc5424, no profile, tcp and option logasap
+ expect ~ ".* haproxy ${h1_pid} .* \\+0"
+ barrier b2 sync
+} -start
+
+syslog Slg2 -level info {
+ recv
+ #rfc5424, logprof1 httplog
+ expect ~ ".* haproxy ${h1_pid} .* sdclose close"
+ recv
+ #rfc5424, logprof2 httplog
+ expect ~ ".* custom ${h1_pid} .* - txn_close"
+ barrier b1 sync
+
+ recv
+ #rfc5424, logprof1 tcp logasap
+ expect ~ ".* haproxy ${h1_pid} .* \\+0"
+ barrier b2 sync
+
+ recv
+ #rfc5424, logprof1 tcp
+ expect ~ ".* haproxy ${h1_pid} .* sdclose close"
+ barrier b3 sync
+} -start
+
+syslog Slg3 -level info {
+ recv
+ #rfc3164, logprof1 and option httplog
+ expect ~ "[^:\\[ ]\\[${h1_pid}\\]: close"
+ barrier b1 sync
+
+ recv
+ #rfc5424, logprof2, tcp and option logasap
+ expect ~ ".* custom ${h1_pid} .* - txn_connect"
+ barrier b2 sync
+
+ recv
+ #rfc5424, logprof2 tcp
+ expect ~ ".* custom ${h1_pid} .* - txn_close"
+ barrier b3 sync
+
+ recv
+ #rfc5424, logprof2, tcp error
+ expect ~ ".* custom ${h1_pid} .* error"
+ barrier b4 sync
+} -start
+
+haproxy h1 -conf {
+ defaults
+ timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
+ timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
+ timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
+ log-tag "haproxy"
+
+ frontend fe1
+ bind "fd@${fe_1}"
+ mode http
+ option httplog
+ log udp@${Slg1_addr}:${Slg1_port} format rfc5424 local0
+ log udp@${Slg2_addr}:${Slg2_port} format rfc5424 profile logprof1 local0
+ log udp@${Slg2_addr}:${Slg2_port} format rfc5424 profile logprof2 local0
+ log udp@${Slg3_addr}:${Slg3_port} format rfc3164 profile logprof1 local0
+
+ default_backend be
+
+ frontend fe2
+ bind "fd@${fe_2}"
+ mode tcp
+ log-format "%B"
+ option logasap
+ log udp@${Slg1_addr}:${Slg1_port} format rfc5424 local0
+ log udp@${Slg2_addr}:${Slg2_port} format rfc5424 profile logprof1 local0
+ log udp@${Slg3_addr}:${Slg3_port} format rfc5424 profile logprof2 local0
+
+ default_backend be_tcp
+
+ frontend fe3
+ bind "fd@${fe_3}"
+ mode tcp
+ log-format "%B"
+ log udp@${Slg2_addr}:${Slg2_port} format rfc5424 profile logprof1 local0
+ log udp@${Slg3_addr}:${Slg3_port} format rfc5424 profile logprof2 local0
+
+ default_backend be_tcp
+
+ listen fe4
+ bind "fd@${fe_4}"
+ timeout client 5ms
+ mode http
+ log-format "%B"
+ log udp@${Slg3_addr}:${Slg3_port} format rfc5424 profile logprof2 local0
+
+ log-profile logprof1
+ on close format "close" sd "sdclose"
+
+ log-profile logprof2
+ log-tag "custom"
+ on error format "error"
+ on any format "%OG"
+
+ backend be
+ mode http
+ server app1 ${s1_addr}:${s1_port}
+
+ backend be_tcp
+ mode tcp
+ server app1 ${s1_addr}:${s1_port}
+
+
+} -start
+
+# requests generators (to trigger log emission)
+
+client c1 -connect ${h1_fe_1_sock} {
+ txreq -url "/"
+ rxresp
+ expect resp.status == 200
+} -start -wait
+
+# Wait matching log messages
+barrier b1 sync
+
+client c2 -connect ${h1_fe_2_sock} {
+ txreq -url "/"
+ rxresp
+ expect resp.status == 200
+} -start -wait
+
+# Wait matching log messages
+barrier b2 sync
+
+client c3 -connect ${h1_fe_3_sock} {
+ txreq -url "/"
+ rxresp
+ expect resp.status == 200
+} -start -wait
+
+# Wait matching log messages
+barrier b3 sync
+
+client c4 -connect ${h1_fe_4_sock} {
+ # do nothing to trigger an error (fe_4 timeouts after 5ms)
+} -start -wait
+
+# Wait matching log messages
+barrier b4 sync
+
+syslog Slg1 -wait
+syslog Slg2 -wait
+syslog Slg3 -wait