package lsr.paxos;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.BitSet;
import lsr.common.ProcessDescriptorHelper;
import lsr.paxos.messages.Prepare;
import org.junit.Before;
import org.junit.Test;
public class PrepareRetransmitterImplTest {
private Retransmitter retransmitter;
private PrepareRetransmitter prepareRetransmitter;
private Prepare prepare;
private BitSet acceptors;
@Before
public void setUp() {
ProcessDescriptorHelper.initialize(3, 0);
retransmitter = mock(Retransmitter.class);
prepareRetransmitter = new PrepareRetransmitterImpl(retransmitter);
prepare = new Prepare(3, 10);
acceptors = new BitSet();
}
@Test
public void shouldStartTransmittingAMessage() {
prepareRetransmitter.startTransmitting(prepare, acceptors);
verify(retransmitter).startTransmitting(prepare, acceptors);
}
@Test
public void shouldStopTransmittingAfterReceivingPrepareOk() {
RetransmittedMessage retransmittedMessage = mock(RetransmittedMessage.class);
when(retransmitter.startTransmitting(prepare, acceptors)).thenReturn(retransmittedMessage);
prepareRetransmitter.startTransmitting(prepare, acceptors);
assertFalse(prepareRetransmitter.isMajority());
prepareRetransmitter.update(null, 1);
verify(retransmittedMessage).stop(1);
assertFalse(prepareRetransmitter.isMajority());
prepareRetransmitter.update(null, 2);
verify(retransmittedMessage).stop(2);
assertTrue(prepareRetransmitter.isMajority());
}
@Test
public void shouldStopTransmitting() {
RetransmittedMessage retransmittedMessage = mock(RetransmittedMessage.class);
when(retransmitter.startTransmitting(prepare, acceptors)).thenReturn(retransmittedMessage);
prepareRetransmitter.startTransmitting(prepare, acceptors);
prepareRetransmitter.stop();
verify(retransmittedMessage).stop();
}
}