Mercurial > hg > nginx-tests
view scgi_cache.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 | e9de4da234c0 |
children | 847ea345becb |
line wrap: on
line source
#!/usr/bin/perl # (C) Maxim Dounin # Tests for scgi_cache. ############################################################################### use warnings; use strict; use Test::More; use Socket qw/ CRLF /; BEGIN { use FindBin; chdir($FindBin::Bin); } use lib 'lib'; use Test::Nginx; ############################################################################### select STDERR; $| = 1; select STDOUT; $| = 1; eval { require SCGI; }; plan(skip_all => 'SCGI not installed') if $@; my $t = Test::Nginx->new()->has(qw/http scgi cache/)->plan(10) ->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% daemon off; events { } http { %%TEST_GLOBALS_HTTP%% scgi_cache_path %%TESTDIR%%/cache keys_zone=one:1m; scgi_cache_key $request_uri; add_header X-Cache-Status $upstream_cache_status; server { listen 127.0.0.1:8080; server_name localhost; location / { scgi_pass 127.0.0.1:8081; scgi_param SCGI 1; scgi_param REQUEST_URI $uri; scgi_cache one; } } } EOF $t->run_daemon(\&scgi_daemon); $t->run(); ############################################################################### like(http_get('/len'), qr/MISS/, 'length'); like(http_get('/len'), qr/HIT/, 'length cached'); like(http_get('/nolen'), qr/MISS/, 'no length'); like(http_get('/nolen'), qr/HIT/, 'no length cached'); like(http_get('/len/empty'), qr/MISS/, 'empty length'); TODO: { local $TODO = 'not yet' unless $t->has_version('1.5.3'); like(http_get('/len/empty'), qr/HIT/, 'empty length cached'); } like(http_get('/nolen/empty'), qr/MISS/, 'empty no length'); like(http_get('/nolen/empty'), qr/HIT/, 'empty no length cached'); like(http_get('/unfinished'), qr/MISS/, 'unfinished'); like(http_get('/unfinished'), qr/MISS/, 'unfinished not cached'); ############################################################################### sub scgi_daemon { my $server = IO::Socket::INET->new( Proto => 'tcp', LocalHost => '127.0.0.1:8081', Listen => 5, Reuse => 1 ) or die "Can't create listening socket: $!\n"; my $scgi = SCGI->new($server, blocking => 1); my %count; while (my $request = $scgi->accept()) { $request->read_env(); my $uri = $request->env->{REQUEST_URI} || ''; my $c = $request->connection(); $count{$uri} ||= 0; $count{$uri}++; if ($uri eq '/len') { $c->print( "Content-Length: 9" . CRLF . "Content-Type: text/html" . CRLF . "Cache-Control: max-age=300" . CRLF . CRLF . "test body" ); } elsif ($uri eq '/nolen') { $c->print( "Content-Type: text/html" . CRLF . "Cache-Control: max-age=300" . CRLF . CRLF . "test body" ); } elsif ($uri eq '/len/empty') { $c->print( "Content-Length: 0" . CRLF . "Content-Type: text/html" . CRLF . "Cache-Control: max-age=300" . CRLF . CRLF ); } elsif ($uri eq '/nolen/empty') { $c->print( "Content-Type: text/html" . CRLF . "Cache-Control: max-age=300" . CRLF . CRLF ); } elsif ($uri eq '/unfinished') { $c->print( "Content-Length: 10" . CRLF . "Content-Type: text/html" . CRLF . "Cache-Control: max-age=300" . CRLF . CRLF ); } } } ###############################################################################