Mercurial > hg > nginx-tests
annotate js_fetch_timeout.t @ 1851:0351dee227a8
Tests: unbreak tests with dynamic certificates on stable.
In 74cffa9d4c43, ticket based session reuse is enabled in addition to
using a shared SSL session cache. This changed how a session can be
resumed in a different server:
- for a session ID based resumption, it is resumed in the same context
- when using session tickets, a key name is also checked for matching
- with a ticket callback, this is skipped in favor of callback's logic
This makes 'session id context match' tests fail with session tickets
on stable since ticket key names are unique in distinct SSL contexts.
On the other hand, tests pass on 1.23.2+ due to automatic ticket keys
rotation that installs ticket callback, and using a common shared SSL
session cache.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 28 Mar 2023 01:36:32 +0400 |
parents | f1a097719877 |
children |
rev | line source |
---|---|
1754
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
2 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
3 # (C) Dmitry Volyntsev |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
5 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
6 # Tests for http njs module, fetch method timeout. |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
7 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
9 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
11 use strict; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
12 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
14 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
15 use Socket qw/ CRLF /; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
16 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
18 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
19 use lib 'lib'; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
20 use Test::Nginx; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
21 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
22 ############################################################################### |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
23 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
24 select STDERR; $| = 1; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
25 select STDOUT; $| = 1; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
26 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
27 my $t = Test::Nginx->new()->has(qw/http/) |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
28 ->write_file_expand('nginx.conf', <<'EOF'); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
29 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
30 %%TEST_GLOBALS%% |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
31 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
32 daemon off; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
33 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
34 events { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
35 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
36 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
37 http { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
38 %%TEST_GLOBALS_HTTP%% |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
39 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
40 js_import test.js; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
41 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
42 server { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
43 listen 127.0.0.1:8080; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
44 server_name localhost; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
45 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
46 location /njs { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
47 js_content test.njs; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
48 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
49 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
50 location /normal_timeout { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
51 js_content test.timeout_test; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
52 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
53 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
54 location /short_timeout { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
55 js_fetch_timeout 200ms; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
56 js_content test.timeout_test; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
57 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
58 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
59 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
60 server { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
61 listen 127.0.0.1:8081; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
62 server_name localhost; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
63 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
64 location /normal_reply { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
65 js_content test.normal_reply; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
66 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
67 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
68 location /delayed_reply { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
69 js_content test.delayed_reply; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
70 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
71 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
72 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
73 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
74 EOF |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
75 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
76 my $p1 = port(8081); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
77 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
78 $t->write_file('test.js', <<EOF); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
79 function test_njs(r) { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
80 r.return(200, njs.version); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
81 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
82 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
83 async function timeout_test(r) { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
84 let rs = await Promise.allSettled([ |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
85 'http://127.0.0.1:$p1/normal_reply', |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
86 'http://127.0.0.1:$p1/delayed_reply', |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
87 ].map(v => ngx.fetch(v))); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
88 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
89 let bs = rs.map(v => ({s: v.status, v: v.value ? v.value.headers.X |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
90 : v.reason})); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
91 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
92 r.return(200, njs.dump(bs)); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
93 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
94 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
95 function normal_reply(r) { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
96 r.headersOut.X = 'N'; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
97 r.return(200); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
98 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
99 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
100 function delayed_reply(r) { |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
101 r.headersOut.X = 'D'; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
102 setTimeout((r) => { r.return(200); }, 250, r, 0); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
103 } |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
104 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
105 export default {njs: test_njs, timeout_test, normal_reply, delayed_reply}; |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
106 EOF |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
107 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
108 $t->try_run('no js_fetch_timeout')->plan(2); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
109 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
110 ############################################################################### |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
111 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
112 like(http_get('/normal_timeout'), |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
113 qr/\[\{s:'fulfilled',v:'N'},\{s:'fulfilled',v:'D'}]$/s, |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
114 'normal timeout'); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
115 like(http_get('/short_timeout'), |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
116 qr/\[\{s:'fulfilled',v:'N'},\{s:'rejected',v:Error: read timed out}]$/s, |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
117 'short timeout'); |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
118 |
f1a097719877
Tests: added js fetch timeout directive tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
119 ############################################################################### |