/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.credit; import static com.opengamma.sesame.config.ConfigBuilder.argument; import static com.opengamma.sesame.config.ConfigBuilder.arguments; import static com.opengamma.sesame.config.ConfigBuilder.columns; import static com.opengamma.sesame.config.ConfigBuilder.config; import static com.opengamma.sesame.config.ConfigBuilder.configureView; import static com.opengamma.sesame.config.ConfigBuilder.function; import static com.opengamma.sesame.config.ConfigBuilder.nonPortfolioOutput; import static com.opengamma.sesame.config.ConfigBuilder.nonPortfolioOutputs; import static com.opengamma.sesame.config.ConfigBuilder.output; import static org.mockito.Mockito.mock; import static org.testng.AssertJUnit.assertNotNull; import java.util.EnumSet; import java.util.Map; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.codahale.metrics.MetricRegistry; import com.google.common.base.Optional; import com.google.common.collect.Maps; import com.opengamma.core.config.ConfigSource; import com.opengamma.core.convention.ConventionSource; import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesSource; import com.opengamma.core.holiday.HolidaySource; import com.opengamma.core.link.SnapshotLink; import com.opengamma.core.marketdatasnapshot.NamedSnapshot; import com.opengamma.core.region.RegionSource; import com.opengamma.core.security.SecuritySource; import com.opengamma.financial.analytics.isda.credit.CreditCurveData; import com.opengamma.financial.analytics.isda.credit.CreditCurveDataKey; import com.opengamma.financial.analytics.isda.credit.CreditCurveDataSnapshot; import com.opengamma.financial.analytics.isda.credit.YieldCurveDataSnapshot; import com.opengamma.financial.convention.ConventionBundleSource; import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolver; import com.opengamma.sesame.DirectExecutorService; import com.opengamma.sesame.OutputNames; import com.opengamma.sesame.cache.NoOpCacheInvalidator; import com.opengamma.sesame.config.FunctionModelConfig; import com.opengamma.sesame.config.ViewConfig; import com.opengamma.sesame.credit.snapshot.SnapshotCreditCurveDataProviderFn; import com.opengamma.sesame.credit.snapshot.SnapshotYieldCurveDataProviderFn; import com.opengamma.sesame.engine.ComponentMap; import com.opengamma.sesame.engine.FunctionService; import com.opengamma.sesame.engine.View; import com.opengamma.sesame.engine.ViewFactory; import com.opengamma.sesame.function.AvailableImplementations; import com.opengamma.sesame.function.AvailableImplementationsImpl; import com.opengamma.sesame.function.AvailableOutputs; import com.opengamma.sesame.function.AvailableOutputsImpl; import com.opengamma.sesame.function.scenarios.curvedata.FunctionTestUtils; import com.opengamma.sesame.graph.FunctionModel; import com.opengamma.sesame.marketdata.HistoricalMarketDataFn; import com.opengamma.sesame.marketdata.MarketDataFn; /** * Tests graph building for credit curve functions. */ public class StandardIsdaCompliantCreditCurveGraphTest { private ViewFactory _viewFactory; @BeforeMethod public void beforeMethod() { ComponentMap componentMap = componentMap( ConfigSource.class, ConventionSource.class, ConventionBundleSource.class, HistoricalTimeSeriesResolver.class, SecuritySource.class, HolidaySource.class, HistoricalTimeSeriesSource.class, MarketDataFn.class, HistoricalMarketDataFn.class, RegionSource.class); AvailableOutputs availableOutputs = new AvailableOutputsImpl(); availableOutputs.register(IsdaCompliantYieldCurveFn.class, IsdaCompliantCreditCurveFn.class); AvailableImplementations availableImplementations = new AvailableImplementationsImpl(); availableImplementations.register(DefaultIsdaCompliantYieldCurveFn.class, SnapshotYieldCurveDataProviderFn.class, SnapshotCreditCurveDataProviderFn.class, StandardIsdaCompliantCreditCurveFn.class); _viewFactory = new ViewFactory(new DirectExecutorService(), componentMap, availableOutputs, availableImplementations, FunctionModelConfig.EMPTY, EnumSet.noneOf(FunctionService.class), FunctionTestUtils.createCacheBuilder(), new NoOpCacheInvalidator(), Optional.<MetricRegistry>absent()); } @Test public void testBuildYieldCurve() { ViewConfig config = createViewConfig(); View view = _viewFactory.createView(config); FunctionModel functionModel = view.getFunctionModel("Yield curve"); assertNotNull(functionModel); System.out.println(functionModel.prettyPrint()); } @Test public void testBuildCreditCurve() { ViewConfig config = createViewConfig(); View view = _viewFactory.createView(config); FunctionModel functionModel = view.getFunctionModel("Credit curve"); assertNotNull(functionModel); System.out.println(functionModel.prettyPrint()); } private ViewConfig createViewConfig() { //note: ideally should use mock(CreditCurveDataSnapshot.class) for this. //despite CreditCurveDataSnapshot being final, powermock still allows it to be mocked. //however due to a bug in Java Version 7 Update 65, this is disabled for now. //see: //https://code.google.com/p/powermock/issues/detail?id=504 //https://bugs.openjdk.java.net/browse/JDK-8051012 Map<CreditCurveDataKey, CreditCurveData> emptyData = Maps.newHashMap(); NamedSnapshot snapshot = CreditCurveDataSnapshot.builder().creditCurves(emptyData).name("test").build(); return configureView( "Yield curve", config( arguments( function( SnapshotYieldCurveDataProviderFn.class, argument("snapshotLink", SnapshotLink.resolved(mock(YieldCurveDataSnapshot.class)))), function( SnapshotCreditCurveDataProviderFn.class, argument("snapshotLink", SnapshotLink.resolved(snapshot))))), columns(), nonPortfolioOutputs( nonPortfolioOutput("Yield curve", output(OutputNames.ISDA_YIELD_CURVE)), nonPortfolioOutput("Credit curve", output(OutputNames.ISDA_CREDIT_CURVE)))); } private static ComponentMap componentMap(Class<?>... componentTypes) { Map<Class<?>, Object> compMap = Maps.newHashMap(); for (Class<?> componentType : componentTypes) { compMap.put(componentType, mock(componentType)); } return ComponentMap.of(compMap); } }