#!/usr/bin/perl

# (C) Nginx, Inc.

# Tests for stream proxy module with datagrams.

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

use warnings;
use strict;

use Test::More;

BEGIN { use FindBin; chdir($FindBin::Bin); }

use lib 'lib';
use Test::Nginx;
use Test::Nginx::Stream qw/ dgram /;

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

select STDERR; $| = 1;
select STDOUT; $| = 1;

my $t = Test::Nginx->new()->has(qw/stream udp/)->plan(8)
	->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

stream {
    proxy_timeout        1s;

    server {
        listen           127.0.0.1:%%PORT_8980_UDP%% udp;
        proxy_pass       127.0.0.1:%%PORT_8981_UDP%%;

        proxy_responses  0;
    }

    server {
        listen           127.0.0.1:%%PORT_8982_UDP%% udp;
        proxy_pass       127.0.0.1:%%PORT_8981_UDP%%;

        proxy_responses  2;
    }

    server {
        listen           127.0.0.1:%%PORT_8983_UDP%% udp;
        proxy_pass       127.0.0.1:%%PORT_8981_UDP%%;
    }
}

EOF


$t->run_daemon(\&udp_daemon, port(8981), $t);
$t->run();
$t->waitforfile($t->testdir . '/' . port(8981));

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

my $s = dgram('127.0.0.1:' . port(8980));
is($s->io('1', read => 1, read_timeout => 0.5), '', 'proxy responses 0');

$s = dgram('127.0.0.1:' . port(8982));
is($s->io('1'), '1', 'proxy responses 1');
$s = dgram('127.0.0.1:' . port(8982));
is($s->io('2', read => 2), '12', 'proxy responses 2');

$s = dgram('127.0.0.1:' . port(8983));
is($s->io('3', read => 3), '123', 'proxy responses default');

# zero-length payload

TODO: {
local $TODO = 'not yet' unless $t->has_version('1.19.1');

$s = dgram('127.0.0.1:' . port(8982));
$s->write('');
is($s->read(), 'zero', 'upstream read zero bytes');
is($s->read(), '', 'upstream sent zero bytes');

$s->write('');
is($s->read(), 'zero', 'upstream read zero bytes again');
is($s->read(), '', 'upstream sent zero bytes again');

}

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

sub udp_daemon {
	my ($port, $t) = @_;

	my $server = IO::Socket::INET->new(
		Proto => 'udp',
		LocalAddr => '127.0.0.1:' . port(8981),
		Reuse => 1,
	)
		or die "Can't create listening socket: $!\n";

	# signal we are ready

	open my $fh, '>', $t->testdir() . '/' . port(8981);
	close $fh;

	while (1) {
		$server->recv(my $buffer, 65536);

		if (length($buffer) > 0) {
			$server->send($_) for (1 .. $buffer);

		} else {
			$server->send('zero');
			select undef, undef, undef, 0.2;
			$server->send('');
		}
	}
}

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