annotate charset.t @ 1974:b5036a0f9ae0 default tip

Tests: improved compatibility when using recent "openssl" app. Starting with OpenSSL 3.0, "openssl genrsa" generates encrypted keys in PKCS#8 format instead of previously used PKCS#1 format. Further, since OpenSSL 1.1.0 such keys are using PBKDF2 hmacWithSHA256. Such keys are not supported by old SSL libraries, notably by OpenSSL before 1.0.0 (OpenSSL 0.9.8 only supports hmacWithSHA1) and by BoringSSL before May 21, 2019 (support for hmacWithSHA256 was added in 302a4dee6c), and trying to load such keys into nginx compiled with an old SSL library results in "unsupported prf" errors. To facilitate testing with old SSL libraries, keys are now generated with "openssl genrsa -traditional" if the flag is available.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 06 May 2024 00:04:26 +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;
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
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http charset proxy/)->plan(7)
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 text/foo foo;
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
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 charset_map B A {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 58 59; # X -> Y
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
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
48 listen 127.0.0.1:8080;
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 server_name localhost;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 location / {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 charset utf-8;
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 /t3.foo {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 charset utf-8;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 charset_types text/foo;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 }
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 location /t4.any {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 charset utf-8;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 charset_types *;
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 /t5.html {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 charset $arg_c;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 location /t.html {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 charset A;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 source_charset B;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 location /proxy/ {
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 charset B;
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 override_charset on;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
77 proxy_pass http://127.0.0.1:8080/;
399
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 }
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 EOF
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 $t->write_file('t1.html', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 $t->write_file('t2.foo', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 $t->write_file('t3.foo', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 $t->write_file('t4.any', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 $t->write_file('t5.html', '');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 $t->write_file('t.html', 'X' x 99);
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90
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
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 like(http_get('/t1.html'), qr!text/html; charset=utf-8!, 'charset indicated');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 like(http_get('/t2.foo'), qr!text/foo\x0d!, 'wrong type');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 like(http_get('/t3.foo'), qr!text/foo; charset=utf-8!, 'charset_types');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 like(http_get('/t4.any'), qr!text/plain; charset=utf-8!, 'charset_types any');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 like(http_get('/t5.html?c=utf-8'), qr!text/html; charset=utf-8!, 'variables');
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 like(http_get('/t.html'), qr!Y{99}!, 'recode');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 like(http_get('/proxy/t.html'), qr!X{99}!, 'override charset');
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101
c6ab68c41c8c Tests: charset filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 ###############################################################################