/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.depgraph.provider; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.net.URLDecoder; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.threeten.bp.Instant; import org.threeten.bp.LocalDate; import com.google.common.base.Throwables; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.marketdata.spec.MarketData; import com.opengamma.engine.marketdata.spec.MarketDataSpecification; import com.opengamma.engine.marketdata.spec.UserMarketDataSpecification; import com.opengamma.engine.target.ComputationTargetRequirement; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ValueProperties; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.financial.depgraph.rest.DependencyGraphTraceBuilderProperties; import com.opengamma.id.ExternalId; import com.opengamma.id.UniqueId; import com.opengamma.id.VersionCorrection; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class RemoteDependencyGraphTraceProviderTest { private RemoteDependencyGraphTraceProvider _provider; private String _baseUrl = "http://host.com/"; @BeforeMethod public void beforeMethod() throws URISyntaxException { URI uri = new URI(_baseUrl); _provider = new RemoteDependencyGraphTraceProvider(uri); } @Test public void getTraceDefaults() { URI uri = _provider.buildUri(new DependencyGraphTraceBuilderProperties()); String uriStr = decode(uri); //assert default values are there assertTrue(uriStr.contains("calculationConfigurationName/Default")); assertTrue(uriStr.contains("defaultProperties/EMPTY")); assertTrue(uriStr.contains("resolutionTime/VLATEST.CLATEST")); } @Test public void getTraceCalculationConfigurationName() { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); properties = properties.calculationConfigurationName("test"); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("calculationConfigurationName/test")); } @Test public void getTraceDefaultProperties() { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); String defaultPropertiesStr1 = "{A=[foo,bar],B=[*]}"; String defaultPropertiesStr2 = "{A=[bar,foo],B=[*]}"; ValueProperties parsed = ValueProperties.parse(defaultPropertiesStr1); properties = properties.defaultProperties(parsed); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("defaultProperties/" + defaultPropertiesStr1) || uriStr.contains("defaultProperties/" + defaultPropertiesStr2)); } @Test public void getTraceMarketDataUser() { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); String snapshotId = "Foo~1"; UserMarketDataSpecification marketData = MarketData.user(UniqueId.parse(snapshotId)); properties = properties.addMarketData(marketData); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("marketDataSnapshot/" + snapshotId)); } @Test public void getTraceMarketDataLiveDefault() { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); MarketDataSpecification marketData = MarketData.live(); properties = properties.addMarketData(marketData); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("marketDataLiveDefault")); } @Test public void getTraceMarketDataLive() { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); MarketDataSpecification marketData = MarketData.live("BB"); properties = properties.addMarketData(marketData); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("marketDataLive/BB")); } @Test public void getTraceMarketDataHistorical() { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); LocalDate now = LocalDate.now(); MarketDataSpecification marketData = MarketData.historical(now, "timeseries"); properties = properties.addMarketData(marketData); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("marketDataHistorical/" + now.toString() + "/timeseries")); assertEquals(now, LocalDate.parse(now.toString())); } @Test public void getTraceResolutionTime() { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); String rtStr = "V1970-01-01T00:00:01Z.CLATEST"; VersionCorrection rt = VersionCorrection.parse(rtStr); properties = properties.resolutionTime(rt); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("resolutionTime/" + rtStr)); } @Test public void getTraceValuationTime() { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); String instantStr = "2013-06-24T12:18:01.094Z"; Instant instant = Instant.parse(instantStr); properties = properties.valuationTime(instant); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("valuationTime/" + instantStr)); } @Test public void uriValueRequirementByExternalId() throws UnsupportedEncodingException { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); String valueName = "test1"; String targetType = "POSITION"; String idStr = "GOLDMAN~Foo1"; ExternalId id = ExternalId.parse(idStr); properties = properties.addRequirement(new ValueRequirement(valueName, new ComputationTargetRequirement(ComputationTargetType.POSITION, id))); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("requirement/" + valueName + "/" + targetType + "/" + idStr)); } @Test public void uriValueRequirementByUniqueId() throws UnsupportedEncodingException { DependencyGraphTraceBuilderProperties properties = new DependencyGraphTraceBuilderProperties(); String valueName = "test1"; String targetType = "POSITION"; String idStr = "GOLDMAN~Foo1"; UniqueId id = UniqueId.parse(idStr); properties = properties.addRequirement(new ValueRequirement(valueName, new ComputationTargetSpecification(ComputationTargetType.POSITION, id))); URI uri = _provider.buildUri(properties); String uriStr = decode(uri); assertTrue(uriStr.contains("value/" + valueName + "/" + targetType + "/" + idStr)); } private String decode(URI uriDefaultProperties) { String urlStr = uriDefaultProperties.toString(); try { return URLDecoder.decode(urlStr, "UTF-8"); } catch (UnsupportedEncodingException ex) { throw Throwables.propagate(ex); } } }