mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-19 10:14:41 +00:00
b973980853
In GH #2187 it was mentioned that the ifnone-forwardfor regtest did not cover the case where forwardfor ifnone is explicitly set in the frontend but forwardfor option is not used in the backend. Expected behavior in this case is that the frontend takes the precedence because the backend did not specify the option. Adding this missing case to prevent regressions in the future.
99 lines
2.5 KiB
Plaintext
99 lines
2.5 KiB
Plaintext
varnishtest "Test if-none param for the forwardfor option"
|
|
#REQUIRE_VERSION=2.6
|
|
|
|
# This config tests the if-none parameter for the HTTP forwardfor option.
|
|
|
|
feature ignore_unknown_macro
|
|
|
|
haproxy h1 -conf {
|
|
global
|
|
# WT: limit false-positives causing "HTTP header incomplete" due to
|
|
# idle server connections being randomly used and randomly expiring
|
|
# under us.
|
|
tune.idle-pool.shared off
|
|
|
|
defaults
|
|
mode http
|
|
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
|
|
frontend none
|
|
bind "fd@${none}"
|
|
http-request set-src hdr(x-src)
|
|
option forwardfor if-none
|
|
use_backend be1 if { path /req1 }
|
|
use_backend be2 if { path /req2 }
|
|
use_backend be3 if { path /req3 }
|
|
|
|
frontend normal
|
|
bind "fd@${normal}"
|
|
http-request set-src hdr(x-src)
|
|
option forwardfor
|
|
use_backend be1 if { path /req1 }
|
|
use_backend be2 if { path /req2 }
|
|
|
|
|
|
frontend fe2
|
|
bind "fd@${fe2}"
|
|
http-request return status 200 hdr x-ff "%[req.fhdr_cnt(x-forwarded-for)]"
|
|
|
|
backend be1
|
|
option forwardfor
|
|
server s1 ${h1_fe2_addr}:${h1_fe2_port}
|
|
|
|
backend be2
|
|
option forwardfor if-none
|
|
server s1 ${h1_fe2_addr}:${h1_fe2_port}
|
|
|
|
backend be3
|
|
server s1 ${h1_fe2_addr}:${h1_fe2_port}
|
|
} -start
|
|
|
|
client c1 -connect ${h1_none_sock} {
|
|
txreq -req GET -url /req1 \
|
|
-hdr "x-src: 10.0.0.128" \
|
|
-hdr "x-forwarded-for: 127.0.0.1"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-ff == 2
|
|
|
|
txreq -req GET -url /req2 \
|
|
-hdr "x-src: 10.0.0.128" \
|
|
-hdr "x-forwarded-for: 127.0.0.1"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-ff == 1
|
|
|
|
txreq -req GET -url /req2 \
|
|
-hdr "x-src: 10.0.0.128"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-ff == 1
|
|
|
|
txreq -req GET -url /req3 \
|
|
-hdr "x-src: 10.0.0.128" \
|
|
-hdr "x-forwarded-for: 127.0.0.1"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-ff == 1
|
|
|
|
} -run
|
|
|
|
client c1 -connect ${h1_normal_sock} {
|
|
txreq -req GET -url /req1 \
|
|
-hdr "x-src: 10.0.0.128" \
|
|
-hdr "x-forwarded-for: 127.0.0.1"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-ff == 2
|
|
|
|
txreq -req GET -url /req2 \
|
|
-hdr "x-src: 10.0.0.128" \
|
|
-hdr "x-forwarded-for: 127.0.0.1"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-ff == 2
|
|
|
|
} -run
|