annotate merge_slashes.t @ 1752:ba6e24e38f03

Tests: improved stop_daemons() to send signal again. As was observed, it's possible that a signal to complete a uwsgi daemon can be ignored while it is starting up, which results in tests hang due to eternal waiting on child processes termination. Notably, it is seen when running tests with a high number of prove jobs on a low-profile VM against nginx with broken modules and/or configuration. To reproduce: $ TEST_NGINX_GLOBALS=ERROR prove -j16 uwsgi*.t Inspecting uwsgi under ktrace on FreeBSD confirms that a SIGTERM signal is ignored at the very beginning of uwsgi startup. It is then replaced with a default action after listen(), thus waiting until uwsgi is ready to accept new TCP connections doesn't completely solve the hang window. The fix is to retry sending a signal some time after waitpid(WNOHANG) continuously demonstrated no progress with reaping a signaled process. It is modelled after f13ead27f89c that improved stop() for nginx.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 29 Dec 2021 22:29:23 +0300
parents 5ac6efbe5552
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1516
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for URI normalization, merge_slashes off.
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 ###############################################################################
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(2)
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF')->run();
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 %%TEST_GLOBALS%%
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30 daemon off;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32 events {
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 }
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 http {
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 server {
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 listen 127.0.0.1:8080;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 server_name localhost;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 merge_slashes off;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 location / {
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 add_header X-URI "x $uri x";
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 return 204;
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 }
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 }
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 }
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 EOF
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 ###############################################################################
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 like(http_get('/foo//../bar'), qr!x /foo/bar x!, 'merge slashes');
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 like(http_get('/foo///../bar'), qr!x /foo//bar x!, 'merge slashes 2');
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57
420aaeb40c09 Tests: merge_slashes tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 ###############################################################################