1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
#!/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 {
}
http {
%%TEST_GLOBALS_HTTP%%
js_import main.js;
server {
listen 127.0.0.1:8080;
server_name localhost;
location /engine {
js_content main.engine;
}
}
}
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 = '';
var acc, pup, fup, fdown;
function access(s) {
acc = g1.a;
s.allow();
}
function preread(s) {
s.on('upload', function (data) {
pup = g1.b[1];
if (data.length > 0) {
s.done();
}
});
}
function filter(s) {
s.on('upload', function(data, flags) {
fup = g1.c.prop[0].a;
s.send(data);
});
s.on('download', function(data, flags) {
fdown = g1.b[3];
s.send(data);
if (flags.last) {
s.send(`\${acc}\${pup}\${fup}\${fdown}`, flags);
s.off('download');
}
});
}
export default {access, preread, filter};
EOF
$t->write_file('main.js', <<EOF);
function engine(r) {
r.return(200, njs.engine);
}
export default {engine, 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(skip_all => 'not yet') if http_get('/engine') =~ /QuickJS$/m;
$t->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'), 'x1234', 'filter chain');
###############################################################################
|