mark some tests as requiring no preloads when run with yath
[catagits/Catalyst-Runtime.git] / t / optional_memleak.t
index bc5a5d4..499c365 100644 (file)
@@ -1,26 +1,30 @@
-#!perl
-
 use strict;
 use warnings;
 
+use Test::More;
+BEGIN {
+    plan skip_all => 'set TEST_MEMLEAK to enable this test'
+        unless $ENV{TEST_MEMLEAK};
+}
+
 use FindBin;
 use lib "$FindBin::Bin/lib";
-
-use Test::More;
 use Catalyst::Test 'TestApp';
-use YAML;
-eval "use GTop";
 
-plan skip_all => 'set TEST_MEMLEAK to enable this test'
-    unless $ENV{TEST_MEMLEAK};
-plan skip_all => 'GTop required for this test' if $@;
+eval "use Proc::ProcessTable";
+plan skip_all => 'Proc::ProcessTable required for this test' if $@;
 
-eval "use HTTP::Body 0.03";
-plan skip_all => 'HTTP::Body >= 0.03 required for this test' if $@;
+use JSON::MaybeXS qw(decode_json);
 
-our $gtop = GTop->new;
-our ( $initial, $final ) = ( 0, 0 ); 
-our $tests = YAML::LoadFile("$FindBin::Bin/stress.yml");
+our $t = Proc::ProcessTable->new( cache_ttys => 1 );
+our ( $initial, $final ) = ( 0, 0 );
+my $test_data = do {
+  open my $fh, '<:raw', "$FindBin::Bin/optional_stress.json" or die "$!";
+  local $/;
+  <$fh>;
+};
+
+our $tests = decode_json($test_data);
 
 my $total_tests = 0;
 
@@ -34,7 +38,7 @@ if ( $user_test ) {
 else {
     map { $total_tests += scalar @{ $tests->{$_} } } keys %{$tests};
     plan tests => $total_tests;
-    
+
     foreach my $test_group ( keys %{$tests} ) {
         foreach my $test ( @{ $tests->{$test_group} } ) {
             run_test( $test );
@@ -44,28 +48,40 @@ else {
 
 sub run_test {
     my $uri = shift || die 'No URI given for test';
-    
+
     print "TESTING $uri\n";
-    
+
     # make a few requests to set initial memory size
     for ( 1 .. 3 ) {
         request( $uri );
     }
-    
-    $initial = $gtop->proc_mem($$)->size;
-    print "Initial Size: " . GTop::size_string($initial) . "\n";
-    
+
+    $initial = size_of($$);
+    print "Initial Size: $initial\n";
+
     for ( 1 .. 500 ) {
         request( $uri );
     }
-    
-    $final = $gtop->proc_mem($$)->size;
-    print "Final Size:   " . GTop::size_string($final) . "\n";
-    
+
+    $final = size_of($$);
+    print "Final Size:   $final\n";
+
     if ( $final > $initial ) {
-        print "Leaked Bytes: " . GTop::size_string($final - $initial) . "\n";
+        print "Leaked:       " . ($final - $initial) . "K\n";
     }
-    
+
     is( $final, $initial, "'$uri' memory is not leaking" );
 }
 
+sub size_of {
+    my $pid = shift;
+
+    foreach my $p ( @{ $t->table } ) {
+        if ( $p->pid == $pid ) {
+            return $p->rss;
+        }
+    }
+
+    die "Pid $pid not found?";
+}
+