stas 2004/09/16 16:01:13
Modified: t/response/TestVhost log.pm Added: t/lib/TestCommon LogDiff.pm Log: abstract the log file incremental diff functionality into a module, so it can be used by other tests Revision Changes Path 1.1 modperl-2.0/t/lib/TestCommon/LogDiff.pm Index: LogDiff.pm =================================================================== package TestCommon::LogDiff; use POSIX (); sub new { my $class = shift; my $path = shift; open my $fh, "<$path" or die "Can't open $path: $!"; seek $fh, 0, POSIX::SEEK_END(); $pos = tell $fh; my %self = ( path => $path, fh => $fh, pos => $pos, ); return bless \%self, $class; } sub DESTROY { my $self = shift; close $self->{fh}; } sub diff { my $self = shift; # XXX: is it possible that some system will be slow to flush the # buffers and we may need to wait a bit and retry if we see no new # logged data? my $fh = $self->{fh}; seek $fh, $self->{pos}, POSIX::SEEK_SET(); # not really needed local $/; # slurp mode my $diff = <$fh>; seek $fh, 0, POSIX::SEEK_END(); $self->{pos} = tell $fh; return defined $diff ? $diff : ''; } 1; __END__ =head1 NAME TestCommon::LogDiff - get log file diffs =head1 Synopsis use TestCommon::LogDiff; use Test; plan tests => 2; my $path = "/tmp/mylog"; open my $fh, ">>$path" or die "Can't open $path: $!"; my $logdiff = TestCommon::LogDiff->new($path); print $fh "foo 123\n"; my $expected = qr/^foo/; ok t_cmp $logdiff->diff, $expected; print $fh "bar\n"; my $expected = 'bar'; ok t_cmp $logdiff->diff, $expected; =head1 Description Useful for testing the warning, error and other messages going into the log file. =head1 API =head2 new open the log file and point the filehandle pointer to its end. =head2 diff extract any newly logged information since the last check and move the filehandle to the end of the file. =cut 1.5 +9 -36 modperl-2.0/t/response/TestVhost/log.pm Index: log.pm =================================================================== RCS file: /home/cvs/modperl-2.0/t/response/TestVhost/log.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -u -u -r1.4 -r1.5 --- log.pm 16 Sep 2004 16:36:29 -0000 1.4 +++ log.pm 16 Sep 2004 23:01:13 -0000 1.5 @@ -11,11 +11,10 @@ use Apache::ServerRec qw(warn); # override warn locally use File::Spec::Functions qw(catfile); -use POSIX (); -use Symbol (); use Apache::Test; use Apache::TestUtil; +use TestCommon::LogDiff; use Apache::Const -compile => 'OK'; @@ -35,8 +34,6 @@ my $path = catfile Apache::Test::vars('documentroot'), qw(vhost error_log); -my $fh; -my $pos; sub handler { my $r = shift; @@ -44,16 +41,12 @@ plan $r, tests => 1 + @methods1 + @methods2; my $s = $r->server; - - $fh = Symbol::gensym(); - open $fh, "<$path" or die "Can't open $path: $!"; - seek $fh, 0, POSIX::SEEK_END(); - $pos = tell $fh; + my $logdiff = TestCommon::LogDiff->new($path); ### $r|$s logging for my $m (@methods1) { eval "$m(q[$m])"; - check($m); + ok t_cmp $logdiff->diff, qr/\Q$m/, $m; } ### object-less logging @@ -64,45 +57,25 @@ Apache->request($r); for my $m (@methods2) { eval "$m(q[$m])"; - check($m); + ok t_cmp $logdiff->diff, qr/\Q$m/, $m; } # internal warnings (also needs +GlobalRequest) { no warnings; # avoid FATAL warnings use warnings; - local $SIG{__WARN__}= \&Apache::ServerRec::warn; + local $SIG{__WARN__} = \&Apache::ServerRec::warn; eval q[my $x = "aaa" + 1;]; - check(q[Argument "aaa" isn't numeric in addition]) + ok t_cmp + $logdiff->diff, + qr/Argument "aaa" isn't numeric in addition/, + "internal warning"; } # die logs into the vhost log just fine #die "horrible death!"; - close $fh; - Apache::OK; -} - -sub check { - my $find = shift; - $find = ref $find eq 'Regexp' ? $find : qr/\Q$find/; - my $diff = diff(); - ok t_cmp $diff, $find; -} - -# extract any new logged information since the last check, move the -# filehandle to the end of the file -sub diff { - # XXX: is it possible that some system will be slow to flush the - # buffers and we may need to wait a bit and retry if we get see - # no new logged data? - seek $fh, $pos, POSIX::SEEK_SET(); # not really needed - local $/; # slurp mode - my $diff = <$fh>; - seek $fh, 0, POSIX::SEEK_END(); - $pos = tell $fh; - return defined $diff ? $diff : ''; } 1;