eval {
require Test::More;
};
if ($@) {
warn "\nTest::More is not available, skipping...\n";
print "1..1\nok\n";
exit;
}
require Test::More;
import Test::More tests => 7;
require_ok (DBIx::HA);
my $dbname='NONE'; # for checking if callbackfunction was called
my $connect_attributes = {
syb_flush_finish => 1,
AutoCommit => 1,
ChopBlanks => 1,
PrintError => 0,
RaiseError => 0,
RootClass => 'DBIx::HA'
};
$DATABASE::conf{'test'} = {
max_retries => 2,
db_stack => [
[ 'dbi:NullP:server=prod1;database=test', 'user1', 'password1', $connect_attributes ],
[ 'dbi:NullP:server=prod2;database=test', 'user2', 'password2', $connect_attributes ],
[ 'dbi:NullP:server=prod3;database=test', 'user3', 'password3', $connect_attributes ],
],
pingtimeout => -1,
failoverlevel => 'process',
connecttimeout => 1,
executetimeout => 8,
callback_function => \&MyCallbackFunction,
};
sub MyCallbackFunction {
my $dbh = shift;
$dbname = shift;
1;
}
is (DBIx::HA->initialize(), '', 'initialize()');
my $dbh = DBIx::HA->connect('test');
is (ref($dbh), 'DBIx::HA::db', 'connect()');
my $sth = $dbh->prepare("select 1");
is (ref($sth), 'DBIx::HA::st', 'prepare()');
# hard-code a switch to the next handle
$DATABASE::conf{'test'}->{'active_db'} = $DATABASE::conf{'test'}->{'db_stack'}->[1];
is ($sth->execute, 1, 'execute() on failover');
is (DBIx::HA::_isactivedb($DATABASE::conf{'test'}->{'db_stack'}->[1]->[0]), 1, 'failover to secondary db');
is ($dbname, 'test', 'callback function was called');
$sth->fetchall_arrayref;
$dbh->disconnect;
__END__