annotate not_modified_finalize.t @ 1571:1b4ceab9cb1c

Tests: fixed ssl_certificate.t with LibreSSL client. Net::SSLeay::connect() that manages TLS handshake could return unexpected error when receiving server alert, as seen in server certificate tests if it could not been selected. Typically, it returns the expected error -1, but with certain libssl implementations it can be 0, as explained below. The error is propagated from libssl's SSL_connect(), which is usually -1. In modern OpenSSL versions, it is the default error code used in the state machine returned when something went wrong with parsing TLS message header. In versions up to OpenSSL 1.0.2, with SSLv23_method() used by default, -1 is the only error code in the ssl_connect() method implementation which is used as well if receiving alert while parsing ServerHello. BoringSSL also seems to return -1. But it is not so with LibreSSL that returns zero. Previously, tests failed with client built with LibreSSL with SSLv3 removed. Here, the error is propagated directly from ssl_read_bytes() method, which is always implemented as ssl3_read_bytes() in all TLS methods. It could be also seen with OpenSSL up to 1.0.2 with non-default methods explicitly set.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 29 May 2020 23:10:20 +0300
parents 54b92955e4e2
children 5ac6efbe5552
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1096
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for not modified filter and filter finalization.
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
1479
fc3722dd8862 Tests: removed unused gzip imports.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1096
diff changeset
17 use Test::Nginx;
1096
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
1484
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
24 my $t = Test::Nginx->new()->has(qw/http proxy cache/)->plan(2)
1096
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 ->write_file_expand('nginx.conf', <<'EOF');
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 %%TEST_GLOBALS%%
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 daemon off;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 events {
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 }
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 http {
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 %%TEST_GLOBALS_HTTP%%
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 proxy_cache_path %%TESTDIR%%/cache keys_zone=cache:1m;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 server {
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 listen 127.0.0.1:8080;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 server_name localhost;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 error_page 412 /error412.html;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 location / {
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 proxy_pass http://127.0.0.1:8081;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 proxy_cache cache;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 proxy_cache_lock on;
1484
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
49 proxy_cache_valid 1h;
1096
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 }
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 location /error412 {
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 }
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 }
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 server {
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 listen 127.0.0.1:8081;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 server_name localhost;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 }
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 }
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 EOF
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 $t->write_file('t.html', 'test file');
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 $t->write_file('error412.html', 'error412');
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 $t->run();
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 ###############################################################################
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 # we trigger filter finalization in not modified filter by using
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 # the If-Unmodified-Since/If-Match header;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 # with cache enabled and updating bit set, this currently results in
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 # "stalled cache updating" alerts
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 like(http_match_get('/t.html'), qr//, 'request 412');
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 $t->todo_alerts();
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
1484
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
80 # in addition, in 1.11.10 .. 1.17.1, if the response was previously
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
81 # cached, such a request resulted in r->cache null pointer dereference
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
82 # in ngx_http_upstream_cache_background_update(), after it was reset
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
83 # during internal redirect
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
84
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
85 http_get('/t.html');
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
86
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
87 TODO: {
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
88 todo_skip 'leaves coredump', 1 unless $ENV{TEST_NGINX_UNSAFE}
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
89 or $t->has_version('1.17.1');
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
90
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
91 like(http_match_get('/t.html'), qr//, 'request 412 cached');
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
92
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
93 }
54b92955e4e2 Tests: not_modified_finalize.t with cached response (ticket #1782).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1479
diff changeset
94
1096
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 ###############################################################################
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 sub http_match_get {
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 my ($url, %extra) = @_;
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 return http(<<EOF, %extra);
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 GET $url HTTP/1.0
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 Host: localhost
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 If-Match: tt
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 EOF
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 }
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106
2978c5212045 Tests: filter finalization in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 ###############################################################################