diff ssi-include-big.t @ 5:4d75bdb05ecf

Tests: some generic code and ssi tests. Move generic code to _common.pm and add test for ssi big includes.
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 07 Sep 2008 05:00:28 +0400
parents
children 8813a78ab8b5
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/ssi-include-big.t
@@ -0,0 +1,74 @@
+#!/usr/bin/perl
+
+# (C) Maxim Dounin
+
+# Tests for nginx ssi bug with big includes.
+
+###############################################################################
+
+use warnings;
+use strict;
+
+use Test::More tests => 3;
+
+use _common;
+use Compress::Zlib;
+
+###############################################################################
+
+select STDERR; $| = 1;
+select STDOUT; $| = 1;
+
+start_nginx('ssi-include-big.conf');
+
+write_file('c1.html', 'X' x 1023);
+write_file('c2.html', 'X' x 1024);
+write_file('c3.html', 'X' x 1025);
+write_file('test1.html', '<!--#include virtual="/proxy/blah" -->' . "\n"
+	. '<!--#include virtual="/c1.html" -->');
+write_file('test2.html', '<!--#include virtual="/proxy/blah" -->' . "\n"
+	. '<!--#include virtual="/c2.html" -->');
+write_file('test3.html', '<!--#include virtual="/proxy/blah" -->' . "\n"
+	. '<!--#include virtual="/c3.html" -->');
+
+###############################################################################
+
+my $t1 = http_gzip_request('/test1.html');
+like($t1, qr/X{1023}/, 'small included file (less than output_buffers)');
+
+my $t2 = http_gzip_request('/test2.html');
+like($t2, qr/X{1024}/, 'small included file (equal to output_buffers)');
+
+my $t3 = http_gzip_request('/test3.html');
+like($t3, qr/X{1025}/, 'big included file (more than output_buffers)');
+
+###############################################################################
+
+sub http_gzip_request {
+	my ($url) = @_;
+	return `GET -t 1 -H 'Accept-Encoding: gzip' http://localhost:8080$url | gunzip -c`;
+=pod
+
+	my $r = http(<<EOF);
+GET $url HTTP/1.0
+Host: localhost
+Connection: close
+Accept-Encoding: gzip
+
+EOF
+	return undef unless defined $r;
+	return undef unless $r =~ m/\x0d\x0a\x0d\x0a(.*)/ms;
+	return Compress::Zlib::memGunzip(my $b = $1);
+=cut
+}
+
+sub write_file {
+	my ($name, $content) = @_;
+
+	open F, '>' . $_common::testdir . '/' . $name
+		or die "Can't create $name: $!";
+	print F $content;
+	close F;
+}
+
+###############################################################################