varnishtest "Test the proper interaction between http-reuse and dispatch mode" # With dispatch, the connection are considered as private and should only be # reused for requests of the same session # This is similar to the http-reuse never mode feature ignore_unknown_macro haproxy h1 -conf { global .if feature(THREAD) thread-groups 1 .endif nbthread 1 defaults timeout client 30s timeout server 30s timeout connect 30s mode http listen sender1 bind "fd@${feN}" http-reuse never http-request set-header client-id %[req.hdr(client-id)] if { req.hdr(client-id) -m found } server dispatch ${h1_feR_addr}:${h1_feR_port} listen sender2 bind "fd@${feA}" http-reuse always http-request set-header client-id %[req.hdr(client-id)] if { req.hdr(client-id) -m found } server dispatch ${h1_feR_addr}:${h1_feR_port} listen receiver bind "fd@${feR}" http-request set-var(sess.client_id) req.hdr(client-id) http-request return status 200 http-after-response set-header http_first_request %[http_first_req] http-after-response set-header client-id %[var(sess.client_id)] } -start ### http-reuse never client c1 -connect ${h1_feN_sock} { txreq \ -hdr "client-id: c1" rxresp expect resp.http.http_first_request == "1" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c1" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c1" } -run client c2 -connect ${h1_feN_sock} { txreq \ -hdr "client-id: c2" rxresp expect resp.http.http_first_request == "1" expect resp.http.client-id == "c2" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c2" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c2" } -run client c3 -connect ${h1_feN_sock} { txreq \ -hdr "client-id: c3" rxresp expect resp.http.http_first_request == "1" expect resp.http.client-id == "c3" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c3" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c3" } -run ### http-reuse always client c4 -connect ${h1_feA_sock} { txreq \ -hdr "client-id: c4" rxresp expect resp.http.http_first_request == "1" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c4" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c4" } -run client c5 -connect ${h1_feA_sock} { txreq \ -hdr "client-id: c5" rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c5" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c5" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c5" } -run client c6 -connect ${h1_feA_sock} { txreq \ -hdr "client-id: c6" rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c6" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c6" txreq rxresp expect resp.http.http_first_request == "0" expect resp.http.client-id == "c6" } -run