Mercurial > hg > nginx-tests
comparison proxy_cache_error.t @ 1266:b17f27fa9081
Tests: tests for "header already sent" alerts on backend errors.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 05 Jan 2018 08:27:26 +0300 |
parents | |
children | f94e79aad895 |
comparison
equal
deleted
inserted
replaced
1265:200d9d091da2 | 1266:b17f27fa9081 |
---|---|
1 #!/usr/bin/perl | |
2 | |
3 # (C) Maxim Dounin | |
4 | |
5 # Tests for http proxy cache, "header already sent" alerts on backend errors, | |
6 # http://mailman.nginx.org/pipermail/nginx-devel/2018-January/010737.html. | |
7 | |
8 ############################################################################### | |
9 | |
10 use warnings; | |
11 use strict; | |
12 | |
13 use Test::More; | |
14 | |
15 BEGIN { use FindBin; chdir($FindBin::Bin); } | |
16 | |
17 use lib 'lib'; | |
18 use Test::Nginx; | |
19 | |
20 ############################################################################### | |
21 | |
22 select STDERR; $| = 1; | |
23 select STDOUT; $| = 1; | |
24 | |
25 my $t = Test::Nginx->new()->has(qw/http proxy cache/)->plan(1) | |
26 ->write_file_expand('nginx.conf', <<'EOF'); | |
27 | |
28 %%TEST_GLOBALS%% | |
29 | |
30 daemon off; | |
31 | |
32 events { | |
33 } | |
34 | |
35 http { | |
36 %%TEST_GLOBALS_HTTP%% | |
37 | |
38 proxy_cache_path %%TESTDIR%%/cache levels=1:2 | |
39 keys_zone=NAME:1m; | |
40 | |
41 server { | |
42 listen 127.0.0.1:8080; | |
43 server_name localhost; | |
44 | |
45 location / { | |
46 proxy_pass http://127.0.0.1:8081; | |
47 proxy_cache NAME; | |
48 | |
49 proxy_read_timeout 100ms; | |
50 } | |
51 } | |
52 | |
53 server { | |
54 listen 127.0.0.1:8081; | |
55 server_name localhost; | |
56 | |
57 location / { | |
58 limit_rate 512; | |
59 expires 1m; | |
60 } | |
61 } | |
62 } | |
63 | |
64 EOF | |
65 | |
66 $t->write_file('big.html', 'x' x 1024); | |
67 | |
68 $t->run(); | |
69 | |
70 ############################################################################### | |
71 | |
72 # make a HEAD request; as cache is enabled, nginx convert HEAD to GET | |
73 # and will set u->pipe->downstream_error to suppress sending the response | |
74 # body to the client | |
75 | |
76 like(http_head('/big.html'), qr/200 OK/, 'head request'); | |
77 | |
78 # once proxy_read_timeout expires, nginx will call | |
79 # ngx_http_finalize_upstream_request() with u->pipe->downstream_error set | |
80 # and rc = NGX_HTTP_GATEWAY_TIMEOUT; after revision ad3f342f14ba046c this | |
81 # will result in ngx_http_finalize_request(NGX_HTTP_GATEWAY_TIMEOUT), | |
82 # leading to an attempt to return additional error response and | |
83 # the "header already sent" alert | |
84 | |
85 $t->todo_alerts(); | |
86 | |
87 ############################################################################### |