#!/usr/bin/perl # (C) Maxim Dounin # Test for fastcgi backend with cache. ############################################################################### 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; eval { require FCGI; }; plan(skip_all => 'FCGI not installed') if $@; my $t = Test::Nginx->new()->has(qw/http fastcgi cache/)->plan(5) ->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% master_process off; daemon off; events { } http { %%TEST_GLOBALS_HTTP%% fastcgi_cache_path %%TESTDIR%%/cache levels=1:2 keys_zone=NAME:10m; server { listen 127.0.0.1:8080; server_name localhost; location / { fastcgi_pass 127.0.0.1:8081; fastcgi_param REQUEST_URI $request_uri; fastcgi_cache NAME; fastcgi_cache_key $request_uri; fastcgi_cache_valid 302 1m; } } } EOF $t->run_daemon(\&fastcgi_daemon); $t->run(); ############################################################################### like(http_get('/'), qr/SEE-THIS/, 'fastcgi request'); like(http_get('/'), qr/SEE-THIS/, 'fastcgi request cached'); unlike(http_head('/'), qr/SEE-THIS/, 'no data in cached HEAD'); like(http_get('/stderr'), qr/SEE-THIS/, 'large stderr handled'); like(http_get('/stderr'), qr/SEE-THIS/, 'large stderr cached'); ############################################################################### sub fastcgi_daemon { my $socket = FCGI::OpenSocket('127.0.0.1:8081', 5); my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket); my $count; while( $request->Accept() >= 0 ) { $count++; if ($ENV{REQUEST_URI} eq '/stderr') { warn "sample stderr text" x 512; } print <