package io.pcp.parfait.timing;
import java.util.Collections;
import io.pcp.parfait.MonitorableRegistry;
import junit.framework.TestCase;
public class EventTimerTest extends TestCase {
private EventTimer metricFactory;
private Timeable workflowWizardControl;
private Timeable logonControl;
private Timeable attachmentControl;
@Override
protected void setUp() throws Exception {
initEvents();
}
private void initEvents() {
metricFactory = new EventTimer("test", new MonitorableRegistry(), ThreadMetricSuite
.withDefaultMetrics(), true, true, Collections.<StepMeasurementSink>singletonList(new LoggerSink()));
workflowWizardControl = new DummyTimeable();
logonControl = new DummyTimeable();
attachmentControl = new DummyTimeable();
}
public void testTotalMonitoredCounterSize() {
metricFactory.registerTimeable(workflowWizardControl, "/WorkFlowWizard");
/**
* This total value includes the invocation count counter, which is stored separately to the
* other counters in the counter set object. So when comparing the number of counters for
* each event, this should not be taken into consideration.
*/
Integer totalEventCounterSize = metricFactory.getNumberOfTotalEventCounters();
EventCounters wizardCounterSet = metricFactory
.getCounterSetForEventGroup(workflowWizardControl);
Integer numberOfMetricCounters = wizardCounterSet.numberOfTimerCounters();
assertEquals("Should be the same number of per event and total counters",
--totalEventCounterSize, numberOfMetricCounters);
metricFactory.registerTimeable(logonControl, "/Logon");
assertEquals(
"Number of total event counters should not change after adding event",
++totalEventCounterSize, metricFactory.getNumberOfTotalEventCounters());
EventCounters logonCounterSet = metricFactory
.getCounterSetForEventGroup(logonControl);
assertEquals("Should be the same number of per event and total counters",
--totalEventCounterSize, logonCounterSet.numberOfTimerCounters());
metricFactory.registerTimeable(attachmentControl, "/Attachments");
assertEquals(
"Number of total event counters should not change after adding event",
++totalEventCounterSize, metricFactory.getNumberOfTotalEventCounters());
EventCounters attachmentCounterSet = metricFactory
.getCounterSetForEventGroup(attachmentControl);
assertEquals("Should be the same number of per event and total counters",
--totalEventCounterSize, attachmentCounterSet.numberOfTimerCounters());
}
public void testTotalMonitoredCounterSingletons() {
metricFactory.registerTimeable(logonControl, "/Logon");
metricFactory.registerTimeable(workflowWizardControl, "/WorkflowWizard");
metricFactory.registerTimeable(attachmentControl, "/Attachments");
EventCounters wizardCounterSet = metricFactory.getCounterSetForEventGroup(workflowWizardControl);
EventCounters logonCounterSet = metricFactory.getCounterSetForEventGroup(logonControl);
EventCounters attachmentsCounterSet = metricFactory
.getCounterSetForEventGroup(attachmentControl);
assertNotNull("Couldnt obtain counter set for workflow wizard event", wizardCounterSet);
assertNotNull("Couldnt obtain counter set for logon event", logonCounterSet);
assertNotNull("Couldnt obtain counter set for attachments event", attachmentsCounterSet);
for (ThreadMetric metric : wizardCounterSet.getMetrics().keySet()) {
EventMetricCounters wizardCounter = wizardCounterSet.getMetrics().get(metric);
assertNotNull("Couldnt obtain wizard counter for metric " + metric.getMetricName(),
wizardCounter);
EventMetricCounters logonCounter = logonCounterSet.getMetrics().get(metric);
assertNotNull("Couldnt obtain logon counter for metric " + metric.getMetricName(),
logonCounter);
EventMetricCounters attachmentsCounter = attachmentsCounterSet.getMetrics()
.get(metric);
assertNotNull(
"Couldnt obtain attachments counter for metric " + metric.getMetricName(),
attachmentsCounter);
assertEquals("Total counter for metric " + metric + " is not a singleton",
wizardCounter.getTotalCounter(), logonCounter.getTotalCounter());
assertEquals("Total counter for metric " + metric + " is not a singleton", logonCounter
.getTotalCounter(), attachmentsCounter.getTotalCounter());
}
}
public static class DummyTimeable implements Timeable {
public void setEventTimer(EventTimer timer) {
}
}
}