annotate js_internal_redirect.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 18ac4d9e5a2a
children ce8b0c9452ae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
2
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
3 # (C) Dmitry Volyntsev
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
5
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
6 # Tests for http njs module, internalRedirect method.
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
7
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
8 ###############################################################################
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
9
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
10 use warnings;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
11 use strict;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
12
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
13 use Test::More;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
14
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
16
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
17 use lib 'lib';
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
19
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
20 ###############################################################################
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
21
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
24
1347
106d9f806288 Tests: js_internal_redirect.t cleanup.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1346
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http rewrite/)
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF');
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
27
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
28 %%TEST_GLOBALS%%
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
29
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
30 daemon off;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
31
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
32 events {
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
33 }
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
34
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
35 http {
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
37
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1614
diff changeset
38 js_import test.js;
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
39
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
40 server {
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8080;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
42 server_name localhost;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
43
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
44 location /test {
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1614
diff changeset
45 js_content test.redirect;
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
46 }
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
47
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
48 location /redirect {
1345
9fbe84b7ddc6 Tests: style.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1343
diff changeset
49 internal;
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
50 return 200 redirect$arg_b;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
51 }
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
52
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
53 location @named {
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
54 return 200 named;
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
55 }
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
56 }
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
57 }
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
58
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
59 EOF
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
60
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
61 $t->write_file('test.js', <<EOF);
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1614
diff changeset
62 function redirect(r) {
1591
a7902e5adeab Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1520
diff changeset
63 if (r.variables.arg_dest == 'named') {
a7902e5adeab Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1520
diff changeset
64 r.internalRedirect('\@named');
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
65
1345
9fbe84b7ddc6 Tests: style.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1343
diff changeset
66 } else {
1591
a7902e5adeab Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1520
diff changeset
67 if (r.variables.arg_a) {
a7902e5adeab Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1520
diff changeset
68 r.internalRedirect('/redirect?b=' + r.variables.arg_a);
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
69
1345
9fbe84b7ddc6 Tests: style.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1343
diff changeset
70 } else {
1591
a7902e5adeab Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1520
diff changeset
71 r.internalRedirect('/redirect');
1345
9fbe84b7ddc6 Tests: style.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1343
diff changeset
72 }
9fbe84b7ddc6 Tests: style.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1343
diff changeset
73 }
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
74 }
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
75
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1614
diff changeset
76 export default {redirect};
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1614
diff changeset
77
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
78 EOF
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
79
1346
4d5d1e59f45e Tests: TODO js_internal_redirect.t on njs < 0.2.2.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1345
diff changeset
80 $t->try_run('no njs available')->plan(3);
1343
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
81
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
82 ###############################################################################
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
83
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
84 like(http_get('/test'), qr/redirect/s, 'redirect');
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
85 like(http_get('/test?a=A'), qr/redirectA/s, 'redirect with args');
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
86 like(http_get('/test?dest=named'), qr/named/s, 'redirect to named location');
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
87
2ff483941037 Tests: added njs http internalRedirect() method tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
88 ###############################################################################