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