changeset 42:7435db149168

Tests: basic proxy tests.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 01 Nov 2008 19:39:26 +0300
parents 1b3c22a87e5d
children 05175c8b88dc
files proxy.t
diffstat 1 files changed, 127 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/proxy.t
@@ -0,0 +1,127 @@
+#!/usr/bin/perl
+
+# (C) Maxim Dounin
+
+# Tests for http proxy module.
+
+###############################################################################
+
+use warnings;
+use strict;
+
+use Test::More tests => 3;
+
+use IO::Select;
+
+BEGIN { use FindBin; chdir($FindBin::Bin); }
+
+use lib 'lib';
+use Test::Nginx;
+
+###############################################################################
+
+select STDERR; $| = 1;
+select STDOUT; $| = 1;
+
+my $t = Test::Nginx->new();
+
+$t->write_file_expand('nginx.conf', <<'EOF');
+
+master_process off;
+daemon         off;
+
+events {
+    worker_connections  1024;
+}
+
+http {
+    access_log    off;
+    root          %%TESTDIR%%;
+
+    client_body_temp_path  %%TESTDIR%%/client_body_temp;
+    fastcgi_temp_path      %%TESTDIR%%/fastcgi_temp;
+    proxy_temp_path        %%TESTDIR%%/proxy_temp;
+
+    server {
+        listen       localhost:8080;
+        server_name  localhost;
+
+        location / {
+            proxy_pass http://localhost:8081;
+            proxy_read_timeout 1s;
+        }
+    }
+}
+
+EOF
+
+$t->run_daemon(\&http_daemon);
+$t->run();
+
+###############################################################################
+
+like(http_get('/'), qr/SEE-THIS/, 'proxy request');
+like(http_get('/multi'), qr/AND-THIS/, 'proxy request with multiple packets');
+
+unlike(http_head('/'), qr/SEE-THIS/, 'proxy head request');
+
+###############################################################################
+
+sub http_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";
+
+	while (my $client = $server->accept()) {
+        	$client->autoflush(1);
+
+		my $headers = '';
+		my $uri = '';
+
+        	while (<$client>) {
+			$headers .= $_;
+                	last if (/^\x0d?\x0a?$/);
+        	}
+
+		$uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i;
+
+		if ($uri eq '/') {
+			print $client <<'EOF';
+HTTP/1.1 200 OK
+Connection: close
+
+EOF
+			print $client "TEST-OK-IF-YOU-SEE-THIS"
+				unless $headers =~ /^HEAD/i;
+
+		} elsif ($uri eq '/multi') {
+
+        		print $client <<"EOF";
+HTTP/1.1 200 OK
+Connection: close
+
+TEST-OK-IF-YOU-SEE-THIS
+EOF
+
+			select undef, undef, undef, 0.1;
+			print $client 'AND-THIS';
+
+		} else {
+
+        		print $client <<"EOF";
+HTTP/1.1 404 Not Found
+Connection: close
+
+Oops, '$uri' not found
+EOF
+		}
+
+        	close $client;
+	}
+}
+
+###############################################################################