80-test_cmp_http.t: Improve the way the test server is launched and killed
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>
Mon, 7 Jun 2021 09:50:43 +0000 (11:50 +0200)
committerDr. David von Oheimb <dev@ddvo.net>
Wed, 9 Jun 2021 12:03:16 +0000 (14:03 +0200)
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15642)

apps/include/s_apps.h
apps/lib/http_server.c
apps/lib/s_socket.c
test/recipes/79-test_http.t
test/recipes/80-test_cmp_http.t

index 18dbd50d31df7421c2e76811b6e2a3b6ff9fdc10..d610df40be3feb750a53bbddb8040d2e9da1c1a4 100644 (file)
@@ -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);
index 1858d04ccb56dda2c01a007008126dc2737acfb3..03faac7707b73ffcef5feee49b95e9eb213b3346 100644 (file)
@@ -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;
     }
index fbe913e37a78afdf4ec81142bd23cdb37e6755dd..36dbe615d2f80ba15411c3da03d9f9626fcb2ae3 100644 (file)
@@ -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;
index b5bb74393aa6d0996cfb338e8321da418964c7d5..939e7fc09937119228f33bb47812c3a32e03e014 100644 (file)
@@ -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")])));
index bc23347ad738e2e9d6abfdb6702c6f3a09820f00..10f2b84c68b0e711444b5f4e4950d4e0f68b245a 100644 (file)
@@ -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);
 }