r14214@rob-kinyons-computer (orig r8081): rkinyon | 2006-11-17 20:51:21 -0500
[dbsrgits/DBM-Deep.git] / t / 41_transaction_multilevel.t
CommitLineData
9a63e1f2 1use strict;
2use Test::More tests => 33;
3use Test::Deep;
4use t::common qw( new_fh );
5
6use_ok( 'DBM::Deep' );
7
8my ($fh, $filename) = new_fh();
9my $db1 = DBM::Deep->new(
10 file => $filename,
11 locking => 1,
12 autoflush => 1,
13 num_txns => 16,
14);
15
16my $db2 = DBM::Deep->new(
17 file => $filename,
18 locking => 1,
19 autoflush => 1,
20 num_txns => 16,
21);
22
23$db1->{x} = { foo => 'y' };
24is( $db1->{x}{foo}, 'y', "Before transaction, DB1's X is Y" );
25is( $db2->{x}{foo}, 'y', "Before transaction, DB2's X is Y" );
26
27$db1->begin_work;
28
29 cmp_bag( [ keys %$db1 ], [qw( x )], "DB1 keys correct" );
30 cmp_bag( [ keys %$db2 ], [qw( x )], "DB2 keys correct" );
31
32 cmp_bag( [ keys %{$db1->{x}} ], [qw( foo )], "DB1->X keys correct" );
33 cmp_bag( [ keys %{$db2->{x}} ], [qw( foo )], "DB2->X keys correct" );
34
35 is( $db1->{x}{foo}, 'y', "After transaction, DB1's X is Y" );
36 is( $db2->{x}{foo}, 'y', "After transaction, DB2's X is Y" );
37
38 $db1->{x} = { bar => 30 };
39 ok( !exists $db1->{x}{foo}, "DB1: After reassignment of X, X->FOO is gone" );
40 is( $db2->{x}{foo}, 'y', "DB2: After reassignment of DB1 X, X is Y" );
41
42 cmp_bag( [ keys %{$db1->{x}} ], [qw( bar )], "DB1->X keys correct" );
43 cmp_bag( [ keys %{$db2->{x}} ], [qw( foo )], "DB2->X keys correct" );
44
45$db1->rollback;
46
47cmp_bag( [ keys %$db1 ], [qw( x )], "DB1 keys correct" );
48cmp_bag( [ keys %$db2 ], [qw( x )], "DB2 keys correct" );
49
50cmp_bag( [ keys %{$db1->{x}} ], [qw( foo )], "DB1->X keys correct" );
51cmp_bag( [ keys %{$db2->{x}} ], [qw( foo )], "DB2->X keys correct" );
52
53is( $db1->{x}{foo}, 'y', "Before transaction, DB1's X is Y" );
54is( $db2->{x}{foo}, 'y', "Before transaction, DB2's X is Y" );
55
56$db1->begin_work;
57
58 cmp_bag( [ keys %$db1 ], [qw( x )], "DB1 keys correct" );
59 cmp_bag( [ keys %$db2 ], [qw( x )], "DB2 keys correct" );
60
61 cmp_bag( [ keys %{$db1->{x}} ], [qw( foo )], "DB1->X keys correct" );
62 cmp_bag( [ keys %{$db2->{x}} ], [qw( foo )], "DB2->X keys correct" );
63
64 is( $db1->{x}{foo}, 'y', "After transaction, DB1's X is Y" );
65 is( $db2->{x}{foo}, 'y', "After transaction, DB2's X is Y" );
66
67 $db1->{x} = { bar => 30 };
68 ok( !exists $db1->{x}{foo}, "DB1: After reassignment of X, X->FOO is gone" );
69 is( $db2->{x}{foo}, 'y', "DB2: After reassignment of DB1 X, X is Y" );
70
71 cmp_bag( [ keys %{$db1->{x}} ], [qw( bar )], "DB1->X keys correct" );
72 cmp_bag( [ keys %{$db2->{x}} ], [qw( foo )], "DB2->X keys correct" );
73
74$db1->commit;
75
76cmp_bag( [ keys %$db1 ], [qw( x )], "DB1 keys correct" );
77cmp_bag( [ keys %$db2 ], [qw( x )], "DB2 keys correct" );
78
79cmp_bag( [ keys %{$db1->{x}} ], [qw( bar )], "DB1->X keys correct" );
80cmp_bag( [ keys %{$db2->{x}} ], [qw( bar )], "DB2->X keys correct" );