/usr/local/CPAN/Apache-SWIT/Apache/SWIT/Test/Utils.pm
use strict;
use warnings FATAL => 'all';
package Apache::SWIT::Test::Utils;
use base 'Exporter';
use File::Slurp;
our @EXPORT = qw(ASTU_Wait ASTU_Read_Error_Log ASTU_Read_Access_Log
ASTU_Apache_Pids ASTU_Mem_Stats ASTU_Mem_Report ASTU_Mem_Show
ASTU_Reset_Table ASTU_Module_Dir ASTU_Clear_Error_Log);
sub ASTU_Wait {
my $dir = shift || "";
print STDERR "# ASTU_WAIT: $dir\n" . Carp::longmess();
if (!defined($ENV{ASTU_WAIT})) {
print STDERR "# No \$ENV{ASTU_WAIT} is given. Exiting ...\n";
goto OUT;
} elsif (!$ENV{ASTU_WAIT}) {
print STDERR "# \$ENV{ASTU_WAIT} == 0. Continuing ...\n";
return;
}
print STDERR "# Press ENTER to continue ...\n";
readline(\*STDIN);
OUT:
exit 1;
}
sub ASTU_Module_Dir { return "$INC[0]/../.."; }
sub ASTU_Read_Error_Log {
return read_file(ASTU_Module_Dir() . "/t/logs/error_log");
}
sub ASTU_Read_Access_Log {
return read_file(ASTU_Module_Dir() . "/t/logs/access_log");
}
sub ASTU_Reset_Table {
my $t = shift;
my $dbh = Apache::SWIT::DB::Connection->instance->db_handle;
$dbh->do("delete from $t");
$dbh->do("alter sequence $t\_id_seq restart with 1");
}
sub ASTU_Clear_Error_Log {
my $ef = ASTU_Module_Dir() . "/t/logs/error_log";
write_file($ef, "Cleared" . Carp::longmess());
}
sub ASTU_Apache_Pids {
my $pid_file = shift || ($INC[0] . '/../../t/logs/httpd.pid');
my $pid = read_file($pid_file);
my @lines = `pstree -p $pid`;
my @res = (shift(@lines) =~ /\((\d+).*\((\d+)/);
push @res, (/\((\d+)/) for @lines;
return @res;
}
sub ASTU_Mem_Stats {
eval "use Linux::Smaps";
my @res;
for my $pid (@_) {
my $map = Linux::Smaps->new($pid);
push @res, [ $pid, $map->shared_clean + $map->shared_dirty
, $map->private_clean + $map->private_dirty ];
}
return @res;
}
sub ASTU_Mem_Report {
my @mem = ASTU_Mem_Stats(ASTU_Apache_Pids(@_));
my $m = shift @mem;
my $res = "$m->[0]: shared $m->[1], private $m->[2]kb\n";
my $tot = $m->[2];
for (@mem) {
$res .= "\t$_->[0]: shared $_->[1]kb, private $_->[2]kb\n";
$tot += $_->[2];
}
return $res . "Private: $tot\n";
}
sub ASTU_Mem_Show {
return unless $ENV{ASTU_MEM};
print STDERR shift() . ":\n" . ASTU_Mem_Report(@_);
}
1;