package org.sef4j.callstack.stattree.changes; import java.util.Arrays; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.sef4j.callstack.stats.PerfStats; import org.sef4j.core.helpers.export.ExportFragment; import org.sef4j.core.helpers.export.ExportFragmentList; import org.sef4j.core.helpers.export.senders.ExportFragmentsPollingEventProvider; import org.sef4j.core.helpers.proptree.model.PropTreeNode; import org.sef4j.core.helpers.senders.InMemoryEventSender; public class ChangeEventSenderTaskTest { private PropTreeNode rootNode = PropTreeNode.newRoot(); private PropTreeNode fooNode = rootNode.getOrCreateChild("foo"); private PropTreeNode fooBarNode = fooNode.getOrCreateChild("bar"); private PerfStats fooStats = fooNode.getOrCreateProp("stats", PerfStats.FACTORY); private PerfStats fooBarStats = fooBarNode.getOrCreateProp("stats", PerfStats.FACTORY); private BasicStatPropTreeValueProvider perfStatsChangeCollector = new BasicStatPropTreeValueProvider(rootNode); private InMemoryEventSender<ExportFragmentList<PerfStats>> inMemoryEventSender = new InMemoryEventSender<ExportFragmentList<PerfStats>>(); private ExportFragmentsPollingEventProvider<PerfStats> sut = new ExportFragmentsPollingEventProvider<PerfStats>("test", Arrays.asList(perfStatsChangeCollector)); @Before public void setup() { sut.addEventListener(inMemoryEventSender); } @Test public void testStartStop() throws Exception { // Prepare // Perform long fooBarElapsedTime1 = 12L; long fooElapsedTime1 = 13L; { long startTime1 = 123L; fooStats.addPending(startTime1); { long startTimeBar1 = 124L; fooBarStats.addPending(startTimeBar1); long fooBarEndTime1 = startTime1 + fooBarElapsedTime1; fooBarStats.incrAndRemovePending(startTime1, startTime1, startTime1, fooBarEndTime1, fooBarEndTime1, fooBarEndTime1); } long endTime1 = startTime1 + fooElapsedTime1; fooStats.incrAndRemovePending(startTime1, startTime1, startTime1, endTime1, endTime1, endTime1); } sut.poll(); // Post-check List<ExportFragmentList<PerfStats>> events = inMemoryEventSender.clearAndGet(); Assert.assertTrue(events.size() >= 1); Map<?, ExportFragment<PerfStats>> changes = events.get(0).getIdentifiableFragments(); Assert.assertNotNull(changes); PerfStats fooChange = changes.get("foo").getValue(); Assert.assertNotNull(fooChange); assertStats(1, fooElapsedTime1, fooChange); PerfStats fooBarChange = changes.get("foo/bar").getValue(); Assert.assertNotNull(fooBarChange); assertStats(1, fooBarElapsedTime1, fooBarChange); } private static void assertStats(int expectedCount, long expectedSumElapsedTime, PerfStats actual) { Assert.assertEquals(expectedCount, actual.getElapsedTimeStats().cumulatedCount()); Assert.assertEquals(expectedSumElapsedTime, actual.getElapsedTimeStats().cumulatedSum()); } }