annotate js_object.t @ 1606:e4e0695552ed

Tests: fixed stream_proxy_ssl_conf_command.t. The stream_proxy_ssl_conf_command.t test used stream return module to return the response. Since this ignores actual request, but the perl test code used http_get(). This might result in the request being sent after the response is returned and the connection closed by the server, resulting in RST being generated and no response seen by the client at all. Fix is to use "stream(...)->read()" instead of http_get(), so no request is sent at all, eliminating possibility of RST being generated.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 10 Nov 2020 05:03:29 +0300
parents 9e5d38da7651
children bc0990ea2e5b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 /njs {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
46 js_content test_njs;
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 /to_string {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
50 js_content to_string;
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 /define_prop {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
54 js_content define_prop;
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 /in_operator {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
58 js_content in_operator;
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_bind {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
62 js_content redefine_bind;
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_proxy {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
66 js_content redefine_proxy;
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 /redefine_proto {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
70 js_content redefine_proto;
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 location /get_own_prop_descs {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
74 js_content get_own_prop_descs;
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
75 }
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 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
78
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
79 EOF
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 $t->write_file('test.js', <<EOF);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
82 function test_njs(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
83 r.return(200, njs.version);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
84 }
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 function to_string(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
87 r.return(200, r.toString());
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
88 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
89
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
90 function define_prop(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
91 Object.defineProperty(r.headersOut, 'Foo', {value:'bar'});
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
92 r.return(200);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
93 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
94
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
95 function in_operator(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
96 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
97 .toString() === 'true,false');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
98 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
99
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
100 function redefine_bind(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
101 r.return = r.return.bind(r, 200);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
102 r.return('redefine_bind');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
103 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
104
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
105 function redefine_proxy(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
106 r.return_orig = r.return;
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
107 r.return = function (body) { this.return_orig(200, body);}
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
108 r.return('redefine_proxy');
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 redefine_proto(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
112 r[0] = 'a';
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
113 r[1] = 'b';
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
114 r.length = 2;
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
115 Object.setPrototypeOf(r, Array.prototype);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
116 r.return(200, r.join('|'));
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
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
119 function get_own_prop_descs(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
120 r.return(200,
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
121 Object.getOwnPropertyDescriptors(r)['log'].value === r.log);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
122 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
123
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
124 EOF
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
125
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
126 $t->try_run('no njs request object')->plan(7);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
127
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
128 ###############################################################################
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
129
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
130 TODO: {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
131 local $TODO = 'not yet'
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
132 unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.4.0';
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
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
135 like(http_get('/to_string'), qr/\[object Request\]/, 'toString');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
136 like(http_get('/define_prop'), qr/Foo: bar/, 'define_prop');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
137 like(http(
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
138 'GET /in_operator HTTP/1.0' . CRLF
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
139 . 'Foo: foo' . CRLF
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
140 . 'Host: localhost' . CRLF . CRLF
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
141 ), qr/true/, 'in_operator');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
142 like(http_get('/redefine_bind'), qr/redefine_bind/, 'redefine_bind');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
143 like(http_get('/redefine_proxy'), qr/redefine_proxy/, 'redefine_proxy');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
144 like(http_get('/redefine_proto'), qr/a|b/, 'redefine_proto');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
145 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
146
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
147 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
148
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
149 ###############################################################################