Mercurial > hg > nginx-tests
view stream_proxy_half_close.t @ 1933:9bafe7cddd3c
Tests: improved QUIC key update tests with old keys.
On unsuccessful protection removal, it is now retried with old keys.
Otherwise, old keys are removed to ensure they're no longer in use.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 21 Aug 2023 17:26:47 +0400 |
parents | 8bdf548487f6 |
children | 2a0a6035a1af |
line wrap: on
line source
#!/usr/bin/perl # (C) Sergey Kandaurov # (C) Nginx, Inc. # Tests for stream proxy_half_close directive. ############################################################################### use warnings; use strict; use Test::More; use IO::Select; BEGIN { use FindBin; chdir($FindBin::Bin); } use lib 'lib'; use Test::Nginx; ############################################################################### select STDERR; $| = 1; select STDOUT; $| = 1; my $t = Test::Nginx->new()->has(qw/stream/); $t->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% daemon off; events { } stream { %%TEST_GLOBALS_STREAM%% server { listen 127.0.0.1:8080; proxy_pass 127.0.0.1:8081; proxy_half_close on; } } EOF $t->try_run('no proxy_half_close')->plan(2); ############################################################################### my ($s, $u) = pair(8080, 8081); shutdown($u, 1); is(proxy($s, $u, 'SEE'), 'SEE', 'half close upstream'); ($s, $u) = pair(8080, 8081); shutdown($s, 1); is(proxy($u, $s, 'SEE'), 'SEE', 'half close client'); ############################################################################### sub pair { my ($server, $backend) = @_; my $listen = IO::Socket::INET->new( LocalHost => '127.0.0.1:' . port($backend), Listen => 5, Reuse => 1, ) or die "Can't listen on $server: $!\n"; my $connect = IO::Socket::INET->new( Proto => 'tcp', PeerHost => '127.0.0.1:' . port($server), ) or die "Can't connect to $server: $!\n"; my $accept = $listen->accept() if IO::Select->new($listen)->can_read(3); return $connect, $accept; } sub proxy { my ($from, $to, $msg) = @_; proxy_from($from, $msg); return proxy_to($to); } sub proxy_from { my ($s, $msg) = @_; local $SIG{PIPE} = 'IGNORE'; while (IO::Select->new($s)->can_write(5)) { my $n = $s->syswrite($msg); log_out(substr($msg, 0, $n)); last unless $n; $msg = substr($msg, $n); last unless length $msg; } } sub proxy_to { my ($s) = @_; my $buf; $s->sysread($buf, 1024) if IO::Select->new($s)->can_read(5); log_in($buf); return $buf; } ###############################################################################