From 5ff1f078d56120e660324f18218c585ec49285f4 Mon Sep 17 00:00:00 2001 From: Kenichi Ishigaki Date: Thu, 23 Jul 2009 14:22:04 +0000 Subject: [PATCH] DBD-SQLite: also applied @CALL_FUNCS trick to t/08_busy.t --- t/08_busy.t | 140 ++++++++++++++++++++++++----------------------- t/08_busy_func.t | 80 --------------------------- 2 files changed, 71 insertions(+), 149 deletions(-) delete mode 100644 t/08_busy_func.t diff --git a/t/08_busy.t b/t/08_busy.t index 2307a7f..d20dd6b 100644 --- a/t/08_busy.t +++ b/t/08_busy.t @@ -8,80 +8,82 @@ BEGIN { $^W = 1; } -use t::lib::Test; +use t::lib::Test qw/connect_ok @CALL_FUNCS/; use Test::More; - -BEGIN { - plan skip_all => 'requires DBI v1.608' if $DBI::VERSION < 1.608; -} - use Test::NoWarnings; -plan tests => 12; +plan tests => 11 * @CALL_FUNCS + 1; -my $dbh = connect_ok( - dbfile => 'foo', - RaiseError => 1, - PrintError => 0, - AutoCommit => 0, -); +foreach my $call_func (@CALL_FUNCS) { -my $dbh2 = connect_ok( - dbfile => 'foo', - RaiseError => 1, - PrintError => 0, - AutoCommit => 0, -); + my $dbh = connect_ok( + dbfile => 'foo', + RaiseError => 1, + PrintError => 0, + AutoCommit => 0, + ); -ok($dbh2->sqlite_busy_timeout(3000)); + my $dbh2 = connect_ok( + dbfile => 'foo', + RaiseError => 1, + PrintError => 0, + AutoCommit => 0, + ); -ok($dbh->do("CREATE TABLE Blah ( id INTEGER, val VARCHAR )")); -ok($dbh->commit); -ok($dbh->do("INSERT INTO Blah VALUES ( 1, 'Test1' )")); -my $start = time; -eval { - $dbh2->do("INSERT INTO Blah VALUES ( 2, 'Test2' )"); -}; -ok($@); -if ($@) { - print "# insert failed : $@"; - $dbh2->rollback; -} - -$dbh->commit; -ok($dbh2->do("INSERT INTO Blah VALUES ( 2, 'Test2' )")); -$dbh2->commit; - -$dbh2->disconnect; -undef($dbh2); - -pipe(READER, WRITER); -my $pid = fork; -if (!defined($pid)) { - # fork failed - skip("No fork here", 1); - skip("No fork here", 1); -} elsif (!$pid) { - # child - my $dbh2 = DBI->connect('dbi:SQLite:foo', '', '', - { - RaiseError => 1, - PrintError => 0, - AutoCommit => 0, - }); - $dbh2->do("INSERT INTO Blah VALUES ( 3, 'Test3' )"); - select WRITER; $| = 1; select STDOUT; - print WRITER "Ready\n"; - sleep(5); - $dbh2->commit; -} else { - # parent - close WRITER; - my $line = ; - chomp($line); - ok($line, "Ready"); - ok($dbh->sqlite_busy_timeout(10000)); - ok($dbh->do("INSERT INTO Blah VALUES (4, 'Test4' )")); - $dbh->commit; - wait; + ok($dbh2->$call_func(3000, 'busy_timeout')); + + ok($dbh->do("CREATE TABLE Blah ( id INTEGER, val VARCHAR )")); + ok($dbh->commit); + ok($dbh->do("INSERT INTO Blah VALUES ( 1, 'Test1' )")); + my $start = time; + eval { + $dbh2->do("INSERT INTO Blah VALUES ( 2, 'Test2' )"); + }; + ok($@); + if ($@) { + print "# insert failed : $@"; + $dbh2->rollback; + } + + $dbh->commit; + ok($dbh2->do("INSERT INTO Blah VALUES ( 2, 'Test2' )")); + $dbh2->commit; + + $dbh2->disconnect; + undef($dbh2); + + pipe(READER, WRITER); + my $pid = fork; + if (!defined($pid)) { + # fork failed + skip("No fork here", 1); + skip("No fork here", 1); + } elsif (!$pid) { + # child + my $dbh2 = DBI->connect('dbi:SQLite:foo', '', '', + { + RaiseError => 1, + PrintError => 0, + AutoCommit => 0, + }); + $dbh2->do("INSERT INTO Blah VALUES ( 3, 'Test3' )"); + select WRITER; $| = 1; select STDOUT; + print WRITER "Ready\n"; + sleep(5); + $dbh2->commit; + $dbh2->disconnect; + exit; + } else { + # parent + close WRITER; + my $line = ; + chomp($line); + ok($line, "Ready"); + ok($dbh->$call_func(10000, 'busy_timeout')); + ok($dbh->do("INSERT INTO Blah VALUES (4, 'Test4' )")); + $dbh->commit; + wait; + $dbh->disconnect; + unlink 'foo'; + } } diff --git a/t/08_busy_func.t b/t/08_busy_func.t deleted file mode 100644 index af728dd..0000000 --- a/t/08_busy_func.t +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/perl - -# Test that two processes can write at once, assuming we commit timely. - -use strict; -BEGIN { - $| = 1; - $^W = 1; -} - -use t::lib::Test; -use Test::More tests => 12; -use Test::NoWarnings; - -my $dbh = connect_ok( - dbfile => 'foo', - RaiseError => 1, - PrintError => 0, - AutoCommit => 0, -); - -my $dbh2 = connect_ok( - dbfile => 'foo', - RaiseError => 1, - PrintError => 0, - AutoCommit => 0, -); - -ok($dbh2->func(3000, 'busy_timeout')); - -ok($dbh->do("CREATE TABLE Blah ( id INTEGER, val VARCHAR )")); -ok($dbh->commit); -ok($dbh->do("INSERT INTO Blah VALUES ( 1, 'Test1' )")); -my $start = time; -eval { - $dbh2->do("INSERT INTO Blah VALUES ( 2, 'Test2' )"); -}; -ok($@); -if ($@) { - print "# insert failed : $@"; - $dbh2->rollback; -} - -$dbh->commit; -ok($dbh2->do("INSERT INTO Blah VALUES ( 2, 'Test2' )")); -$dbh2->commit; - -$dbh2->disconnect; -undef($dbh2); - -pipe(READER, WRITER); -my $pid = fork; -if (!defined($pid)) { - # fork failed - skip("No fork here", 1); - skip("No fork here", 1); -} elsif (!$pid) { - # child - my $dbh2 = DBI->connect('dbi:SQLite:foo', '', '', - { - RaiseError => 1, - PrintError => 0, - AutoCommit => 0, - }); - $dbh2->do("INSERT INTO Blah VALUES ( 3, 'Test3' )"); - select WRITER; $| = 1; select STDOUT; - print WRITER "Ready\n"; - sleep(5); - $dbh2->commit; -} else { - # parent - close WRITER; - my $line = ; - chomp($line); - ok($line, "Ready"); - ok($dbh->func(10000, 'busy_timeout')); - ok($dbh->do("INSERT INTO Blah VALUES (4, 'Test4' )")); - $dbh->commit; - wait; -}