1vtest "A reg test for stickiness" 2feature ignore_unknown_macro 3 4 5# The aim of this test is to check that "stick on" rules 6# do the job they are supposed to do. 7# If we remove one of the "stick on" rule, this script fails. 8 9#REQUIRE_VERSION=2.0 10 11server s_not_used_1 {} 12server s_not_used_2 {} 13server s_not_used_3 {} 14server s_not_used_4 {} 15server s_not_used_5 {} 16server s_not_used_6 {} 17server s_not_used_7 {} 18server s_not_used_8 {} 19server s_not_used_9 {} 20server s_not_used_10 {} 21server s_not_used_11 {} 22server s_not_used_12 {} 23 24# h1/be1 servers 25server s1 { 26 rxreq 27 txresp -hdr "Server: be1/s1" 28} -repeat 2 -start 29 30server s2 { 31 rxreq 32 txresp -hdr "Server: be1/s2" 33} -repeat 2 -start 34 35# h1/be2 servers 36server s3 { 37 rxreq 38 txresp -hdr "Server: be2/s3" 39} -repeat 2 -start 40 41server s4 { 42 rxreq 43 txresp -hdr "Server: be2/s4" 44} -repeat 2 -start 45 46haproxy h1 -arg "-L A" -conf { 47 defaults 48 mode http 49 ${no-htx} option http-use-htx 50 timeout server 1s 51 timeout connect 1s 52 timeout client 1s 53 log stdout format raw local0 debug 54 55 peers mypeers 56 bind "fd@${A}" 57 server A 58 server B ${h2_B_addr}:${h2_B_port} 59 table mytable type string size 10m 60 61 backend be1 62 balance roundrobin 63 stick on urlp(client) table mypeers/mytable 64 server srv1 ${s1_addr}:${s1_port} 65 server srv2 ${s2_addr}:${s2_port} 66 67 backend be2 68 balance roundrobin 69 stick on urlp(client) table mypeers/mytable 70 server s_not_used_1 ${s_not_used_1_addr}:${s_not_used_1_port} 71 server s_not_used_2 ${s_not_used_2_addr}:${s_not_used_2_port} 72 server s_not_used_3 ${s_not_used_3_addr}:${s_not_used_3_port} 73 server srv2 ${s4_addr}:${s4_port} 74 server s_not_used_4 ${s_not_used_4_addr}:${s_not_used_4_port} 75 server s_not_used_5 ${s_not_used_5_addr}:${s_not_used_5_port} 76 server s_not_used_6 ${s_not_used_6_addr}:${s_not_used_6_port} 77 server srv1 ${s3_addr}:${s3_port} 78 79 frontend fe 80 acl acl_be1 path_beg /be1 81 acl acl_be2 path_beg /be2 82 use_backend be1 if acl_be1 83 use_backend be2 if acl_be2 84 bind "fd@${fe}" 85} -start 86 87# h2/be1 servers 88server s5 { 89 rxreq 90 txresp -hdr "Server: be1/s5" 91} -repeat 2 -start 92 93server s6 { 94 rxreq 95 txresp -hdr "Server: be1/s6" 96} -repeat 2 -start 97 98# h2/be2 servers 99server s7 { 100 rxreq 101 txresp -hdr "Server: be2/s7" 102} -repeat 2 -start 103 104server s8 { 105 rxreq 106 txresp -hdr "Server: be2/s8" 107} -repeat 2 -start 108 109 110haproxy h2 -arg "-L B" -conf { 111 defaults 112 mode http 113 ${no-htx} option http-use-htx 114 timeout server 1s 115 timeout connect 1s 116 timeout client 1s 117 118 peers mypeers 119 bind "fd@${B}" 120 server A ${h1_A_addr}:${h1_A_port} 121 server B 122 table mytable type string size 10m 123 124 backend be1 125 balance roundrobin 126 stick on urlp(client) table mypeers/mytable 127 server s_not_used_7 ${s_not_used_7_addr}:${s_not_used_7_port} 128 server s_not_used_8 ${s_not_used_8_addr}:${s_not_used_8_port} 129 server s_not_used_9 ${s_not_used_9_addr}:${s_not_used_9_port} 130 server srv1 ${s5_addr}:${s5_port} 131 server s_not_used_10 ${s_not_used_10_addr}:${s_not_used_10_port} 132 server s_not_used_11 ${s_not_used_11_addr}:${s_not_used_11_port} 133 server s_not_used_12 ${s_not_used_12_addr}:${s_not_used_12_port} 134 server srv2 ${s6_addr}:${s6_port} 135 136 backend be2 137 balance roundrobin 138 stick on urlp(client) table mypeers/mytable 139 server s_not_used_1 ${s_not_used_1_addr}:${s_not_used_1_port} 140 server s_not_used_2 ${s_not_used_2_addr}:${s_not_used_2_port} 141 server s_not_used_3 ${s_not_used_3_addr}:${s_not_used_3_port} 142 server s_not_used_4 ${s_not_used_4_addr}:${s_not_used_4_port} 143 server s_not_used_5 ${s_not_used_5_addr}:${s_not_used_5_port} 144 server s_not_used_6 ${s_not_used_6_addr}:${s_not_used_6_port} 145 server srv1 ${s7_addr}:${s7_port} 146 server srv2 ${s8_addr}:${s8_port} 147 148 frontend fe 149 acl acl_be1 path_beg /be1 150 acl acl_be2 path_beg /be2 151 use_backend be1 if acl_be1 152 use_backend be2 if acl_be2 153 bind "fd@${fe}" 154} -start 155 156delay 0.2 157 158client cx -connect ${h1_fe_sock} { 159 txreq -url "/be1?client=c1" 160 rxresp 161 expect resp.status == 200 162 expect resp.http.Server ~ be1/s1 163} -repeat 2 -run 164 165haproxy h1 -cli { 166 send "show table mypeers/mytable" 167 expect ~ .* 168} 169 170haproxy h2 -cli { 171 send "show table mypeers/mytable" 172 expect ~ .* 173} 174 175client cy -connect ${h1_fe_sock} { 176 txreq -url "/be2?client=c1" 177 rxresp 178 expect resp.status == 200 179 expect resp.http.Server ~ be2/s3 180} -repeat 2 -run 181 182haproxy h1 -cli { 183 send "show table mypeers/mytable" 184 expect ~ .* 185} 186 187haproxy h2 -cli { 188 send "show table mypeers/mytable" 189 expect ~ .* 190} 191 192client cx -connect ${h2_fe_sock} { 193 txreq -url "/be1?client=c1" 194 rxresp 195 expect resp.status == 200 196 expect resp.http.Server ~ be1/s5 197} -repeat 2 -run 198 199haproxy h1 -cli { 200 send "show table mypeers/mytable" 201 expect ~ .* 202} 203 204haproxy h2 -cli { 205 send "show table mypeers/mytable" 206 expect ~ .* 207} 208 209client cy -connect ${h2_fe_sock} { 210 txreq -url "/be2?client=c1" 211 rxresp 212 expect resp.status == 200 213 expect resp.http.Server ~ be2/s7 214} -repeat 2 -run 215 216haproxy h1 -cli { 217 send "show table mypeers/mytable" 218 expect ~ .* 219} 220 221haproxy h2 -cli { 222 send "show table mypeers/mytable" 223 expect ~ .* 224} 225 226client cX -connect ${h1_fe_sock} { 227 txreq -url "/be1?client=c2" 228 rxresp 229 expect resp.status == 200 230 expect resp.http.Server ~ be1/s2 231} -repeat 2 -run 232 233haproxy h1 -cli { 234 send "show table mypeers/mytable" 235 expect ~ .* 236} 237 238haproxy h2 -cli { 239 send "show table mypeers/mytable" 240 expect ~ .* 241} 242 243client cY -connect ${h1_fe_sock} { 244 txreq -url "/be2?client=c2" 245 rxresp 246 expect resp.status == 200 247 expect resp.http.Server ~ be2/s4 248} -repeat 2 -run 249 250haproxy h1 -cli { 251 send "show table mypeers/mytable" 252 expect ~ .* 253} 254 255haproxy h2 -cli { 256 send "show table mypeers/mytable" 257 expect ~ .* 258} 259 260client cX -connect ${h2_fe_sock} { 261 txreq -url "/be1?client=c2" 262 rxresp 263 expect resp.status == 200 264 expect resp.http.Server ~ be1/s6 265} -repeat 2 -run 266 267haproxy h1 -cli { 268 send "show table mypeers/mytable" 269 expect ~ .* 270} 271 272haproxy h2 -cli { 273 send "show table mypeers/mytable" 274 expect ~ .* 275} 276 277client cY -connect ${h2_fe_sock} { 278 txreq -url "/be2?client=c2" 279 rxresp 280 expect resp.status == 200 281 expect resp.http.Server ~ be2/s8 282} -repeat 2 -run 283 284haproxy h1 -cli { 285 send "show table mypeers/mytable" 286 expect ~ .* 287} 288 289haproxy h2 -cli { 290 send "show table mypeers/mytable" 291 expect ~ .* 292} 293 294