# HG changeset patch # User Maxim Dounin # Date 1395057739 -14400 # Node ID 74a015aad3521ffef6b404cdaa9eafd991824301 # Parent f42de3a9fd74346cc32de701435a43eb32363079 Tests: split headers and fastcgi_next_upstream test. diff --git a/fastcgi_split.t b/fastcgi_split.t new file mode 100644 --- /dev/null +++ b/fastcgi_split.t @@ -0,0 +1,103 @@ +#!/usr/bin/perl + +# (C) Maxim Dounin + +# Test for fastcgi backend. +# Incorrect split headers handling after switching to next server, +# as reported by Lucas Molas. + +############################################################################### + +use warnings; +use strict; + +use Test::More; +use Socket qw/ CR LF CRLF /; + +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 $@; +plan(skip_all => 'win32') if $^O eq 'MSWin32'; + +my $t = Test::Nginx->new()->has(qw/http fastcgi/)->plan(1) + ->write_file_expand('nginx.conf', <<'EOF'); + +%%TEST_GLOBALS%% + +daemon off; + +events { +} + +http { + %%TEST_GLOBALS_HTTP%% + + upstream u { + server 127.0.0.1:8081; + server 127.0.0.1:8082; + } + + server { + listen 127.0.0.1:8080; + server_name localhost; + + location / { + fastcgi_pass u; + fastcgi_param REQUEST_URI $request_uri; + fastcgi_next_upstream invalid_header; + } + } +} + +EOF + +$t->run_daemon(\&fastcgi_daemon, 8081); +$t->run_daemon(\&fastcgi_daemon, 8082); + +$t->run(); + +$t->waitforsocket('127.0.0.1:8081'); +$t->waitforsocket('127.0.0.1:8082'); + +############################################################################### + +TODO: { +local $TODO = 'not yet' unless $t->has_version('1.5.12'); + +like(http_get('/'), qr/^Good: header/ms, 'fastcgi next upstream'); + +} + +############################################################################### + +sub fastcgi_daemon { + my ($port) = @_; + my $socket = FCGI::OpenSocket("127.0.0.1:$port", 5); + my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, + $socket); + + my $count; + while( $request->Accept() >= 0 ) { + $count++; + + if ($port == 8081) { + print 'BAD'; + } + if ($port == 8082) { + print 'Good: header' . CRLF . CRLF; + } + } + + FCGI::CloseSocket($socket); +} + +###############################################################################