summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/t/50compress.t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/t/50compress.t88
1 files changed, 88 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/t/50compress.t b/web/server/h2o/libh2o/t/50compress.t
new file mode 100644
index 00000000..b8674f7f
--- /dev/null
+++ b/web/server/h2o/libh2o/t/50compress.t
@@ -0,0 +1,88 @@
+use strict;
+use warnings;
+use Digest::MD5 qw(md5_hex);
+use Test::More;
+use t::Util;
+
+plan skip_all => 'curl not found'
+ unless prog_exists('curl');
+
+my $server = spawn_h2o(<< "EOT");
+hosts:
+ default:
+ paths:
+ /off:
+ file.dir: @{[DOC_ROOT]}
+ /on:
+ file.dir: @{[DOC_ROOT]}
+ compress: ON
+ /off-by-mime:
+ file.dir: @{[DOC_ROOT]}
+ compress: ON
+ file.mime.settypes:
+ text/plain:
+ extensions: [".txt"]
+ is_compressible: NO
+ /compress-jpg:
+ file.dir: @{[DOC_ROOT]}
+ compress: ON
+ file.mime.settypes:
+ image/jpg:
+ extensions: [".jpg"]
+ is_compressible: YES
+EOT
+
+run_with_curl($server, sub {
+ my ($proto, $port, $curl) = @_;
+ plan skip_all => 'curl issue #661'
+ if $curl =~ /--http2/;
+ my $fetch_orig = sub {
+ my ($path, $opts) = @_;
+ run_prog("$curl --silent $opts $proto://127.0.0.1:$port$path/alice.txt");
+ };
+ my $fetch_gunzip = sub {
+ my ($path, $opts) = @_;
+ run_prog("$curl --silent $opts $proto://127.0.0.1:$port$path/alice.txt | gzip -cd");
+ };
+ my $expected = md5_file("@{[DOC_ROOT]}/alice.txt");
+
+ my $resp = $fetch_orig->("/off", "");
+ is md5_hex($resp), $expected, "off wo. accept-encoding";
+ $resp = $fetch_orig->("/on", "");
+ is md5_hex($resp), $expected, "on wo. accept-encoding";
+ $resp = $fetch_orig->("/off", "-H accept-encoding:gzip");
+ is md5_hex($resp), $expected, "off with accept-encoding";
+ $resp = $fetch_gunzip->("/on", "-H accept-encoding:gzip");
+ is md5_hex($resp), $expected, "on with accept-encoding";
+ $resp = $fetch_gunzip->("/on", "-H 'accept-encoding:gzip, deflate'");
+ is md5_hex($resp), $expected, "on with accept-encoding: gzip, deflate";
+ $resp = $fetch_gunzip->("/on", "-H 'accept-encoding:deflate, gzip'");
+ is md5_hex($resp), $expected, "on with accept-encoding: deflate, gzip";
+ $resp = $fetch_orig->("/on", "-H accept-encoding:deflate");
+ is md5_hex($resp), $expected, "on with accept-encoding, deflate only";
+
+ $resp = $fetch_orig->("/off-by-mime", "-H accept-encoding:gzip");
+ is md5_hex($resp), $expected, "off due to is_compressible:NO";
+
+ $resp = run_prog("$curl --silent -H accept-encoding:gzip $proto://127.0.0.1:$port/on/index.txt");
+ is md5_hex($resp), md5_file("@{[DOC_ROOT]}/index.txt"), "tiny file not compressed";
+
+ $resp = run_prog("$curl --silent -H accept-encoding:gzip $proto://127.0.0.1:$port/on/halfdome.jpg");
+ is md5_hex($resp), md5_file("@{[DOC_ROOT]}/halfdome.jpg"), "image not compressed";
+
+ $resp = run_prog("$curl --silent -H accept-encoding:gzip $proto://127.0.0.1:$port/compress-jpg/halfdome.jpg | gzip -cd");
+ is md5_hex($resp), md5_file("@{[DOC_ROOT]}/halfdome.jpg"), "image compressed using gzip";
+
+ subtest "brotli-decompress" => sub {
+ plan skip_all => "bro not found"
+ unless prog_exists("bro");
+ $resp = run_prog("$curl --silent -H accept-encoding:br $proto://127.0.0.1:$port/on/alice.txt | bro --decompress");
+ is md5_hex($resp), md5_file("@{[DOC_ROOT]}/alice.txt"), "alice.txt";
+ $resp = run_prog("$curl --silent -H accept-encoding:br $proto://127.0.0.1:$port/compress-jpg/halfdome.jpg | bro --decompress");
+ is md5_hex($resp), md5_file("@{[DOC_ROOT]}/halfdome.jpg"), "halfdome.jpg";
+ };
+});
+
+undef $server;
+
+done_testing();