annotate proxy_cache_vary.t @ 1248:70192b1baf01

Tests: added exception test to stream_js.t using 'require'. The stream js tests introduced in edf5a3c9e36a fail on njs 0.1.14. It doesn't currently provide an easy way to check its version, whilst we are obligated to gracefully handle such cases somehow. With such an addition of 'require', now the tests are skipped instead on the previous versions.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 21 Nov 2017 13:16:39 +0300
parents 196d33c2bb45
children e682d5ad3861
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
1020
196d33c2bb45 Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 974
diff changeset
24 my $t = Test::Nginx->new()->has(qw/http proxy cache gzip rewrite/)
574
2cd00179f4b2 Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents: 568
diff changeset
25 ->plan(42)->write_file_expand('nginx.conf', <<'EOF');
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 %%TEST_GLOBALS%%
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 daemon off;
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 events {
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
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 http {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 %%TEST_GLOBALS_HTTP%%
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 proxy_cache_path %%TESTDIR%%/cache keys_zone=one:1m inactive=5s;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 proxy_cache_key $uri;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
41 listen 127.0.0.1:8080;
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 server_name localhost;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 add_header X-Cache-Status $upstream_cache_status;
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 location / {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
47 proxy_pass http://127.0.0.1:8081/;
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 proxy_cache one;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 location /replace/ {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
52 proxy_pass http://127.0.0.1:8081/;
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 proxy_cache one;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 location /revalidate/ {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
57 proxy_pass http://127.0.0.1:8081/;
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 proxy_cache one;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 proxy_cache_revalidate on;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 location /ignore/ {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
63 proxy_pass http://127.0.0.1:8081/;
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 proxy_cache one;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 proxy_ignore_headers Vary;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 }
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 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
70 listen 127.0.0.1:8081;
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 server_name localhost;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 gzip on;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 gzip_min_length 0;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 gzip_http_version 1.0;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 gzip_vary on;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 expires 2s;
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 location / {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 if ($args = "novary") {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 return 200 "the only variant\n";
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 }
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 location /asterisk {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 gzip off;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 add_header Vary "*";
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 location /complex {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 gzip off;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 add_header Vary ",, Accept-encoding , ,";
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 }
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 EOF
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 $t->write_file('index.html', 'SEE-THIS');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 $t->write_file('asterisk', 'SEE-THIS');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 $t->write_file('complex', 'SEE-THIS');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103
568
907e89fba9c3 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 507
diff changeset
104 $t->run();
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 ###############################################################################
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 like(get('/', 'gzip'), qr/MISS/ms, 'first request');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 like(get('/', 'gzip'), qr/HIT/ms, 'vary match cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 like(get('/', 'deflate'), qr/MISS/ms, 'vary mismatch');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 like(get('/', 'deflate'), qr/HIT/ms, 'vary mismatch cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 like(get('/', 'foo'), qr/MISS/ms, 'vary mismatch 2');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 like(get('/', 'foo'), qr/HIT/ms, 'vary mismatch 2 cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 like(get('/', 'gzip'), qr/HIT/ms, 'multiple representations cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 SKIP: {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 skip 'long tests', 6 unless $ENV{TEST_NGINX_UNSAFE};
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 # make sure all variants are properly expire
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 # and removed after inactive timeout
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 like(get('/', 'gzip'), qr/EXPIRED/ms, 'first expired');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 like(get('/', 'deflate'), qr/EXPIRED/ms, 'second variant expired');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 like(get('/', 'gzip'), qr/HIT/ms, 'first cached after expire');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 like(get('/', 'deflate'), qr/HIT/ms, 'second cached after expire');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 sleep(12);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 like(get('/', 'gzip'), qr/MISS/ms, 'first inactive removed');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 like(get('/', 'deflate'), qr/MISS/ms, 'second variant removed');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134
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
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 SKIP: {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 skip 'long tests', 6 unless $ENV{TEST_NGINX_UNSAFE};
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 # check if the variant which was loaded first will be properly
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 # removed if it's not requested (but another variant is requested
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 # at the same time)
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 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 like(get('/', 'deflate'), qr/EXPIRED/ms, 'bump1');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 like(get('/', 'deflate'), qr/EXPIRED/ms, 'bump2');
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, 'bump3');
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, 'bump4');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 TODO: {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 local $TODO = 'not yet';
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155
476
4e335141aa4b Tests: fix head() remnants in Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 471
diff changeset
156 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
157
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 }
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('/', 'deflate'), qr/HIT/ms, 'second variant cached');
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
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 # if a response without Vary is returned to replace previously returned
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 # 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
166
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 like(get('/replace/', 'gzip'), qr/MISS/, 'replace first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 like(get('/replace/', 'deflate'), qr/MISS/, 'replace second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 like(get('/replace/?novary', 'deflate'), qr/EXPIRED/, 'replace novary');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 like(get('/replace/?zztest', 'gzip'), qr/HIT/, 'all replaced');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 # make sure revalidation of variants works fine
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 like(get('/revalidate/', 'gzip'), qr/MISS/, 'revalidate first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 like(get('/revalidate/', 'deflate'), qr/MISS/, 'revalidate second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 sleep(3);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 like(get('/revalidate/', 'gzip'), qr/REVALIDATED/, 'revalidated first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183 like(get('/revalidate/', 'deflate'), qr/REVALIDATED/, 'revalidated second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 like(get('/revalidate/', 'gzip'), qr/HIT/, 'revalidate first after');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 like(get('/revalidate/', 'deflate'), qr/HIT/, 'revalidate second after');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 # if the Vary header is ignored, cached version can be returned
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 # regardless of request headers
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 like(get('/ignore/', 'gzip'), qr/MISS/ms, 'another request');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 like(get('/ignore/', 'deflate'), qr/HIT/ms, 'vary ignored');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 # check parsing of Vary with multiple headers listed
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 like(get('/complex', 'gzip'), qr/MISS/ms, 'vary complex first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 like(get('/complex', 'deflate'), qr/MISS/ms, 'vary complex second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 like(get('/complex', 'gzip'), qr/HIT/ms, 'vary complex first cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 like(get('/complex', 'deflate'), qr/HIT/ms, 'vary complex second cached');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 # From RFC 7231, "7.1.4. Vary",
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 # http://tools.ietf.org/html/rfc7231#section-7.1.4:
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 #
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 # A Vary field value of "*" signals that anything about the request
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 # might play a role in selecting the response representation, possibly
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 # including elements outside the message syntax (e.g., the client's
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 # network address). A recipient will not be able to determine whether
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 # this response is appropriate for a later request without forwarding
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 # the request to the origin server.
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 #
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 # 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
211 # 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
212 # with strong entity tags though, as representation with different
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 # content condings may share the same weak entity tag.
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 like(get('/asterisk', 'gzip'), qr/MISS/ms, 'vary asterisk first');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 like(get('/asterisk', 'gzip'), qr/MISS/ms, 'vary asterisk second');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 # From RFC 7234, "4.1. Calculating Secondary Keys with Vary",
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 # http://tools.ietf.org/html/rfc7234#section-4.1:
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 #
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 # 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
222 # 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
223 # the second request by applying any of the following:
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 # 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
226 # syntax
507
34280f6b0bc6 Tests: trailing spaces.
Maxim Dounin <mdounin@mdounin.ru>
parents: 489
diff changeset
227 #
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 # o combining multiple header fields with the same field name (see
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 # Section 3.2 of [RFC7230])
507
34280f6b0bc6 Tests: trailing spaces.
Maxim Dounin <mdounin@mdounin.ru>
parents: 489
diff changeset
230 #
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 # 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
232 # have identical semantics, according to the header field's
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 # specification (e.g., reordering field values when order is not
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 # significant; case-normalization, where values are defined to be
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 # case-insensitive)
489
3036e3af0e08 Tests: more Vary normalization tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 481
diff changeset
236 #
3036e3af0e08 Tests: more Vary normalization tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 481
diff changeset
237 # Only whitespace normalization is currently implemented.
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 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
240 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
241 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
242 like(get('/', 'foobar'), qr/MISS/ms, 'normalize no whitespace mismatch');
471
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 TODO: {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245 local $TODO = 'not yet';
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 like(get('/', 'bar,foo'), qr/HIT/ms, 'normalize order');
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 }
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 ###############################################################################
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 sub get {
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 my ($url, $extra) = @_;
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 return http(<<EOF);
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 GET $url HTTP/1.1
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 Host: localhost
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 Connection: close
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 Accept-Encoding: $extra
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 EOF
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262 }
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263
8816a0edfc7b Tests: cache Vary tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 ###############################################################################