package org.sef4j.testwebapp.config; import java.util.Collections; import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Test; import org.sef4j.callstack.stats.PerfStats; import org.sef4j.callstack.stats.dto.BasicStatPropTreeValueProviderDef; import org.sef4j.core.api.EventSender; import org.sef4j.core.api.ioeventchain.InputEventChain.ListenerHandle; import org.sef4j.core.helpers.export.ExportFragmentList; import org.sef4j.core.helpers.export.senders.ExportFragmentsPollingEventProviderDef; import org.sef4j.core.helpers.ioeventchain.PeriodicTaskInputEventChain; import org.sef4j.core.helpers.proptree.dto.PropTreeRootNodeDef; import org.sef4j.core.helpers.senders.InMemoryEventSender; import org.sef4j.core.helpers.tasks.PeriodicTaskInputEventChainDef; import org.sef4j.core.helpers.tasks.PeriodicityDef; import org.sef4j.core.util.factorydef.ObjectByDefRepositories; import org.sef4j.core.util.factorydef.SharedRef; public class MetricsFactoryConfigTest extends AbstractSpringTestWebappTestCase { MetricsFactoryConfig sut = new MetricsFactoryConfig(); ObjectByDefRepositories repositories = sut.sharedObjByDefRepositories(); @SuppressWarnings("unchecked") @Test public void testSharedObjByDefRepositories() { // Prepare Object def = new PeriodicTaskInputEventChainDef( new PeriodicityDef(15, TimeUnit.SECONDS, null), new ExportFragmentsPollingEventProviderDef( Collections.singletonList( new BasicStatPropTreeValueProviderDef( new PropTreeRootNodeDef("ws"))))); // Perform SharedRef<Object> inputChainRef = repositories.getOrCreateByDef(def, null); try { Object inputChainObj = inputChainRef.getObject(); // Post-check Assert.assertNotNull(inputChainObj); PeriodicTaskInputEventChain<ExportFragmentList<PerfStats>> inputChain = (PeriodicTaskInputEventChain<ExportFragmentList<PerfStats>>) inputChainObj; // inputChain.poll(); // inputChain.start(); // inputChain.stop(); // re-call getOrCreateByDef => check same object returned { SharedRef<Object> ref2 = repositories.getOrCreateByDef(def, null); Object obj2 = ref2.getObject(); Assert.assertSame(inputChainObj, obj2); ref2.close(); } // test behavior or create InputChain : periodic task exporter for PerfStats change... EventSender<ExportFragmentList<PerfStats>> listener = new InMemoryEventSender<ExportFragmentList<PerfStats>>(); ListenerHandle<ExportFragmentList<PerfStats>> listenerHandle = inputChain.registerEventListener(listener); try { inputChain.poll(); // ==> send to callback listener // ... } finally { inputChain.unregisterEventListener(listenerHandle); } inputChain.close(); // useless? } finally { inputChainRef.close(); } } }