annotate upstream_least_conn.t @ 431:05c46688b54b

Tests: ssl_password_file.t fixes. Make sure to always specify listen socket in all servers as the default vary (under root, nginx will try to listen on 80). Make sure to detect if an https request was processed by http.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 09 Jul 2014 05:19:51 +0400
parents 98d9b06b087b
children 60888e2c3f5a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
294
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for upstream least_conn balancer module.
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 use Socket qw/ CRLF /;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 BEGIN { use FindBin; chdir($FindBin::Bin); }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use lib 'lib';
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 use Test::Nginx;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 ###############################################################################
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 select STDERR; $| = 1;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 select STDOUT; $| = 1;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http proxy upstream_least_conn/)->plan(2);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 $t->write_file_expand('nginx.conf', <<'EOF');
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 %%TEST_GLOBALS%%
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 daemon off;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 events {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 http {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 upstream u {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 least_conn;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 server 127.0.0.1:8081;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 server 127.0.0.1:8082;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 server {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 listen 127.0.0.1:8080;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 server_name localhost;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 location / {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 proxy_pass http://u;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 EOF
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 $t->run_daemon(\&http_daemon, 8081);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 $t->run_daemon(\&http_daemon, 8082);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 $t->run();
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 $t->waitforsocket('127.0.0.1:8081');
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 $t->waitforsocket('127.0.0.1:8082');
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 ###############################################################################
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 is(many('/', 10), '8081: 5, 8082: 5', 'balanced');
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 is(parallel('/w', 10), '8081: 1, 8082: 9', 'least conn');
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 ###############################################################################
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 sub many {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 my ($uri, $count) = @_;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 my %ports;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 for (1 .. $count) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 if (http_get($uri) =~ /X-Port: (\d+)/) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 $ports{$1} = 0 unless defined $ports{$1};
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 $ports{$1}++;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 return join ', ', map { $_ . ": " . $ports{$_} } sort keys %ports;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 sub parallel {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 my ($uri, $count, %opts) = @_;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 my (@sockets, %ports);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 for (1 .. $count) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 push(@sockets, http_start($uri));
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 select undef, undef, undef, 0.1;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 for (1 .. $count) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 if (http_end(pop(@sockets)) =~ /X-Port: (\d+)/) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 $ports{$1} = 0 unless defined $ports{$1};
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 $ports{$1}++;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 return join ', ', map { $_ . ": " . $ports{$_} } sort keys %ports;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 sub http_start {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 my ($uri) = @_;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 my $s;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 my $request = "GET $uri HTTP/1.0" . CRLF . CRLF;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 eval {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 local $SIG{ALRM} = sub { die "timeout\n" };
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 local $SIG{PIPE} = sub { die "sigpipe\n" };
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 alarm(3);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 $s = IO::Socket::INET->new(
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 Proto => 'tcp',
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 PeerAddr => '127.0.0.1:8080'
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 );
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 log_out($request);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 $s->print($request);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 alarm(0);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 };
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 alarm(0);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 if ($@) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 log_in("died: $@");
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 return undef;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 return $s;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 sub http_end {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 my ($s) = @_;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 my $reply;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 eval {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 local $SIG{ALRM} = sub { die "timeout\n" };
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 local $SIG{PIPE} = sub { die "sigpipe\n" };
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 alarm(3);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 local $/;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 $reply = $s->getline();
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 log_in($reply);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 alarm(0);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 };
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 alarm(0);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 if ($@) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 log_in("died: $@");
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 return undef;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 return $reply;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 ###############################################################################
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 sub http_daemon {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 my ($port) = @_;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 my $server = IO::Socket::INET->new(
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 Proto => 'tcp',
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 LocalHost => '127.0.0.1',
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 LocalPort => $port,
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 Listen => 5,
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 Reuse => 1
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 )
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 or die "Can't create listening socket: $!\n";
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 local $SIG{PIPE} = 'IGNORE';
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 while (my $client = $server->accept()) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 $client->autoflush(1);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 my $headers = '';
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 my $uri = '';
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 while (<$client>) {
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 $headers .= $_;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 last if (/^\x0d?\x0a?$/);
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 if ($uri eq '/w' && $port == 8081) {
400
98d9b06b087b Tests: adjust least_conn test timeouts.
Maxim Dounin <mdounin@mdounin.ru>
parents: 342
diff changeset
182 Test::Nginx::log_core('||', "$port: sleep(2.5)");
98d9b06b087b Tests: adjust least_conn test timeouts.
Maxim Dounin <mdounin@mdounin.ru>
parents: 342
diff changeset
183 select undef, undef, undef, 2.5;
294
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 Test::Nginx::log_core('||', "$port: response, 200");
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 print $client <<EOF;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 HTTP/1.1 200 OK
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 Connection: close
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 X-Port: $port
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 OK
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 EOF
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 close $client;
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 }
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198
71e275487aeb Tests: upstream least_conn and ip_hash tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 ###############################################################################