details: https://github.com/nginx/njs/commit/b6fd8ebc8b5bdc36ba1147cfd51bfedc72fc6a3b branches: master commit: b6fd8ebc8b5bdc36ba1147cfd51bfedc72fc6a3b user: Dmitry Volyntsev <xei...@nginx.com> date: Tue, 19 Aug 2025 17:16:22 -0700 description: Tests: added TypedArray test for js_filter in stream.
--- nginx/t/stream_js_buffer.t | 77 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/nginx/t/stream_js_buffer.t b/nginx/t/stream_js_buffer.t index cc960136..be6569f2 100644 --- a/nginx/t/stream_js_buffer.t +++ b/nginx/t/stream_js_buffer.t @@ -91,6 +91,12 @@ stream { js_filter test.header_inject; proxy_pass 127.0.0.1:8080; } + + server { + listen 127.0.0.1:8086; + js_filter test.typed_array_send; + proxy_pass 127.0.0.1:8090; + } } EOF @@ -150,12 +156,26 @@ $t->write_file('test.js', <<EOF); }); } + function typed_array_send(s) { + s.on('upstream', function (data, flags) { + var buf = new Uint8Array([72, 101, 108, 108, 111]); + var view1 = buf.subarray(1, 4); + var view2 = buf.subarray(2); + + s.sendUpstream(view1); + s.sendUpstream(view2); + s.off('upstream'); + }); + } + export default {njs: test_njs, type, binary_var, cb_mismatch, cb_mismatch2, - header_inject}; + header_inject, typed_array_send}; EOF -$t->try_run('no njs ngx')->plan(5); +$t->run_daemon(\&stream_daemon, port(8090)); +$t->try_run('no njs ngx')->plan(6); +$t->waitforsocket('127.0.0.1:' . port(8090)); ############################################################################### @@ -167,6 +187,9 @@ stream('127.0.0.1:' . port(8084))->io('x'); like(http_get('/p/return'), qr/RETURN:foo/, 'injected header'); +is(stream('127.0.0.1:' . port(8086))->io('x', length => 6), 'ellllo', + 'typed array send'); + $t->stop(); ok(index($t->read_file('error.log'), 'cb_mismatch:mixing string and buffer') @@ -175,3 +198,53 @@ ok(index($t->read_file('error.log'), 'cb_mismatch2:mixing string and buffer') > 0, 'cb mismatch'); ############################################################################### + +sub stream_daemon { + my $server = IO::Socket::INET->new( + Proto => 'tcp', + LocalAddr => '127.0.0.1:' . port(8090), + Listen => 5, + Reuse => 1 + ) + or die "Can't create listening socket: $!\n"; + + local $SIG{PIPE} = 'IGNORE'; + + while (my $client = $server->accept()) { + $client->autoflush(1); + + log2c("(new connection $client)"); + + while (1) { + my $bytes_read = $client->sysread(my $buffer, 65536); + + if (!defined $bytes_read) { + log2c("Read error from $client: $!"); + last; + + } elsif ($bytes_read == 0) { + log2c("Client $client disconnected"); + last; + } + + log2i("$client $buffer"); + + my $bytes_written = $client->syswrite($buffer); + + if (!defined $bytes_written || $bytes_written != length($buffer)) { + log2c("Write error to $client: $!"); + last; + } + + log2o("$client $buffer"); + } + + close $client; + } +} + +sub log2i { Test::Nginx::log_core('|| <<', @_); } +sub log2o { Test::Nginx::log_core('|| >>', @_); } +sub log2c { Test::Nginx::log_core('||', @_); } + +############################################################################### _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel