# HG changeset patch # User Maxim Dounin # Date 1463158213 -10800 # Node ID 15abee29016e591455204d1ce2b1d2e479e459d6 # Parent 856a37b4f47d6e6364273a99fd568675d5b0e645 Tests: proxy_cache_bypass and ticket #827 tests. diff --git a/proxy_cache_bypass.t b/proxy_cache_bypass.t new file mode 100644 --- /dev/null +++ b/proxy_cache_bypass.t @@ -0,0 +1,104 @@ +#!/usr/bin/perl + +# (C) Maxim Dounin + +# Tests for http proxy cache, proxy_cache_bypass. + +############################################################################### + +use warnings; +use strict; + +use Test::More; + +BEGIN { use FindBin; chdir($FindBin::Bin); } + +use lib 'lib'; +use Test::Nginx; + +############################################################################### + +select STDERR; $| = 1; +select STDOUT; $| = 1; + +my $t = Test::Nginx->new()->has(qw/http proxy cache shmem rewrite/)->plan(8) + ->write_file_expand('nginx.conf', <<'EOF'); + +%%TEST_GLOBALS%% + +daemon off; + +events { +} + +http { + %%TEST_GLOBALS_HTTP%% + + proxy_cache_path %%TESTDIR%%/cache keys_zone=one:1m; + + server { + listen 127.0.0.1:8080; + server_name localhost; + + location / { + proxy_pass http://127.0.0.1:8081; + + proxy_cache one; + proxy_cache_key $uri; + proxy_cache_bypass $arg_bypass; + proxy_cache_valid any 1y; + + proxy_intercept_errors on; + error_page 404 = @fallback; + } + + location @fallback { + return 403; + } + + add_header X-Cache-Status $upstream_cache_status; + } + + server { + listen 127.0.0.1:8081; + server_name localhost; + + location / { + } + } +} + +EOF + +$t->write_file('t', 'SEE-THIS'); + +$t->run(); + +############################################################################### + +like(http_get('/t'), qr/SEE-THIS/, 'request'); + +$t->write_file('t', 'NOOP'); + +like(http_get('/t'), qr/SEE-THIS/, 'request cached'); +like(http_get('/t?bypass=1'), qr/NOOP/, 'cache bypassed'); +like(http_get('/t'), qr/NOOP/, 'cached after bypass'); + +# ticket #827, cache item "error" field was not cleared +# on cache bypass + +like(http_get('/t2'), qr/403 Forbidden/, 'intercepted error'); + +$t->write_file('t2', 'NOOP'); + +like(http_get('/t2'), qr/403 Forbidden/, 'error cached'); +like(http_get('/t2?bypass=1'), qr/NOOP/, 'error cache bypassed'); + +TODO: { +local $TODO = 'not yet'; + +like(http_get('/t2'), qr/NOOP/, 'error cached after bypass'); + +} + +###############################################################################