On Sat, Jan 06, 2018 at 09:10:51AM +0900, Michael Paquier wrote:
> On Sat, Jan 6, 2018 at 2:56 AM, Alvaro Herrera <alvhe...@alvh.no-ip.org> 
> wrote:
> Good idea as a whole, but I don't think this is the right approach. As
> we include $(bindir) in PATH when running the prove command, why not
> getting the include path from "pg_config --includedir"?

So, I have been looking at that, and I propose the following
counter-patch which implements this idea by adding a new routine as
TestLib::config_check which is able to check within pg_config.h if a
given regexp matches or not for the installation on which TAP tests are
being run. I have tested with Postgres compiled with both OpenSSL 1.0.1
and 1.0.2, in which case the connection test respectively fails and
passes, causing the test to be correctly handled. This is based on
Peter's patch upthread.
--
Michael
diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm
index 72826d5bad..c49b4336c1 100644
--- a/src/test/perl/TestLib.pm
+++ b/src/test/perl/TestLib.pm
@@ -26,6 +26,7 @@ our @EXPORT = qw(
   slurp_dir
   slurp_file
   append_to_file
+  config_check
   system_or_bail
   system_log
   run_log
@@ -221,6 +222,27 @@ sub append_to_file
        close $fh;
 }
 
+# Check presence of a given regexp within pg_config.h for the installation
+# where tests are running, returning a match status result depending on
+# that.
+sub config_check
+{
+       my ($regexp) = @_;
+       my ($stdout, $stderr);
+       my $result = IPC::Run::run [ 'pg_config', '--includedir' ], '>',
+               \$stdout, '2>', \$stderr;
+
+       print("# Checking for match with expression \"$regexp\" in 
pg_config.h\n");
+
+       die "could not execute pg_config" if $result != 1;
+       chomp($stdout);
+
+       open my $pg_config_h, '<', "$stdout/pg_config.h" or die "$!";
+       my $match = (grep {/^$regexp/} <$pg_config_h>);
+       close $pg_config_h;
+       return $match;
+}
+
 #
 # Test functions
 #
diff --git a/src/test/ssl/t/002_scram.pl b/src/test/ssl/t/002_scram.pl
index 3f425e00f0..73c8f7adf2 100644
--- a/src/test/ssl/t/002_scram.pl
+++ b/src/test/ssl/t/002_scram.pl
@@ -11,6 +11,10 @@ use File::Copy;
 # This is the hostname used to connect to the server.
 my $SERVERHOSTADDR = '127.0.0.1';
 
+# Determine whether build supports tls-server-end-point.
+my $supports_tls_server_end_point =
+       TestLib::config_check("#define HAVE_X509_GET_SIGNATURE_NID 1");
+
 # Allocation of base connection string shared among multiple tests.
 my $common_connstr;
 
@@ -44,10 +48,19 @@ test_connect_ok($common_connstr,
        "SCRAM authentication with tls-unique as channel binding");
 test_connect_ok($common_connstr,
        "scram_channel_binding=''",
-       "SCRAM authentication without channel binding");
-test_connect_ok($common_connstr,
-       "scram_channel_binding=tls-server-end-point",
-       "SCRAM authentication with tls-server-end-point as channel binding");
+                               "SCRAM authentication without channel binding");
+if ($supports_tls_server_end_point)
+{
+       test_connect_ok($common_connstr,
+                                       
"scram_channel_binding=tls-server-end-point",
+                                       "SCRAM authentication with 
tls-server-end-point as channel binding");
+}
+else
+{
+       test_connect_fails($common_connstr,
+                                       
"scram_channel_binding=tls-server-end-point",
+                                       "SCRAM authentication with 
tls-server-end-point as channel binding");
+}
 test_connect_fails($common_connstr,
        "scram_channel_binding=not-exists",
        "SCRAM authentication with invalid channel binding");

Attachment: signature.asc
Description: PGP signature

Reply via email to