diff debug_connection_syslog.t @ 404:997f5fe16545

Tests: added syslog tests.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 21 May 2014 17:43:42 +0400
parents
children 907e89fba9c3
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/debug_connection_syslog.t
@@ -0,0 +1,123 @@
+#!/usr/bin/perl
+
+# (C) Nginx, Inc.
+
+# Tests for debug_connection with syslog.
+
+###############################################################################
+
+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;
+
+my $t = Test::Nginx->new()->has(qw/http --with-debug ipv6 proxy/);
+
+plan(skip_all => 'no syslog') unless $t->has_version('1.7.1');
+
+$t->write_file_expand('nginx.conf', <<'EOF');
+
+%%TEST_GLOBALS%%
+
+daemon off;
+
+events {
+    debug_connection ::1;
+}
+
+http {
+    %%TEST_GLOBALS_HTTP%%
+
+    error_log syslog:server=127.0.0.1:8080 alert;
+    error_log syslog:server=127.0.0.1:8081 alert;
+
+    server {
+        listen       127.0.0.1:8080;
+        listen       [::1]:8080;
+        server_name  localhost;
+
+        location /debug {
+            proxy_pass http://[::1]:8080/;
+        }
+    }
+}
+
+EOF
+
+eval {
+	open OLDERR, ">&", \*STDERR; close STDERR;
+	$t->run();
+	open STDERR, ">&", \*OLDERR;
+};
+plan(skip_all => 'no inet6 support') if $@;
+
+$t->plan(5);
+
+###############################################################################
+
+is(get_syslog('/', 8080), '', 'no debug_connection syslog 1');
+is(get_syslog('/', 8081), '', 'no debug_connection syslog 2');
+
+my @msgs = get_syslog('/debug', 8080, 8081);
+like($msgs[0], qr/\[debug\]/, 'debug_connection syslog 1');
+like($msgs[1], qr/\[debug\]/, 'debug_connection syslog 2');
+is($msgs[0], $msgs[1], 'debug_connection syslog1 syslog2 match');
+
+###############################################################################
+
+sub get_syslog {
+	my ($uri, @port) = @_;
+	my (@s);
+	my $rfd = '';
+	my @data;
+
+	eval {
+		local $SIG{ALRM} = sub { die "timeout\n" };
+		local $SIG{PIPE} = sub { die "sigpipe\n" };
+		alarm(1);
+		map {
+			push @s, IO::Socket::INET->new(
+				Proto => 'udp',
+				LocalAddr => "127.0.0.1:$_"
+			);
+		} (@port);
+		alarm(0);
+	};
+	alarm(0);
+	if ($@) {
+		log_in("died: $@");
+		return undef;
+	}
+
+	http_get($uri);
+
+	map {
+		my $data = '';
+		vec($rfd, fileno($_), 1) = 1;
+		select $rfd, undef, undef, 1;
+		while (select($rfd, undef, undef, 0.1) > 0
+			&& vec($rfd, fileno($_), 1))
+		{
+			my ($buffer);
+			sysread($_, $buffer, 4096);
+			$data .= $buffer;
+		}
+		push @data, $data;
+		$_->close();
+	} (@s);
+
+	return $data[0] if scalar @data == 1;
+	return @data;
+}
+
+###############################################################################