Move find_co_root into DBICTest::Util
[dbsrgits/DBIx-Class.git] / xt / extra / sqlite_deadlock.t
CommitLineData
d7b94f7a 1use strict;
2use warnings;
3
4use Test::More;
554484cb 5use Test::Exception;
6use File::Temp ();
d7b94f7a 7
8d6b1478 8use lib 't/lib';
8d6b1478 9use DBICTest;
8d6b1478 10
d7b94f7a 11plan tests => 2;
39c9c72d 12my $wait_for = 120; # how many seconds to wait
d7b94f7a 13
8d6b1478 14# don't lock anything - this is a tempfile anyway
15$ENV{DBICTEST_LOCK_HOLDER} = -1;
16
d7b94f7a 17for my $close (0,1) {
18
f86589ef 19 my $tmp = File::Temp->new(
20 UNLINK => 1,
8d6b1478 21 DIR => 't/var',
22 SUFFIX => '.db',
23 TEMPLATE => 'DBIxClass-XXXXXX',
f86589ef 24 EXLOCK => 0, # important for BSD and derivatives
25 );
26
d7b94f7a 27 my $tmp_fn = $tmp->filename;
28 close $tmp if $close;
29
30 local $SIG{ALRM} = sub { die sprintf (
31 "Timeout of %d seconds reached (tempfile still open: %s)",
32 $wait_for, $close ? 'No' : 'Yes'
33 )};
34
35 alarm $wait_for;
36
37 lives_ok (sub {
38 my $schema = DBICTest::Schema->connect ("DBI:SQLite:$tmp_fn");
8d6b1478 39 $schema->storage->dbh_do(sub { $_[1]->do('PRAGMA synchronous = OFF') });
d7b94f7a 40 DBICTest->deploy_schema ($schema);
8d6b1478 41 DBICTest->populate_schema ($schema);
d7b94f7a 42 });
43
44 alarm 0;
45}