mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
Refactor log check logic for connect_ok/fails in PostgreSQL::Test::Cluster
This commit refactors a bit the code in charge of checking for log patterns when connections fail or succeed, by moving the log pattern checks into their own routine, for clarity. This has come up as something to improve while discussing the refactoring of find_in_log(). Backpatch down to 14 where these routines are used, to ease the introduction of new tests that could rely on them. Author: Vignesh C, Michael Paquier Discussion: https://postgr.es/m/CALDaNm0YSiLpjCmajwLfidQrFOrLNKPQir7s__PeVvh9U3uoTQ@mail.gmail.com Backpatch-through: 14
This commit is contained in:
parent
fd3def3950
commit
30469a6ed4
@ -2148,15 +2148,9 @@ If this regular expression is set, matches it with the output generated.
|
||||
|
||||
=item log_like => [ qr/required message/ ]
|
||||
|
||||
If given, it must be an array reference containing a list of regular
|
||||
expressions that must match against the server log, using
|
||||
C<Test::More::like()>.
|
||||
|
||||
=item log_unlike => [ qr/prohibited message/ ]
|
||||
|
||||
If given, it must be an array reference containing a list of regular
|
||||
expressions that must NOT match against the server log. They will be
|
||||
passed to C<Test::More::unlike()>.
|
||||
See C<log_check(...)>.
|
||||
|
||||
=back
|
||||
|
||||
@ -2177,16 +2171,6 @@ sub connect_ok
|
||||
$sql = "SELECT \$\$connected with $connstr\$\$";
|
||||
}
|
||||
|
||||
my (@log_like, @log_unlike);
|
||||
if (defined($params{log_like}))
|
||||
{
|
||||
@log_like = @{ $params{log_like} };
|
||||
}
|
||||
if (defined($params{log_unlike}))
|
||||
{
|
||||
@log_unlike = @{ $params{log_unlike} };
|
||||
}
|
||||
|
||||
my $log_location = -s $self->logfile;
|
||||
|
||||
# Never prompt for a password, any callers of this routine should
|
||||
@ -2204,19 +2188,7 @@ sub connect_ok
|
||||
{
|
||||
like($stdout, $params{expected_stdout}, "$test_name: matches");
|
||||
}
|
||||
if (@log_like or @log_unlike)
|
||||
{
|
||||
my $log_contents = TestLib::slurp_file($self->logfile, $log_location);
|
||||
|
||||
while (my $regex = shift @log_like)
|
||||
{
|
||||
like($log_contents, $regex, "$test_name: log matches");
|
||||
}
|
||||
while (my $regex = shift @log_unlike)
|
||||
{
|
||||
unlike($log_contents, $regex, "$test_name: log does not match");
|
||||
}
|
||||
}
|
||||
$self->log_check($test_name, $log_location, %params);
|
||||
}
|
||||
|
||||
=pod
|
||||
@ -2236,7 +2208,7 @@ If this regular expression is set, matches it with the output generated.
|
||||
|
||||
=item log_unlike => [ qr/prohibited message/ ]
|
||||
|
||||
See C<connect_ok(...)>, above.
|
||||
See C<log_check(...)>.
|
||||
|
||||
=back
|
||||
|
||||
@ -2247,16 +2219,6 @@ sub connect_fails
|
||||
local $Test::Builder::Level = $Test::Builder::Level + 1;
|
||||
my ($self, $connstr, $test_name, %params) = @_;
|
||||
|
||||
my (@log_like, @log_unlike);
|
||||
if (defined($params{log_like}))
|
||||
{
|
||||
@log_like = @{ $params{log_like} };
|
||||
}
|
||||
if (defined($params{log_unlike}))
|
||||
{
|
||||
@log_unlike = @{ $params{log_unlike} };
|
||||
}
|
||||
|
||||
my $log_location = -s $self->logfile;
|
||||
|
||||
# Never prompt for a password, any callers of this routine should
|
||||
@ -2274,19 +2236,7 @@ sub connect_fails
|
||||
like($stderr, $params{expected_stderr}, "$test_name: matches");
|
||||
}
|
||||
|
||||
if (@log_like or @log_unlike)
|
||||
{
|
||||
my $log_contents = TestLib::slurp_file($self->logfile, $log_location);
|
||||
|
||||
while (my $regex = shift @log_like)
|
||||
{
|
||||
like($log_contents, $regex, "$test_name: log matches");
|
||||
}
|
||||
while (my $regex = shift @log_unlike)
|
||||
{
|
||||
unlike($log_contents, $regex, "$test_name: log does not match");
|
||||
}
|
||||
}
|
||||
$self->log_check($test_name, $log_location, %params);
|
||||
}
|
||||
|
||||
=pod
|
||||
@ -2459,6 +2409,67 @@ sub issues_sql_like
|
||||
|
||||
=pod
|
||||
|
||||
=item $node->log_check($offset, $test_name, %parameters)
|
||||
|
||||
Check contents of server logs.
|
||||
|
||||
=over
|
||||
|
||||
=item $test_name
|
||||
|
||||
Name of test for error messages.
|
||||
|
||||
=item $offset
|
||||
|
||||
Offset of the log file.
|
||||
|
||||
=item log_like => [ qr/required message/ ]
|
||||
|
||||
If given, it must be an array reference containing a list of regular
|
||||
expressions that must match against the server log, using
|
||||
C<Test::More::like()>.
|
||||
|
||||
=item log_unlike => [ qr/prohibited message/ ]
|
||||
|
||||
If given, it must be an array reference containing a list of regular
|
||||
expressions that must NOT match against the server log. They will be
|
||||
passed to C<Test::More::unlike()>.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub log_check
|
||||
{
|
||||
my ($self, $test_name, $offset, %params) = @_;
|
||||
|
||||
my (@log_like, @log_unlike);
|
||||
if (defined($params{log_like}))
|
||||
{
|
||||
@log_like = @{ $params{log_like} };
|
||||
}
|
||||
if (defined($params{log_unlike}))
|
||||
{
|
||||
@log_unlike = @{ $params{log_unlike} };
|
||||
}
|
||||
|
||||
if (@log_like or @log_unlike)
|
||||
{
|
||||
my $log_contents = TestLib::slurp_file($self->logfile, $offset);
|
||||
|
||||
while (my $regex = shift @log_like)
|
||||
{
|
||||
like($log_contents, $regex, "$test_name: log matches");
|
||||
}
|
||||
while (my $regex = shift @log_unlike)
|
||||
{
|
||||
unlike($log_contents, $regex, "$test_name: log does not match");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
=pod
|
||||
|
||||
=item $node->run_log(...)
|
||||
|
||||
Runs a shell command like TestLib::run_log, but with connection parameters set
|
||||
|
Loading…
x
Reference in New Issue
Block a user