blob: c40351c0572489017cffc54a675b5c1151627d67 [file] [log] [blame]
#!/usr/bin/perl
# (C) Sergey Kandaurov
# (C) Nginx, Inc.
# Tests for image filter module, WebP support.
###############################################################################
use warnings;
use strict;
use Test::More;
BEGIN { use FindBin; chdir($FindBin::Bin); }
use lib 'lib';
use Test::Nginx;
###############################################################################
select STDERR; $| = 1;
select STDOUT; $| = 1;
my $t = Test::Nginx->new()->has(qw/http image_filter/)
->write_file_expand('nginx.conf', <<'EOF');
%%TEST_GLOBALS%%
daemon off;
events {
}
http {
%%TEST_GLOBALS_HTTP%%
server {
listen 127.0.0.1:8080;
server_name localhost;
location /size {
image_filter size;
alias %%TESTDIR%%/;
}
location /test {
image_filter test;
alias %%TESTDIR%%/;
}
location /resize {
image_filter resize 1 1;
alias %%TESTDIR%%/;
}
location /quality {
image_filter rotate 90;
image_filter_webp_quality 50;
alias %%TESTDIR%%/;
}
location /quality_var {
image_filter rotate 90;
image_filter_webp_quality $arg_q;
alias %%TESTDIR%%/;
}
}
}
EOF
$t->run()->plan(18);
$t->write_file('webp', pack("A4LA8", "RIFF", 0x22, "WEBPVP8 ") .
pack("N4", 0x16000000, 0x3001009d, 0x012a0100, 0x01000ec0) .
pack("N2n", 0xfe25a400, 0x03700000, 0x0000));
$t->write_file('webpl', pack("A4LA8", "RIFF", 0x1a, "WEBPVP8L") .
pack("N4n", 0x0d000000, 0x2f000000, 0x10071011, 0x118888fe, 0x0700));
$t->write_file('webpx', pack("A4LA8", "RIFF", 0x4a, "WEBPVP8X") .
pack("N4", 0x0a000000, 0x10000000, 0x00000000, 0x0000414c) .
pack("N4", 0x50480c00, 0x00001107, 0x1011fd0f, 0x4444ff03) .
pack("N4", 0x00005650, 0x38201800, 0x00001401, 0x009d012a) .
pack("N4n", 0x01000100, 0x0000fe00, 0x000dc000, 0xfee6b500, 0x0000));
$t->write_file('webperr', pack("A4LA8", "RIFF", 0x22, "WEBPERR ") .
pack("N4", 0x16000000, 0x3001009d, 0x012a0100, 0x01000ec0) .
pack("N2n", 0xfe25a400, 0x03700000, 0x0000));
$t->write_file('webptrunc', substr $t->read_file('webp'), 0, 29);
###############################################################################
my $r = http_get('/test/webp');
like($r, qr!Content-Type: image/webp!, 'content-type');
like($r, qr/RIFF/, 'content');
$r = http_get('/size/webp');
like($r, qr/"type": "webp"/, 'size type');
like($r, qr/"width": 1/, 'size width');
like($r, qr/"height": 1/, 'size height');
# lossless
$r = http_get('/size/webpl');
like($r, qr/"type": "webp"/, 'lossless type');
like($r, qr/"width": 1/, 'lossless width');
like($r, qr/"height": 1/, 'lossless height');
# extended
$r = http_get('/size/webpx');
like($r, qr/"type": "webp"/, 'extended type');
like($r, qr/"width": 1/, 'extended width');
like($r, qr/"height": 1/, 'extended height');
# transforms, libgd may have no WebP support
like(http_get('/quality/webp'), qr/RIFF|415/, 'quality');
like(http_get('/quality_var/webp?q=40'), qr/RIFF|415/, 'quality var');
like(http_get('/resize/webp'), qr/RIFF/, 'resize as is');
# generic error handling
like(http_get('/quality/webperr'), qr/415 Unsupported/, 'bad header');
like(http_get('/quality/webptrunc'), qr/415 Unsupported/, 'truncated');
like(http_get('/size/webperr'), qr/{}/, 'size - bad header');
like(http_get('/size/webptrunc'), qr/{}/, 'size - truncated');
###############################################################################