package com.neverwinterdp.tool.message;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Random;
import org.junit.Test;
public class MessageTrackerUnitTest {
@Test
public void testCase1() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 0, 10);
log(tracker, 11, 20);
log(tracker, 21, 30);
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 30);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 0);
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase2() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 0, 10);
log(tracker, 10, 20);
log(tracker, 20, 30);
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 30);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 2);
assertTrue(tracker.getSequenceMap().get(0).getDuplicatedNumbers().containsAll(Arrays.asList(10, 20)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase3() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 0, 10);
log(tracker, 5, 20);
log(tracker, 15, 30);
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 30);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 12);
assertTrue(tracker.getSequenceMap().get(0).getDuplicatedNumbers()
.containsAll(Arrays.asList(5, 6, 7, 8, 9, 10, 15, 16, 17, 18, 19, 20)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase4() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 0, 10);
log(tracker, 2, 8);
log(tracker, 4, 6);
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 10);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 10);
assertTrue(tracker.getSequenceMap().get(0).getDuplicatedNumbers().containsAll(Arrays.asList(2, 3, 4, 5, 6, 7, 8)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase5() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 0, 10);
log(tracker, 3, 5);
log(tracker, 7, 9);
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 10);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 6);
assertTrue(tracker.getSequenceMap().get(0).getDuplicatedNumbers().containsAll(Arrays.asList(3, 4, 5, 7, 8, 9)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase6() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 0, 10);
log(tracker, 15, 20);
log(tracker, 25, 30);
assertEquals(tracker.getSequenceMap().size(), 3);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 10);
assertEquals(tracker.getSequenceMap().get(1).getFrom(), 15);
assertEquals(tracker.getSequenceMap().get(1).getCurrent(), 20);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent() + 5, tracker.getSequenceMap().get(1).getFrom());
assertEquals(tracker.getSequenceMap().get(1).getCurrent() + 5, tracker.getSequenceMap().get(2).getFrom());
tracker.dump(System.out, "Sequence Number Tracker");
}
public void testCase7() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 0, 10);
log(tracker, 15, 20);
log(tracker, 18, 30);
assertEquals(tracker.getSequenceMap().size(), 3);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 10);
assertEquals(tracker.getSequenceMap().get(1).getFrom(), 15);
assertEquals(tracker.getSequenceMap().get(1).getCurrent(), 20);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 4);
assertEquals(tracker.getSequenceMap().get(0).getCurrent() + 5, tracker.getSequenceMap().get(1).getFrom());
assertEquals(tracker.getSequenceMap().get(1).getCurrent() + 5, tracker.getSequenceMap().get(2).getFrom());
assertTrue(tracker.getSequenceMap().get(0).getDuplicatedNumbers().containsAll(Arrays.asList(18, 19, 20)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase8() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 10, 0);
log(tracker, 20, 11);
log(tracker, 30, 21);
tracker.optimize();
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 30);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 0);
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase9() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 10, 0);
log(tracker, 20, 10);
log(tracker, 30, 20);
tracker.optimize();
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 30);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 2);
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase10() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 10, 0);
log(tracker, 20, 5);
log(tracker, 30, 15);
tracker.optimize();
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 30);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 12);
assertTrue(tracker.getSequenceMap().get(0).getDuplicatedNumbers()
.containsAll(Arrays.asList(5, 6, 7, 8, 9, 10, 15, 16, 17, 18, 19, 20)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase11() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 10, 0);
log(tracker, 8, 2);
log(tracker, 6, 4);
tracker.optimize();
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 10);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 10);
assertTrue(tracker.getSequenceMap().get(0).getDuplicatedNumbers().containsAll(Arrays.asList(2, 3, 4, 5, 6, 7, 8)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase12() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 10, 0);
log(tracker, 5, 3);
log(tracker, 9, 7);
tracker.optimize();
assertEquals(tracker.getSequenceMap().size(), 1);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 10);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 6);
assertTrue(tracker.getSequenceMap().get(0).getDuplicatedNumbers().containsAll(Arrays.asList(3, 4, 5, 7, 8, 9)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase13() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 10, 0);
log(tracker, 20, 15);
log(tracker, 30, 25);
tracker.optimize();
assertEquals(tracker.getSequenceMap().size(), 3);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 10);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 0);
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testCase14() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 10, 0);
log(tracker, 20, 15);
log(tracker, 30, 18);
tracker.optimize();
assertEquals(tracker.getSequenceMap().size(), 2);
assertEquals(tracker.getSequenceMap().get(0).getFrom(), 0);
assertEquals(tracker.getSequenceMap().get(0).getCurrent(), 10);
assertEquals(tracker.getSequenceMap().get(0).getDuplicatedCount(), 0);
assertEquals(tracker.getSequenceMap().get(1).getDuplicatedCount(), 3);
assertTrue(tracker.getSequenceMap().get(1).getDuplicatedNumbers().containsAll(Arrays.asList(18, 19, 20)));
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testPartitionGeneratedMessageTracker() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 0, 10);
log(tracker, 10, 20);
log(tracker, 21, 30);
log(tracker, 40, 50);
log(tracker, 30, 40);
log(tracker, 30, 60);
log(tracker, 100, 200);
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testOutOfOrderPartitionGeneratedMessageTracker() throws Exception {
PartitionMessageTracker tracker = new PartitionMessageTracker(0);
log(tracker, 100, 0);
log(tracker, 200, 80);
log(tracker, 1000, 200);
tracker.optimize();
tracker.dump(System.out, "Sequence Number Tracker");
}
@Test
public void testInSequence() throws Exception {
MessageTracker messageTracker = new MessageTracker();
for (int i = 0; i < 100; i++) {
messageTracker.log(0, i);
}
for (int i = 100; i < 1000; i++) {
messageTracker.log(0, i);
}
messageTracker.dump(System.out);
assertTrue(messageTracker.isInSequence());
}
@Test
public void testJunitReport() throws Exception {
MessageTracker messageTracker = new MessageTracker();
for (int i = 0; i < 100; i++) {
messageTracker.log(0, i);
}
for (int i = 0; i < 100; i++) {
messageTracker.log(1, i);
}
messageTracker.optimize();
messageTracker.junitReport("build/messageTracker.xml");
}
//partition 0 (probably) not in sequence, partition 1 in sequence
@Test
public void testJunitReportNotInSequence() throws Exception {
MessageTracker messageTracker = new MessageTracker();
Random random = new Random();
for (int i = 0; i < 1000; i++) {
messageTracker.log(0, random.nextInt(2000));
}
for (int i = 0; i < 1000; i++) {
messageTracker.log(1, i);
}
messageTracker.optimize();
messageTracker.junitReport("build/messageTrackerNotInSequence.xml");
}
//partition 0 contains all 0, partition 1 contains all 1
@Test
public void testJunitReportAllDuplicates() throws Exception {
MessageTracker messageTracker = new MessageTracker();
for (int i = 0; i < 1000; i++) {
messageTracker.log(0, 0);
}
for (int i = 0; i < 1000; i++) {
messageTracker.log(1, i%10);
}
messageTracker.optimize();
messageTracker.junitReport("build/messageTrackerAllDuplicates.xml");
}
private void log(PartitionMessageTracker tracker, int from, int to) {
if (from < to) {
for (int num = from; num <= to; num++) {
tracker.log(num);
}
} else {
for (int num = from; num >= to; num--) {
tracker.log(num);
}
}
}
}