| varnishtest "Verify logging of last final rule" |
| |
| feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.6-dev0)'" |
| feature ignore_unknown_macro |
| |
| server s1 { |
| rxreq |
| txresp |
| } -repeat 15 -start |
| |
| syslog Slg_1 -level info { |
| recv |
| # /trqacc1 |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:30" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:31" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:32" |
| recv |
| # /trsacc1 |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:36" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:37" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:38" |
| recv |
| # /hrqvar |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*-:-" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:41" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:42" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:43" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:44" |
| recv |
| # /hrsacc1 |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:46" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:47" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:48" |
| recv |
| expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* lr=.*/h1/cfg:49" |
| } -start |
| |
| haproxy h1 -conf { |
| global |
| nbthread 1 |
| |
| defaults |
| mode http |
| option httplog |
| option http-server-close |
| timeout connect "${HAPROXY_TEST_TIMEOUT-5s}" |
| timeout client "${HAPROXY_TEST_TIMEOUT-5s}" |
| timeout server "${HAPROXY_TEST_TIMEOUT-5s}" |
| |
| frontend fe1 |
| bind "fd@${fe_1}" |
| log ${Slg_1_addr}:${Slg_1_port} local0 |
| log-format "ci:%cp [%tr] lr=%[last_rule_file]:%[last_rule_line]" |
| default_backend be |
| |
| backend be |
| # handle these URLs: |
| # /trqacc1, /trqrej1, /trqrej2, /trsacc1, /trsrej1, /trsrej2 |
| # /hrqvar, /hrqacc1, /hrqred1, /hrqrej1, /hrqrej2, |
| # /hrsacc1, /hrsred1, /hrsrej1, /hrsrej2 |
| |
| tcp-response inspect-delay 100ms |
| tcp-request content set-var(txn.path) path # must have no effect |
| tcp-request content accept if { var(txn.path) -m beg /trqacc1 /hrqrej1 } |
| tcp-request content reject if { var(txn.path) -m beg /trqrej1 } |
| tcp-request content reject if { var(txn.path) -m beg /trqrej2 } |
| |
| tcp-response content reject unless WAIT_END |
| tcp-response content set-var(txn.foo) var(txn.path) # must have no effect |
| tcp-response content accept if { var(txn.path) -m beg /trsacc1 /hrsrej1 } |
| tcp-response content reject if { var(txn.path) -m beg /trsrej1 } |
| tcp-response content reject if { var(txn.path) -m beg /trsrej2 } |
| |
| http-request set-var(txn.bar) var(txn.path) if { path_beg /hrqvar } # must have no effect |
| http-request allow if { var(txn.path) -m beg /hrqacc1 /hrsrej2 } |
| http-request redirect location / if { var(txn.path) -m beg /hrqred1 } |
| http-request deny if { var(txn.path) -m beg /hrqrej1 } # accepted by tcp-rq above |
| http-request deny if { var(txn.path) -m beg /hrqrej2 } |
| |
| http-response allow if { var(txn.path) -m beg /hrsacc1 } |
| http-response redirect location / if { var(txn.path) -m beg /hrsred1 } |
| http-response deny if { var(txn.path) -m beg /hrsrej1 } # accepted by tcp-rs above |
| http-response deny if { var(txn.path) -m beg /hrsrej2 } # accepted by http-rq above |
| http-response deny if { var(txn.path) -m beg /hrsrej3 } |
| |
| server app1 ${s1_addr}:${s1_port} |
| } -start |
| |
| client c1 -connect ${h1_fe_1_sock} { |
| txreq -url /trqacc1 |
| rxresp |
| |
| txreq -url /trqrej1 |
| expect_close |
| } -run |
| |
| # The following client are started in background and synchronized |
| client c2 -connect ${h1_fe_1_sock} { |
| txreq -url /trqrej2 |
| expect_close |
| } -run |
| |
| client c3 -connect ${h1_fe_1_sock} { |
| txreq -url /trsacc1 |
| rxresp |
| expect resp.status == 200 |
| |
| txreq -url /trsrej1 |
| expect_close |
| } -run |
| |
| client c4 -connect ${h1_fe_1_sock} { |
| txreq -url /trsrej2 |
| expect_close |
| } -run |
| |
| client c5 -connect ${h1_fe_1_sock} { |
| txreq -url /hrqvar |
| rxresp |
| expect resp.status == 200 |
| |
| txreq -url /hrqacc1 |
| rxresp |
| expect resp.status == 200 |
| |
| txreq -url /hrqred1 |
| rxresp |
| expect resp.status == 302 |
| |
| txreq -url /hrqrej1 |
| rxresp |
| expect resp.status == 403 |
| |
| txreq -url /hrqrej2 |
| rxresp |
| expect resp.status == 403 |
| |
| txreq -url /hrsacc1 |
| rxresp |
| expect resp.status == 200 |
| |
| txreq -url /hrsred1 |
| rxresp |
| expect resp.status == 302 |
| |
| txreq -url /hrsrej1 |
| rxresp |
| expect resp.status == 502 |
| |
| txreq -url /hrsrej2 |
| rxresp |
| expect resp.status == 502 |
| } -run |
| |
| syslog Slg_1 -wait |