-
Notifications
You must be signed in to change notification settings - Fork 3
/
15_auto_reconnect.t
63 lines (49 loc) · 1.26 KB
/
15_auto_reconnect.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use strict;
use warnings;
use Test::More;
use Mock::Quick;
use Otogiri;
use File::Temp qw(tempfile);
my ($fh, $dbfile) = tempfile('db_XXXXX', UNLINK => 1, EXLOCK => 0);
my $db = Otogiri->new( connect_info => ["dbi:SQLite:dbname=$dbfile", '', ''] );
my $sql = "
CREATE TABLE person (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL DEFAULT 20
);";
$db->do($sql);
$db->fast_insert('person', {
name => 'Sherlock Shellingford',
age => 15,
});
my $person_id = $db->last_insert_id();
subtest 'reconnect', sub {
$db->disconnect();
$db->reconnect();
my $row = $db->single('person', { id => $person_id });
ok( defined $row );
};
subtest 'auto reconnect', sub {
$db->disconnect();
#$db->reconnect();
my $row = $db->single('person', { id => $person_id });
ok( defined $row );
};
subtest 'in transaction', sub {
my $txn = $db->txn_scope();
my $row = $db->single('person', { id => $person_id });
my $guard = qclass(
-takeover => 'DBIx::Sunny::db',
ping => sub { 0 },
);
eval {
$db->insert('person', {
name => 'Nero Yuzurizaki',
age => 15,
});
};
like( $@, qr/^Detected transaction/ );
$txn->rollback();
};
done_testing;