Fix ssl tests for when tls-server-end-point is not supported
authorPeter Eisentraut <peter_e@gmx.net>
Tue, 9 Jan 2018 17:28:49 +0000 (12:28 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Tue, 9 Jan 2018 17:28:49 +0000 (12:28 -0500)
Add a function to TestLib that allows us to check pg_config.h and then
decide the expected test outcome based on that.

Author: Michael Paquier <michael.paquier@gmail.com>

src/test/perl/TestLib.pm
src/test/ssl/t/002_scram.pl

index 72826d5bad84f5ff888e89196b7e43c58be97dfa..fdd427608baf223b93cec9ceaa981a9e8de6bbe4 100644 (file)
@@ -26,6 +26,7 @@ our @EXPORT = qw(
   slurp_dir
   slurp_file
   append_to_file
+  check_pg_config
   system_or_bail
   system_log
   run_log
@@ -221,6 +222,24 @@ 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 check_pg_config
+{
+   my ($regexp) = @_;
+   my ($stdout, $stderr);
+   my $result = IPC::Run::run [ 'pg_config', '--includedir' ], '>',
+     \$stdout, '2>', \$stderr
+     or die "could not execute pg_config";
+   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
 #
index 3f425e00f0a9e71b46fd0e5ec1868317a867dc7c..67c1409a6edbad530b1bf22965ffc75b1e21299d 100644 (file)
@@ -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 =
+   check_pg_config("#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");