mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
Revert "Add TAP test to automate the equivalent of check_guc"
This reverts commit b0a55f4, to remove for now the TAP test that did the equivalent of check_guc. The test has been using pg_config --sharedir to find the location of postgresql.conf.sample. While the buildfarm and normal build environments rather liked that, this proves to be an issue for Debian where pg_config is patched to not be relocatable, causing the test to fail. Rather than relying on pg_config, we'd better find the sample file based on its location from the source directory. However, this is also an issue as a TAP test only offers the build directory as of TESTDIR in the environment context, so this would fail with VPATH builds. Perhaps the source path could be provided additionally when running the TAP tests. Or perhaps we may be able to get away by just switching to a SQL approach, by using PG_ABS_SRCDIR but this is going to require some extra loops to get the sample file from the correct path in src/backend/. In any case, this needs more thoughts, so just revert the test case until something better is done about this relocation problem. Reported-by: Christopher Berg Discussion: https://postgr.es/m/YgYw25OXV5men8Fj@msg.df7cb.de
This commit is contained in:
parent
efa4a9462a
commit
52377bb81a
@ -1,110 +0,0 @@
|
||||
# Tests to cross-check the consistency of GUC parameters with
|
||||
# postgresql.conf.sample..
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use PostgreSQL::Test::Cluster;
|
||||
use PostgreSQL::Test::Utils;
|
||||
use Test::More;
|
||||
|
||||
my $node = PostgreSQL::Test::Cluster->new('main');
|
||||
$node->init;
|
||||
$node->start;
|
||||
|
||||
# Grab the names of all the parameters that can be listed in the
|
||||
# configuration sample file. config_file is an exception. It is not
|
||||
# in postgresql.conf.sample but is part of the lists from guc.c.
|
||||
my $all_params = $node->safe_psql(
|
||||
'postgres',
|
||||
"SELECT name
|
||||
FROM pg_settings
|
||||
WHERE NOT 'NOT_IN_SAMPLE' = ANY (pg_settings_get_flags(name)) AND
|
||||
name <> 'config_file'
|
||||
ORDER BY 1");
|
||||
# Note the lower-case conversion, for consistency.
|
||||
my @all_params_array = split("\n", lc($all_params));
|
||||
|
||||
# Grab the names of all parameters marked as NOT_IN_SAMPLE.
|
||||
my $not_in_sample = $node->safe_psql(
|
||||
'postgres',
|
||||
"SELECT name
|
||||
FROM pg_settings
|
||||
WHERE 'NOT_IN_SAMPLE' = ANY (pg_settings_get_flags(name))
|
||||
ORDER BY 1");
|
||||
my @not_in_sample_array = split("\n", lc($not_in_sample));
|
||||
|
||||
# Find the location of postgresql.conf.sample, based on the information
|
||||
# provided by pg_config.
|
||||
my $sample_file =
|
||||
$node->config_data('--sharedir') . '/postgresql.conf.sample';
|
||||
|
||||
# List of all the GUCs found in the sample file.
|
||||
my @gucs_in_file;
|
||||
|
||||
# Read the sample file line-by-line, checking its contents to build a list
|
||||
# of everything known as a GUC.
|
||||
my $num_tests = 0;
|
||||
open(my $contents, '<', $sample_file)
|
||||
|| die "Could not open $sample_file: $!";
|
||||
while (my $line = <$contents>)
|
||||
{
|
||||
# Check if this line matches a GUC parameter:
|
||||
# - Each parameter is preceded by "#", but not "# " in the sample
|
||||
# file.
|
||||
# - Valid configuration options are followed immediately by " = ",
|
||||
# with one space before and after the equal sign.
|
||||
if ($line =~ m/^#?([_[:alpha:]]+) = .*/)
|
||||
{
|
||||
# Lower-case conversion matters for some of the GUCs.
|
||||
my $param_name = lc($1);
|
||||
|
||||
# Ignore some exceptions.
|
||||
next if $param_name eq "include";
|
||||
next if $param_name eq "include_dir";
|
||||
next if $param_name eq "include_if_exists";
|
||||
|
||||
# Update the list of GUCs found in the sample file, for the
|
||||
# follow-up tests.
|
||||
push @gucs_in_file, $param_name;
|
||||
}
|
||||
}
|
||||
|
||||
close $contents;
|
||||
|
||||
# Cross-check that all the GUCs found in the sample file match the ones
|
||||
# fetched above. This maps the arrays to a hash, making the creation of
|
||||
# each exclude and intersection list easier.
|
||||
my %gucs_in_file_hash = map { $_ => 1 } @gucs_in_file;
|
||||
my %all_params_hash = map { $_ => 1 } @all_params_array;
|
||||
my %not_in_sample_hash = map { $_ => 1 } @not_in_sample_array;
|
||||
|
||||
my @missing_from_file = grep(!$gucs_in_file_hash{$_}, @all_params_array);
|
||||
is(scalar(@missing_from_file),
|
||||
0, "no parameters missing from postgresql.conf.sample");
|
||||
|
||||
my @missing_from_list = grep(!$all_params_hash{$_}, @gucs_in_file);
|
||||
is(scalar(@missing_from_list), 0, "no parameters missing from guc.c");
|
||||
|
||||
my @sample_intersect = grep($not_in_sample_hash{$_}, @gucs_in_file);
|
||||
is(scalar(@sample_intersect),
|
||||
0, "no parameters marked as NOT_IN_SAMPLE in postgresql.conf.sample");
|
||||
|
||||
# These would log some information only on errors.
|
||||
foreach my $param (@missing_from_file)
|
||||
{
|
||||
print("found GUC $param in guc.c, missing from postgresql.conf.sample\n");
|
||||
}
|
||||
foreach my $param (@missing_from_list)
|
||||
{
|
||||
print(
|
||||
"found GUC $param in postgresql.conf.sample, with incorrect info in guc.c\n"
|
||||
);
|
||||
}
|
||||
foreach my $param (@sample_intersect)
|
||||
{
|
||||
print(
|
||||
"found GUC $param in postgresql.conf.sample, marked as NOT_IN_SAMPLE\n"
|
||||
);
|
||||
}
|
||||
|
||||
done_testing();
|
Loading…
x
Reference in New Issue
Block a user