mysql-test/suite/router/include/pattern_not_in_file.inc (30 lines of code) (raw):
# ==== Purpose ====
#
# Wait until the grep for a pattern in a file produces some non-empty
# result.
#
# NOTE: to better support the more strict usage with MySQL error log files
# and MTR, the search output is reset whenever the MTR beginning-of-test
# tag is found (CURRENT_TEST: ...).
#
# ==== Usage ====
#
# --let $grep_pattern = PERL_REGEX
# --let $grep_file = FILENAME
# --source ../include/patter_not_in_file.inc
#
# Parameters:
#
# $grep_pattern
# The pattern to search for. This can be a perl regex.
#
# $grep_file
# The file to search in.
#
# $wait_timeout
# If instantiated, the wait period in seconds to wait for the pattern
# to appear in the file. If not instantiated, it will wait
# indefinitely.
#
--let _WFPIF_GREP_PATTERN = $grep_pattern
--let _WFPIF_GREP_FILE = $grep_file
--let _WFPIF_WAIT_TIMEOUT = $wait_timeout
--echo include/wait_for_pattern_in_file.inc [$grep_pattern]
--perl
use strict;
my $file = $ENV{'_WFPIF_GREP_FILE'} or die "grep_file is not set";
my $pattern = $ENV{'_WFPIF_GREP_PATTERN'} or die "grep_pattern is not set";
my $wait_timeout = $ENV{'_WFPIF_WAIT_TIMEOUT'};
my $found = 0;
my $timeout = $wait_timeout;
my $line = '';
open(my $fd, "<", $file) or die("Unable to open $file: $!\n");
while (<$fd>) {
$line = $line . $_;
if (substr($line, length($line) - 1, 1) eq "\n" || substr($line, length($line) - 2, 2) eq "\r\f") {
if (($line =~ /^CURRENT_TEST: /)) {
$found = 0;
}
if ($found == 0 && $line =~ /$pattern/) {
$found = 1;
}
$line = '';
}
}
close($fd) or die "Error closing $file: $!";
if ($found == 1) {
die "Pattern found in file.";
}
EOF