package network.thunder.core.communication.nio.handler.mid; import io.netty.channel.embedded.EmbeddedChannel; import network.thunder.core.communication.Message; import network.thunder.core.communication.nio.handler.ProcessorHandler; import network.thunder.core.communication.objects.messages.interfaces.factories.ContextFactory; import network.thunder.core.communication.processor.implementations.sync.SynchronizationHelper; import network.thunder.core.etc.MockContextFactory; import network.thunder.core.etc.SyncDBHandlerMock; import network.thunder.core.mesh.NodeClient; import network.thunder.core.mesh.NodeServer; import org.junit.Test; import java.util.List; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** * Created by matsjerratsch on 02/11/2015. */ public class SyncHandlerTest { EmbeddedChannel channel1; EmbeddedChannel channel2; NodeClient node1; NodeClient node2; NodeServer nodeServer1 = new NodeServer(); NodeServer nodeServer2 = new NodeServer(); ContextFactory contextFactory1; ContextFactory contextFactory2; SyncDBHandlerMock dbHandler1; SyncDBHandlerMock dbHandler2; public void buildDatabase () { dbHandler1 = new SyncDBHandlerMock(); dbHandler2 = new SyncDBHandlerMock(); dbHandler2.fillWithRandomData(); } public void prepare () { node1 = new NodeClient(); node2 = new NodeClient(); node1.isServer = false; node2.isServer = true; contextFactory1 = new MockContextFactory(nodeServer1, dbHandler1); contextFactory2 = new MockContextFactory(nodeServer2, dbHandler2); channel1 = new EmbeddedChannel(new ProcessorHandler(contextFactory1.getSyncProcessor(node1), "Sync1")); channel2 = new EmbeddedChannel(new ProcessorHandler(contextFactory2.getSyncProcessor(node2), "Sync2")); Message m = (Message) channel2.readOutbound(); assertNull(m); } public void after () { channel1.checkException(); channel2.checkException(); } @Test public void testSyncingDataObjects () { buildDatabase(); prepare(); SynchronizationHelper syncStructure1 = contextFactory1.getSyncHelper(); while (!syncStructure1.fullySynchronized()) { Message m1 = (Message) channel1.readOutbound(); channel2.writeInbound(m1); Message m2 = (Message) channel2.readOutbound(); channel1.writeInbound(m2); } assertNull(channel1.readOutbound()); assertNull(channel2.readOutbound()); syncStructure1.saveFullSyncToDatabase(); assertTrue(checkListsEqual(dbHandler1.channelStatusObjectArrayList, dbHandler2.channelStatusObjectArrayList)); assertTrue(checkListsEqual(dbHandler1.pubkeyChannelObjectArrayList, dbHandler2.pubkeyChannelObjectArrayList)); assertTrue(checkListsEqual(dbHandler1.pubkeyIPObjectArrayList, dbHandler2.pubkeyIPObjectArrayList)); assertTrue(checkListsEqual(dbHandler1.totalList, dbHandler2.totalList)); after(); } public boolean checkListsEqual (List list1, List list2) { return list1.containsAll(list2) && list2.containsAll(list1); } }