blob: c121d93df9b23b25ab1e2c7fc972d6f359f63aaa [file] [log] [blame]
Maxim Dounin631375c2010-03-11 02:31:56 +03001#!/usr/bin/perl
2
3# (C) Maxim Dounin
4
5# Test for fastcgi backend with cache.
6
7###############################################################################
8
9use warnings;
10use strict;
11
12use Test::More;
13
14BEGIN { use FindBin; chdir($FindBin::Bin); }
15
16use lib 'lib';
17use Test::Nginx;
18
19###############################################################################
20
21select STDERR; $| = 1;
22select STDOUT; $| = 1;
23
24eval { require FCGI; };
25plan(skip_all => 'FCGI not installed') if $@;
26
27my $t = Test::Nginx->new()->has(qw/http fastcgi cache/)->plan(5)
28 ->write_file_expand('nginx.conf', <<'EOF');
29
30%%TEST_GLOBALS%%
31
Maxim Dounin631375c2010-03-11 02:31:56 +030032daemon off;
33
34events {
35}
36
37http {
38 %%TEST_GLOBALS_HTTP%%
39
40 fastcgi_cache_path %%TESTDIR%%/cache levels=1:2
41 keys_zone=NAME:10m;
42
43 server {
44 listen 127.0.0.1:8080;
45 server_name localhost;
46
47 location / {
48 fastcgi_pass 127.0.0.1:8081;
49 fastcgi_param REQUEST_URI $request_uri;
50 fastcgi_cache NAME;
51 fastcgi_cache_key $request_uri;
52 fastcgi_cache_valid 302 1m;
53 }
54 }
55}
56
57EOF
58
59$t->run_daemon(\&fastcgi_daemon);
60$t->run();
61
62###############################################################################
63
64like(http_get('/'), qr/SEE-THIS/, 'fastcgi request');
65like(http_get('/'), qr/SEE-THIS/, 'fastcgi request cached');
66
67unlike(http_head('/'), qr/SEE-THIS/, 'no data in cached HEAD');
68
69like(http_get('/stderr'), qr/SEE-THIS/, 'large stderr handled');
70like(http_get('/stderr'), qr/SEE-THIS/, 'large stderr cached');
71
72###############################################################################
73
74sub fastcgi_daemon {
75 my $socket = FCGI::OpenSocket('127.0.0.1:8081', 5);
76 my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV,
77 $socket);
78
79 my $count;
80 while( $request->Accept() >= 0 ) {
81 $count++;
82
83 if ($ENV{REQUEST_URI} eq '/stderr') {
84 warn "sample stderr text" x 512;
85 }
86
87 print <<EOF;
88Location: http://127.0.0.1:8080/redirect
89Content-Type: text/html
90
91SEE-THIS
92$count
93EOF
94 }
95
96 FCGI::CloseSocket($socket);
97}
98
99###############################################################################