EV-Etcd

 view release on metacpan or  search on metacpan

t/lease.t  view on Meta::CPAN


SKIP: {
    skip "no lease id", 15 unless $lease_id;

    # Test 5-7: lease_time_to_live (basic)
    $client->lease_time_to_live($lease_id, sub {
        my ($resp, $err) = @_;
        ok(!$err, 'lease_time_to_live succeeded');
        ok($resp->{header}, 'ttl response has header');
        ok($resp->{ttl} > 0, 'ttl is positive');

        diag("Lease TTL: $resp->{ttl} seconds remaining, granted_ttl=$resp->{granted_ttl}");
        EV::break;
    });
    my $t2 = EV::timer(5, 0, sub { fail('timeout'); EV::break });
    EV::run;

    # Test 8: Put a key with this lease
    $client->put($test_key, "lease-test-value", { lease => $lease_id }, sub {
        my ($resp, $err) = @_;
        ok(!$err, 'put with lease succeeded');
        EV::break;
    });
    my $t3 = EV::timer(5, 0, sub { fail('timeout'); EV::break });
    EV::run;

    # Test 9-10: lease_time_to_live with keys option
    $client->lease_time_to_live($lease_id, { keys => 1 }, sub {
        my ($resp, $err) = @_;
        ok(!$err, 'lease_time_to_live with keys succeeded');
        ok(ref($resp->{keys}) eq 'ARRAY', 'response has keys array');

        if ($resp->{keys} && @{$resp->{keys}}) {
            diag("Keys attached to lease: " . join(', ', @{$resp->{keys}}));
        }
        EV::break;
    });
    my $t4 = EV::timer(5, 0, sub { fail('timeout'); EV::break });
    EV::run;

    # Test 11-13: lease_leases (list all leases)
    $client->lease_leases(sub {
        my ($resp, $err) = @_;
        ok(!$err, 'lease_leases succeeded');
        ok($resp->{header}, 'leases response has header');
        ok(ref($resp->{leases}) eq 'ARRAY', 'response has leases array');

        my $found = 0;
        for my $lease (@{$resp->{leases} || []}) {
            if ($lease->{id} == $lease_id) {
                $found = 1;
                last;
            }
        }
        diag("Found " . scalar(@{$resp->{leases} || []}) . " lease(s), our lease " . ($found ? "found" : "not found"));
        EV::break;
    });
    my $t5 = EV::timer(5, 0, sub { fail('timeout'); EV::break });
    EV::run;

    # Test 14-15: lease_keepalive (send one keepalive)
    my $keepalive_received = 0;
    $client->lease_keepalive($lease_id, sub {
        my ($resp, $err) = @_;
        if (!$keepalive_received) {
            $keepalive_received = 1;
            ok(!$err, 'lease_keepalive succeeded');
            ok($resp->{ttl} > 0, 'keepalive response has positive ttl');
            diag("Keepalive response: id=$resp->{id}, ttl=$resp->{ttl}");
            EV::break;
        }
    });
    my $t6 = EV::timer(5, 0, sub {
        fail('keepalive timeout') unless $keepalive_received;
        EV::break;
    });
    EV::run;

    # Test 16-17: lease_revoke
    $client->lease_revoke($lease_id, sub {
        my ($resp, $err) = @_;
        ok(!$err, 'lease_revoke succeeded');
        ok($resp->{header}, 'revoke response has header');
        diag("Lease revoked");
        EV::break;
    });
    my $t7 = EV::timer(5, 0, sub { fail('timeout'); EV::break });
    EV::run;

    # Test 18: Verify key was deleted when lease was revoked
    $client->get($test_key, sub {
        my ($resp, $err) = @_;
        ok(!$err, 'get after revoke succeeded');
        my $count = scalar @{$resp->{kvs} || []};
        is($count, 0, 'key was deleted when lease was revoked');
        EV::break;
    });
    my $t8 = EV::timer(5, 0, sub { fail('timeout'); EV::break });
    EV::run;
}

done_testing();



( run in 1.983 second using v1.01-cache-2.11-cpan-302cb4679cc )