annotate js_header_filter.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 43f31fe62dfd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1642
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
2
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
3 # (C) Dmitry Volyntsev
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
5
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
6 # Tests for http njs module, header filter.
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
7
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
8 ###############################################################################
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
9
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
10 use warnings;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
11 use strict;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
12
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
13 use Test::More;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
14
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
16
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
17 use lib 'lib';
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
19
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
20 ###############################################################################
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
21
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
24
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF');
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
27
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
28 %%TEST_GLOBALS%%
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
29
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
30 daemon off;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
31
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
32 events {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
33 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
34
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
35 http {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
37
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
38 js_import test.js;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
39
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
40 server {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8080;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
42 server_name localhost;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
43
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
44 location /njs {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
45 js_content test.njs;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
46 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
47
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
48 location /filter/ {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
49 js_header_filter test.filter;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
50 proxy_pass http://127.0.0.1:8081/;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
51 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
52 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
53
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
54 server {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
55 listen 127.0.0.1:8081;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
56 server_name localhost;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
57
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
58 location / {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
59 add_header Set-Cookie "BB";
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
60 add_header Set-Cookie "CCCC";
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
61
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
62 return 200;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
63 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
64 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
65 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
66
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
67 EOF
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
68
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
69 $t->write_file('test.js', <<EOF);
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
70 function test_njs(r) {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
71 r.return(200, njs.version);
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
72 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
73
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
74 function filter(r) {
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
75 var cookies = r.headersOut['Set-Cookie'];
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
76 var len = r.args.len ? Number(r.args.len) : 0;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
77 r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len);
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
78 }
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
79
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
80 export default {njs: test_njs, filter};
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
81
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
82 EOF
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
83
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
84 $t->try_run('no njs header filter')->plan(2);
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
85
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
86 ###############################################################################
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
87
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
88 like(http_get('/filter/?len=1'), qr/Set-Cookie: BB.*Set-Cookie: CCCC.*/ms,
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
89 'all');;
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
90 unlike(http_get('/filter/?len=3'), qr/Set-Cookie: BB/,
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
91 'filter');
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
92
43f31fe62dfd Tests: added tests for js_header_filter directive.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
93 ###############################################################################