view image_filter_webp.t @ 1260:eadd24ccfda1

Tests: postponed startup in certain ssl certificate tests on win32. At least, some win32 hosts exhibit a round-off error or some such in the notBefore field of the certificate generated before starting nginx, such that it can be set to the value one second ahead of the current time. This manifests in spurious test failures due to certificate verify error with a failure reason "certificate is not yet valid".
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 12 Dec 2017 12:53:53 +0300
parents 766bcbb632ee
children
line wrap: on
line source

#!/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');

###############################################################################