Mercurial > hg > nginx-tests
annotate stream_split_clients.t @ 1215:26884729e06b
Tests: cope with resolver resend in mail resolver tests.
Currently, if resolver didn't find PTR type in the answer section of PTR
response, it keeps the node in the resend queue until the next timer event.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 31 Aug 2017 19:09:04 +0300 |
parents | ef6be3201851 |
children | 3fc6817cd84a |
rev | line source |
---|---|
979
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for stream split_client module. |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use Test::Nginx::Stream qw/ stream /; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 ############################################################################### |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/stream stream_split_clients stream_return/); |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 $t->write_file_expand('nginx.conf', <<'EOF'); |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 %%TEST_GLOBALS%% |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 daemon off; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 events { |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 } |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 stream { |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 split_clients $connection $variant { |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 51.2% "first"; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 10% "second"; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 * "third"; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 } |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 server { |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 listen 127.0.0.1:8080; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 return $variant; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 } |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 } |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 EOF |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 $t->try_run('no stream split_clients'); |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 $t->plan(1); |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 ############################################################################### |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 # NB: split_clients distribution is a subject to implementation details |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 like(many('/', 20), qr/first: 12, second: 2, third: 6/, 'split'); |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 ############################################################################### |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 sub many { |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 my ($uri, $count) = @_; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 my %dist; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 for (1 .. $count) { |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 if (my $data = stream()->read()) { |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 $dist{$data} = 0 unless defined $data; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 $dist{$data}++; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 } |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 } |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 return join ', ', map { $_ . ": " . $dist{$_} } sort keys %dist; |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 } |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 ############################################################################### |