annotate stream_js_object.t @ 1571:1b4ceab9cb1c

Tests: fixed ssl_certificate.t with LibreSSL client. Net::SSLeay::connect() that manages TLS handshake could return unexpected error when receiving server alert, as seen in server certificate tests if it could not been selected. Typically, it returns the expected error -1, but with certain libssl implementations it can be 0, as explained below. The error is propagated from libssl's SSL_connect(), which is usually -1. In modern OpenSSL versions, it is the default error code used in the state machine returned when something went wrong with parsing TLS message header. In versions up to OpenSSL 1.0.2, with SSLv23_method() used by default, -1 is the only error code in the ssl_connect() method implementation which is used as well if receiving alert while parsing ServerHello. BoringSSL also seems to return -1. But it is not so with LibreSSL that returns zero. Previously, tests failed with client built with LibreSSL with SSLv3 removed. Here, the error is propagated directly from ssl_read_bytes() method, which is always implemented as ssl3_read_bytes() in all TLS methods. It could be also seen with OpenSSL up to 1.0.2 with non-default methods explicitly set.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 29 May 2020 23:10:20 +0300
parents 9e5d38da7651
children f3ba4c74de31
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 stream njs module, stream session 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
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
16
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
17 use lib 'lib';
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
19 use Test::Nginx::Stream qw/ stream /;
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 stream stream_return/)
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 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
50
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
51 stream {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
52 js_set $test test;
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
53
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
54 js_include test.js;
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 server {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
57 listen 127.0.0.1:8081;
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
58 return $test$status;
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
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
62 EOF
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 $t->write_file('test.js', <<EOF);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
65 function test_njs(r) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
66 r.return(200, njs.version);
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 function to_string(s) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
70 return s.toString() === '[object Stream Session]';
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 function define_prop(s) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
74 Object.defineProperty(s.variables, 'status', {value:400});
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
75 return s.variables.status == 400;
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 function in_operator(s) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
79 return ['status', 'unknown']
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
80 .map(v=>v in s.variables)
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
81 .toString() === 'true,false';
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
82 }
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
83
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
84 function redefine_proto(s) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
85 s[0] = 'a';
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
86 s[1] = 'b';
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
87 s.length = 2;
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
88 Object.setPrototypeOf(s, Array.prototype);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
89 return s.join('|') === 'a|b';
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 get_own_prop_descs(s) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
93 return Object.getOwnPropertyDescriptors(s)['on'].value === s.on;
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
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
96 function test(s) {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
97 return [ to_string,
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
98 define_prop,
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
99 in_operator,
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
100 redefine_proto,
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
101 get_own_prop_descs,
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
102 ].every(v=>v(s));
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 EOF
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
106
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
107 $t->try_run('no njs stream session object')->plan(1);
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
108
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 TODO: {
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
112 local $TODO = 'not yet'
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
113 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
114
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
115 is(stream('127.0.0.1:' . port(8081))->read(), 'true400', 'var set');
9e5d38da7651 Tests: added object js tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
116
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 ###############################################################################