annotate stream_udp_upstream_least_conn.t @ 1248:70192b1baf01

Tests: added exception test to stream_js.t using 'require'. The stream js tests introduced in edf5a3c9e36a fail on njs 0.1.14. It doesn't currently provide an easy way to check its version, whilst we are obligated to gracefully handle such cases somehow. With such an addition of 'require', now the tests are skipped instead on the previous versions.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 21 Nov 2017 13:16:39 +0300
parents e4974af3fb12
children f3ba4c74de31
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Stream tests for upstream least_conn balancer module with datagrams.
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 use lib 'lib';
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19 use Test::Nginx::Stream qw/ dgram /;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25
947
b9e42c554ba7 Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents: 868
diff changeset
26 my $t = Test::Nginx->new()->has(qw/stream stream_upstream_least_conn udp/)
1020
196d33c2bb45 Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 974
diff changeset
27 ->plan(2)->write_file_expand('nginx.conf', <<'EOF');
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31 daemon off;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33 events {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36 stream {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 proxy_responses 1;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 proxy_timeout 1s;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 upstream u {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41 least_conn;
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
42 server 127.0.0.1:%%PORT_8981_UDP%%;
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
43 server 127.0.0.1:%%PORT_8982_UDP%%;
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46 server {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
47 listen 127.0.0.1:%%PORT_8980_UDP%% udp;
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 proxy_pass u;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 EOF
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
54 $t->run_daemon(\&udp_daemon, port(8981), $t);
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
55 $t->run_daemon(\&udp_daemon, port(8982), $t);
1020
196d33c2bb45 Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 974
diff changeset
56 $t->run();
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
58 $t->waitforfile($t->testdir . '/' . port(8981));
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
59 $t->waitforfile($t->testdir . '/' . port(8982));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
63 my @ports = my ($port1, $port2) = (port(8981), port(8982));
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 947
diff changeset
64
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 947
diff changeset
65 is(many(10), "$port1: 5, $port2: 5", 'balanced');
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 my @sockets;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 for (1 .. 2) {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
69 my $s = dgram('127.0.0.1:' . port(8980));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 $s->write('w');
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 push @sockets, $s;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 select undef, undef, undef, 0.2;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 947
diff changeset
76 is(many(10), "$port2: 10", 'least_conn');
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80 sub many {
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 947
diff changeset
81 my ($count) = @_;
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 my (%ports);
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 for (1 .. $count) {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
85 if (dgram('127.0.0.1:' . port(8980))->io('.') =~ /(\d+)/) {
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 $ports{$1} = 0 unless defined $ports{$1};
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 $ports{$1}++;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 947
diff changeset
91 my @keys = map { my $p = $_; grep { $p == $_ } keys %ports } @ports;
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 947
diff changeset
92 return join ', ', map { $_ . ": " . $ports{$_} } @keys;
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 sub udp_daemon {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 my ($port, $t) = @_;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100 my $server = IO::Socket::INET->new(
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101 Proto => 'udp',
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 LocalAddr => '127.0.0.1:' . $port,
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 Reuse => 1,
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 )
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 or die "Can't create listening socket: $!\n";
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 # signal we are ready
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 open my $fh, '>', $t->testdir() . '/' . $port;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110 close $fh;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112 while (1) {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
113 $server->recv(my $buffer, 65536);
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115 my $port = $server->sockport();
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1235
diff changeset
117 if ($buffer =~ /w/ && $port == port(8981)) {
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
118 select undef, undef, undef, 2.5;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
119 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
120
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
121 $buffer = $port;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
122
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
123 $server->send($buffer);
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
124 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
125 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
126
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
127 ###############################################################################