package org.marketcetera.metrics; import org.marketcetera.util.misc.ClassVersion; import org.junit.Test; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*; import java.util.Iterator; /* $License$ */ /** * Tests {@link CheckpointInfo}, {@link IterationInfo} & {@link PerThreadInfo}. * * @author anshul@marketcetera.com * @version $Id: InfoTests.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: InfoTests.java 16154 2012-07-14 16:34:05Z colin $") public class InfoTests { /** * Tests {@link CheckpointInfo} */ @Test public void checkpointInfo() { //null values. CheckpointInfo info = new CheckpointInfo(null, 0, null); assertCheckpointInfo(info, null, 0, null); //non-null values. String id = "ID"; long timeStamp = System.currentTimeMillis(); Object[] data = {"value", 343, 34343l, 343.234d}; info = new CheckpointInfo(id, timeStamp, data); assertCheckpointInfo(info, id, timeStamp, data); } /** * Tests {@link IterationInfo} */ @Test public void iterationInfo() { IterationInfo info = new IterationInfo(); //verify initial state assertTrue(info.isEmpty()); assertEquals(0, info.getNumIterations()); assertFalse(info.iterator().hasNext()); //verify setters info.setNumIterations(3232); assertEquals(3232, info.getNumIterations()); //verify operations CheckpointInfo chk1 = new CheckpointInfo("blue", 324324, null); CheckpointInfo chk2 = new CheckpointInfo("green", 234998, null); info.addCheckpoint(chk1); assertFalse(info.isEmpty()); assertTrue(info.iterator().hasNext()); assertSame(chk1, info.iterator().next()); info.addCheckpoint(chk2); assertFalse(info.isEmpty()); Iterator<CheckpointInfo> iter = info.iterator(); assertTrue(iter.hasNext()); assertSame(chk1, iter.next()); assertTrue(iter.hasNext()); assertSame(chk2, iter.next()); assertFalse(iter.hasNext()); info.clear(); assertTrue(info.isEmpty()); assertEquals(0, info.getNumIterations()); assertFalse(info.iterator().hasNext()); } /** * Tests {@link PerThreadInfo} */ @Test public void perThreadInfo() { PerThreadInfo info = new PerThreadInfo(); //verify initial state assertEquals(Thread.currentThread().getName(), info.getName()); assertTrue(info.isSavedEmpty()); assertFalse(info.iterator().hasNext()); //do a save when current is empty info.saveCurrent(); assertFalse(info.isSavedEmpty()); assertTrue(info.iterator().hasNext()); IterationInfo iInfo = info.iterator().next(); assertTrue(iInfo.isEmpty()); assertEquals(0, iInfo.getNumIterations()); //increment the iteration counter info.addIteration(); //do another save. info.saveCurrent(); assertFalse(info.isSavedEmpty()); Iterator<IterationInfo> iter = info.iterator(); assertTrue(iter.hasNext()); iInfo = iter.next(); assertTrue(iInfo.isEmpty()); assertEquals(0, iInfo.getNumIterations()); assertTrue(iter.hasNext()); iInfo = iter.next(); assertTrue(iInfo.isEmpty()); assertEquals(1, iInfo.getNumIterations()); //clear the saved info.clearSaved(); assertTrue(info.isSavedEmpty()); assertFalse(info.iterator().hasNext()); //Now test current CheckpointInfo chk1 = new CheckpointInfo("a", 12, null); info.addCurrent(chk1); CheckpointInfo chk2 = new CheckpointInfo("b", 34, null); info.addCurrent(chk2); assertTrue(info.isSavedEmpty()); info.saveCurrent(); assertFalse(info.isSavedEmpty()); iter = info.iterator(); assertTrue(iter.hasNext()); iInfo = iter.next(); assertFalse(iter.hasNext()); assertEquals(0, iInfo.getNumIterations()); assertThat(iInfo, hasItems(chk1,chk2)); //Add iterations info.addIteration(); info.addIteration(); //Add stuff to current but clear it before save. info.addCurrent(chk2); info.clearCurrent(); info.saveCurrent(); info.addIteration(); //Add the two previous checkpoints in reverse order info.addCurrent(chk2); info.addCurrent(chk1); info.saveCurrent(); //Now verify the info iter = info.iterator(); assertTrue(iter.hasNext()); iInfo = iter.next(); assertEquals(0, iInfo.getNumIterations()); assertThat(iInfo, hasItems(chk1,chk2)); assertTrue(iter.hasNext()); iInfo = iter.next(); assertEquals(2, iInfo.getNumIterations()); assertTrue(iInfo.isEmpty()); assertTrue(iter.hasNext()); iInfo = iter.next(); assertEquals(3, iInfo.getNumIterations()); assertThat(iInfo, hasItems(chk2,chk1)); assertFalse(iter.hasNext()); assertFalse(info.isSavedEmpty()); //Now clear all saved data info.clearSaved(); assertTrue(info.isSavedEmpty()); } private static void assertCheckpointInfo(CheckpointInfo inInfo, String inId, long inTimeStamp, Object[] inData) { assertEquals(inId, inInfo.getIdentifier()); assertEquals(inTimeStamp, inInfo.getTimestamp()); assertArrayEquals(inData, inInfo.getData()); } }