mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Allow using Unix-domain sockets on Windows in tests
The test suites currently don't use Unix-domain sockets on Windows. This optionally allows enabling that by setting the environment variable PG_TEST_USE_UNIX_SOCKETS. This should currently be considered experimental. In particular, pg_regress.c contains some comments that the cleanup code for Unix-domain sockets doesn't work correctly under Windows, which hasn't been an problem until now. But it's good enough for locally supervised testing of the functionality. Reviewed-by: Andrew Dunstan <andrew.dunstan@2ndquadrant.com> Discussion: https://www.postgresql.org/message-id/flat/54bde68c-d134-4eb8-5bd3-8af33b72a010@2ndquadrant.com
This commit is contained in:
@ -29,7 +29,7 @@ print $conf "port = $node_port\n";
|
|||||||
print $conf TestLib::slurp_file($ENV{TEMP_CONFIG})
|
print $conf TestLib::slurp_file($ENV{TEMP_CONFIG})
|
||||||
if defined $ENV{TEMP_CONFIG};
|
if defined $ENV{TEMP_CONFIG};
|
||||||
|
|
||||||
if (!$windows_os)
|
if ($use_unix_sockets)
|
||||||
{
|
{
|
||||||
print $conf "listen_addresses = ''\n";
|
print $conf "listen_addresses = ''\n";
|
||||||
print $conf "unix_socket_directories = '$tempdir_short'\n";
|
print $conf "unix_socket_directories = '$tempdir_short'\n";
|
||||||
|
@ -3,17 +3,16 @@
|
|||||||
# - Plain
|
# - Plain
|
||||||
# - MD5-encrypted
|
# - MD5-encrypted
|
||||||
# - SCRAM-encrypted
|
# - SCRAM-encrypted
|
||||||
# This test cannot run on Windows as Postgres cannot be set up with Unix
|
# This test can only run with Unix-domain sockets.
|
||||||
# sockets and needs to go through SSPI.
|
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use PostgresNode;
|
use PostgresNode;
|
||||||
use TestLib;
|
use TestLib;
|
||||||
use Test::More;
|
use Test::More;
|
||||||
if ($windows_os)
|
if (!$use_unix_sockets)
|
||||||
{
|
{
|
||||||
plan skip_all => "authentication tests cannot run on Windows";
|
plan skip_all => "authentication tests cannot run without Unix-domain sockets";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
# Test password normalization in SCRAM.
|
# Test password normalization in SCRAM.
|
||||||
#
|
#
|
||||||
# This test cannot run on Windows as Postgres cannot be set up with Unix
|
# This test can only run with Unix-domain sockets.
|
||||||
# sockets and needs to go through SSPI.
|
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use PostgresNode;
|
use PostgresNode;
|
||||||
use TestLib;
|
use TestLib;
|
||||||
use Test::More;
|
use Test::More;
|
||||||
if ($windows_os)
|
if (!$use_unix_sockets)
|
||||||
{
|
{
|
||||||
plan skip_all => "authentication tests cannot run on Windows";
|
plan skip_all => "authentication tests cannot run without Unix-domain sockets";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -116,7 +116,7 @@ INIT
|
|||||||
|
|
||||||
# Set PGHOST for backward compatibility. This doesn't work for own_host
|
# Set PGHOST for backward compatibility. This doesn't work for own_host
|
||||||
# nodes, so prefer to not rely on this when writing new tests.
|
# nodes, so prefer to not rely on this when writing new tests.
|
||||||
$use_tcp = $TestLib::windows_os;
|
$use_tcp = !$TestLib::use_unix_sockets;
|
||||||
$test_localhost = "127.0.0.1";
|
$test_localhost = "127.0.0.1";
|
||||||
$last_host_assigned = 1;
|
$last_host_assigned = 1;
|
||||||
$test_pghost = $use_tcp ? $test_localhost : TestLib::tempdir_short;
|
$test_pghost = $use_tcp ? $test_localhost : TestLib::tempdir_short;
|
||||||
@ -387,7 +387,7 @@ sub set_replication_conf
|
|||||||
|
|
||||||
open my $hba, '>>', "$pgdata/pg_hba.conf";
|
open my $hba, '>>', "$pgdata/pg_hba.conf";
|
||||||
print $hba "\n# Allow replication (set up by PostgresNode.pm)\n";
|
print $hba "\n# Allow replication (set up by PostgresNode.pm)\n";
|
||||||
if ($TestLib::windows_os)
|
if ($TestLib::windows_os && !$TestLib::use_unix_sockets)
|
||||||
{
|
{
|
||||||
print $hba
|
print $hba
|
||||||
"host replication all $test_localhost/32 sspi include_realm=1 map=regress\n";
|
"host replication all $test_localhost/32 sspi include_realm=1 map=regress\n";
|
||||||
|
@ -83,9 +83,10 @@ our @EXPORT = qw(
|
|||||||
command_checks_all
|
command_checks_all
|
||||||
|
|
||||||
$windows_os
|
$windows_os
|
||||||
|
$use_unix_sockets
|
||||||
);
|
);
|
||||||
|
|
||||||
our ($windows_os, $tmp_check, $log_path, $test_logfile);
|
our ($windows_os, $use_unix_sockets, $tmp_check, $log_path, $test_logfile);
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
{
|
{
|
||||||
@ -117,6 +118,11 @@ BEGIN
|
|||||||
require Win32API::File;
|
require Win32API::File;
|
||||||
Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle));
|
Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Specifies whether to use Unix sockets for test setups. On
|
||||||
|
# Windows we don't use them by default since it's not universally
|
||||||
|
# supported, but it can be overridden if desired.
|
||||||
|
$use_unix_sockets = (!$windows_os || defined $ENV{PG_TEST_USE_UNIX_SOCKETS});
|
||||||
}
|
}
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
|
@ -292,7 +292,7 @@ stop_postmaster(void)
|
|||||||
* remove the directory. Ignore errors; leaking a temporary directory is
|
* remove the directory. Ignore errors; leaking a temporary directory is
|
||||||
* unimportant. This can run from a signal handler. The code is not
|
* unimportant. This can run from a signal handler. The code is not
|
||||||
* acceptable in a Windows signal handler (see initdb.c:trapsig()), but
|
* acceptable in a Windows signal handler (see initdb.c:trapsig()), but
|
||||||
* on Windows, pg_regress does not use Unix sockets.
|
* on Windows, pg_regress does not use Unix sockets by default.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
remove_temp(void)
|
remove_temp(void)
|
||||||
@ -2106,6 +2106,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
|
|||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool use_unix_sockets;
|
||||||
_stringlist *sl;
|
_stringlist *sl;
|
||||||
int c;
|
int c;
|
||||||
int i;
|
int i;
|
||||||
@ -2121,15 +2122,23 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
|
|||||||
|
|
||||||
atexit(stop_postmaster);
|
atexit(stop_postmaster);
|
||||||
|
|
||||||
#if !defined(HAVE_UNIX_SOCKETS) || defined(WIN32)
|
#if !defined(HAVE_UNIX_SOCKETS)
|
||||||
|
use_unix_sockets = false;
|
||||||
|
#elif defined(WIN32)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No Unix-domain sockets available, so change default. For now, we also
|
* We don't use Unix-domain sockets on Windows by default, even if the
|
||||||
* don't use them on Windows, even if the build supports them. (See
|
* build supports them. (See comment at remove_temp() for a reason.)
|
||||||
* comment at remove_temp() for a reason.)
|
* Override at your own risk.
|
||||||
*/
|
*/
|
||||||
hostname = "localhost";
|
use_unix_sockets = getenv("PG_TEST_USE_UNIX_SOCKETS") ? true : false;
|
||||||
|
#else
|
||||||
|
use_unix_sockets = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!use_unix_sockets)
|
||||||
|
hostname = "localhost";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We call the initialization function here because that way we can set
|
* We call the initialization function here because that way we can set
|
||||||
* default parameters and let them be overwritten by the commandline.
|
* default parameters and let them be overwritten by the commandline.
|
||||||
@ -2243,7 +2252,8 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
|
|||||||
if (config_auth_datadir)
|
if (config_auth_datadir)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_SSPI
|
#ifdef ENABLE_SSPI
|
||||||
config_sspi_auth(config_auth_datadir, user);
|
if (!use_unix_sockets)
|
||||||
|
config_sspi_auth(config_auth_datadir, user);
|
||||||
#endif
|
#endif
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
@ -2364,13 +2374,15 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
|
|||||||
fclose(pg_conf);
|
fclose(pg_conf);
|
||||||
|
|
||||||
#ifdef ENABLE_SSPI
|
#ifdef ENABLE_SSPI
|
||||||
|
if (!use_unix_sockets)
|
||||||
/*
|
{
|
||||||
* Since we successfully used the same buffer for the much-longer
|
/*
|
||||||
* "initdb" command, this can't truncate.
|
* Since we successfully used the same buffer for the much-longer
|
||||||
*/
|
* "initdb" command, this can't truncate.
|
||||||
snprintf(buf, sizeof(buf), "%s/data", temp_instance);
|
*/
|
||||||
config_sspi_auth(buf, NULL);
|
snprintf(buf, sizeof(buf), "%s/data", temp_instance);
|
||||||
|
config_sspi_auth(buf, NULL);
|
||||||
|
}
|
||||||
#elif !defined(HAVE_UNIX_SOCKETS)
|
#elif !defined(HAVE_UNIX_SOCKETS)
|
||||||
#error Platform has no means to secure the test installation.
|
#error Platform has no means to secure the test installation.
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user