/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.calcnode.stats; import static org.testng.AssertJUnit.assertEquals; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import org.fudgemsg.FudgeMsgEnvelope; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.Test; import org.threeten.bp.Duration; import com.opengamma.engine.calcnode.stats.FunctionCosts; import com.opengamma.engine.calcnode.stats.FunctionInvocationStatisticsReceiver; import com.opengamma.engine.calcnode.stats.FunctionInvocationStatisticsSender; import com.opengamma.transport.FudgeMessageSender; import com.opengamma.util.test.TestGroup; /** * Tests the function statistics sender. */ @Test(groups = TestGroup.INTEGRATION) public class FunctionInvocationStatisticsSenderTest { private static final Logger s_logger = LoggerFactory.getLogger(FunctionInvocationStatisticsSenderTest.class); private FunctionCosts _cost = new FunctionCosts (); @Test(timeOut = 3_000L) public void testBasicBehaviour () { final AtomicInteger messages = new AtomicInteger (); final FunctionInvocationStatisticsSender sender = new FunctionInvocationStatisticsSender (); final FunctionInvocationStatisticsReceiver receiver = new FunctionInvocationStatisticsReceiver (_cost); sender.setExecutorService(Executors.newCachedThreadPool ()); sender.setFudgeMessageSender(new FudgeMessageSender () { @Override public FudgeContext getFudgeContext() { return FudgeContext.GLOBAL_DEFAULT; } @Override public void send(final FudgeMsg message) { messages.incrementAndGet (); s_logger.debug ("Received {}", message); receiver.messageReceived(getFudgeContext (), new FudgeMsgEnvelope (message)); } }); sender.setUpdatePeriod(Duration.ofSeconds(1)); long t = System.nanoTime (); for (int i = 0; i < 100; i++) { sender.functionInvoked("A", "1", 1, 2.0, 3.0, 4.0); sender.functionInvoked("A", "2", 1, 2.0, 3.0, 4.0); sender.functionInvoked("A", "1", 1, 2.0, 3.0, 4.0); try { Thread.sleep (20); } catch (InterruptedException e) { } } sender.functionInvoked ("A", "3", 300, 300 * 4.0, 300 * 5.0, 300 * 6.0); t = (System.nanoTime () - t) / 1000000000; sender.flush (); if ((messages.get () < t) || (messages.get () > t + 2)) { Assert.fail ("Unexpected number of messages (" + messages.get () + ") from " + t + "s execution"); } assertEquals (2.0, _cost.getStatistics ("A", "1").getInvocationCost (), 1e-5); assertEquals (3.0, _cost.getStatistics ("A", "1").getDataInputCost (), 1e-5); assertEquals (4.0, _cost.getStatistics ("A", "1").getDataOutputCost (), 1e-5); assertEquals (2.0, _cost.getStatistics ("A", "2").getInvocationCost (), 1e-5); assertEquals (3.0, _cost.getStatistics ("A", "2").getDataInputCost (), 1e-5); assertEquals (4.0, _cost.getStatistics ("A", "2").getDataOutputCost (), 1e-5); assertEquals (4.0, _cost.getStatistics ("A", "3").getInvocationCost (), 1e-5); assertEquals (5.0, _cost.getStatistics ("A", "3").getDataInputCost (), 1e-5); assertEquals (6.0, _cost.getStatistics ("A", "3").getDataOutputCost (), 1e-5); } }