/** * Licensed to JumpMind Inc under one or more contributor * license agreements. See the NOTICE file distributed * with this work for additional information regarding * copyright ownership. JumpMind Inc licenses this file * to you under the GNU General Public License, version 3.0 (GPLv3) * (the "License"); you may not use this file except in compliance * with the License. * * You should have received a copy of the GNU General Public License, * version 3.0 (GPLv3) along with this library; if not, see * <http://www.gnu.org/licenses/>. * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.jumpmind.symmetric.model; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import org.jumpmind.symmetric.model.OutgoingBatch.Status; import org.jumpmind.util.AppUtils; import static org.junit.Assert.*; import org.junit.Test; public class OutgoingBatchesTest { public static final String[] nodeIds = { "0001", "0002", "0003", "0004", "0005" }; @Test public void testBasicFunctions() { OutgoingBatches batches = buildSampleBatches("testChannel", 5); assertNotNull(batches); assertEquals(25, batches.getBatches().size()); assertEquals(0, batches.getActiveChannels().size()); batches.addActiveChannel(new NodeChannel("testChannel1")); batches.addActiveChannel(new NodeChannel("testChannel2")); assertEquals(2, batches.getActiveChannels().size()); } @Test public void testBasicGetters() { OutgoingBatches batches = buildSampleBatches("testChannel", 5); assertNotNull(batches); assertEquals(25, batches.getBatches().size()); assertEquals(0, batches.getActiveChannels().size()); List<OutgoingBatch> batchList = batches.getBatchesForChannel("testChannel2"); assertEquals(5, batchList.size()); int i = 3; for (OutgoingBatch b : batchList) { assertEquals(b.getChannelId(), "testChannel2"); assertEquals(i, b.getBatchId()); i += 5; } batchList = batches.getBatchesForChannel(new Channel("testChannel1", 1)); assertEquals(5, batchList.size()); i = 2; for (OutgoingBatch b : batchList) { assertEquals(b.getChannelId(), "testChannel1"); assertEquals(i, b.getBatchId()); i += 5; } Set<String> channels = new HashSet<String>(); channels.add("testChannel2"); channels.add("testChannel3"); channels.add("testChannel4"); batchList = batches.getBatchesForChannels(channels); assertEquals(15, batchList.size()); } @Test public void testWindowGetter() { // TODO } @Test public void testFilters() { OutgoingBatches batches = buildSampleBatches("testChannel", 5); assertNotNull(batches); assertEquals(25, batches.getBatches().size()); assertEquals(0, batches.getActiveChannels().size()); batches.filterBatchesForChannel("testChannel3"); assertEquals(20, batches.getBatches().size()); for (OutgoingBatch b : batches.getBatches()) { assertFalse(b.getChannelId().equals("testChannel3")); } batches.filterBatchesForChannel(new Channel("testChannel4", 1)); assertEquals(15, batches.getBatches().size()); for (OutgoingBatch b : batches.getBatches()) { assertFalse(b.getChannelId().equals("testChannel3")); assertFalse(b.getChannelId().equals("testChannel4")); } Set<String> channels = new HashSet<String>(); channels.add("testChannel2"); channels.add("testChannel5"); batches.filterBatchesForChannels(channels); assertEquals(10, batches.getBatches().size()); for (OutgoingBatch b : batches.getBatches()) { assertTrue(b.getChannelId().equals("testChannel1") || b.getChannelId().equals("testChannel0")); } batches = buildSampleBatches("testChannel", 5); batches.addActiveChannel(new NodeChannel("testChannel2")); batches.addActiveChannel(new NodeChannel("testChannel3")); batches.addActiveChannel(new NodeChannel("testChannel4")); batches.filterBatchesForInactiveChannels(); assertEquals(15, batches.getBatches().size()); for (OutgoingBatch b : batches.getBatches()) { assertTrue(b.getChannelId().equals("testChannel2") || b.getChannelId().equals("testChannel3") || b.getChannelId().equals("testChannel4")); } } @Test public void testChannelSortingNoErrors() { List<NodeChannel> channels = new ArrayList<NodeChannel>(); NodeChannel channelA = new NodeChannel("a"); channelA.setProcessingOrder(1); NodeChannel channelB = new NodeChannel("b"); channelB.setProcessingOrder(2); NodeChannel channelC = new NodeChannel("c"); channelC.setProcessingOrder(3); channels.add(channelC); channels.add(channelB); channels.add(channelA); List<OutgoingBatch> batches = new ArrayList<OutgoingBatch>(); OutgoingBatch batch1 = new OutgoingBatch("1", channelA.getChannelId(), Status.NE); batches.add(batch1); OutgoingBatch batch2 = new OutgoingBatch("1", channelB.getChannelId(), Status.NE); batches.add(batch2); OutgoingBatch batch3 = new OutgoingBatch("1", channelC.getChannelId(), Status.NE); batches.add(batch3); OutgoingBatches outgoingBatches = new OutgoingBatches(batches); outgoingBatches.sortChannels(channels); assertEquals(channelA, channels.get(0)); assertEquals(channelB, channels.get(1)); assertEquals(channelC, channels.get(2)); } @Test public void testChannelSortingOneErrors() { List<NodeChannel> channels = new ArrayList<NodeChannel>(); NodeChannel channelA = new NodeChannel("a"); channelA.setProcessingOrder(1); NodeChannel channelB = new NodeChannel("b"); channelB.setProcessingOrder(2); NodeChannel channelC = new NodeChannel("c"); channelC.setProcessingOrder(3); channels.add(channelC); channels.add(channelB); channels.add(channelA); List<OutgoingBatch> batches = new ArrayList<OutgoingBatch>(); OutgoingBatch batch1 = new OutgoingBatch("1", channelA.getChannelId(), Status.NE); batch1.setStatus(OutgoingBatch.Status.ER); batch1.setErrorFlag(true); batches.add(batch1); OutgoingBatch batch2 = new OutgoingBatch("1", channelB.getChannelId(), Status.NE); batches.add(batch2); OutgoingBatch batch3 = new OutgoingBatch("1", channelC.getChannelId(), Status.NE); batches.add(batch3); OutgoingBatches outgoingBatches = new OutgoingBatches(batches); outgoingBatches.sortChannels(channels); assertEquals(channelB, channels.get(0)); assertEquals(channelC, channels.get(1)); assertEquals(channelA, channels.get(2)); } @Test public void testChannelSortingTwoErrors() { List<NodeChannel> channels = new ArrayList<NodeChannel>(); NodeChannel channelA = new NodeChannel("a"); channelA.setProcessingOrder(1); NodeChannel channelB = new NodeChannel("b"); channelB.setProcessingOrder(2); NodeChannel channelC = new NodeChannel("c"); channelC.setProcessingOrder(3); channels.add(channelC); channels.add(channelB); channels.add(channelA); List<OutgoingBatch> batches = new ArrayList<OutgoingBatch>(); OutgoingBatch batch1 = new OutgoingBatch("1", channelA.getChannelId(), Status.NE); batch1.setStatus(OutgoingBatch.Status.ER); batch1.setErrorFlag(true); batch1.setLastUpdatedTime(new Date()); batches.add(batch1); AppUtils.sleep(50); OutgoingBatch batch2 = new OutgoingBatch("1", channelB.getChannelId(), Status.NE); batch2.setStatus(OutgoingBatch.Status.ER); batch2.setErrorFlag(true); batch2.setLastUpdatedTime(new Date()); batches.add(batch2); OutgoingBatch batch3 = new OutgoingBatch("1", channelC.getChannelId(), Status.NE); batches.add(batch3); OutgoingBatches outgoingBatches = new OutgoingBatches(batches); outgoingBatches.sortChannels(channels); assertEquals(channelC, channels.get(0)); assertEquals(channelA, channels.get(1)); assertEquals(channelB, channels.get(2)); AppUtils.sleep(50); batch1.setLastUpdatedTime(new Date()); outgoingBatches.sortChannels(channels); assertEquals(channelC, channels.get(0)); assertEquals(channelB, channels.get(1)); assertEquals(channelA, channels.get(2)); } protected OutgoingBatches buildSampleBatches(String channelId, int batchCount) { OutgoingBatches outgoingBatches = new OutgoingBatches(); List<OutgoingBatch> batches = new ArrayList<OutgoingBatch>(); int batchId = 1; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { OutgoingBatch b = new OutgoingBatch(nodeIds[i], "testChannel" + j, Status.NE); b.setBatchId(batchId++); batches.add(b); } } outgoingBatches.setBatches(batches); return outgoingBatches; } }