You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2003/01/15 07:19:25 UTC

cvs commit: modperl-2.0/t/filter/TestFilter in_str_lc.pm in_str_msg.pm in_str_sandwich.pm

stas        2003/01/14 22:19:25

  Added:       t/filter in_str_lc.t in_str_msg.t in_str_sandwich.t
               t/filter/TestFilter in_str_lc.pm in_str_msg.pm
                        in_str_sandwich.pm
  Log:
  tests that exercise the input filtering streaming interface
  
  Revision  Changes    Path
  1.1                  modperl-2.0/t/filter/in_str_lc.t
  
  Index: in_str_lc.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Test;
  use Apache::TestUtil;
  use Apache::TestRequest;
  
  plan tests => 1;
  
  my $location = '/TestFilter::in_str_lc';
  
  my $chunk = "[Foo BaR] ";
  my $data = $chunk x 250;
  my $expected = lc $data;
  my $received = POST_BODY $location, content => $data;
  
  ok t_cmp($expected, $received, "input stream filter lc")
  
  
  
  
  1.1                  modperl-2.0/t/filter/in_str_msg.t
  
  Index: in_str_msg.t
  ===================================================================
  use Apache::TestRequest;
  use Apache::Test ();
  use Apache::TestUtil;
  
  my $module = 'TestFilter::in_str_msg';
  
  Apache::TestRequest::scheme('http'); #force http for t/TEST -ssl
  Apache::TestRequest::module($module);
  
  my $config = Apache::Test::config();
  my $hostport = Apache::TestRequest::hostport($config);
  t_debug("connecting to $hostport");
  
  print GET_BODY("/input_filter.html");
  
  
  
  1.1                  modperl-2.0/t/filter/in_str_sandwich.t
  
  Index: in_str_sandwich.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Test;
  use Apache::TestUtil;
  use Apache::TestRequest;
  
  plan tests => 1;
  
  my $location = '/TestFilter::in_str_sandwich';
  
  my $expected = join "\n", qw(HEADER BODY TAIL), '';
  my $received = POST_BODY $location, content => "BODY\n";
  
  ok t_cmp($expected, $received, "input stream filter sandwich")
  
  
  
  
  1.1                  modperl-2.0/t/filter/TestFilter/in_str_lc.pm
  
  Index: in_str_lc.pm
  ===================================================================
  package TestFilter::in_str_lc;
  
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Filter ();
  
  use Apache::Const -compile => qw(OK M_POST);
  
  sub handler {
       my($filter, $bb, $mode, $block, $readbytes) = @_;
  
      while ($filter->read($mode, $block, $readbytes, my $buffer, 1024)) {
          #warn "FILTER READ: $buffer\n";
          $filter->print(lc $buffer);
      }
  
      return Apache::OK;
  }
  
  sub response {
      my $r = shift;
  
      $r->content_type('text/plain');
  
      if ($r->method_number == Apache::M_POST) {
          my $data = ModPerl::Test::read_post($r);
          #warn "HANDLER READ: $data\n";
          $r->print($data);
      }
  
      Apache::OK;
  }
  1;
  __DATA__
  SetHandler modperl
  PerlResponseHandler TestFilter::in_str_lc::response
  
  
  
  1.1                  modperl-2.0/t/filter/TestFilter/in_str_msg.pm
  
  Index: in_str_msg.pm
  ===================================================================
  package TestFilter::in_str_msg;
  
  use strict;
  use warnings FATAL => 'all';
  
  use base qw(Apache::Filter);
  
  use Apache::RequestRec ();
  use Apache::RequestIO ();
  use APR::Brigade ();
  use APR::Bucket ();
  
  use Apache::Const -compile => 'OK';
  use APR::Const -compile => ':common';
  
  my $from_url = '/input_filter.html';
  my $to_url = '/TestFilter::in_str_msg::response';
  
  sub handler : FilterConnectionHandler {
      my($filter, $bb, $mode, $block, $readbytes) = @_;
      warn "FILTER CALLED\n";
      my $ctx = $filter->ctx;
  
      while ($filter->read($mode, $block, $readbytes, my $buffer, 1024)) {
          warn "FILTER READ: $buffer\n";
          unless ($ctx) {
              $buffer =~ s|GET $from_url|GET $to_url|;
              $ctx = 1; # done
          }
          $filter->print($buffer);
      }
      $filter->ctx($ctx) if $ctx;
  
      return Apache::OK;
  }
  
  sub response {
      my $r = shift;
  
      $r->content_type('text/plain');
  
      $r->puts("1..1\nok 1\n");
  
      Apache::OK;
  }
  
  1;
  __END__
  <VirtualHost TestFilter::in_str_msg>
    # must be preloaded so the FilterConnectionHandler attributes will
    # be set by the time the filter is inserted into the filter chain
    PerlModule TestFilter::in_str_msg
    PerlInputFilterHandler TestFilter::in_str_msg
  
    <Location /TestFilter::in_str_msg::response>
       SetHandler modperl
       PerlResponseHandler TestFilter::in_str_msg::response
    </Location>
  
  </VirtualHost>
  
  
  
  1.1                  modperl-2.0/t/filter/TestFilter/in_str_sandwich.pm
  
  Index: in_str_sandwich.pm
  ===================================================================
  package TestFilter::in_str_sandwich;
  
  # this test verifies whether the filter can pre-insert data (using
  # context) and post-insert data (using the seen_eos flag)
  
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Filter ();
  
  use Apache::Const -compile => qw(OK M_POST);
  
  sub handler {
      my($filter, $bb, $mode, $block, $readbytes) = @_;
  
      my $ctx = $filter->ctx;
  
      unless ($ctx) {
          $filter->print("HEADER\n");
          $filter->ctx(1);
      }
  
      while ($filter->read($mode, $block, $readbytes, my $buffer, 1024)) {
          #warn "FILTER READ: $buffer\n";
          $filter->print($buffer);
      }
  
      if ($filter->seen_eos) {
          $filter->print("TAIL\n");
      }
  
      return Apache::OK;
  }
  
  sub response {
      my $r = shift;
  
      $r->content_type('text/plain');
  
      if ($r->method_number == Apache::M_POST) {
          my $data = ModPerl::Test::read_post($r);
          #warn "HANDLER READ: $data\n";
          $r->print($data);
      }
  
      return Apache::OK;
  }
  1;
  __DATA__
  SetHandler modperl
  PerlResponseHandler TestFilter::in_str_sandwich::response