package org.jumpmind.symmetric.service.impl; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.jumpmind.db.platform.DatabaseInfo; import org.jumpmind.db.platform.IDatabasePlatform; import org.jumpmind.symmetric.ISymmetricEngine; import org.jumpmind.symmetric.db.ISymmetricDialect; import org.jumpmind.symmetric.model.Channel; import org.jumpmind.symmetric.model.Router; import org.jumpmind.symmetric.model.Trigger; import org.jumpmind.symmetric.model.TriggerRouter; import org.jumpmind.symmetric.service.IExtensionService; import org.jumpmind.symmetric.service.IParameterService; import org.junit.Before; import org.junit.Test; public class RouterServiceTest { final static Channel CHANNEL_2_TEST = new Channel("test", 1); final static String SOURCE_NODE_GROUP = "source"; final static String TARGET_NODE_GROUP = "target"; RouterService routerService; @Before public void setup() { ISymmetricEngine engine = mock(ISymmetricEngine.class); IParameterService parameterService = mock(IParameterService.class); ISymmetricDialect symmetricDialect = mock(ISymmetricDialect.class); IDatabasePlatform databasePlatform = mock(IDatabasePlatform.class); IExtensionService extensionService = mock(IExtensionService.class); when(databasePlatform.getDatabaseInfo()).thenReturn(new DatabaseInfo()); when(symmetricDialect.getPlatform()).thenReturn(databasePlatform); when(engine.getDatabasePlatform()).thenReturn(databasePlatform); when(engine.getParameterService()).thenReturn(parameterService); when(engine.getSymmetricDialect()).thenReturn(symmetricDialect); when(engine.getExtensionService()).thenReturn(extensionService); routerService = new RouterService(engine); } @Test public void testProducesCommonBatchesOneTableOneChannelDefaultRouter() { List<TriggerRouter> triggerRouters = new ArrayList<TriggerRouter>(); triggerRouters.add(new TriggerRouter(new Trigger("a", CHANNEL_2_TEST.getChannelId()), new Router("test", SOURCE_NODE_GROUP, TARGET_NODE_GROUP, "default"))); assertTrue(routerService.producesCommonBatches(CHANNEL_2_TEST, SOURCE_NODE_GROUP, triggerRouters)); } @Test public void testNotProducesCommonBatchesOneTableOneChannelNonDefaultRouter() { List<TriggerRouter> triggerRouters = new ArrayList<TriggerRouter>(); triggerRouters.add(new TriggerRouter(new Trigger("a", CHANNEL_2_TEST.getChannelId()), new Router("test", SOURCE_NODE_GROUP, TARGET_NODE_GROUP, "column"))); assertTrue(!routerService.producesCommonBatches(CHANNEL_2_TEST, SOURCE_NODE_GROUP, triggerRouters)); } @Test public void testProducesCommonBatchesMultipleTablesTwoChannelsMultipleRouters() { List<TriggerRouter> triggerRouters = new ArrayList<TriggerRouter>(); triggerRouters.add(new TriggerRouter(new Trigger("a", CHANNEL_2_TEST.getChannelId()), new Router("test1", SOURCE_NODE_GROUP, TARGET_NODE_GROUP, "default"))); triggerRouters.add(new TriggerRouter(new Trigger("b", "anotherchannel"), new Router("test2", SOURCE_NODE_GROUP, TARGET_NODE_GROUP, "column"))); assertTrue(routerService.producesCommonBatches(CHANNEL_2_TEST, SOURCE_NODE_GROUP, triggerRouters)); } @Test public void testProducesCommonBatchesMultipleTablesTwoChannelsMultipleRoutersBidirectional() { List<TriggerRouter> triggerRouters = new ArrayList<TriggerRouter>(); triggerRouters.add(new TriggerRouter(new Trigger("a", CHANNEL_2_TEST.getChannelId()), new Router("test", SOURCE_NODE_GROUP, TARGET_NODE_GROUP, "default"))); triggerRouters.add(new TriggerRouter(new Trigger("a", CHANNEL_2_TEST.getChannelId()), new Router("test", TARGET_NODE_GROUP, SOURCE_NODE_GROUP, "default"))); assertTrue(routerService.producesCommonBatches(CHANNEL_2_TEST, SOURCE_NODE_GROUP, triggerRouters)); } @Test public void testNotProducesCommonBatchesMultipleTablesTwoChannelsMultipleRoutersSyncOnIncoming() { List<TriggerRouter> triggerRouters = new ArrayList<TriggerRouter>(); Trigger tableTrigger = new Trigger("a", CHANNEL_2_TEST.getChannelId(), true); triggerRouters.add(new TriggerRouter(tableTrigger, new Router("test", SOURCE_NODE_GROUP, TARGET_NODE_GROUP, "default"))); triggerRouters.add(new TriggerRouter(tableTrigger, new Router("test", TARGET_NODE_GROUP, SOURCE_NODE_GROUP, "default"))); assertTrue(!routerService.producesCommonBatches(CHANNEL_2_TEST, SOURCE_NODE_GROUP, triggerRouters)); } @Test public void testNotProducesCommonBatchesSameTablesTwoChannelsMultipleRoutersSameTableIncomingOnAnotherChannel() { List<TriggerRouter> triggerRouters = new ArrayList<TriggerRouter>(); Trigger tableTrigger1 = new Trigger("a", CHANNEL_2_TEST.getChannelId(), true); Trigger tableTrigger2= new Trigger("a", "anotherchannel"); triggerRouters.add(new TriggerRouter(tableTrigger1, new Router("test", SOURCE_NODE_GROUP, TARGET_NODE_GROUP, "default"))); triggerRouters.add(new TriggerRouter(tableTrigger2, new Router("test", TARGET_NODE_GROUP, SOURCE_NODE_GROUP, "default"))); assertTrue(!routerService.producesCommonBatches(CHANNEL_2_TEST, SOURCE_NODE_GROUP, triggerRouters)); } @Test public void testProducesCommonBatchesSameTablesTwoChannelsMultipleRoutersDifferentTableIncomingOnAnotherChannel() { List<TriggerRouter> triggerRouters = new ArrayList<TriggerRouter>(); Trigger tableTrigger1 = new Trigger("a", CHANNEL_2_TEST.getChannelId(), true); Trigger tableTrigger2= new Trigger("b", "anotherchannel"); Trigger tableTrigger3= new Trigger("c", CHANNEL_2_TEST.getChannelId()); triggerRouters.add(new TriggerRouter(tableTrigger1, new Router("test", SOURCE_NODE_GROUP, TARGET_NODE_GROUP, "default"))); triggerRouters.add(new TriggerRouter(tableTrigger2, new Router("test", TARGET_NODE_GROUP, SOURCE_NODE_GROUP, "default"))); triggerRouters.add(new TriggerRouter(tableTrigger3, new Router("test", TARGET_NODE_GROUP, SOURCE_NODE_GROUP, "default"))); assertTrue(routerService.producesCommonBatches(CHANNEL_2_TEST, SOURCE_NODE_GROUP, triggerRouters)); } }