#!perl
use Cassandane::Tiny;

sub test_babysit
    :NoCheckSyslog
    ($self)
{
    my $srv = $self->lemming_service(prefork => 1, babysit => 1);
    $self->start();
    $self->lemming_wait(A => { live => 1 });

    xlog $self, "preforked, so one lemming running already";
    $self->assert_deep_equals({ A => { live => 1, dead => 0 } },
                              $self->lemming_census());

    # Quickly kill 5 children to trigger the backoff
    my $killed = 0;

    for (1..20) {
      $killed++ if $self->lemming_cull();

      sleep(.5);

      last if $killed >= 5;
    };

    # make sure it said it's going to wait
    $self->assert_syslog_matches($self->{instance},
                                 qr{ERROR: too many failures .*disabling});

    # master should not have restarted after 5 deaths
    $self->assert_deep_equals({ A => { live => 0, dead => 5 } },
                              $self->lemming_census());

    # wait 5 seconds, we still shouldn't have one
    sleep 5;

    $self->assert_deep_equals({ A => { live => 0, dead => 5 } },
                              $self->lemming_census());

    # wait up to 30 seconds, there should be one
    for (1..30) {
      last if $self->lemming_census->{A}{live};

      sleep 1;
    }

    $self->assert_deep_equals({ A => { live => 1, dead => 5 } },
                              $self->lemming_census());
}
