annotate proxy_cache_revalidate.t @ 391:915ef26ac6eb

Tests: fix proxy_unfinished.t failures with big buffers. With newer systems it becomes common to use huge socket buffers, and the "no proxy temp" test may unexpectedly fail because disk buffering will not be used. To reduce this possibility, the "listen ... sndbuf=32k" was added. Additionally, regular expression was changed to silently allow full responses.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 15 Apr 2014 22:04:08 +0400
parents fb366c51eac6
children c28ecaef065f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
353
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for http proxy cache revalidation with conditional requests.
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use Socket qw/ CRLF /;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use lib 'lib';
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use Test::Nginx qw/ :DEFAULT :gzip /;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 ###############################################################################
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDERR; $| = 1;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 select STDOUT; $| = 1;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 plan(skip_all => 'win32') if $^O eq 'MSWin32';
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 my $t = Test::Nginx->new()->has(qw/http proxy cache/)
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 ->write_file_expand('nginx.conf', <<'EOF');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 %%TEST_GLOBALS%%
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 daemon off;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 events {
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 }
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 http {
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 proxy_cache_path %%TESTDIR%%/cache levels=1:2
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 keys_zone=one:1m;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 proxy_cache_revalidate on;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 server {
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 listen 127.0.0.1:8080;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 server_name localhost;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 location / {
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 proxy_pass http://127.0.0.1:8081;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 proxy_cache one;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 proxy_cache_valid 200 1s;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 add_header X-Cache-Status $upstream_cache_status;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 }
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 }
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 server {
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 listen 127.0.0.1:8081;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 server_name localhost;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 }
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 EOF
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 $t->write_file('t', 'SEE-THIS');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 $t->write_file('t2', 'SEE-THIS');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 eval {
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 open OLDERR, ">&", \*STDERR; close STDERR;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 $t->run();
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 open STDERR, ">&", \*OLDERR;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 };
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 plan(skip_all => 'no proxy_cache_revalidate') if $@;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 $t->plan(9);
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 ###############################################################################
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 # request documents and make sure they are cached
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 like(http_get('/t'), qr/X-Cache-Status: MISS.*SEE/ms, 'request');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 like(http_get('/t'), qr/X-Cache-Status: HIT.*SEE/ms, 'request cached');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 like(http_get('/t2'), qr/X-Cache-Status: MISS.*SEE/ms, '2nd request');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 like(http_get('/t2'), qr/X-Cache-Status: HIT.*SEE/ms, '2nd request cached');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 # wait for a while for cached responses to expire
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 select undef, undef, undef, 2.5;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 # 1st document isn't modified, and should be revalidated on first request
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 # (a 304 status code will appear in backend's logs), then cached again
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 like(http_get('/t'), qr/X-Cache-Status: REVALIDATED.*SEE/ms, 'revalidated');
354
fb366c51eac6 Tests: reduce race in cache revalidate test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 353
diff changeset
96 like(http_get('/t'), qr/X-Cache-Status: HIT.*SEE/ms, 'request cached');
fb366c51eac6 Tests: reduce race in cache revalidate test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 353
diff changeset
97
fb366c51eac6 Tests: reduce race in cache revalidate test.
Maxim Dounin <mdounin@mdounin.ru>
parents: 353
diff changeset
98 select undef, undef, undef, 0.1;
353
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 like(read_file($t->testdir() . '/access.log'), qr/ 304 /, 'not modified');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 # 2nd document is recreated with a new content
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 $t->write_file('t2', 'NEW');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 like(http_get('/t2'), qr/X-Cache-Status: EXPIRED.*NEW/ms, 'revalidate failed');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 like(http_get('/t2'), qr/X-Cache-Status: HIT.*NEW/ms, 'new response cached');
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 ###############################################################################
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 sub read_file {
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 my ($file) = @_;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 my $log;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 local $/;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 open LOG, $file or die "Can't open $file: $!\n";
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 $log = <LOG>;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 close LOG;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 return $log;
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 }
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121
19f58e91617a Tests: proxy cache revalidate tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 ###############################################################################