[njs] Tests: added console test for stream module.

Dmitry Volyntsev xeioex at nginx.com
Thu Nov 16 00:24:55 UTC 2023


details:   https://hg.nginx.org/njs/rev/e4105b65d105
branches:  
changeset: 2234:e4105b65d105
user:      Dmitry Volyntsev <xeioex at nginx.com>
date:      Wed Nov 15 15:08:18 2023 -0800
description:
Tests: added console test for stream module.

diffstat:

 nginx/t/stream_js_console.t |  142 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 142 insertions(+), 0 deletions(-)

diffs (146 lines):

diff -r 0213cb43bfce -r e4105b65d105 nginx/t/stream_js_console.t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nginx/t/stream_js_console.t	Wed Nov 15 15:08:18 2023 -0800
@@ -0,0 +1,142 @@
+#!/usr/bin/perl
+
+# (C) Dmitry Volyntsev
+# (C) Nginx, Inc.
+
+# Tests for stream njs module, console object.
+
+###############################################################################
+
+use warnings;
+use strict;
+
+use Test::More;
+use Socket qw/ CRLF /;
+
+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/)
+	->write_file_expand('nginx.conf', <<'EOF');
+
+%%TEST_GLOBALS%%
+
+daemon off;
+
+events {
+}
+
+stream {
+    %%TEST_GLOBALS_STREAM%%
+
+    js_import test.js;
+
+
+    server {
+        listen       127.0.0.1:8080;
+
+        js_preread test.log;
+
+        proxy_pass 127.0.0.1:8090;
+    }
+
+    server {
+        listen       127.0.0.1:8081;
+
+        js_preread test.timer;
+
+        proxy_pass 127.0.0.1:8090;
+    }
+}
+
+EOF
+
+$t->write_file('test.js', <<EOF);
+    function log(s) {
+        s.on('upload', function (data) {
+            if (data.length > 0) {
+                s.off('upload');
+                data = Buffer.from(data, 'base64');
+                const object = JSON.parse(data);
+                console.log(object);
+                s.allow();
+            }
+        });
+    }
+
+    function timer(s) {
+        s.on('upload', function (data) {
+            if (data.length > 0) {
+                s.off('upload');
+                console.time('foo');
+                setTimeout(function() {
+                    console.timeEnd('foo');
+                    s.allow();
+                }, 7);
+            }
+        });
+    }
+
+    export default { log, timer };
+EOF
+
+$t->run_daemon(\&stream_daemon, port(8090));
+$t->try_run('no njs console')->plan(4);
+$t->waitforsocket('127.0.0.1:' . port(8090));
+
+###############################################################################
+
+is(stream('127.0.0.1:' . port(8080))->io('eyJhIjpbIkIiLCJDIl19'),
+	'eyJhIjpbIkIiLCJDIl19', 'log test');
+is(stream('127.0.0.1:' . port(8081))->io('timer'), 'timer', 'timer test');
+
+$t->stop();
+
+like($t->read_file('error.log'), qr/\[info\].*js: \{a:\['B','C'\]\}/,
+	'console.log with object');
+like($t->read_file('error.log'), qr/\[info\].*js: foo: \d+\.\d\d\d\d\d\dms/,
+	'console.time foo');
+
+###############################################################################
+
+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)");
+
+		$client->sysread(my $buffer, 65536) or next;
+
+		log2i("$client $buffer");
+
+		log2o("$client $buffer");
+
+		$client->syswrite($buffer);
+
+		close $client;
+	}
+}
+
+sub log2i { Test::Nginx::log_core('|| <<', @_); }
+sub log2o { Test::Nginx::log_core('|| >>', @_); }
+sub log2c { Test::Nginx::log_core('||', @_); }
+
+###############################################################################


More information about the nginx-devel mailing list