| #!/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_8981_UDP%% alert; |
| error_log syslog:server=127.0.0.1:%%PORT_8982_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->try_run('no inet6 support')->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(8981), port(8982); |
| |
| 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; |
| } |
| |
| ############################################################################### |