Mercurial > hg > nginx-tests
view memcached_fake.t @ 1964:3cae7b54841e
Tests: fixed hangs with Net::SSLeay with LibreSSL on macOS.
On macOS (as seen on 14.4.1, latest at the moment), Net::SSLeay compiled
with LibreSSL is shipped with the OS (Net::SSLeay 1.88, LibreSSL 3.3.6).
And for some reason mail_ssl_conf_command.t and stream_ssl_conf_command.t
tests hang after the test, waiting indefinitely in reused SSL socket close().
This seems to be an LibreSSL bug in SSL_shutdown() (at least a couple was
fixed in LibreSSL 3.5.0), probably related to session reuse (which do work
in these particular tests due to TLSv1.2 explicitly used for testing).
Still, calling close(SSL_no_shutdown => 1) explicitly is a trivial workaround,
and hence it is implemented.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 06 May 2024 00:01:33 +0300 |
parents | 4442767118e0 |
children |
line wrap: on
line source
#!/usr/bin/perl # (C) Maxim Dounin # Test for memcached backend with fake daemon. ############################################################################### use warnings; use strict; use Test::More; use Socket qw/ CRLF /; 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/http rewrite memcached ssi/)->plan(3) ->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% daemon off; events { } http { %%TEST_GLOBALS_HTTP%% server { listen 127.0.0.1:8080; server_name localhost; location / { set $memcached_key $uri; memcached_pass 127.0.0.1:8081; } location /ssi { default_type text/html; ssi on; } } } EOF $t->write_file('ssi.html', '<!--#include virtual="/" set="blah" -->' . 'blah: <!--#echo var="blah" -->'); $t->run_daemon(\&memcached_fake_daemon); $t->run(); $t->waitforsocket('127.0.0.1:' . port(8081)) or die "Can't start fake memcached"; ############################################################################### like(http_get('/'), qr/SEE-THIS/, 'memcached split trailer'); like(http_get('/ssi.html'), qr/SEE-THIS/, 'memcached ssi var'); like(`grep -F '[error]' ${\($t->testdir())}/error.log`, qr/^$/s, 'no errors'); ############################################################################### sub memcached_fake_daemon { my $server = IO::Socket::INET->new( Proto => 'tcp', LocalAddr => '127.0.0.1:' . port(8081), Listen => 5, Reuse => 1 ) or die "Can't create listening socket: $!\n"; local $SIG{PIPE} = 'IGNORE'; while (my $client = $server->accept()) { $client->autoflush(1); while (<$client>) { last if (/\x0d\x0a$/); } print $client 'VALUE / 0 8' . CRLF; print $client 'SEE-TH'; select(undef, undef, undef, 0.1); print $client 'IS'; select(undef, undef, undef, 0.1); print $client CRLF . 'EN'; select(undef, undef, undef, 0.1); print $client 'D' . CRLF; close $client; } } ###############################################################################