stas        2003/10/15 01:04:44

  Added:       t/modperl request_rec_perlio_api.t
               t/response/TestModperl request_rec_perlio_api.pm
  Log:
  add STD* ":Apache" perlio overriding/restoring tests
  
  Revision  Changes    Path
  1.1                  modperl-2.0/t/modperl/request_rec_perlio_api.t
  
  Index: request_rec_perlio_api.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  
  # test internal redirects originating from 'SetHandler modperl' and
  # 'SetHandler perl-script' main handlers, and sub-requests handled by
  # the handlers of the same and the opposite kind
  
  use Apache::Test;
  use Apache::TestUtil;
  use Apache::TestRequest;
  
  use Config;
  
  my $uri = "/TestModperl__request_rec_perlio_api";
  
  plan tests => 2, have { "perl $]: TIEd IO is used instead of PerlIO"
                              => ($] >= 5.008 && $Config{useperlio}) };
  
  
  {
      my $content  = join "", 'a'..'j', 'k'..'t';
      my $location = "$uri?STDIN";
      my $expected = join "", 'a'..'j', "<samba>", 'k'..'t';
      my $received = POST_BODY_ASSERT $location, content => $content;
      ok t_cmp($expected, $received, "STDIN tests");
  }
  
  {
      my $location = "$uri?STDOUT";
      my $expected = "life is hard and then you die! next you reincarnate...";
      my $received = GET_BODY_ASSERT $location;
      ok t_cmp($expected, $received, "STDOUT tests");
  }
  
  
  
  1.1                  modperl-2.0/t/response/TestModperl/request_rec_perlio_api.pm
  
  Index: request_rec_perlio_api.pm
  ===================================================================
  package TestModperl::request_rec_perlio_api;
  
  # this test is relevant only when the PerlIO STDIN/STDOUT are used (when
  # $Config{useperlio} is defined.)
  
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::RequestIO ();
  use Apache::RequestRec ();
  
  use Apache::Test;
  use Apache::TestConfig;
  
  use File::Spec::Functions qw(catfile catdir);
  
  use Apache::Const -compile => 'OK';
  
  use Config;
  
  sub handler {
      my $r = shift;
  
      $r->args eq 'STDIN' ? test_STDIN($r) : test_STDOUT($r);
  
      return Apache::OK;
  }
  
  sub test_STDIN {
      my $r = shift;
  
      {
          # read the first 10 POST chars
          my $data;
          read STDIN, $data, 10;
          print STDOUT $data;
      }
  
     {
          # re-open STDIN to something else, and then see if we don't
          # lose any chars when we restore it to the POST stream
          open my $stdin, "<&STDIN" or die "Can't dup STDIN: $!";
  
          # at this occasion, let's test in memory files feature
          # (new in 5.8.0)
          my $in_mem_file = "<samba>";
          close STDIN;
          open STDIN, "<", \$in_mem_file
              or die "failed to open STDIN as 'in memory' file : $!";
          my $data;
          read STDIN, $data, length $in_mem_file;
          print STDOUT $data;
          close STDIN;
  
          open STDIN, "<&", $stdin or die "failed to restore STDIN: $!";
      }
  
      {
          # read the last 10 POST chars
          my $data;
          read STDIN, $data, 10;
          print STDOUT $data;
      }
  
  }
  
  sub test_STDOUT {
      my $r = shift;
  
      local $| = 0;
      print STDOUT "life is hard ";
  
      my $vars = Apache::Test::config()->{vars};
      my $target_dir = catdir $vars->{documentroot}, 'perlio';
      my $file = catfile $target_dir, "apache_stdout";
  
      # re-open STDOUT to something else, and then see if we can
      # continue printing to the client via STDOUT, after restoring it
      open my $stdout, ">&STDOUT" or die "Can't dup STDOUT: $!";
  
      # this should flush the above print to STDOUT
      open STDOUT, ">", $file or die "Can't open $file: $!";
      print STDOUT "and then ";
      close STDOUT;
  
      # flush things that went into the file as STDOUT
      open STDOUT, ">&", $stdout or die "failed to restore STDOUT: $!";
      open my $fh, $file or die "Can't open $file: $!";
      local $\;
      print <$fh>;
  
      # cleanup
      unlink $file;
  
      # close the dupped fh
      close $stdout;
  
      print "you die! ";
  
      # now close it completely and restore it, without using any dupped
      # filehandle
      close STDOUT;
      open STDOUT, ">:Apache", $r 
          or die "can't open STDOUT via :Apache layer : $!";
      print "next you reincarnate...";
  
  }
  
  1;
  __DATA__
  SetHandler perl-script
  
  
  

Reply via email to