The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use t::share;

use Inferno::RegMgr;
use Inferno::RegMgr::TCP;
use Inferno::RegMgr::Service;
use Inferno::RegMgr::Monitor;
use Inferno::RegMgr::Lookup;

use Scalar::Util qw( weaken );


@CheckPoint = (
    [ 'cb_lookup1', { srv => {} } ], 'cb_lookup1: { srv => {} }',
    [ 'cb_lookup2', { srv => {} } ], 'cb_lookup2: { srv => {} }',
);
plan tests => @CheckPoint/2;


registry_start();

my $reg     = Inferno::RegMgr::TCP->new({ host => '127.0.0.172' });
my $regmgr  = Inferno::RegMgr->new( $reg );
my $srv     = Inferno::RegMgr::Service->new({ name => 'srv' });
$regmgr->attach( $srv );
my $tl      = EV::timer 1, 0, sub {
    $regmgr->attach( Inferno::RegMgr::Lookup->new({ cb => \&cb_lookup1 }) );
};

my $t = EV::timer 5, 0, sub { die "timeout\n" };
EV::loop;
registry_stop();


sub cb_lookup1 {
    my ($svc) = @_;
    &checkpoint;
    registry_stop();
    registry_start();
    $tl = EV::timer 1, 0, sub {
        $regmgr->attach( Inferno::RegMgr::Lookup->new({ cb => \&cb_lookup2 }) );
    };
}

sub cb_lookup2 {
    my ($svc) = @_;
    &checkpoint;
    EV::unloop;
}