diff options
author | Dr. David von Oheimb <David.von.Oheimb@siemens.com> | 2022-12-13 17:44:27 +0100 |
---|---|---|
committer | Dr. David von Oheimb <dev@ddvo.net> | 2023-03-25 10:31:25 +0100 |
commit | 1738eb212bacb71d66db25e1a38ce2d420b72e35 (patch) | |
tree | b2335f609477806865d1ba2dce194d940b8d47e2 | |
parent | 4b0c27d44514abb4ad2bb1153db96f106910fc04 (diff) |
80-test_cmp_http.t: fix server port and confusion client vs. server config
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com>
(Merged from https://github.com/openssl/openssl/pull/19947)
-rw-r--r-- | test/recipes/80-test_cmp_http.t | 68 | ||||
-rw-r--r-- | test/recipes/80-test_cmp_http_data/Mock/test.cnf | 5 |
2 files changed, 45 insertions, 28 deletions
diff --git a/test/recipes/80-test_cmp_http.t b/test/recipes/80-test_cmp_http.t index 1d4ae8b3b2..5fbdb930c9 100644 --- a/test/recipes/80-test_cmp_http.t +++ b/test/recipes/80-test_cmp_http.t @@ -49,7 +49,7 @@ my $no_proxy = $ENV{no_proxy} // $ENV{NO_PROXY}; my @app = qw(openssl cmp); -# the CMP server configuration consists of: +# the server-dependent client configuration consists of: my $ca_dn; # The CA's Distinguished Name my $server_dn; # The server's Distinguished Name my $server_host;# The server's hostname or IP address @@ -63,6 +63,8 @@ my $pbm_ref; # The reference for PBM my $pbm_secret; # The secret for PBM my $column; # The column number of the expected result my $sleep = 0; # The time to sleep between two requests + +# the dynamic server info: my $server_fh; # Server file handle sub subst_env { @@ -72,8 +74,10 @@ sub subst_env { return $val; } -# The local $server_name variables below are among others taken as the name of a -# sub-directory with server-specific certs etc. and CA-specific config section. +# The local $server_name variables in the subroutines below are used +# both as the name of a sub-directory with server-specific credentials +# and as the name of a server-dependent client config section. + sub load_config { my $server_name = shift; my $section = shift; @@ -86,10 +90,11 @@ sub load_config { } elsif (m/\[\s*.*?\s*\]/) { $active = 0; } elsif ($active) { + # if there are multiple entries with same key, the last one prevails $ca_dn = subst_env($1) if m/^\s*ca_dn\s*=\s*(.*)?\s*$/; $server_dn = subst_env($1) if m/^\s*server_dn\s*=\s*(.*)?\s*$/; $server_host = subst_env($1) if m/^\s*server_host\s*=\s*(\S*)?\s*(\#.*)?$/; - $server_port = subst_env($1) if m/^\s*server_port\s*=\s*(.*)?\s*$/; + $server_port = subst_env($1) if m/^\s*server_port\s*=\s*(\S*)?\s*(\#.*)?$/; $server_tls = subst_env($1) if m/^\s*server_tls\s*=\s*(.*)?\s*$/; $server_path = subst_env($1) if m/^\s*server_path\s*=\s*(.*)?\s*$/; $server_cert = subst_env($1) if m/^\s*server_cert\s*=\s*(.*)?\s*$/; @@ -102,7 +107,7 @@ sub load_config { } } close CH; - die "Cannot find all CMP server config values in $test_config section [$section]\n" + die "Cannot find all server-dependent config values in $test_config section [$section]\n" if !defined $ca_dn || !defined $server_dn || !defined $server_host || !defined $server_port || !defined $server_tls @@ -110,6 +115,8 @@ sub load_config { || !defined $kur_port || !defined $pbm_port || !defined $pbm_ref || !defined $pbm_secret || !defined $column || !defined $sleep; + die "Invalid server_port number in $test_config section [$section]: $server_port" + unless $server_port =~ m/^\d+$/; $server_dn = $server_dn // $ca_dn; } @@ -144,7 +151,9 @@ sub test_cmp_http { my $quote_spc_empty = sub { $_ eq "" ? '""' : $_ =~ m/ / ? '"'.$_.'"' : $_ }; my $invocation = cmdstr($cmd, display => 1); print $faillog "$server_name $aspect \"$title\" ($i/$n)". - " expected=$expected_result actual=$actual_result\n"; + " expected=$expected_result (". + ($expected_result ? "success" : "failure").")". + " actual=$actual_result\n"; print $faillog "$invocation\n\n"; } sleep($sleep) if $expected_result == 1; @@ -188,14 +197,14 @@ indir data_dir() => sub { my $pid; if ($server_name eq "Mock") { indir "Mock" => sub { - $pid = start_mock_server(""); - die "Cannot start or find the started CMP mock server" unless $pid; + $pid = start_server($server_name, ""); + next unless $pid; } } foreach my $aspect (@all_aspects) { $aspect = chop_dblquot($aspect); if ($server_name eq "Mock" && $aspect eq "certstatus") { - print "Skipping certstatus check as not supported by mock server\n"; + print "Skipping certstatus check as not supported by $server_name server\n"; next; } load_config($server_name, $aspect); # update with any aspect-specific settings @@ -204,8 +213,8 @@ indir data_dir() => sub { test_cmp_http_aspect($server_name, $aspect, $tests); }; }; - stop_mock_server($pid) if $pid; - ok(1, "mock server has terminated"); + stop_server($server_name, $pid) if $pid; + ok(1, "$server_name server has terminated"); } } }; @@ -273,19 +282,25 @@ sub load_tests { return \@result; } -sub start_mock_server { - my $args = $_[0]; # optional further CLI arguments +sub start_server { + my $server_name = shift; + my $args = shift; # optional further CLI arguments my $cmd = cmdstr(app([@app, '-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+$/; - my $pid = open($server_fh, "$cmd|") or die "Trying to $cmd"; - print "mock server pid=$pid\n"; + print "Launching $server_name server: $cmd\n"; + my $pid = open($server_fh, "$cmd|"); + unless ($pid) { + print "Error launching $cmd, cannot obtain $server_name server PID"; + return 0; + } + print "$server_name server PID=$pid\n"; + if ($server_port == 0) { - # Find out the actual server port + # Find out the actual server port and possibly different PID + $pid = 0; while (<$server_fh>) { - print "Server output: $_"; + print "$server_name server output: $_"; next if m/using section/; s/\R$//; # Better chomp ($server_port, $pid) = ($1, $2) if /^ACCEPT\s.*:(\d+) PID=(\d+)$/; @@ -293,17 +308,20 @@ sub start_mock_server { } } unless ($server_port > 0) { - stop_mock_server($pid); + stop_server($server_name, $pid); + print "Cannot get expected output from the $server_name server"; return 0; } - $kur_port = $pbm_port = $server_port; - $server_tls = $server_port if $server_tls > 0; + $kur_port = $server_port if $kur_port eq "\$server_port"; + $pbm_port = $server_port if $pbm_port eq "\$server_port"; + $server_tls = $server_port if $server_tls; return $pid; } -sub stop_mock_server { - my $pid = $_[0]; - print "Killing mock server with pid=$pid\n"; +sub stop_server { + my $server_name = shift; + my $pid = shift; + print "Killing $server_name server with PID=$pid\n"; kill('KILL', $pid); waitpid($pid, 0); } diff --git a/test/recipes/80-test_cmp_http_data/Mock/test.cnf b/test/recipes/80-test_cmp_http_data/Mock/test.cnf index 47098997e3..3506029797 100644 --- a/test/recipes/80-test_cmp_http_data/Mock/test.cnf +++ b/test/recipes/80-test_cmp_http_data/Mock/test.cnf @@ -12,13 +12,12 @@ policies = certificatePolicies #policy_oids_critical = 1 #verbosity = 7 -############################# server configurations +############################# server-dependent configurations [Mock] # the built-in OpenSSL CMP mock server # no_check_time = 1 server_host = 127.0.0.1 # localhost -# server_port = 0 means that the port is determined by the server -server_port = 0 +server_port = 0 # 0 means that the port is determined by the server server_tls = $server_port server_cert = server.crt server = $server_host:$server_port |