#!/usr/bin/perl

# (C) Sergey Kandaurov
# (C) Nginx, Inc.

# Stream tests for upstream module and balancers 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/)
	->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

stream {
    proxy_responses      1;
    proxy_timeout        1s;

    upstream u {
        server 127.0.0.1:8087;
        server 127.0.0.1:8088;
    }

    upstream u2 {
        server 127.0.0.1:8089 down;
        server 127.0.0.1:8089;
        server 127.0.0.1:8087;
        server 127.0.0.1:8088;
    }

    upstream u3 {
        server 127.0.0.1:8087;
        server 127.0.0.1:8088 weight=2;
    }

    upstream u4 {
        server 127.0.0.1:8089;
        server 127.0.0.1:8087 backup;
    }

    server {
        listen      127.0.0.1:8081 udp;
        proxy_pass  u;
    }

    server {
        listen      127.0.0.1:8082 udp;
        proxy_pass  u2;
    }

    server {
        listen      127.0.0.1:8083 udp;
        proxy_pass  u3;
    }

    server {
        listen      127.0.0.1:8084 udp;
        proxy_pass  u4;
    }
}

EOF

$t->run_daemon(\&udp_daemon, 8087, $t);
$t->run_daemon(\&udp_daemon, 8088, $t);
$t->try_run('no stream udp')->plan(4);

$t->waitforfile($t->testdir . '/8087');
$t->waitforfile($t->testdir . '/8088');

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

is(many('.', 30, peer => '127.0.0.1:8081'), '8087: 15, 8088: 15', 'balanced');
is(many('.', 30, peer => '127.0.0.1:8082'), '8087: 15, 8088: 15', 'failures');
is(many('.', 30, peer => '127.0.0.1:8083'), '8087: 10, 8088: 20', 'weight');
is(many('.', 30, peer => '127.0.0.1:8084'), '8087: 30', 'backup');

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

sub many {
	my ($data, $count, %opts) = @_;
	my (%ports, $peer);

	$peer = $opts{peer};

	for (1 .. $count) {
		if (dgram($peer)->io($data) =~ /(\d+)/) {
			$ports{$1} = 0 unless defined $ports{$1};
			$ports{$1}++;
		}
	}

	return join ', ', map { $_ . ": " . $ports{$_} } sort keys %ports;
}

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

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

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

	# signal we are ready

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

	while (1) {
		$server->recv(my $buffer, 65536);
		$buffer = $server->sockport();
		$server->send($buffer);
	}
}

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