our @EXPORT_OK = qw(
dbg stacktrace class_seems_loaded
local_umask slurp_bytes tmpdir find_co_root rm_rf
- PEEPEENESS
+ capture_stderr PEEPEENESS
check_customcond_args
await_flock DEBUG_TEST_CONCURRENCY_LOCKS
);
# This figure esentially means "how long can a single test hold a
# resource before everyone else gives up waiting and aborts" or
# in other words "how long does the longest test-group legitimally run?"
-my $lock_timeout_minutes = 15; # yes, that's long, I know
+my $lock_timeout_minutes = 30; # yes, that's long, I know
my $wait_step_seconds = 0.25;
sub await_flock ($$) {
# prove -lj10 xt/extra/internals/
#
select( ( select(\*STDOUT), $|=1 )[0] );
-
- print "#\n";
+ print STDOUT "#\n";
}
}
+ print STDERR "Lock timeout of $lock_timeout_minutes minutes reached: "
+ unless $res;
+
return $res;
}
croak "Setting umask failed: $!" unless defined $old_umask;
scope_guard(sub {
- local ($@, $!, $?);
+ local ( $!, $^E, $?, $@ );
eval {
defined(umask $old_umask) or die "nope";
};
}
+sub capture_stderr (&) {
+ open(my $stderr_copy, '>&', *STDERR) or croak "Unable to dup STDERR: $!";
+
+ require File::Temp;
+ my $tf = File::Temp->new( UNLINK => 1, DIR => tmpdir() );
+
+ my $err_out;
+
+ {
+ my $guard = scope_guard {
+ close STDERR;
+
+ open(STDERR, '>&', $stderr_copy) or do {
+ my $msg = "\n\nPANIC!!!\nFailed restore of STDERR: $!\n";
+ print $stderr_copy $msg;
+ print STDOUT $msg;
+ die;
+ };
+
+ close $stderr_copy;
+ };
+
+ close STDERR;
+ open( STDERR, '>&', $tf );
+
+ $_[0]->();
+ }
+
+ slurp_bytes( "$tf" );
+}
sub slurp_bytes ($) {
croak "Expecting a file name, not a filehandle" if openhandle $_[0];
sub rm_rf ($) {
- croak "No valid argument supplied to rm_rf()" unless length "$_[0]";
+ croak "No argument supplied to rm_rf()" unless length "$_[0]";
return unless -e $_[0];
local ( $!, $^E, $?, $@ );
- system( $perl, qw( -Mt::lib::ANFANG -e ), <<'EOS', $arg );
+ system( $perl, qw( -It/lib -MANFANG -e ), <<'EOS', $arg );
$0 = 'malloc_canary';
my $tail_character_of_reified_megastring = substr( ( join '', map chr, 0..255 ) x (4 * 1024 * $ARGV[0]), -1 );
EOS