Mercurial > hg > nginx-tests
view stream_js_preload_object.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 | c67b390cb9ef |
children |
line wrap: on
line source
#!/usr/bin/perl # (C) Vadim Zhestikov # (C) Nginx, Inc. # Tests for stream njs module, js_preload_object directive. ############################################################################### 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_preload_object g1 from g.json; js_set $test foo.bar.p; js_import lib.js; js_import foo from ./main.js; server { listen 127.0.0.1:8081; return $test; } server { listen 127.0.0.1:8082; js_access lib.access; js_preread lib.preread; js_filter lib.filter; proxy_pass 127.0.0.1:8083; } server { listen 127.0.0.1:8083; return "x"; } } EOF $t->write_file('lib.js', <<EOF); var res = ''; function access(s) { res += g1.a; s.allow(); } function preread(s) { s.on('upload', function (data) { res += g1.b[1]; if (res.length >= 3) { s.done(); } }); } function filter(s) { s.on('upload', function(data, flags) { s.send(data); res += g1.c.prop[0].a; }); s.on('download', function(data, flags) { if (!flags.last) { res += g1.b[3]; s.send(data); } else { res += g1.b[4]; s.send(res, {last:1}); s.off('download'); } }); } export default {access, preread, filter}; EOF $t->write_file('main.js', <<EOF); export default {bar: {p(s) {return g1.b[2]}}}; EOF $t->write_file('g.json', '{"a":1, "b":[1,2,"element",4,5], "c":{"prop":[{"a":3}]}}'); $t->try_run('no js_preload_object available')->plan(2); ############################################################################### is(stream('127.0.0.1:' . port(8081))->read(), 'element', 'foo.bar.p'); is(stream('127.0.0.1:' . port(8082))->io('0'), 'x122345', 'lib.access'); ###############################################################################