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
160
161
162
163
164
165
|
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
|