stas        2004/07/12 16:22:32

  Modified:    ModPerl-Registry/t closure.t
  Log:
  utime is not very granular on win32, use more than 2 seconds delay, but
  don't sleep, just reset the timestamp to the original value when the test
  is done
  Submitted by: Randy Kobes
  Reviewed by:  randyk
  
  Revision  Changes    Path
  1.13      +21 -11    modperl-2.0/ModPerl-Registry/t/closure.t
  
  Index: closure.t
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/ModPerl-Registry/t/closure.t,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -u -r1.12 -r1.13
  --- closure.t 11 Jul 2004 04:29:26 -0000      1.12
  +++ closure.t 12 Jul 2004 23:22:32 -0000      1.13
  @@ -21,6 +21,7 @@
   
   my $file = 'closure.pl';
   my $path = catfile $cfg->{vars}->{serverroot}, 'cgi-bin', $file;
  +my $orig_mtime = (stat($path))[8];
   
   # for all sub-tests in this test, we make sure that we always get onto
   # the same interpreter. if this doesn't happen we skip the sub-test or
  @@ -45,7 +46,7 @@
       );
   
       # modify the file
  -    sleep_and_touch_file($path);
  +    touch_mtime($path);
   
       # it doesn't matter, since the script is not cached anyway
       my $third = get_body($same_interp, $url);
  @@ -55,6 +56,8 @@
           1,
           "never the closure problem",
       );
  +
  +    reset_mtime($path);
   }
   
   {
  @@ -77,7 +80,7 @@
       );
   
       # modify the file
  -    sleep_and_touch_file($path);
  +    touch_mtime($path);
   
       # should not notice closure effect on the first request
       my $third = get_body($same_interp, $url);
  @@ -87,6 +90,8 @@
           1,
           "no closure on the first request",
       );
  +
  +    reset_mtime($path);
   }
   
   {
  @@ -109,7 +114,7 @@
       );
   
       # modify the file
  -    sleep_and_touch_file($path);
  +    touch_mtime($path);
   
       # modification shouldn't be noticed
       my $third = get_body($same_interp, $url);
  @@ -119,17 +124,22 @@
           1,
           "no reload on modification, the closure problem persists",
       );
  +
  +    reset_mtime($path);
  +}
  +
  +sub touch_mtime {
  +    my $file = shift;
  +    # push the mtime into the future (at least 2 secs to work on win32)
  +    # so ModPerl::Registry will re-compile the package
  +    my $time = time + 5; # make it 5 to be sure
  +    utime $time, $time, $file;
   }
   
  -sub sleep_and_touch_file {
  +sub reset_mtime {
       my $file = shift;
  -    # need to wait at least 1 whole sec, so utime() will notice the
  -    # difference. select() has better resolution than 1 sec as in
  -    # sleep() so we are more likely to have the minimal waiting time,
  -    # while fulfilling the purpose
  -    select undef, undef, undef, 1.00; # sure 1 sec
  -    my $now = time;
  -    utime $now, $now, $file;
  +    # reset  the timestamp to the original mod-time
  +    utime $orig_mtime, $orig_mtime, $file;
   }
   
   # if we fail to find the same interpreter, return undef (this is not
  
  
  

Reply via email to