view stream_js_object.t @ 1826:1f125771f1a1

Tests: adapted session reuse tests to work with TLSv1.3. In TLSv1.3, session tickets are sent after the handshake, and saving session right after the handshake is not going to work. To properly test session resumption, sessions are now saved after some data exchange.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 21 Mar 2023 02:58:02 +0300
parents 18ac4d9e5a2a
children
line wrap: on
line source

#!/usr/bin/perl

# (C) Dmitry Volyntsev
# (C) Nginx, Inc.

# Tests for stream njs module, stream session object.

###############################################################################

use warnings;
use strict;

use Test::More;

BEGIN { use FindBin; chdir($FindBin::Bin); }

use lib 'lib';
use Test::Nginx;
use Test::Nginx::Stream qw/ stream /;

###############################################################################

select STDERR; $| = 1;
select STDOUT; $| = 1;

my $t = Test::Nginx->new()->has(qw/stream stream_return/)
	->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

stream {
    %%TEST_GLOBALS_STREAM%%

    js_set $test     test.test;

    js_import test.js;

    server {
        listen  127.0.0.1:8081;
        return  $test$status;
    }
}

EOF

$t->write_file('test.js', <<EOF);
    function to_string(s) {
        return s.toString() === '[object Stream Session]';
    }

    function define_prop(s) {
        Object.defineProperty(s.variables, 'status', {value:400});
        return s.variables.status == 400;
    }

    function in_operator(s) {
        return ['status', 'unknown']
               .map(v=>v in s.variables)
               .toString() === 'true,false';
    }

    function redefine_proto(s) {
        s[0] = 'a';
        s[1] = 'b';
        s.length = 2;
        Object.setPrototypeOf(s, Array.prototype);
        return s.join('|') === 'a|b';
    }

    function get_own_prop_descs(s) {
        return Object.getOwnPropertyDescriptors(s)['on'].value === s.on;
    }

    function test(s) {
        return [ to_string,
                 define_prop,
                 in_operator,
                 redefine_proto,
                 get_own_prop_descs,
               ].every(v=>v(s));
    }

    export default {test};

EOF

$t->try_run('no njs stream session object')->plan(1);

###############################################################################

is(stream('127.0.0.1:' . port(8081))->read(), 'true400', 'var set');

###############################################################################