annotate ssl_client_escaped_cert.t @ 1427:eb1d883305ea

Tests: avoid edge cases in upstream random two test. Unavailable servers contribute to the number of attempts, if selected, before the balancer would fall back to the default round-robin method. This means that it's quite possible to get server with more connections. To facilitate with selecting two alive servers, down server was removed from the upstream configuration at the cost of slightly worse coverage.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 10 Jan 2019 17:42:34 +0300
parents 4e48bf51714f
children dbce8fb5f5f8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1209
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for http ssl module, $ssl_client_escaped_cert variable.
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 ###############################################################################
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 eval { require IO::Socket::SSL; };
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 plan(skip_all => 'IO::Socket::SSL not installed') if $@;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 eval { IO::Socket::SSL::SSL_VERIFY_NONE(); };
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 plan(skip_all => 'IO::Socket::SSL too old') if $@;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30 my $t = Test::Nginx->new()->has(qw/http http_ssl rewrite/)
1381
97c8280de681 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1209
diff changeset
31 ->has_daemon('openssl')->plan(3);
1209
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 $t->write_file_expand('nginx.conf', <<'EOF');
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 %%TEST_GLOBALS%%
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 daemon off;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 events {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 http {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 %%TEST_GLOBALS_HTTP%%
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 ssl_certificate_key localhost.key;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 ssl_certificate localhost.crt;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 ssl_verify_client optional_no_ca;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 server {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 listen 127.0.0.1:8443 ssl;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 server_name localhost;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 location /cert {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 return 200 $ssl_client_raw_cert;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 location /escaped {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 return 200 $ssl_client_escaped_cert;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 EOF
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 $t->write_file('openssl.conf', <<EOF);
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 [ req ]
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 default_bits = 1024
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 encrypt_key = no
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 distinguished_name = req_distinguished_name
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 [ req_distinguished_name ]
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 EOF
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 my $d = $t->testdir();
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 foreach my $name ('localhost') {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 system('openssl req -x509 -new '
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 . "-config $d/openssl.conf -subj /CN=$name/ "
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 . "-out $d/$name.crt -keyout $d/$name.key "
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 . ">>$d/openssl.out 2>&1") == 0
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 or die "Can't create certificate for $name: $!\n";
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
1381
97c8280de681 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1209
diff changeset
82 $t->run();
1209
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 ###############################################################################
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 my ($cert) = cert('/cert') =~ /\x0d\x0a?\x0d\x0a?(.*)/ms;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 my ($escaped) = cert('/escaped') =~ /\x0d\x0a?\x0d\x0a?(.*)/ms;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 ok($cert, 'ssl_client_raw_cert');
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 ok($escaped, 'ssl_client_escaped_cert');
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 $escaped =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 is($escaped, $cert, 'ssl_client_escaped_cert unescape match');
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 ###############################################################################
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 sub cert {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 my ($uri) = @_;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 my $s;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 eval {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 local $SIG{ALRM} = sub { die "timeout\n" };
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 local $SIG{PIPE} = sub { die "sigpipe\n" };
1421
4e48bf51714f Tests: aligned various generic read timeouts to http_end().
Sergey Kandaurov <pluknet@nginx.com>
parents: 1407
diff changeset
104 alarm(8);
1209
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 $s = IO::Socket::SSL->new(
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 Proto => 'tcp',
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 PeerAddr => '127.0.0.1',
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 PeerPort => port(8443),
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(),
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 SSL_cert_file => "$d/localhost.crt",
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 SSL_key_file => "$d/localhost.key",
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 SSL_error_trap => sub { die $_[1] },
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 );
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 alarm(0);
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115 };
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 alarm(0);
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118 if ($@) {
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 log_in("died: $@");
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 return undef;
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 http_get($uri, socket => $s);
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 }
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125
0d9df274e3a3 Tests: ssl_client_escaped_cert variable tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 ###############################################################################