Re: Improved TAP tests by replacing sub-optimal uses of ok() with better Test::More functions
| От | Sadhuprasad Patro | 
|---|---|
| Тема | Re: Improved TAP tests by replacing sub-optimal uses of ok() with better Test::More functions | 
| Дата | |
| Msg-id | CAFF0-CGiu-+QN7+TS-2AxOZTEeN_1=b5i7pdtndRbqc1KVuPzw@mail.gmail.com обсуждение исходный текст  | 
		
| Ответ на | Re: Improved TAP tests by replacing sub-optimal uses of ok() with better Test::More functions (Michael Paquier <michael@paquier.xyz>) | 
| Ответы | 
                	
            		Re: Improved TAP tests by replacing sub-optimal uses of ok() with better Test::More functions
            		
            		 | 
		
| Список | pgsql-hackers | 
On Fri, Oct 31, 2025 at 6:19 AM Michael Paquier <michael@paquier.xyz> wrote:
On Thu, Oct 30, 2025 at 05:00:27PM +0530, Sadhuprasad Patro wrote:
> On Fri, Oct 17, 2025 at 11:11 AM Michael Paquier <michael@paquier.xyz>
> wrote:
>> -ok($node->log_contains(qr/no SSL error reported/) == 0,
>> +is($node->log_contains(qr/no SSL error reported/), 0
>>
>> The CI was failing with the change in the SSL tests, as of:
>> [05:03:12.647] # at
>> /tmp/cirrus-ci-build/src/test/ssl/t/001_ssltests.pl line 127.
>> [05:03:12.647] # got: ''
>> [05:03:12.647] # expected: '0'
Sadhuprasad, there was still a bit more we could do. Related to this
issue with the SSL test, what do you think about the introduction of a
log_contains_like() in Cluster.pm where we would directly call like()
in the subroutine? This way, we would be able to report in the output
the contents of the server logs we are trying to match (or not match)
with a pattern, making debugging easier. What do you think?
--
Michael
Hi Michael,
$snippet = $log;
            
diag("Log snippet (last " . scalar(@lines > 20 ? 20 : @lines) . " lines):");
I think we can do this as you suggested...
I can define something like below in perl script and try to use:
sub log_contains_like {
my ($self, $pattern, $msg, $do_test) = @_;
my $log = $self->get_log();
$msg //= "Log output matches pattern";
# Run as test by default
if (!defined $do_test || $do_test) {
my $ok = like($log, $pattern, $msg);
# If the test failed, show a concise log snippet
unless ($ok) {
my @lines = split /\n/, $log;
my $snippet;
sub log_contains_like {
my ($self, $pattern, $msg, $do_test) = @_;
my $log = $self->get_log();
$msg //= "Log output matches pattern";
# Run as test by default
if (!defined $do_test || $do_test) {
my $ok = like($log, $pattern, $msg);
# If the test failed, show a concise log snippet
unless ($ok) {
my @lines = split /\n/, $log;
my $snippet;
$snippet = $log;
diag("Log snippet (last " . scalar(@lines > 20 ? 20 : @lines) . " lines):");
            diag($snippet);
}
}
else {
# Return boolean for manual usage
return ($log =~ /$pattern/);
}
}
}
}
else {
# Return boolean for manual usage
return ($log =~ /$pattern/);
}
}
Is this looks fine to you?
Will share  a new patch soon with this content...
Thank you
SadhuPrasad,
EnterpriseDB.
В списке pgsql-hackers по дате отправления: