7ecec4946b8544940ee4f8b378f8fb019bbbdcd2
[dbsrgits/DBIx-Class.git] / t / 52leaks.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5
6 use lib qw(t/lib);
7
8 BEGIN {
9   require DBIx::Class::Optional::Dependencies;
10   plan skip_all => 'Test needs: ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_leaks')
11     unless ( DBIx::Class::Optional::Dependencies->req_ok_for ('test_leaks') );
12 }
13
14 use DBICTest;
15 use DBICTest::Schema;
16 use Scalar::Util 'weaken';
17 use namespace::clean;
18
19 import Test::Memory::Cycle;
20
21 my $weak;
22
23 {
24   my $s = $weak->{schema} = DBICTest->init_schema;
25   ok ($s->storage->connected, 'we are connected');
26   memory_cycle_ok($s, 'No cycles in schema');
27
28   my $storage = $weak->{storage} = $s->storage;
29   memory_cycle_ok($storage, 'No cycles in storage');
30
31   my $rs = $weak->{resultset} = $s->resultset ('Artist');
32   memory_cycle_ok($rs, 'No cycles in resultset');
33
34   my $rsrc = $weak->{resultsource} = $rs->result_source;
35   memory_cycle_ok($rsrc, 'No cycles in resultsource');
36
37   my $row = $weak->{row} = $rs->first;
38   memory_cycle_ok($row, 'No cycles in row');
39
40   my $sqla = $weak->{sqla} = $s->storage->sql_maker;
41   memory_cycle_ok($sqla, 'No cycles in SQL maker');
42
43   my $dbh = $weak->{dbh} = $s->storage->_get_dbh;
44   memory_cycle_ok($dbh, 'No cycles in DBI handle');
45
46   for (@{$dbh->{ChildHandles}}) {
47     $weak->{"$_"} = $_ if $_;
48   }
49
50   weaken $_ for values %$weak;
51   memory_cycle_ok($weak, 'No cycles in weak object collection');
52 }
53
54 for (keys %$weak) {
55   ok (! $weak->{$_}, "No $_ leaks");
56 }
57
58 done_testing;