]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
REGTEST: filters: add compression test
authorPiBa-NL <PiBa.NL.dev@gmail.com>
Sun, 23 Dec 2018 20:21:51 +0000 (21:21 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 9 Jan 2019 13:36:22 +0000 (14:36 +0100)
This test checks that data transferred with compression is correctly received at
different download speeds

reg-tests/compression/common.pem [new symlink]
reg-tests/compression/s00000.lua [new file with mode: 0644]
reg-tests/compression/s00000.vtc [new file with mode: 0644]

diff --git a/reg-tests/compression/common.pem b/reg-tests/compression/common.pem
new file mode 120000 (symlink)
index 0000000..a4433d5
--- /dev/null
@@ -0,0 +1 @@
+../ssl/common.pem
\ No newline at end of file
diff --git a/reg-tests/compression/s00000.lua b/reg-tests/compression/s00000.lua
new file mode 100644 (file)
index 0000000..2cc874b
--- /dev/null
@@ -0,0 +1,19 @@
+
+local data = "abcdefghijklmnopqrstuvwxyz"
+local responseblob = ""
+for i = 1,10000 do
+  responseblob = responseblob .. "\r\n" .. i .. data:sub(1, math.floor(i % 27))
+end
+
+http01applet = function(applet)
+  local response = responseblob
+  applet:set_status(200)
+  applet:add_header("Content-Type", "application/javascript")
+  applet:add_header("Content-Length", string.len(response)*10)
+  applet:start_response()
+  for i = 1,10 do
+    applet:send(response)
+  end
+end
+
+core.register_service("fileloader-http01", "http", http01applet)
diff --git a/reg-tests/compression/s00000.vtc b/reg-tests/compression/s00000.vtc
new file mode 100644 (file)
index 0000000..6baddea
--- /dev/null
@@ -0,0 +1,60 @@
+# Checks that compression doesnt cause corruption..
+
+varnishtest "Compression validation"
+#REQUIRE_VERSION=1.6
+#REQUIRE_OPTIONS=ZLIB|SLZ,LUA
+
+feature ignore_unknown_macro
+
+haproxy h1 -conf {
+global
+#      log stdout format short daemon
+       lua-load                ${testdir}/s00000.lua
+
+defaults
+       mode                    http
+       log                     global
+       ${no-htx} option http-use-htx
+       option                  httplog
+
+frontend main-https
+       bind                    "fd@${fe1}" ssl crt ${testdir}/common.pem
+       compression algo gzip
+       compression type text/html text/plain application/json application/javascript
+       compression offload
+       use_backend TestBack  if  TRUE
+
+backend TestBack
+       server  LocalSrv ${h1_fe2_addr}:${h1_fe2_port}
+
+listen fileloader
+       mode http
+       bind "fd@${fe2}"
+       http-request use-service lua.fileloader-http01
+} -start
+
+shell {
+    HOST=${h1_fe1_addr}
+    if [ "${h1_fe1_addr}" = "::1" ] ; then
+        HOST="\[::1\]"
+    fi
+
+    md5=$(which md5 || which md5sum)
+
+    if [ -z $md5 ] ; then
+        echo "MD5 checksum utility not found"
+        exit 1
+    fi
+
+    expectchecksum="4d9c62aa5370b8d5f84f17ec2e78f483"
+
+    for opt in "" "--limit-rate 300K" "--limit-rate 500K" ; do
+        checksum=$(curl --max-time 15 --compressed -k "https://$HOST:${h1_fe1_port}" $opt | $md5 | cut -d ' ' -f1)
+        if [ "$checksum" != "$expectchecksum" ] ; then
+              echo "Expecting checksum $expectchecksum"
+              echo "Received checksum: $checksum"
+              exit 1;
+        fi
+    done
+
+} -run