File Coverage

blib/lib/KiokuDB/Test/Fixture/CAS.pm
Criterion Covered Total %
statement 57 63 90.4
branch 9 10 90.0
condition 0 2 0.0
subroutine 12 13 92.3
pod 0 2 0.0
total 78 90 86.6


line stmt bran cond sub pod time code
1             #!/usr/bin/perl
2              
3             package KiokuDB::Test::Fixture::CAS;
4 2     2   1881 use Moose;
  2         4  
  2         12  
5              
6 2     2   9617 use Test::More;
  2         3  
  2         17  
7 2     2   519 use Scalar::Util qw(weaken);
  2         4  
  2         110  
8              
9 2     2   702 use KiokuDB::Test::Digested;
  2         5  
  2         89  
10              
11 2     2   15 use namespace::clean -except => 'meta';
  2         2  
  2         16  
12              
13             with qw(KiokuDB::Test::Fixture);
14              
15             sub create {
16 33     33 0 75 my $self = shift;
17              
18 33         1052 KiokuDB::Test::Digested->new(
19             foo => "pizza",
20             );
21             }
22              
23             sub verify {
24 33     33 0 78 my $self = shift;
25              
26 33         137 $self->no_live_objects;
27              
28 33         982 my $l = $self->directory->live_objects;
29              
30 33         921 my $cache = $l->cache;
31              
32 33         962 my $old_value = $l->leak_tracker;
33              
34             my $reset = Scope::Guard->new(sub {
35 33 50   33   299 if ( $old_value ) {
36 0         0 $l->leak_tracker($old_value);
37             } else {
38 33         1193 $l->clear_leak_tracker;
39             }
40 33         341 });
41              
42             $l->leak_tracker(sub {
43 0   0 0   0 my $i = $Test::Builder::Level || 1;
44 0         0 $i++ until (caller($i))[1] eq __FILE__;
45 0         0 local $Test::Builder::Level = $i + 2;
46 0         0 fail("no leaks");
47 0         0 diag("leaked @_"),
48 33         1527 });
49              
50 33         1014 my $id = $self->populate_ids->[0];
51              
52             $self->txn_lives(sub {
53 33     33   169 my $obj = $self->lookup_ok($id);
54              
55 33         1393 is( $obj->digest, $id, "id is object digest" );
56              
57 33         11531 is( $obj->foo, "pizza", "field retained" );
58 33         303 });
59              
60 33 100       11913 if ( $cache ) {
61 16         88 isa_ok( my $cached = $cache->get($id), "KiokuDB::Test::Digested", "cached object" );
62 16         7727 $self->live_objects_are($cached);
63 16         11629 $cache->clear;
64             }
65              
66 33         386 $self->no_live_objects();
67              
68             $self->txn_lives(sub {
69             # test idempotent insertions
70 33     33   1131 $self->insert_ok( KiokuDB::Test::Digested->new( foo => "pizza" ) );
71 33         266 });
72              
73 33 100       11456 $cache->clear if $cache;
74 33         2017 $self->no_live_objects();
75              
76             $self->txn_lives(sub {
77 33     33   169 my $obj = $self->lookup_ok($id);
78              
79 33         207 my $new_id = $self->insert_ok( $obj->clone );
80              
81 33         1319 local $TODO = "ID not yet returned";
82 33         159 is( $new_id, $id, "idempotent add when instance already live" );
83 33         273 });
84              
85 33 100       11673 $cache->clear if $cache;
86 33         840 $self->no_live_objects();
87              
88             $self->txn_lives(sub {
89 33     33   235 my $obj = $self->lookup_ok($id);
90              
91 33         172 my $new_id = $self->insert_ok( $obj->clone( bar => "blah" ) );
92              
93 33         251 ok( $new_id, "got a new ID" );
94 33         9967 isnt( $new_id, $id, "idempotent add when instance already live" );
95 33         286 });
96              
97 33 100       11661 if ( $cache ) {
98 16         89 isa_ok( my $cached = $cache->get($id), "KiokuDB::Test::Digested", "cached object" );
99 16         7730 $self->live_objects_are($cached);
100 16         11313 $cache->clear;
101             }
102              
103 33         363 $self->no_live_objects();
104             }
105              
106             __PACKAGE__->meta->make_immutable;
107              
108             __PACKAGE__
109              
110             __END__