mirror of
https://github.com/postgres/postgres.git
synced 2025-12-10 00:06:45 -05:00
Add PostgreSQL::Test::Cluster::read_head_tail() helper to PostgreSQL/Utils.pm
This function reads the lines from a file and filters its contents to report its head and tail contents. The amount of contents to read from a file can be tuned by the environment variable PG_TEST_FILE_READ_LINES, that can be used to override the default of 50 lines. If the file whose content is read has less lines than two times PG_TEST_FILE_READ_LINES, the whole file is returned. This will be used in a follow-up commit to limit the amount of information reported by some of the TAP tests on failure, where we have noticed that the contents reported by the buildfarm can be heavily bloated in some cases, with the head and tail contents of a report being able to provide enough information to be useful for debugging. Author: Nazir Bilal Yavuz <byavuz81@gmail.com> Co-authored-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/CAN55FZ1D6KXvjSs7YGsDeadqCxNF3UUhjRAfforzzP0k-cE=bA@mail.gmail.com
This commit is contained in:
parent
6dfce8420e
commit
b93f4e2f98
@ -917,6 +917,14 @@ PG_TEST_NOCLEAN=1 make -C src/bin/pg_dump check
|
||||
<varname>PG_TEST_TIMEOUT_DEFAULT</varname> to a higher number will change
|
||||
the default to avoid this.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For certain tests, the environment variable
|
||||
<envar>PG_TEST_FILE_READ_LINES</envar> can be set to limit the number of
|
||||
lines read from large output files (head and tail). This is useful when
|
||||
the test output contains a lot of unnecessary content, allowing the test
|
||||
framework to read only a limited number of lines for its reports.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
|
||||
@ -68,6 +68,7 @@ our @EXPORT = qw(
|
||||
slurp_file
|
||||
append_to_file
|
||||
string_replace_file
|
||||
read_head_tail
|
||||
check_mode_recursive
|
||||
chmod_recursive
|
||||
check_pg_config
|
||||
@ -590,6 +591,55 @@ sub string_replace_file
|
||||
|
||||
=pod
|
||||
|
||||
=item read_head_tail(filename)
|
||||
|
||||
Return lines from the head and the tail of a file. If the file is smaller
|
||||
than the number of lines requested, all its contents are returned in @head,
|
||||
leaving @tail empty.
|
||||
|
||||
If the PG_TEST_FILE_READ_LINES environment variable is set, use it instead
|
||||
of the default of 50 lines.
|
||||
|
||||
=cut
|
||||
|
||||
sub read_head_tail
|
||||
{
|
||||
my $filename = shift;
|
||||
my (@head, @tail);
|
||||
my $line_count = 50;
|
||||
|
||||
# Use PG_TEST_FILE_READ_LINES if set.
|
||||
if (defined $ENV{PG_TEST_FILE_READ_LINES})
|
||||
{
|
||||
$line_count = $ENV{PG_TEST_FILE_READ_LINES};
|
||||
}
|
||||
|
||||
return ([], []) if $line_count <= 0;
|
||||
|
||||
open my $fh, '<', $filename or die "couldn't open file: $filename\n";
|
||||
my @lines = <$fh>;
|
||||
close $fh;
|
||||
|
||||
chomp @lines;
|
||||
|
||||
my $total = scalar @lines;
|
||||
|
||||
# If the file is small enough, return all lines in @head.
|
||||
if (2 * $line_count >= $total)
|
||||
{
|
||||
@head = @lines;
|
||||
@tail = ();
|
||||
return (\@head, \@tail);
|
||||
}
|
||||
|
||||
@head = @lines[ 0 .. $line_count - 1 ];
|
||||
@tail = @lines[ $total - $line_count .. $total - 1 ];
|
||||
|
||||
return (\@head, \@tail);
|
||||
}
|
||||
|
||||
=pod
|
||||
|
||||
=item check_mode_recursive(dir, expected_dir_mode, expected_file_mode, ignore_list)
|
||||
|
||||
Check that all file/dir modes in a directory match the expected values,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user