package lsr.paxos; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import lsr.common.ProcessDescriptorHelper; import lsr.paxos.messages.Alive; import lsr.paxos.messages.Message; import lsr.paxos.recovery.MockDispatcher; import lsr.paxos.recovery.MockNetwork; import lsr.paxos.storage.Log; import lsr.paxos.storage.Storage; import org.junit.Before; import org.junit.Test; public class FailureDetectorTest { private Paxos paxos; private Storage storage; private Log log; private MockDispatcher dispatcher; private MockNetwork network; @Before public void setUp() { dispatcher = new MockDispatcher(); network = new MockNetwork(); paxos = mock(Paxos.class); storage = mock(Storage.class); log = mock(Log.class); when(storage.getLog()).thenReturn(log); when(paxos.getDispatcher()).thenReturn(dispatcher); ProcessDescriptorHelper.initialize(3, 1); } @Test public void shouldSendAliveToAllWhenLeader() throws InterruptedException { when(log.getNextId()).thenReturn(100); when(storage.getView()).thenReturn(5); when(paxos.isLeader()).thenReturn(true); PassiveFailureDetector failureDetector = new PassiveFailureDetector(paxos, network, storage); failureDetector.start(); dispatcher.execute(); failureDetector.stop(); Message message = network.getMessagesSentToAll().get(0); assertTrue(message instanceof Alive); Alive alive = (Alive) message; assertEquals(5, alive.getView()); assertEquals(100, alive.getLogSize()); } @Test public void shouldRegisterNetworkListenersInStartMethod() throws InterruptedException { Message message = new Alive(5, 0); when(storage.getView()).thenReturn(5); when(paxos.isLeader()).thenReturn(false); when(paxos.getLeaderId()).thenReturn(1); PassiveFailureDetector failureDetector = new PassiveFailureDetector(paxos, network, storage); network.fireReceive(message, 1); failureDetector.start(); failureDetector.stop(); } }