Merge branch 'hotfix_myinfo'
[catagits/BackPAN-Web.git] / t / leaktrace.t
CommitLineData
c4e00ace 1use strict;
2use warnings;
3use lib 'lib';
4use BackPAN::Web;
5use Plack::Test;
6use HTTP::Request::Common;
7use Test::More;
8use Devel::Cycle;
9use Data::Dumper;
10use Devel::Events::Handler::ObjectTracker;
11use Devel::Events::Filter::RemoveFields;
12use Devel::Events::Generator::Objects;
13
14my $tracker = Devel::Events::Handler::ObjectTracker->new();
15
16my $gen = Devel::Events::Generator::Objects->new(
17 handler => Devel::Events::Filter::RemoveFields->new(
18 fields => [qw/generator/], # don't need to have a ref to $gen in each event
19 handler => $tracker,
20),
21);
22
23
24my $app = BackPAN::Web->as_psgi_app;
25
26my $run = sub {
27 $gen->enable(); # start generating events
28 test_psgi app => $app,
29 client => sub {
30 my $cb = shift;
31 foreach my $path (qw{/ /releases /dists /authors /about}) {
32 for (1..1000) {
33 my $res = $cb->(GET $path);
34 ok($res->code == 200) or diag($res->code);
35 }
36 }
37 };
38 $gen->disable();
39};
40$run->();
41
42# live_objects is a Tie::RefHash::Weak hash
43
44my @leaked_objects = keys %{ $tracker->live_objects };
45
46print "leaked ", scalar(@leaked_objects), " objects\n";
47
48foreach my $object ( @leaked_objects ) {
49 print "Leaked object: $object\n";
50
51 # the event that generated it
52 #print Dumper( $object, $tracker->live_objects->{$object} );
53
54 find_cycle( $object );
55}
56
57done_testing();