annotate http_resolver_cleanup.t @ 1098:bb1974010d0a

Tests: resolver cleanup tests.
author Sergey Kandaurov <pluknet@nginx.com>
date Mon, 19 Dec 2016 13:46:55 +0300
parents
children 78cb8e66b6bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1098
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for http resolver, worker process termination.
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 ###############################################################################
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(1);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 $t->write_file_expand('nginx.conf', <<'EOF');
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 events {
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 http {
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 server {
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 listen 127.0.0.1:8080;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server_name localhost;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 location / {
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 resolver 127.0.0.1:%%PORT_8081_UDP%%;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 proxy_pass http://example.net/$args;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 location /pid {
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 add_header X-Pid $pid always;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 EOF
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 $t->run_daemon(\&dns_daemon, $t);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 $t->run()->waitforfile($t->testdir . '/' . port(8081));
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 ###############################################################################
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 my ($s);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 TODO: {
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 todo_skip 'use-after-free', 1 unless $ENV{TEST_NGINX_UNSAFE}
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 or $t->has_version('1.11.8');
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 # truncated UDP response, no response over TCP
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 $s = http_get('/', start => 1);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 pass('request');
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 sleep 1;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 # use-after-free in worker on fast shutdown
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 http_get('/pid') =~ qr/X-Pid: (\d+)/;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 kill 'TERM', $1;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 ###############################################################################
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 sub dns_daemon {
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 my ($t) = @_;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 my ($data);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 my $socket = IO::Socket::INET->new(
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 LocalAddr => '127.0.0.1',
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 LocalPort => port(8081),
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 Proto => 'udp',
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 )
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 or die "Can't create UDP socket: $!\n";
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 # signal we are ready
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 open my $fh, '>', $t->testdir() . '/' . port(8081);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 close $fh;
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 while (1) {
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 $socket->recv($data, 65536);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 # truncation bit set
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 $data |= pack("n2", 0, 0x8380);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 $socket->send($data);
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 }
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107
bb1974010d0a Tests: resolver cleanup tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 ###############################################################################