Fix SSL tests on 32-bit Perl
authorDaniel Gustafsson <dgustafsson@postgresql.org>
Thu, 21 Oct 2021 08:28:50 +0000 (10:28 +0200)
committerDaniel Gustafsson <dgustafsson@postgresql.org>
Thu, 21 Oct 2021 08:28:50 +0000 (10:28 +0200)
The certificate serial number generation was changed in b4c4a00ea to
use the current timestamp. The testharness must thus interrogate the
cert for the serialnumber using "openssl x509" which emits the serial
in hex format. Converting the serial to integer format to match whats
in pg_stat_ssl requires a 64-bit capable Perl. This adds a fallback
to checking for an integer when the tests with a 32-bit Perl.

Per failure on buildfarm member prairiedog.

Discussion: https://postgr.es/m/0D295F43-806D-4B3F-AB98-F941A19E0271@yesql.se

src/test/ssl/t/001_ssltests.pl

index a901077469ac25c0886e28747d33fd67847a1ebe..80e318f32e827d43c868e1a01a69bc818726458e 100644 (file)
@@ -3,6 +3,7 @@
 
 use strict;
 use warnings;
+use Config qw ( %Config );
 use PostgresNode;
 use TestLib;
 use Test::More;
@@ -489,8 +490,19 @@ TODO:
 my $serialno = `openssl x509 -serial -noout -in ssl/client.crt`;
 if ($? == 0)
 {
-       $serialno =~ s/^serial=//;
-       $serialno = hex($serialno); # OpenSSL prints serial numbers in hexadecimal
+       # OpenSSL prints serial numbers in hexadecimal and converting the serial
+       # from hex requires a 64-bit capable Perl as the serialnumber is based on
+       # the current timestamp. On 32-bit fall back to checking for it being an
+       # integer like how we do when grabbing the serial fails.
+       if ($Config{ivsize} == 8)
+       {
+               $serialno =~ s/^serial=//;
+               $serialno = hex($serialno);
+       }
+       else
+       {
+               $serialno = '\d+';
+       }
 }
 else
 {