/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.engine; import static com.opengamma.sesame.config.ConfigBuilder.column; import static com.opengamma.sesame.config.ConfigBuilder.configureView; import static org.testng.AssertJUnit.assertEquals; import java.net.URI; import java.util.Collections; import java.util.EventListener; import java.util.List; import java.util.Map; import org.apache.commons.lang.math.RandomUtils; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.util.resource.Resource; import org.eclipse.jetty.webapp.WebAppContext; import org.springframework.core.io.ClassPathResource; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.threeten.bp.Instant; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.opengamma.component.ComponentLogger; import com.opengamma.component.ComponentRepository; import com.opengamma.component.rest.ComponentRepositoryServletContextListener; import com.opengamma.sesame.config.ViewConfig; import com.opengamma.sesame.marketdata.MarketDataEnvironment; import com.opengamma.sesame.marketdata.MarketDataEnvironmentBuilder; import com.opengamma.sesame.marketdata.scenarios.ScenarioDefinition; import com.opengamma.sesame.marketdata.scenarios.SingleScenarioDefinition; import com.opengamma.transport.jaxrs.FudgeObjectBinaryConsumer; import com.opengamma.transport.jaxrs.FudgeObjectBinaryProducer; import com.opengamma.util.result.Result; import com.opengamma.util.test.TestGroup; @Test(groups = TestGroup.UNIT) public class RemoteViewRunnerTest { private final ViewConfig _viewConfig = configureView("view name", column("col")); private Server _jettyServer; private ViewRunner _remoteViewRunner; @BeforeClass public void startServer() throws Exception { int port = 49152 + RandomUtils.nextInt(65535 - 49152); String serverUrl = "http://localhost:" + port + "/jax"; SelectChannelConnector connector = new SelectChannelConnector(); connector.setPort(port); _jettyServer = new Server(); _jettyServer.setConnectors(new Connector[]{connector}); ContextHandlerCollection contexts = new ContextHandlerCollection(); HandlerCollection handlers = new HandlerCollection(); handlers.addHandler(contexts); WebAppContext ogWebAppContext = new WebAppContext("RemoteViewRunnerTest", "/"); org.springframework.core.io.Resource resource = new ClassPathResource("web-engine"); ogWebAppContext.setBaseResource(Resource.newResource(resource.getFile())); DataViewRunnerResource viewRunnerResource = new DataViewRunnerResource(new TestViewRunner()); ComponentRepository repo = new ComponentRepository(ComponentLogger.Console.VERBOSE); repo.getRestComponents().publishResource(viewRunnerResource); repo.getRestComponents().publishHelper(new FudgeObjectBinaryConsumer()); repo.getRestComponents().publishHelper(new FudgeObjectBinaryProducer()); ogWebAppContext.setEventListeners(new EventListener[]{new ComponentRepositoryServletContextListener(repo)}); handlers.addHandler(ogWebAppContext); _jettyServer.setHandler(handlers); _jettyServer.start(); _remoteViewRunner = new RemoteViewRunner(URI.create(serverUrl)); } @AfterClass public void stopServer() throws Exception { if (_jettyServer != null) { _jettyServer.stop(); } } public void runView() { Results results = _remoteViewRunner.runView( _viewConfig, CalculationArguments.builder().build(), MarketDataEnvironmentBuilder.empty(), Collections.emptyList()); assertEquals("runView successfully invoked", results.get(0, 0).getResult().getValue()); } public void runScenarios() { MarketDataEnvironment marketData = MarketDataEnvironmentBuilder.empty(); CalculationArguments calculationArgs = CalculationArguments.builder().build(); ScenarioDefinition scenarioDefinition = ScenarioDefinition.ofScenarios(SingleScenarioDefinition.base()); ScenarioResults results = _remoteViewRunner.runScenarios( _viewConfig, calculationArgs, marketData, scenarioDefinition, ImmutableList.of()); Results scenarioResults = results.getResults().get("scenarioName"); assertEquals("runScenarios successfully invoked", scenarioResults.get(0, 0).getResult().getValue()); } private static class TestViewRunner implements ViewRunner { @Override public Results runView( ViewConfig viewConfig, CalculationArguments calculationArguments, MarketDataEnvironment marketData, List<?> portfolio) { ResultBuilder builder = new ResultBuilder(ImmutableList.of("foo"), ImmutableList.of("col")); builder.add(0, 0, Result.success("runView successfully invoked"), null); return builder.build(Instant.EPOCH, 0, 0, 0); } @Override public ScenarioResults runScenarios( ViewConfig viewConfig, CalculationArguments calculationArguments, MarketDataEnvironment baseMarketData, ScenarioDefinition scenarioDefinition, List<?> portfolio) { ResultBuilder builder = new ResultBuilder(ImmutableList.of("foo"), ImmutableList.of("col")); builder.add(0, 0, Result.success("runScenarios successfully invoked"), null); Results results = builder.build(Instant.EPOCH, 0, 0, 0); Map<String, Results> resultsMap = ImmutableMap.of("scenarioName", results); return new ScenarioResults(resultsMap); } } }