#!/usr/bin/perl

# (C) Nginx, Inc.

# Tests for debug_connection with syslog.

###############################################################################

use warnings;
use strict;

use Test::More;

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()->has(qw/http --with-debug proxy/);

$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:%%PORT_8081_UDP%% alert;
    error_log syslog:server=127.0.0.1:%%PORT_8082_UDP%% alert;

    server {
        listen       127.0.0.1:8080;
        listen       [::1]:%%PORT_8080%%;
        server_name  localhost;

        location /debug {
            proxy_pass http://[::1]:%%PORT_8080%%/;
        }
    }
}

EOF

$t->run()->plan(5);

###############################################################################

my ($s1, $s2) = map {
	IO::Socket::INET->new(
		Proto => 'udp',
		LocalAddr => "127.0.0.1:$_"
	)
		or die "Can't open syslog socket $_: $!";
} port(8081), port(8082);

is(get_syslog('/', $s1), '', 'no debug_connection syslog 1');
is(get_syslog('/', $s2), '', 'no debug_connection syslog 2');

my @msgs = get_syslog('/debug', $s1, $s2);
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, @s) = @_;
	my @data;

	http_get($uri);

	map {
		my $data = '';
		IO::Select->new($_)->can_read(1);
		while (IO::Select->new($_)->can_read(0.1)) {
			my ($buffer);
			sysread($_, $buffer, 4096);
			$data .= $buffer;
		}
		push @data, $data;
	} (@s);

	return $data[0] if scalar @data == 1;
	return @data;
}

###############################################################################
