stas        2003/08/13 20:52:03

  Modified:    ModPerl-Registry/t 304.t
               ModPerl-Registry/t/cgi-bin 304.pl
  Log:
  - make the 304 handler more robust
  - add more test cases (bogus dates)
  
  Revision  Changes    Path
  1.2       +28 -17    modperl-2.0/ModPerl-Registry/t/304.t
  
  Index: 304.t
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/ModPerl-Registry/t/304.t,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 304.t     6 Aug 2003 07:30:31 -0000       1.1
  +++ 304.t     14 Aug 2003 03:52:03 -0000      1.2
  @@ -5,7 +5,7 @@
   use Apache::TestUtil;
   use Apache::TestRequest qw(GET);
   
  -plan tests => 4;
  +plan tests => 10;
   
   my $url = "/registry/304.pl";
   
  @@ -29,23 +29,34 @@
       #t_debug $res->as_string;
   }
   
  -
   {
  -    # modified
  -    my $if_modified_since = 'Sun, 29 Oct 2000 15:43:28 GMT';
  -    my $res = GET($url, 'If-Modified-Since' => $if_modified_since);
  -
  -    ok t_cmp(
  -        200,
  -        $res->code,
  -        "test !HTTP_NOT_MODIFIED (200 status)",
  +    # full response cases:
  +    # 1) the resource has been modified since the If-Modified-Since date
  +    # 2) bogus If-Modified-Since date => is considered as a 
  +    #    non-If-Modified-Since require
  +    # 
  +    my %dates = (
  +        'Sun, 29 Oct 2000 15:43:28 GMT' => "the resource was modified since #1",
  +        'Sun, 28 Oct 2000 15:43:29 GMT' => "the resource was modified since #2",
  +        'Thu, 32 Jun 1999 24:59:59 MIT' => "bogus If-Modified-Since #1",
  +        'Thu Juk 99 00:00:00 9999 FUK'  => "bogus If-Modified-Since #2",
       );
  +    my $received = '<html><head></head><body>Test</body></html>';
  +    while ( my($if_modified_since, $debug) = each %dates) {
  +        my $res = GET($url, 'If-Modified-Since' => $if_modified_since);
  +        t_debug "If-Modified-Since $if_modified_since";
  +        ok t_cmp(
  +            200,
  +            $res->code,
  +            "$debug (code)"
  +        );
  +
  +        ok t_cmp(
  +            $received,
  +            $res->content,
  +            "$debug (body)"
  +        );
   
  -    ok t_cmp(
  -        '<html><head></head><body>Test</body></html>',
  -        $res->content,
  -        "test !HTTP_NOT_MODIFIED (normal body)",
  -    );
  -
  -    #t_debug $res->as_string;
  +        #t_debug $res->as_string;
  +    }
   }
  
  
  
  1.2       +18 -8     modperl-2.0/ModPerl-Registry/t/cgi-bin/304.pl
  
  Index: 304.pl
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/ModPerl-Registry/t/cgi-bin/304.pl,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 304.pl    6 Aug 2003 07:30:31 -0000       1.1
  +++ 304.pl    14 Aug 2003 03:52:03 -0000      1.2
  @@ -1,30 +1,40 @@
  +use strict;
  +use warnings FATAL => 'all';
  +
  +# manually handle 'If-Modified-Since' requests
  +
   use APR::Date ();
   use Apache::Util ();
   use Apache::RequestRec ();
   
  -use strict;
  -use warnings FATAL => 'all';
  -
   use constant FMT => '%a, %d %b %Y %H:%M:%S %Z';
   use constant GMT => 1;
  +use Apache::Const -compile => qw(HTTP_NOT_MODIFIED);
   
   my $last_modified = "Sun, 29 Oct 2000 15:43:29 GMT";
   
   my $r = shift;
   
  -my $date = Apache::Util::format_time($r->request_time, FMT, GMT, $r->pool);
  -
   my $if_modified_since = $r->headers_in->{'If-Modified-Since'};
   
   my $status = 200;
   my $body   = '<html><head></head><body>Test</body></html>';
   
  -if ($if_modified_since && APR::Date::parse_http($last_modified) 
  -    < APR::Date::parse_http($if_modified_since)) {
  +#APR::Date::parse_http may fail
  +my $if_modified_since_secs =
  +    ($if_modified_since && APR::Date::parse_http($if_modified_since)) || 0;
  +my $last_modified_secs = APR::Date::parse_http($last_modified);
  +
  +#warn "If-Modified-Since      $if_modified_since\n";
  +#warn "last_modified_secs     $last_modified_secs\n";
  +#warn "if_modified_since_secs $if_modified_since_secs\n\n";
   
  -    $status = 304;
  +if ($last_modified_secs < $if_modified_since_secs) {
  +    $status = Apache::HTTP_NOT_MODIFIED;
       $body   = '';
   }
  +
  +my $date = Apache::Util::format_time($r->request_time, FMT, GMT, $r->pool);
   
   print <<HEADERS;
   Status: $status
  
  
  

Reply via email to