Skip to content

Commit

Permalink
add test for MySQL/PostgreSQL
Browse files Browse the repository at this point in the history
  • Loading branch information
tsucchi committed Jan 9, 2015
1 parent 60dd3e8 commit 6324412
Show file tree
Hide file tree
Showing 6 changed files with 170 additions and 6 deletions.
1 change: 1 addition & 0 deletions .mailmap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Takuya Tsuchida <tsucchi@cpan.org> <takuya.tsuchida@gmail.com>
10 changes: 7 additions & 3 deletions META.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,14 @@
"Test::MinimumVersion::Fast" : "0.04",
"Test::PAUSE::Permissions" : "0.04",
"Test::Pod" : "1.41",
"Test::Spellunker" : "v0.2.7"
"Test::PostgreSQL" : "0",
"Test::Spellunker" : "v0.2.7",
"Test::mysqld" : "0"
}
},
"runtime" : {
"requires" : {
"Otogiri" : "0.12",
"Otogiri::Plugin" : "0.03",
"perl" : "5.008001"
}
Expand All @@ -50,8 +53,9 @@
"requires" : {
"DBD::SQLite" : "0",
"File::Temp" : "0",
"Otogiri" : "0",
"Test::More" : "0.98"
"Mock::Quick" : "0",
"Test::More" : "0.98",
"Test::Requires" : "0"
}
}
},
Expand Down
9 changes: 8 additions & 1 deletion cpanfile
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
requires 'perl', '5.008001';
requires 'Otogiri', '0.12';
requires 'Otogiri::Plugin', '0.03';

on configure => sub {
requires 'Module::Build::Tiny', '0.035';
};

on test => sub {
requires 'Otogiri';
requires 'File::Temp';
requires 'DBD::SQLite';
requires 'Test::More', '0.98';
requires 'Test::Requires';
requires 'Mock::Quick';
};

on develop => sub {
requires 'Test::mysqld';
requires 'Test::PostgreSQL';
};
9 changes: 7 additions & 2 deletions t/01_sqlite.t
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use strict;
use warnings;
use Test::More;
use Mock::Quick;
use Otogiri;
use Otogiri::Plugin;
#use DBIx::QueryLog;
Expand Down Expand Up @@ -43,10 +44,13 @@ subtest 'auto reconnect', sub {
};

subtest 'in transaction', sub {

my $txn = $db->txn_scope();
my $row = $db->single('person', { id => $person_id });
$db->dbh->disconnect();

my $guard = qclass(
-takeover => 'DBIx::Sunny::db',
ping => sub { 0 },
);

eval {
$db->insert('person', {
Expand All @@ -55,6 +59,7 @@ subtest 'in transaction', sub {
});
};
like( $@, qr/^Detected transaction/ );
$txn->rollback();
};


Expand Down
74 changes: 74 additions & 0 deletions t/02_mysql.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
use strict;
use warnings;
use Test::More;
use Mock::Quick;
use Otogiri;
use Otogiri::Plugin;
#use DBIx::QueryLog;

use Test::Requires 'Test::mysqld';

my $mysqld = Test::mysqld->new(
my_cnf => {
'skip-networking' => '',
}
) or plan skip_all => $Test::mysqld::errstr;

my $db = Otogiri->new( connect_info => [$mysqld->dsn(dbname => 'test'), '', ''] );
$db->load_plugin('AutoReconnect');


my $sql = "
CREATE TABLE person (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
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->dbh->disconnect();
$db->reconnect();
my $row = $db->single('person', { id => $person_id });
ok( defined $row );
};

subtest 'auto reconnect', sub {
$db->dbh->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;
73 changes: 73 additions & 0 deletions t/03_pg.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
use strict;
use warnings;
use Test::More;
use Mock::Quick;
use Otogiri;
use Otogiri::Plugin;
#use DBIx::QueryLog;

use Test::Requires 'Test::PostgreSQL';

my $pg = Test::PostgreSQL->new(
my_cnf => {
'skip-networking' => '',
}
) or plan skip_all => $Test::PostgreSQL::errstr;

my $db = Otogiri->new( connect_info => [$pg->dsn(dbname => 'test'), '', '']);
$db->load_plugin('AutoReconnect');


my $sql = "
CREATE TABLE person (
id SERIAL PRIMARY KEY,
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->dbh->disconnect();
$db->reconnect();
my $row = $db->single('person', { id => $person_id });
ok( defined $row );
};

subtest 'auto reconnect', sub {
$db->dbh->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;

0 comments on commit 6324412

Please sign in to comment.