EV-Pg

 view release on metacpan or  search on metacpan

t/08_features.t  view on Meta::CPAN

    ok($done, 'connect_params: connected and queried');
    $pg->finish if $pg && $pg->is_connected;
}

# --- connect_params reset ---
{
    my $params = EV::Pg->conninfo_parse($conninfo);
    my $reset_done;
    my $pg;
    $pg = EV::Pg->new(
        conninfo_params => $params,
        on_error => sub { diag "Error: $_[0]"; EV::break },
    );
    $pg->on_connect(sub {
        if (!$reset_done) {
            $reset_done = 1;
            $pg->on_connect(sub {
                $pg->query("select 1", sub {
                    my ($rows, $err) = @_;
                    ok(!$err, 'connect_params reset: query after reset ok');
                    is($rows->[0][0], '1', 'connect_params reset: correct result');
                    EV::break;
                });
            });
            $pg->reset;
            return;
        }
    });
    my $t = EV::timer(5, 0, sub { EV::break });
    EV::run;
    ok($reset_done, 'connect_params reset: reset completed');
    $pg->finish if $pg && $pg->is_connected;
}

# --- conninfo_parse ---
{
    my $params = EV::Pg->conninfo_parse('host=localhost dbname=testdb port=5433');
    is(ref $params, 'HASH', 'conninfo_parse: returns hashref');
    is($params->{host}, 'localhost', 'conninfo_parse: host');
    is($params->{dbname}, 'testdb', 'conninfo_parse: dbname');
    is($params->{port}, '5433', 'conninfo_parse: port');
}

# --- conninfo_parse with URI ---
{
    my $params = EV::Pg->conninfo_parse('postgresql://user@host:5434/mydb');
    is(ref $params, 'HASH', 'conninfo_parse URI: returns hashref');
    is($params->{host}, 'host', 'conninfo_parse URI: host');
    is($params->{dbname}, 'mydb', 'conninfo_parse URI: dbname');
}

# --- disconnected accessor tests for new methods ---
{
    my $pg = EV::Pg->new(on_error => sub {});
    is($pg->connection_needs_password, 0, 'connection_needs_password: 0 when not connected');
    ok(!defined $pg->hostaddr, 'hostaddr: undef when not connected');
    ok(!defined $pg->ssl_attribute_names, 'ssl_attribute_names: undef when not connected');
    is($pg->protocol_version, 0, 'protocol_version: 0 when not connected');
}

# --- keep_alive ---
{
    my $pg = EV::Pg->new(on_error => sub {});
    is($pg->keep_alive, 0, 'keep_alive: default off');
    $pg->keep_alive(1);
    is($pg->keep_alive, 1, 'keep_alive: set on');
    $pg->keep_alive(0);
    is($pg->keep_alive, 0, 'keep_alive: set off');
}

# keep_alive via constructor
{
    my $notified;
    my $pg;
    $pg = EV::Pg->new(
        conninfo   => $conninfo,
        keep_alive => 1,
        on_notify  => sub {
            $notified = 1;
            EV::break;
        },
        on_connect => sub {
            is($pg->keep_alive, 1, 'keep_alive: set via constructor');
            $pg->query("listen ka_test", sub {
                $pg->query("notify ka_test", sub {});
            });
        },
        on_error => sub { diag "Error: $_[0]"; EV::break },
    );
    my $t = EV::timer(5, 0, sub { EV::break });
    EV::run;
    ok($notified, 'keep_alive: notification received');
    $pg->finish if $pg && $pg->is_connected;
}



( run in 1.502 second using v1.01-cache-2.11-cpan-941387dca55 )