mirror of https://github.com/openssl/openssl
80-test_cmp_http.t: Improve the way the test server is launched and killed
Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/15642)
This commit is contained in:
parent
ee1d1db824
commit
d63053bbdf
|
@ -16,7 +16,7 @@
|
|||
#define PROTOCOL "tcp"
|
||||
|
||||
typedef int (*do_server_cb)(int s, int stype, int prot, unsigned char *context);
|
||||
int report_server_accept(BIO *out, int asock, int with_address);
|
||||
int report_server_accept(BIO *out, int asock, int with_address, int with_pid);
|
||||
int do_server(int *accept_sock, const char *host, const char *port,
|
||||
int family, int type, int protocol, do_server_cb cb,
|
||||
unsigned char *context, int naccept, BIO *bio_s_out);
|
||||
|
|
|
@ -241,7 +241,7 @@ BIO *http_server_init_bio(const char *prog, const char *port)
|
|||
|
||||
/* Report back what address and port are used */
|
||||
BIO_get_fd(acbio, &asock);
|
||||
if (!report_server_accept(bio_out, asock, 1)) {
|
||||
if (!report_server_accept(bio_out, asock, 1, 1)) {
|
||||
log_message(prog, LOG_ERR, "Error printing ACCEPT string");
|
||||
goto err;
|
||||
}
|
||||
|
|
|
@ -191,9 +191,9 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int report_server_accept(BIO *out, int asock, int with_address)
|
||||
int report_server_accept(BIO *out, int asock, int with_address, int with_pid)
|
||||
{
|
||||
int success = 0;
|
||||
int success = 1;
|
||||
|
||||
if (BIO_printf(out, "ACCEPT") <= 0)
|
||||
return 0;
|
||||
|
@ -205,22 +205,23 @@ int report_server_accept(BIO *out, int asock, int with_address)
|
|||
if ((info.addr = BIO_ADDR_new()) != NULL
|
||||
&& BIO_sock_info(asock, BIO_SOCK_INFO_ADDRESS, &info)
|
||||
&& (hostname = BIO_ADDR_hostname_string(info.addr, 1)) != NULL
|
||||
&& (service = BIO_ADDR_service_string(info.addr, 1)) != NULL
|
||||
&& BIO_printf(out,
|
||||
strchr(hostname, ':') == NULL
|
||||
? /* IPv4 */ " %s:%s\n"
|
||||
: /* IPv6 */ " [%s]:%s\n",
|
||||
hostname, service) > 0)
|
||||
success = 1;
|
||||
else
|
||||
&& (service = BIO_ADDR_service_string(info.addr, 1)) != NULL) {
|
||||
success = BIO_printf(out,
|
||||
strchr(hostname, ':') == NULL
|
||||
? /* IPv4 */ " %s:%s"
|
||||
: /* IPv6 */ " [%s]:%s",
|
||||
hostname, service) > 0;
|
||||
} else {
|
||||
(void)BIO_printf(out, "unknown:error\n");
|
||||
|
||||
success = 0;
|
||||
}
|
||||
OPENSSL_free(hostname);
|
||||
OPENSSL_free(service);
|
||||
BIO_ADDR_free(info.addr);
|
||||
} else if (BIO_printf(out, "\n") > 0) {
|
||||
success = 1;
|
||||
}
|
||||
if (with_pid)
|
||||
success = success && BIO_printf(out, " PID=%d", getpid()) > 0;
|
||||
success = success && BIO_printf(out, "\n") > 0;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
return success;
|
||||
|
@ -331,7 +332,7 @@ int do_server(int *accept_sock, const char *host, const char *port,
|
|||
BIO_ADDRINFO_free(res);
|
||||
res = NULL;
|
||||
|
||||
if (!report_server_accept(bio_s_out, asock, sock_port == 0)) {
|
||||
if (!report_server_accept(bio_s_out, asock, sock_port == 0, 0)) {
|
||||
BIO_closesocket(asock);
|
||||
ERR_print_errors(bio_err);
|
||||
goto end;
|
||||
|
|
|
@ -19,8 +19,9 @@ SKIP: {
|
|||
skip "OCSP disabled", 1 if disabled("ocsp");
|
||||
my $cmd = [qw{openssl ocsp -index any -port 0}];
|
||||
my @output = run(app($cmd), capture => 1);
|
||||
ok($output[0] =~ /^ACCEPT (0.0.0.0|\[::\]):(\d+?)$/ && $2 >= 1024,
|
||||
"HTTP server auto-selects and reports local port >= 1024");
|
||||
ok($output[0] =~ /^ACCEPT (0.0.0.0|\[::\]):(\d+?) PID=(\d+)$/
|
||||
&& $2 >= 1024 && $3 > 0,
|
||||
"HTTP server auto-selects and reports local port >= 1024 and pid > 0");
|
||||
}
|
||||
|
||||
ok(run(test(["http_test", srctop_file("test", "certs", "ca-cert.pem")])));
|
||||
|
|
|
@ -12,7 +12,7 @@ use strict;
|
|||
use warnings;
|
||||
|
||||
use POSIX;
|
||||
use OpenSSL::Test qw/:DEFAULT data_file data_dir srctop_dir bldtop_dir result_dir/;
|
||||
use OpenSSL::Test qw/:DEFAULT cmdstr data_file data_dir srctop_dir bldtop_dir result_dir/;
|
||||
use OpenSSL::Test::Utils;
|
||||
|
||||
BEGIN {
|
||||
|
@ -266,10 +266,8 @@ sub load_tests {
|
|||
|
||||
sub start_mock_server {
|
||||
my $args = $_[0]; # optional further CLI arguments
|
||||
my $dir = bldtop_dir("");
|
||||
local $ENV{LD_LIBRARY_PATH} = $dir;
|
||||
local $ENV{DYLD_LIBRARY_PATH} = $dir;
|
||||
my $cmd = bldtop_dir($app) . " -config server.cnf $args";
|
||||
my $cmd = cmdstr(app(['openssl', 'cmp', '-config', 'server.cnf',
|
||||
$args ? $args : ()]), display => 1);
|
||||
print "Current directory is ".getcwd()."\n";
|
||||
print "Launching mock server: $cmd\n";
|
||||
die "Invalid port: $server_port" unless $server_port =~ m/^\d+$/;
|
||||
|
@ -281,7 +279,7 @@ sub start_mock_server {
|
|||
print "Server output: $_";
|
||||
next if m/using section/;
|
||||
s/\R$//; # Better chomp
|
||||
$server_port = $1 if /^ACCEPT\s.*:(\d+)$/;
|
||||
($server_port, $pid) = ($1, $2) if /^ACCEPT\s.*:(\d+) PID=(\d+)$/;
|
||||
last; # Do not loop further to prevent hangs on server misbehavior
|
||||
}
|
||||
}
|
||||
|
@ -296,5 +294,5 @@ sub start_mock_server {
|
|||
sub stop_mock_server {
|
||||
my $pid = $_[0];
|
||||
print "Killing mock server with pid=$pid\n";
|
||||
kill('QUIT', $pid) if $pid;
|
||||
kill('QUIT', $pid);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue