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 )