gozer       2004/08/24 10:36:56

  Added:       t/modules reload.t
               t/response/TestModules reload.pm
  Log:
  Add some testing for Apache::Reload
  
  Revision  Changes    Path
  1.1                  modperl-2.0/t/modules/reload.t
  
  Index: reload.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Test;
  use Apache::TestUtil;
  use Apache::TestRequest;
  use File::Spec::Functions qw(catfile);
  
  plan tests => 2;
  
  my $module   = 'TestModules::reload';
  my $location = '/' . Apache::TestRequest::module2path($module);
  
  my @tests = qw(simple const prototype);
  
  my $header = join '', <DATA>;
  
  my $initial = <<'EOF';
  sub simple { 'simple' }
  use constant const => 'const';
  sub prototype($) { 'prototype' }
  EOF
  
  my $modified = <<'EOF';
  sub simple { 'SIMPLE' }
  use constant const => 'CONST';
  sub prototype($$) { 'PROTOTYPE' }
  EOF
  
  t_write_file(test_file(), $header, $initial);
  
  t_debug "getting the same interp ID for $location";
  my $same_interp = Apache::TestRequest::same_interp_tie($location);
  
  my $skip = $same_interp ? 0 : 1;
  
  {
      my $expected = join '', map { "$_:$_\n" } sort @tests;
      my $received = get_body($same_interp, \&GET, $location);
      $skip++ unless defined $received;
      skip_not_same_interp(
          $skip,
          $expected,
          $received,
          "Initial"
      );
  }
  
  sleep(2);
  t_write_file(test_file(), $header, $modified);
  
  {
      my $expected = join '', map { "$_:" . uc($_) . "\n" } sort @tests;
      my $received = get_body($same_interp, \&GET, $location);
      $skip++ unless defined $received;
      skip_not_same_interp(
          $skip,
          $expected,
          $received,
          "Reload"
      );
  }
  
  sub test_file {
      return catfile(Apache::Test::vars()->{"serverroot"}, 'lib','Apache',
                     'Reload','Test.pm');
  }
  
  # if we fail to find the same interpreter, return undef (this is not
  # an error)
  sub get_body {
      my $res = eval {
          Apache::TestRequest::same_interp_do(@_);
      };
      return undef if $@ =~ /unable to find interp/;
      return $res->content if $res;
      die $@ if $@;
  }
  
  # make the tests resistant to a failure of finding the same perl
  # interpreter, which happens randomly and not an error.
  # the first argument is used to decide whether to skip the sub-test,
  # the rest of the arguments are passed to 'ok t_cmp';
  sub skip_not_same_interp {
      my $skip_cond = shift;
      if ($skip_cond) {
          skip "Skip couldn't find the same interpreter", 0;
      }
      else {
          my($package, $filename, $line) = caller;
          # trick ok() into reporting the caller filename/line when a
          # sub-test fails in sok()
          return eval <<EOE;
  #line $line $filename
      ok &t_cmp;
  EOE
      }
  }
  
  __DATA__
  package Apache::Reload::Test;
  
  use Apache::Reload;
  
  our @methods = qw(simple const prototype);
  
  sub run {
      my $r = shift;
      foreach my $m (sort @methods) {
          $r->print($m, ':', __PACKAGE__->$m(), "\n");
      }
  }
  
  
  
  1.1                  modperl-2.0/t/response/TestModules/reload.pm
  
  Index: reload.pm
  ===================================================================
  package TestModules::reload;
  
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Const -compile => qw(OK);
  
  sub handler {
      my $r = shift;
  
      eval "use Apache::Reload::Test";
      
      Apache::Reload::Test::run($r);
  
      return Apache::OK;
  }
  
  1;
  __END__
  
  PerlModule Apache::Reload
  PerlInitHandler Apache::TestHandler::same_interp_fixup Apache::Reload
  PerlSetVar ReloadDebug On
  PerlSetVar ReloadConstantRedefineWarnings Off
  PerlSetVar ReloadAll Off
  
  
  

Reply via email to