/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.solutions.remote; import com.google.common.base.Objects; import com.opengamma.core.link.ConfigLink; import com.opengamma.core.marketdatasnapshot.MarketDataSnapshotSource; import com.opengamma.core.marketdatasnapshot.impl.ManageableMarketDataSnapshot; import com.opengamma.engine.marketdata.spec.MarketDataSpecification; import com.opengamma.engine.marketdata.spec.UserMarketDataSpecification; import com.opengamma.financial.analytics.curve.exposure.ExposureFunctions; import com.opengamma.financial.currency.CurrencyMatrix; import com.opengamma.id.VersionCorrection; import com.opengamma.integration.server.RemoteServer; import com.opengamma.sesame.OutputNames; import com.opengamma.sesame.config.ViewConfig; import com.opengamma.sesame.engine.CalculationArguments; import com.opengamma.sesame.engine.RemoteViewRunner; import com.opengamma.sesame.engine.Results; import com.opengamma.sesame.engine.ViewRunner; import com.opengamma.sesame.marketdata.MarketDataEnvironment; import com.opengamma.sesame.marketdata.MarketDataEnvironmentBuilder; import com.opengamma.solutions.util.FraViewUtils; import com.opengamma.util.money.Currency; import com.opengamma.util.money.MultipleCurrencyAmount; import com.opengamma.util.result.Result; import com.opengamma.util.test.TestGroup; import com.opengamma.util.time.DateUtils; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.net.URI; import java.util.List; import static com.opengamma.sesame.config.ConfigBuilder.configureView; import static com.opengamma.util.result.ResultTestUtils.assertSuccess; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.closeTo; /** * Integration tests run against a remote server * Input: Forward Rate Agreement, Snapshot Market Data * Output: Present Value */ @Test(groups = TestGroup.INTEGRATION) public class RemoteFraTest { private static final double STD_TOLERANCE_PV = 1.0E-3; private ConfigLink<ExposureFunctions> _exposureConfig; private ConfigLink<CurrencyMatrix> _currencyMatrixLink; private Results _results; @BeforeClass public void setUp() { String url = Objects.firstNonNull(System.getProperty("server.url"), RemoteTestUtils.LOCALHOST); RemoteServer server = RemoteServer.create(url); MarketDataSnapshotSource snapshotSource = server.getMarketDataSnapshotSource(); ManageableMarketDataSnapshot snapshot = snapshotSource.getSingle(ManageableMarketDataSnapshot.class, RemoteTestUtils.USD_GBP_SNAPSHOT, VersionCorrection.LATEST); ViewRunner viewRunner = new RemoteViewRunner(URI.create(url)); MarketDataSpecification marketDataSpec = UserMarketDataSpecification.of(snapshot.getUniqueId()); CalculationArguments calculationArguments = CalculationArguments.builder() .valuationTime(DateUtils.getUTCDate(2014, 1, 22)) .marketDataSpecification(marketDataSpec) .build(); _exposureConfig = ConfigLink.resolvable(RemoteTestUtils.USD_GBP_FF_EXPOSURE, ExposureFunctions.class); _currencyMatrixLink = ConfigLink.resolvable(RemoteTestUtils.CURRENCY_MATRIX, CurrencyMatrix.class); // don't want to provide any data, let the server source it MarketDataEnvironment marketDataEnvironment = MarketDataEnvironmentBuilder.empty(); ViewConfig viewConfig = createViewConfig(); List<Object> trades = FraViewUtils.INPUTS; _results = viewRunner.runView(viewConfig, calculationArguments, marketDataEnvironment, trades); } private ViewConfig createViewConfig() { return configureView( "FRA Remote view", FraViewUtils.createFraViewColumn( OutputNames.PRESENT_VALUE, _exposureConfig, _currencyMatrixLink)); } @Test(enabled = true) public void testForwardRateAgreementPV() { Result result = _results.get(0, 0).getResult(); assertSuccess(result); assertThat(result.getValue(), is(instanceOf(MultipleCurrencyAmount.class))); MultipleCurrencyAmount mca = (MultipleCurrencyAmount) result.getValue(); assertThat(mca.getCurrencyAmount(Currency.USD).getAmount(), is(closeTo(21750.76254296188, STD_TOLERANCE_PV))); } }