annotate t/gunzip.t @ 5:d8e85fd12fab

Gunzip: require gzip and zlib in config. Require nginx core gzip bits and zlib library instead of assuming they are brought by gzip module. This fixes compilation without gzip module.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 28 Dec 2009 02:01:08 +0300
parents 7170c171150c
children b12d2ee20755
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for gunzip filter module.
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
1
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
13 use Test::Nginx qw/ :DEFAULT :gzip /;
0
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 ###############################################################################
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 select STDERR; $| = 1;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 select STDOUT; $| = 1;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 eval { require IO::Compress::Gzip; };
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 Test::More::plan(skip_all => "IO::Compress::Gzip not found") if $@;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
3
7170c171150c Gunzip: better test dependencies.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
23 my $t = Test::Nginx->new()->has(qw/http proxy gzip_static/)->plan(12);
0
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 $t->write_file_expand('nginx.conf', <<'EOF');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 master_process off;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 daemon off;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 events {
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 }
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 http {
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 access_log off;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 root %%TESTDIR%%;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 client_body_temp_path %%TESTDIR%%/client_body_temp;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 fastcgi_temp_path %%TESTDIR%%/fastcgi_temp;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 proxy_temp_path %%TESTDIR%%/proxy_temp;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 server {
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 listen 127.0.0.1:8080;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 server_name localhost;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 location / {
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 gunzip on;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 gzip_vary on;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 proxy_pass http://127.0.0.1:8081/;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 proxy_set_header Accept-Encoding gzip;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 }
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 location /error {
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 error_page 500 /t1;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 return 500;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 }
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 }
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 server {
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 listen 127.0.0.1:8081;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 server_name localhost;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 location / {
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 default_type text/plain;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 gzip_static on;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 gzip_http_version 1.0;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 gzip_types text/plain;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 }
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 }
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 }
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 EOF
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 my $in = join('', map { sprintf "X%03dXXXXXX", $_ } (0 .. 99));
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 my $out;
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 IO::Compress::Gzip::gzip(\$in => \$out);
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 $t->write_file('t1.gz', $out);
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 $t->write_file('t2.gz', $out . $out);
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 $t->write_file('t3', 'not compressed');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 $t->run();
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 ###############################################################################
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 pass('runs');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
1
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
86 my $r = http_get('/t1');
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
87 unlike($r, qr/Content-Encoding/, 'no content encoding');
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
88 like($r, qr/^(X\d\d\dXXXXXX){100}$/m, 'correct gunzipped response');
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
89
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
90 $r = http_gzip_request('/t1');
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
91 like($r, qr/Content-Encoding: gzip/, 'gzip still works - encoding');
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
92 like($r, qr/\Q$out\E/, 'gzip still works - content');
0
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 like(http_get('/t2'), qr/^(X\d\d\dXXXXXX){200}$/m, 'multiple gzip members');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95
1
0dd7d109e56b Gunzip: add more tests and improve docs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
96 like(http_get('/error'), qr/^(X\d\d\dXXXXXX){100}$/m, 'errors gunzipped');
0
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 unlike(http_head('/t1'), qr/Content-Encoding/, 'head - no content encoding');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 like(http_get('/t1'), qr/Vary/, 'get vary');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 like(http_head('/t1'), qr/Vary/, 'head vary');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 unlike(http_get('/t3'), qr/Vary/, 'no vary on non-gzipped get');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 unlike(http_head('/t3'), qr/Vary/, 'no vary on non-gzipped head');
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
a75d4ad9c5d2 Gunzip filter module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 ###############################################################################