annotate proxy_cache_vary.t @ 540:481d705b8610

Tests: SSL support in mail backends. Socket is now embedded into every mail module. Socket methods are wrapped where appropriate. The new "SSL" extra flag specifies to accept connection over SSL.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 03 Apr 2015 00:11:38 +0300
parents 34280f6b0bc6
children 907e89fba9c3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for http proxy cache, the Vary header.
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Test::Nginx;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 plan(skip_all => 'win32') if $^O eq 'MSWin32';
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http proxy cache gzip rewrite/)
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 %%TEST_GLOBALS%%
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 daemon off;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 events {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 http {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 proxy_cache_path %%TESTDIR%%/cache keys_zone=one:1m inactive=5s;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 proxy_cache_key $uri;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 server {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 listen 127.0.0.1:8080;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 server_name localhost;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 add_header X-Cache-Status $upstream_cache_status;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 location / {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 proxy_pass http://127.0.0.1:8081/;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 proxy_cache one;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 location /replace/ {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 proxy_pass http://127.0.0.1:8081/;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 proxy_cache one;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 location /revalidate/ {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 proxy_pass http://127.0.0.1:8081/;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 proxy_cache one;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 proxy_cache_revalidate on;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 location /ignore/ {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 proxy_pass http://127.0.0.1:8081/;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 proxy_cache one;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 proxy_ignore_headers Vary;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 server {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 listen 127.0.0.1:8081;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 server_name localhost;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 gzip on;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 gzip_min_length 0;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 gzip_http_version 1.0;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 gzip_vary on;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 expires 2s;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 location / {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 if ($args = "novary") {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 return 200 "the only variant\n";
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 location /asterisk {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 gzip off;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 add_header Vary "*";
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 location /complex {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 gzip off;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 add_header Vary ",, Accept-encoding , ,";
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 EOF
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 $t->write_file('index.html', 'SEE-THIS');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 $t->write_file('asterisk', 'SEE-THIS');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 $t->write_file('complex', 'SEE-THIS');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
489
3036e3af0e08 Tests: more Vary normalization tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 481
diff changeset
106 $t->try_run('no proxy_ignore_headers Vary')->plan(42);
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 ###############################################################################
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109
481
7e823c8f7d31 Tests: adjusted TODOs for cache Vary support committed in 1.7.7.
Sergey Kandaurov <pluknet@nginx.com>
parents: 478
diff changeset
110 local $TODO = 'not yet' unless $t->has_version('1.7.7');
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 like(get('/', 'gzip'), qr/MISS/ms, 'first request');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 like(get('/', 'gzip'), qr/HIT/ms, 'vary match cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 like(get('/', 'deflate'), qr/MISS/ms, 'vary mismatch');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 like(get('/', 'deflate'), qr/HIT/ms, 'vary mismatch cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 like(get('/', 'foo'), qr/MISS/ms, 'vary mismatch 2');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 like(get('/', 'foo'), qr/HIT/ms, 'vary mismatch 2 cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 like(get('/', 'gzip'), qr/HIT/ms, 'multiple representations cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 SKIP: {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 skip 'long tests', 6 unless $ENV{TEST_NGINX_UNSAFE};
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 # make sure all variants are properly expire
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 # and removed after inactive timeout
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 like(get('/', 'gzip'), qr/EXPIRED/ms, 'first expired');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 like(get('/', 'deflate'), qr/EXPIRED/ms, 'second variant expired');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 like(get('/', 'gzip'), qr/HIT/ms, 'first cached after expire');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 like(get('/', 'deflate'), qr/HIT/ms, 'second cached after expire');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 sleep(12);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 like(get('/', 'gzip'), qr/MISS/ms, 'first inactive removed');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 like(get('/', 'deflate'), qr/MISS/ms, 'second variant removed');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 SKIP: {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 skip 'long tests', 6 unless $ENV{TEST_NGINX_UNSAFE};
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 # check if the variant which was loaded first will be properly
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 # removed if it's not requested (but another variant is requested
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 # at the same time)
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 like(get('/', 'deflate'), qr/EXPIRED/ms, 'bump1');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151 like(get('/', 'deflate'), qr/EXPIRED/ms, 'bump2');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 like(get('/', 'deflate'), qr/EXPIRED/ms, 'bump3');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 like(get('/', 'deflate'), qr/EXPIRED/ms, 'bump4');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 TODO: {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 local $TODO = 'not yet';
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159
476
4e335141aa4b Tests: fix head() remnants in Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 471
diff changeset
160 like(get('/', 'gzip'), qr/MISS/ms, 'first not bumped by second requests');
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163
476
4e335141aa4b Tests: fix head() remnants in Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 471
diff changeset
164 like(get('/', 'deflate'), qr/HIT/ms, 'second variant cached');
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 # if a response without Vary is returned to replace previously returned
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 # responses with Vary, make sure it is then used in all cases
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 like(get('/replace/', 'gzip'), qr/MISS/, 'replace first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 like(get('/replace/', 'deflate'), qr/MISS/, 'replace second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 like(get('/replace/?novary', 'deflate'), qr/EXPIRED/, 'replace novary');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 like(get('/replace/?zztest', 'gzip'), qr/HIT/, 'all replaced');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 # make sure revalidation of variants works fine
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 like(get('/revalidate/', 'gzip'), qr/MISS/, 'revalidate first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 like(get('/revalidate/', 'deflate'), qr/MISS/, 'revalidate second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 like(get('/revalidate/', 'gzip'), qr/REVALIDATED/, 'revalidated first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 like(get('/revalidate/', 'deflate'), qr/REVALIDATED/, 'revalidated second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 like(get('/revalidate/', 'gzip'), qr/HIT/, 'revalidate first after');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 like(get('/revalidate/', 'deflate'), qr/HIT/, 'revalidate second after');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 # if the Vary header is ignored, cached version can be returned
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 # regardless of request headers
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194 like(get('/ignore/', 'gzip'), qr/MISS/ms, 'another request');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 like(get('/ignore/', 'deflate'), qr/HIT/ms, 'vary ignored');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 # check parsing of Vary with multiple headers listed
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 like(get('/complex', 'gzip'), qr/MISS/ms, 'vary complex first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 like(get('/complex', 'deflate'), qr/MISS/ms, 'vary complex second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 like(get('/complex', 'gzip'), qr/HIT/ms, 'vary complex first cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 like(get('/complex', 'deflate'), qr/HIT/ms, 'vary complex second cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 # From RFC 7231, "7.1.4. Vary",
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 # http://tools.ietf.org/html/rfc7231#section-7.1.4:
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 #
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 # A Vary field value of "*" signals that anything about the request
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 # might play a role in selecting the response representation, possibly
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 # including elements outside the message syntax (e.g., the client's
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 # network address). A recipient will not be able to determine whether
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 # this response is appropriate for a later request without forwarding
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 # the request to the origin server.
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 #
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214 # In theory, If-None-Match can be used to check if the representation
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 # present in the cache is appropriate. This seems to be only possible
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 # with strong entity tags though, as representation with different
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 # content condings may share the same weak entity tag.
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 like(get('/asterisk', 'gzip'), qr/MISS/ms, 'vary asterisk first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 like(get('/asterisk', 'gzip'), qr/MISS/ms, 'vary asterisk second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
222 # From RFC 7234, "4.1. Calculating Secondary Keys with Vary",
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223 # http://tools.ietf.org/html/rfc7234#section-4.1:
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 #
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 # The selecting header fields from two requests are defined to match if
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 # and only if those in the first request can be transformed to those in
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 # the second request by applying any of the following:
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 #
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 # o adding or removing whitespace, where allowed in the header field's
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 # syntax
507
34280f6b0bc6 Tests: trailing spaces.
Maxim Dounin <mdounin@mdounin.ru>
parents: 489
diff changeset
231 #
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 # o combining multiple header fields with the same field name (see
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 # Section 3.2 of [RFC7230])
507
34280f6b0bc6 Tests: trailing spaces.
Maxim Dounin <mdounin@mdounin.ru>
parents: 489
diff changeset
234 #
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 # o normalizing both header field values in a way that is known to
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236 # have identical semantics, according to the header field's
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237 # specification (e.g., reordering field values when order is not
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238 # significant; case-normalization, where values are defined to be
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 # case-insensitive)
489
3036e3af0e08 Tests: more Vary normalization tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 481
diff changeset
240 #
3036e3af0e08 Tests: more Vary normalization tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 481
diff changeset
241 # Only whitespace normalization is currently implemented.
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 like(get('/', 'foo, bar'), qr/MISS/ms, 'normalize first');
481
7e823c8f7d31 Tests: adjusted TODOs for cache Vary support committed in 1.7.7.
Sergey Kandaurov <pluknet@nginx.com>
parents: 478
diff changeset
244 like(get('/', 'foo,bar'), qr/HIT/ms, 'normalize whitespace');
7e823c8f7d31 Tests: adjusted TODOs for cache Vary support committed in 1.7.7.
Sergey Kandaurov <pluknet@nginx.com>
parents: 478
diff changeset
245 like(get('/', 'foo,, ,bar , '), qr/HIT/ms, 'normalize empty');
489
3036e3af0e08 Tests: more Vary normalization tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 481
diff changeset
246 like(get('/', 'foobar'), qr/MISS/ms, 'normalize no whitespace mismatch');
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 TODO: {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 local $TODO = 'not yet';
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 like(get('/', 'bar,foo'), qr/HIT/ms, 'normalize order');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 ###############################################################################
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 sub get {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 my ($url, $extra) = @_;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 return http(<<EOF);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 GET $url HTTP/1.1
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 Host: localhost
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262 Connection: close
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 Accept-Encoding: $extra
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 EOF
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 ###############################################################################