Mercurial > hg > nginx-tests
view not_modified_proxy.t @ 736:dcbe4c3d6871
Tests: added HTTP/2 tests for HPACK table boundary.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 19 Oct 2015 17:00:24 +0300 |
parents | 2d10f958741d |
children | 3200d5b4ffa8 |
line wrap: on
line source
#!/usr/bin/perl # (C) Maxim Dounin # Tests for not modified filter module and it's interaction with proxy. # # Notably, requests which are proxied should be skipped (that is, if # a backend returned 200, we should pass 200 to a client without any # attempts to handle conditional headers in the request), but responses # from cache should be handled. ############################################################################### 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/)->plan(12); $t->todo_alerts() unless $t->has_version('1.9.5'); $t->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% daemon off; events { } http { %%TEST_GLOBALS_HTTP%% proxy_cache_path %%TESTDIR%%/cache keys_zone=one:1m; proxy_set_header If-Modified-Since ""; proxy_set_header If-Unmodified-Since ""; proxy_set_header If-None-Match ""; server { listen 127.0.0.1:8080; server_name localhost; location / { } location /etag { add_header Last-Modified ""; } location /proxy/ { proxy_pass http://127.0.0.1:8080/; } location /cache/ { proxy_pass http://127.0.0.1:8080/; proxy_cache one; proxy_cache_valid 200 1y; } } } EOF $t->write_file('t', ''); $t->write_file('etag', ''); $t->run(); ############################################################################### my ($t1, $lm, $etag); $t1 = http_get('/cache/t'); $t1 =~ /Last-Modified: (.*)/; $lm = $1; $t1 =~ /ETag: (.*)/; $etag = $1; like(http_get_ims('/t', $lm), qr/ 304 /, 'if-modified-since'); like(http_get_ims('/proxy/t', $lm), qr/ 200 /, 'ims proxy ignored'); like(http_get_ims('/cache/t', $lm), qr/ 304 /, 'ims from cache'); $t1 = 'Fri, 05 Jul 1985 14:30:52 GMT'; like(http_get_iums('/t', $t1), qr/ 412 /, 'if-unmodified-since'); like(http_get_iums('/proxy/t', $t1), qr/ 200 /, 'iums proxy ignored'); like(http_get_iums('/cache/t', $t1), qr/ 412 /, 'iums from cache'); like(http_get_inm('/t', $etag), qr/ 304 /, 'if-none-match'); like(http_get_inm('/proxy/t', $etag), qr/ 200 /, 'inm proxy ignored'); like(http_get_inm('/cache/t', $etag), qr/ 304 /, 'inm from cache'); # backend response with ETag only, no Last-Modified $t1 = http_get('/cache/etag'); $t1 =~ /ETag: (.*)/; $etag = $1; like(http_get_inm('/etag', $etag), qr/ 304 /, 'if-none-match etag only'); like(http_get_inm('/proxy/etag', $etag), qr/ 200 /, 'inm etag proxy ignored'); like(http_get_inm('/cache/etag', $etag), qr/ 304 /, 'inm etag from cache'); ############################################################################### sub http_get_ims { my ($url, $ims) = @_; return http(<<EOF); GET $url HTTP/1.0 Host: localhost If-Modified-Since: $ims EOF } sub http_get_iums { my ($url, $ims) = @_; return http(<<EOF); GET $url HTTP/1.0 Host: localhost If-Unmodified-Since: $ims EOF } sub http_get_inm { my ($url, $inm) = @_; return http(<<EOF); GET $url HTTP/1.0 Host: localhost If-None-Match: $inm EOF } ###############################################################################