#!perl
use Cassandane::Tiny;

sub test_service_dup_port ($self)
{
    xlog $self, "successful two services with listen= ";
    xlog $self, "parameters which reference the same IPv4 port";
    my $srvA = $self->lemming_service(tag => 'A');
    my $srvB = $self->lemming_service(tag => 'B',
                                      port => $srvA->port());

    # master should emit a syslog message like this
    #
    # Dec 31 14:40:57 enki 0340541/master[26085]: unable to create B
    # listener socket: Address already in use
    #
    # and struggle on.
    $self->start();

    if ($self->{instance}->{have_syslog_replacement}) {
        # check syslog for the expected error
        my $pat = qr/unable to create (?:A|B) listener socket:/;
        my @lines = $self->{instance}->getsyslog($pat);
        $self->assert_num_equals(1, scalar @lines);
        $self->assert_matches(qr/Address already in use/, $lines[0]);
    }

    xlog $self, "not preforked, so no lemmings running yet";
    $self->assert_deep_equals({},
                              $self->lemming_census());

    my $lemmA = lemming_connect($srvA);

    my $census = $self->lemming_census();
    my ($winner) = keys %$census;  # either could be the one that runs
    xlog $self, "connected so one lemming forked";
    $self->assert_deep_equals({ $winner => { live => 1, dead => 0 } },
                              $self->lemming_census());

    my $lemmB = lemming_connect($srvB);

    xlog $self, "the port is owned by service A";
    $self->assert_deep_equals({ $winner => { live => 2, dead => 0 } },
                              $self->lemming_census());

    lemming_push($lemmA, 'success');
    lemming_push($lemmB, 'success');

    xlog $self, "no more live lemmings";
    $self->assert_deep_equals({ $winner => { live => 0, dead => 2 } },
                              $self->lemming_census());
}
