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 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
|
varnishtest "Misuses of defaults section defining TCP/HTTP rules"
feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'"
feature ignore_unknown_macro
#
# anonymous defaults section cannot define TCP/HTTP rules
#
haproxy h1 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults
http-request set-header X-Hdr 1
}
haproxy h2 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults
http-response set-header X-Hdr 1
}
haproxy h3 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults
http-after-request set-header X-Hdr 1
}
haproxy h4 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults
tcp-request connection accept
}
haproxy h5 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults
tcp-request session accept
}
haproxy h6 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults
tcp-request inspect-delay 5s
tcp-request content accept
}
haproxy h7 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults
tcp-response inspect-delay 5s
tcp-response content accept
}
#
# defaults section defining TCP/HTTP rules cannot be used to init another
# defaults section
#
haproxy h8 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults invalid
tcp-response inspect-delay 5s
tcp-response content accept
defaults from invalid
mode tcp
}
#
# defaults section defining TCP/HTTP rules cannot be used to init a listen
# section
#
haproxy h9 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults invalid
tcp-request inspect-delay 5s
tcp-request content accept
listen li from invalid
mode tcp
bind "fd@${lih9}"
server www 127.0.0.1:80
}
#
# defaults section defining TCP/HTTP rules cannot be used to init frontend and
# backend sections at the same time
#
#
haproxy h10 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults invalid
tcp-request inspect-delay 5s
tcp-request content accept
frontend fe from invalid
mode tcp
bind "fd@${feh10}"
default_backend be1
backend be from invalid
mode tcp
server www 127.0.0.1:80
}
#
# defaults section defining 'tcp-request connection' or 'tcp-request session'
# rules cannot be used to init backend sections
#
haproxy h11 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults invalid
tcp-request connection accept
backend be from invalid
mode tcp
server www 127.0.0.1:80
}
haproxy h12 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults invalid
tcp-request session accept
backend be from invalid
mode tcp
server www 127.0.0.1:80
}
#
# defaults section defining 'tcp-response content' rules cannot be used to init
# a frontend section
#
haproxy h13 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults invalid
tcp-response inspect-delay 5s
tcp-response content accept
frontend fe from invalid
mode tcp
bind "fd@${feh10}"
}
haproxy h14 -arg -V -conf-OK {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults tcp
timeout client 30s
timeout server 30s
timeout connect 30s
tcp-response inspect-delay 5s
tcp-response content accept
backend be from tcp
mode tcp
server www 127.0.0.1:80
}
#
# Check arguments resolutions in rules. FE/BE arguments must be resolved, but
# SRV/TAB arguments without an explicit proxy name are not allowed.
#
haproxy h15 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults invalid
mode http
http-request set-header x-test "%[srv_conn(www)]"
backend be from invalid
server www 127.0.0.1:80
}
haproxy h16 -conf-BAD {} {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults invalid
mode http
http-request track-sc0 src
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 20 }
backend be
stick-table type ip size 100k expire 30s store http_req_rate(10s)
server www 127.0.0.1:80
}
haproxy h17 -arg -V -conf-OK {
global
.if feature(THREAD)
thread-groups 1
.endif
defaults common
timeout client 30s
timeout server 30s
timeout connect 30s
mode http
defaults def_front from common
http-request set-header x-test1 "%[fe_conn]"
defaults def_back from common
http-request track-sc0 src table be
http-request deny deny_status 429 if { sc_http_req_rate(0,be) gt 20 }
http-request set-header x-test2 "%[be_conn]"
http-request set-header x-test3 "%[srv_conn(be/www)]"
frontend fe from def_front
bind "fd@${feh15}"
default_backend be
backend be from def_back
stick-table type ip size 100k expire 30s store http_req_rate(10s)
server www 127.0.0.1:80
}
|