EV-Memcached

 view release on metacpan or  search on metacpan

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

        });
    });
    run_ev();
}

# --- XS ALIAS: append/prepend ---
{
    my $mc = make_mc();
    my $key = "${prefix}ap_alias";
    $mc->set($key, "hello", sub {
        $mc->append($key, " world", sub {
            my ($res, $err) = @_;
            ok(!$err, "append via XS ALIAS");
            $mc->prepend($key, "say ", sub {
                ok(!$err, "prepend via XS ALIAS");
                $mc->get($key, sub {
                    my ($val) = @_;
                    is($val, "say hello world", "append/prepend correct");
                    EV::break;
                });
            });
        });
    });
    run_ev();
    $mc->disconnect;
}

# --- XS ALIAS: touch/gat/gats ---
{
    my $mc = make_mc();
    my $key = "${prefix}tg_alias";
    $mc->set($key, "data", 0, 42, sub {
        $mc->touch($key, 300, sub {
            my ($res, $err) = @_;
            ok(!$err, "touch via XS ALIAS");

            $mc->gat($key, 300, sub {
                my ($val, $err) = @_;
                is($val, "data", "gat via XS ALIAS");

                $mc->gats($key, 300, sub {
                    my ($result, $err) = @_;
                    is($result->{value}, "data", "gats value");
                    is($result->{flags}, 42, "gats flags");
                    ok($result->{cas}, "gats cas");
                    EV::break;
                });
            });
        });
    });
    run_ev();
    $mc->disconnect;
}

# --- new() constructor in XS ---
{
    my $mc = EV::Memcached->new(
        host            => $host,
        port            => $port,
        max_pending     => 10,
        keepalive       => 5,
        priority        => 1,
        connect_timeout => 3000,
        on_error        => sub { diag "error: @_" },
    );
    $mc->on_connect(sub { EV::break });
    my $t = EV::timer 5, 0, sub { fail("timeout"); EV::break };
    EV::run;

    ok($mc->is_connected, "XS new() connected");
    is($mc->max_pending, 10, "XS new() max_pending");
    is($mc->connect_timeout, 3000, "XS new() connect_timeout");
    $mc->disconnect;
}

# --- fire-and-forget set with expiry and flags ---
{
    my $mc = make_mc();
    my $key = "${prefix}ff_opts";
    $mc->set($key, "val", 300, 77);
    $mc->noop(sub {
        $mc->gets($key, sub {
            my ($result, $err) = @_;
            is($result->{value}, "val", "fire-and-forget set with expiry/flags: value");
            is($result->{flags}, 77, "fire-and-forget set with expiry/flags: flags");
            EV::break;
        });
    });
    run_ev();
    $mc->disconnect;
}

done_testing;



( run in 1.807 second using v1.01-cache-2.11-cpan-d8267643d1d )