EV-MariaDB
view release on metacpan or search on metacpan
t/13_extra_coverage.t view on Meta::CPAN
$obj->q("select database()", sub {
my ($rows, $err) = @_;
ok(!$err && lc($rows->[0][0]) eq lc($TestMariaDB::db),
'db alias: connects to correct database');
EV::break;
});
},
on_error => sub { diag("Error: $_[0]"); EV::break },
);
my $timeout = EV::timer(10, 0, sub { diag("timeout"); EV::break });
EV::run;
$obj->finish if $obj && $obj->is_connected;
}
# --- Test 9-10: execute() with zero parameters ---
with_mariadb(cb => sub {
$m->prepare("select 1", sub {
my ($stmt, $err) = @_;
ok(!$err, 'execute 0 params: prepare ok');
$m->execute($stmt, [], sub {
my ($rows, $err2) = @_;
ok(!$err2 && $rows->[0][0] == 1,
'execute 0 params: returns correct result');
$m->close_stmt($stmt, sub { EV::break });
});
});
});
# --- Test 11-12: change_user error path ---
with_mariadb(cb => sub {
$m->change_user("nonexistent_user_xyzzy_$$", "badpass", undef, sub {
my ($ok, $err) = @_;
ok($err, 'change_user error: got error for bad user');
ok(!defined $ok, 'change_user error: result is undef');
EV::break;
});
});
# --- Test 13: die inside on_connect handler is caught as warning ---
{
my @warnings;
local $SIG{__WARN__} = sub { push @warnings, $_[0] };
$m = EV::MariaDB->new(
TestMariaDB::connect_args(),
on_connect => sub {
die "intentional on_connect exception";
},
on_error => sub { },
);
my $timeout = EV::timer(5, 0, sub { EV::break });
EV::run;
ok(scalar(grep { /intentional on_connect exception/ } @warnings),
'die in on_connect: caught as warning');
$m->finish if $m && $m->is_connected;
}
# --- Test 14: die inside on_error handler is caught as warning ---
{
my @warnings;
local $SIG{__WARN__} = sub { push @warnings, $_[0] };
# Connect with bad credentials to trigger on_error (connection-level error)
$m = EV::MariaDB->new(
host => $TestMariaDB::host,
port => $TestMariaDB::port,
($TestMariaDB::socket ? (unix_socket => $TestMariaDB::socket) : ()),
user => "nonexistent_user_xyzzy_$$",
password => "badpass",
on_error => sub {
die "intentional on_error exception";
},
);
my $timeout = EV::timer(5, 0, sub { EV::break });
EV::run;
ok(scalar(grep { /intentional on_error exception/ } @warnings),
'die in on_error: caught as warning');
}
# --- Test 15: handler setter with non-CODE value silently ignores ---
{
my $obj = EV::MariaDB->new(on_error => sub { "test" });
$obj->on_error("not a coderef");
ok(!defined $obj->on_error,
'handler setter: non-CODE value clears handler');
}
# --- Test 16: handler setter with non-CODE (on_connect) ---
{
my $obj = EV::MariaDB->new(on_error => sub {});
$obj->on_connect(sub { 1 });
ok(defined $obj->on_connect, 'handler setter: CODE ref sets ok');
$obj->on_connect(42);
ok(!defined $obj->on_connect,
'handler setter: non-CODE value clears on_connect');
}
( run in 0.727 second using v1.01-cache-2.11-cpan-140bd7fdf52 )