annotate charset_gzip_static.t @ 1248:70192b1baf01

Tests: added exception test to stream_js.t using 'require'. The stream js tests introduced in edf5a3c9e36a fail on njs 0.1.14. It doesn't currently provide an easy way to check its version, whilst we are obligated to gracefully handle such cases somehow. With such an addition of 'require', now the tests are skipped instead on the previous versions.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 21 Nov 2017 13:16:39 +0300
parents 882267679006
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4 # (C) Nginx, Inc.
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6 # Tests for charset filter.
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8 ###############################################################################
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use warnings;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11 use strict;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use Test::More;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use lib 'lib';
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use Test::Nginx qw/ :DEFAULT :gzip /;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 ###############################################################################
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDERR; $| = 1;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 select STDOUT; $| = 1;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
914
3ac4036b139d Tests: fixed proxy prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents: 568
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy charset gzip_static/)->plan(13)
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF')->run();
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 %%TEST_GLOBALS%%
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 daemon off;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 events {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 http {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 types {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 text/html html;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 charset_map B A {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 58 59; # X -> Y
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
47 listen 127.0.0.1:8080;
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 server_name localhost;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 location /t1 {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 charset utf-8;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 gzip_static on;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 location /t2 {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 gzip_static on;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 charset A;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 source_charset B;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 location /t {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 gzip_static on;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 location /p/ {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 charset utf-8;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
67 proxy_pass http://127.0.0.1:8080/;
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 proxy_http_version 1.1;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 location /p.ab/ {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 charset A;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 source_charset B;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
74 proxy_pass http://127.0.0.1:8080/;
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 proxy_http_version 1.1;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 location /p.aa/ {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 charset A;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 source_charset A;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
81 proxy_pass http://127.0.0.1:8080/;
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 proxy_http_version 1.1;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 EOF
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 $t->write_file('t1.html', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 $t->write_file('t1.html.gz', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 my $in = 'X' x 99;
942
8582afc64efa Tests: avoid uninitialized warnings in charset_gzip_static.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 914
diff changeset
93 my $out = '';
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 eval {
405
a8bfad2a3f84 Tests: whitespace fix.
Sergey Kandaurov <pluknet@nginx.com>
parents: 403
diff changeset
96 require IO::Compress::Gzip;
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 IO::Compress::Gzip::gzip(\$in => \$out);
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 };
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 $t->write_file('t2.html', $in);
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 $t->write_file('t2.html.gz', $out);
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 $t->write_file('t.html', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 $t->write_file('t.html.gz', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 ###############################################################################
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 # charset filter currently ignores responses with Content-Encoding set
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 # (except ones with r->ignore_content_encoding used by gzip_static)
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 # as it can't convert such content; there are two problems though:
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 #
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 # - it make sense to indicate charset
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 # if conversion isn't needed
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 #
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 # - gzip_static may need conversion, too
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 #
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 # proper solution seems to be to always allow charset indication, but
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 # don't try to do anything if recoding is needed
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 like(http_get('/t1.html'), qr!text/html; charset=!, 'plain');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 like(http_gzip_request('/t1.html'), qr!text/html; charset=.*gzip!ms, 'gzip');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 like(http_get('/t2.html'), qr!text/html; charset=A.*Y{99}!ms, 'recode plain');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 like(http_gzip_request('/t2.html'), qr!text/html\x0d.*gzip!ms, 'recode gzip');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 http_gzip_like(http_gzip_request('/t2.html'), qr!X{99}!, 'recode content');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 like(http_get('/t.html'), qr!text/html\x0d!, 'nocharset plain');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 like(http_gzip_request('/t.html'), qr!text/html\x0d.*gzip!ms, 'nocharset gzip');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 like(http_get('/p/t.html'), qr!text/html; charset=!, 'proxy plain');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 like(http_gzip_request('/p/t.html'), qr!text/html; charset=.*gzip!ms,
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 'proxy gzip');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 like(http_get('/p.ab/t.html'), qr!text/html; charset=A!ms,
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 'proxy recode plain');
401
2961a6a83809 Tests: fixed charset_gzip_static.t tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 399
diff changeset
136 like(http_gzip_request('/p.ab/t.html'), qr!text/html\x0d.*gzip!ms,
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 'proxy recode gzip');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138
401
2961a6a83809 Tests: fixed charset_gzip_static.t tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 399
diff changeset
139 like(http_get('/p.aa/t.html'), qr!text/html; charset=A!ms,
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 'proxy nullrecode plain');
401
2961a6a83809 Tests: fixed charset_gzip_static.t tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 399
diff changeset
141 like(http_gzip_request('/p.aa/t.html'), qr!text/html; charset=A.*gzip!ms,
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 'proxy nullrecode gzip');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 ###############################################################################