blob: cc726ab08f1b35ac5c02e2a8b7bf5c87472ed282 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
varnishtest "Test declaration of HTTP rules in default sections"
feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'"
feature ignore_unknown_macro
server s1 {
rxreq
expect req.http.x-frontend == "fe"
expect req.http.x-backend == "be"
expect req.http.x-test1-frt == "def_front"
expect req.http.x-test1-bck == "def_back"
txresp
} -start
server s2 {
rxreq
txresp
} -start
haproxy h1 -conf {
defaults common
mode http
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
defaults def_front from common
http-request set-header x-frontend "%[fe_name]"
http-request set-var(txn.test1) "str(def_front)"
http-response set-header x-frontend "%[fe_name]"
http-response set-var(txn.test2) "str(def_front)"
http-after-response set-var(txn.test3) "str(def_front)"
defaults def_back from common
http-request set-header x-backend "%[be_name]"
http-request set-var(txn.test1) "str(def_back)"
http-response set-header x-backend "%[be_name]"
http-response set-var(txn.test2) "str(def_back)"
http-after-response set-var(txn.test3) "str(def_back)"
frontend fe from def_front
bind "fd@${feh1}"
http-request set-header x-test1-frt "%[var(txn.test1)]"
http-response set-header x-test2-frt "%[var(txn.test2)]"
http-after-response set-header x-test3-frt "%[var(txn.test3)]"
default_backend be
backend be from def_back
http-request set-header x-test1-bck "%[var(txn.test1)]"
http-response set-header x-test2-bck "%[var(txn.test2)]"
http-after-response set-header x-test3-bck "%[var(txn.test3)]"
server s1 ${s1_addr}:${s1_port}
} -start
haproxy h2 -conf {
defaults common
mode http
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
defaults def_front from common
http-request allow
http-response allow
http-after-response allow
defaults def_back from common
http-request allow
http-response allow
http-after-response allow
frontend fe from def_front
bind "fd@${feh2}"
http-request deny status 403
http-response deny status 502
http-after-response set-status 502
default_backend be
backend be from def_back
http-request deny status 403
http-response deny status 502
http-after-response set-status 502
server s2 ${s2_addr}:${s2_port}
} -start
haproxy h3 -conf {
defaults base-http
mode http
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
http-request capture hdr(Host) len 64 # idx 0
http-request capture hdr(X-req-1) len 32 # idx 1
frontend fe1 from base-http
bind "fd@${fe1h3}"
declare capture request len 32 # idx 2
http-request capture hdr(X-req-2) id 2
http-request return status 200 hdr "X-Capture-1" "%[capture.req.hdr(0)]" hdr "X-Capture-2" "%[capture.req.hdr(1)]" hdr "X-Capture-3" "%[capture.req.hdr(2)]"
frontend fe2 from base-http
bind "fd@${fe2h3}"
http-request capture hdr(X-req-2) id 1
http-request return status 200 hdr "X-Capture-1" "%[capture.req.hdr(0)]" hdr "X-Capture-2" "%[capture.req.hdr(1)]"
} -start
client c1 -connect ${h1_feh1_sock} {
txreq -req GET -url /
rxresp
expect resp.status == 200
expect resp.http.x-frontend == "fe"
expect resp.http.x-backend == "be"
expect resp.http.x-test2-bck == "def_back"
expect resp.http.x-test2-frt == "def_front"
expect resp.http.x-test3-bck == "def_back"
expect resp.http.x-test3-frt == "def_front"
} -run
client c2 -connect ${h2_feh2_sock} {
txreq -req GET -url /
rxresp
expect resp.status == 200
} -run
client c3 -connect ${h3_fe1h3_sock} {
txreq -req GET -url / \
-hdr "host: v-test" \
-hdr "x-req-1: val1" \
-hdr "x-req-2: val2"
rxresp
expect resp.status == 200
expect resp.http.x-capture-1 == "v-test"
expect resp.http.x-capture-2 == "val1"
expect resp.http.x-capture-3 == "val2"
} -run
client c4 -connect ${h3_fe2h3_sock} {
txreq -req GET -url / \
-hdr "host: v-test" \
-hdr "x-req-1: val1" \
-hdr "x-req-2: val2"
rxresp
expect resp.status == 200
expect resp.http.x-capture-1 == "v-test"
expect resp.http.x-capture-2 == "val2"
expect resp.http.x-capture-3 == "<undef>"
} -run
|