Mercurial > hg > nginx-tests
annotate js_object.t @ 1619:436d0ffc2ea3
Tests: correctly shutdown ssl for reproducible session reuse tests.
Previously, session reuse tests in stream_ssl_certificate.t were prone
to testing errors, since the client doesn't write any application data
before closing a connection, which is done so to pass tests on win32.
In this case, the server may happened to get an unexpected eof meaning
that it will abandon that session. This is specific to stream testing
pattern, changes to ssl_certificate.t are applied too for consistency.
This is also specific to SSL_R_UNEXPECTED_EOF_WHILE_READING, which is
implemented in OpenSSL 3.0.0.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 23 Nov 2020 22:46:06 +0000 |
parents | bc0990ea2e5b |
children | 18ac4d9e5a2a |
rev | line source |
---|---|
1559
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
2 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
3 # (C) Dmitry Volyntsev |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
5 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
6 # Tests for http njs module, request object. |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
7 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
9 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
11 use strict; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
12 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
14 use Socket qw/ CRLF /; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
15 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
16 BEGIN { use FindBin; chdir($FindBin::Bin); } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
17 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
18 use lib 'lib'; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
19 use Test::Nginx; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
20 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
21 ############################################################################### |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
22 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
25 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http/) |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
27 ->write_file_expand('nginx.conf', <<'EOF'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
28 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
29 %%TEST_GLOBALS%% |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
30 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
31 daemon off; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
32 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
33 events { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
34 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
35 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
36 http { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
37 %%TEST_GLOBALS_HTTP%% |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
38 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
39 js_include test.js; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
40 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
41 server { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
42 listen 127.0.0.1:8080; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
43 server_name localhost; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
44 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
45 location /to_string { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
46 js_content to_string; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
47 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
48 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
49 location /define_prop { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
50 js_content define_prop; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
51 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
52 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
53 location /in_operator { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
54 js_content in_operator; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
55 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
56 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
57 location /redefine_bind { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
58 js_content redefine_bind; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
59 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
60 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
61 location /redefine_proxy { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
62 js_content redefine_proxy; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
63 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
64 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
65 location /redefine_proto { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
66 js_content redefine_proto; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
67 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
68 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
69 location /get_own_prop_descs { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
70 js_content get_own_prop_descs; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
71 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
72 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
73 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
74 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
75 EOF |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
76 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
77 $t->write_file('test.js', <<EOF); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
78 function to_string(r) { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
79 r.return(200, r.toString()); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
80 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
81 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
82 function define_prop(r) { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
83 Object.defineProperty(r.headersOut, 'Foo', {value:'bar'}); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
84 r.return(200); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
85 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
86 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
87 function in_operator(r) { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
88 r.return(200, ['Foo', 'Bar'].map(v=>v in r.headersIn) |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
89 .toString() === 'true,false'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
90 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
91 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
92 function redefine_bind(r) { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
93 r.return = r.return.bind(r, 200); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
94 r.return('redefine_bind'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
95 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
96 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
97 function redefine_proxy(r) { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
98 r.return_orig = r.return; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
99 r.return = function (body) { this.return_orig(200, body);} |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
100 r.return('redefine_proxy'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
101 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
102 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
103 function redefine_proto(r) { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
104 r[0] = 'a'; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
105 r[1] = 'b'; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
106 r.length = 2; |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
107 Object.setPrototypeOf(r, Array.prototype); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
108 r.return(200, r.join('|')); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
109 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
110 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
111 function get_own_prop_descs(r) { |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
112 r.return(200, |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
113 Object.getOwnPropertyDescriptors(r)['log'].value === r.log); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
114 } |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
115 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
116 EOF |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
117 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
118 $t->try_run('no njs request object')->plan(7); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
119 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
120 ############################################################################### |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
121 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
122 like(http_get('/to_string'), qr/\[object Request\]/, 'toString'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
123 like(http_get('/define_prop'), qr/Foo: bar/, 'define_prop'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
124 like(http( |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
125 'GET /in_operator HTTP/1.0' . CRLF |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
126 . 'Foo: foo' . CRLF |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
127 . 'Host: localhost' . CRLF . CRLF |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
128 ), qr/true/, 'in_operator'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
129 like(http_get('/redefine_bind'), qr/redefine_bind/, 'redefine_bind'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
130 like(http_get('/redefine_proxy'), qr/redefine_proxy/, 'redefine_proxy'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
131 like(http_get('/redefine_proto'), qr/a|b/, 'redefine_proto'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
132 like(http_get('/get_own_prop_descs'), qr/true/, 'get_own_prop_descs'); |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
133 |
9e5d38da7651
Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff
changeset
|
134 ############################################################################### |