varnishtest "Compression converts strong ETags to weak ETags" #REQUIRE_VERSION=1.9 #REQUIRE_OPTION=ZLIB|SLZ feature ignore_unknown_macro server s1 { rxreq expect req.url == "/strong" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: \"123\"" \ -bodylen 100 rxreq expect req.url == "/weak" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: W/\"456\"" \ -bodylen 100 rxreq expect req.url == "/weak-incorrect-quoting" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: \"W/789\"" \ -bodylen 100 rxreq expect req.url == "/empty-strong" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: \"\"" \ -bodylen 100 rxreq expect req.url == "/empty-weak" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: W/\"\"" \ -bodylen 100 rxreq expect req.url == "/invalid1" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: \"invalid" \ -bodylen 100 rxreq expect req.url == "/invalid2" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: invalid\"" \ -bodylen 100 rxreq expect req.url == "/invalid3" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: invalid" \ -bodylen 100 rxreq expect req.url == "/invalid4" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: W/\"invalid" \ -bodylen 100 rxreq expect req.url == "/invalid5" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: W/invalid\"" \ -bodylen 100 rxreq expect req.url == "/invalid6" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: W/invalid" \ -bodylen 100 rxreq expect req.url == "/multiple" expect req.http.accept-encoding == "gzip" txresp \ -hdr "Content-Type: text/plain" \ -hdr "ETag: \"one\"" \ -hdr "ETag: \"two\"" \ -bodylen 100 } -start haproxy h1 -conf { global # WT: limit false-positives causing "HTTP header incomplete" due to # idle server connections being randomly used and randomly expiring # under us. tune.idle-pool.shared off defaults mode http timeout connect "${HAPROXY_TEST_TIMEOUT-5s}" timeout client "${HAPROXY_TEST_TIMEOUT-5s}" timeout server "${HAPROXY_TEST_TIMEOUT-5s}" frontend fe-gzip bind "fd@${fe_gzip}" default_backend be-gzip backend be-gzip compression algo gzip compression type text/html text/plain server www ${s1_addr}:${s1_port} } -start client c1 -connect ${h1_fe_gzip_sock} { txreq -url "/strong" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "gzip" expect resp.http.etag == "W/\"123\"" gunzip expect resp.bodylen == 100 txreq -url "/weak" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "gzip" expect resp.http.etag == "W/\"456\"" gunzip expect resp.bodylen == 100 txreq -url "/weak-incorrect-quoting" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "gzip" expect resp.http.etag == "W/\"W/789\"" gunzip expect resp.bodylen == 100 txreq -url "/empty-strong" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "gzip" expect resp.http.etag == "W/\"\"" gunzip expect resp.bodylen == 100 txreq -url "/empty-weak" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "gzip" expect resp.http.etag == "W/\"\"" gunzip expect resp.bodylen == 100 txreq -url "/invalid1" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "" expect resp.http.etag == "\"invalid" expect resp.bodylen == 100 txreq -url "/invalid2" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "" expect resp.http.etag == "invalid\"" expect resp.bodylen == 100 txreq -url "/invalid3" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "" expect resp.http.etag == "invalid" expect resp.bodylen == 100 txreq -url "/invalid4" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "" expect resp.http.etag == "W/\"invalid" expect resp.bodylen == 100 txreq -url "/invalid5" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "" expect resp.http.etag == "W/invalid\"" expect resp.bodylen == 100 txreq -url "/invalid6" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "" expect resp.http.etag == "W/invalid" expect resp.bodylen == 100 txreq -url "/multiple" \ -hdr "Accept-Encoding: gzip" rxresp expect resp.status == 200 expect resp.http.content-encoding == "" expect resp.bodylen == 100 } -run