/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.closeTo;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.opengamma.analytics.financial.model.interestrate.curve.YieldCurve;
import com.opengamma.analytics.financial.provider.description.interestrate.IssuerProvider;
import com.opengamma.financial.analytics.curve.CurveConstructionConfiguration;
import com.opengamma.financial.analytics.curve.CurveGroupConfiguration;
import com.opengamma.id.VersionCorrection;
import com.opengamma.service.ServiceContext;
import com.opengamma.service.ThreadLocalServiceContext;
import com.opengamma.service.VersionCorrectionProvider;
import com.opengamma.sesame.engine.ComponentMap;
import com.opengamma.sesame.graph.FunctionModel;
import com.opengamma.sesame.sources.BondMockSources;
import com.opengamma.util.result.Result;
import com.opengamma.util.test.TestGroup;
@Test(groups = TestGroup.UNIT)
public class DiscountingIssuerProviderBundleFnTest {
private DefaultDiscountingIssuerProviderBundleFn _bundleFn;
private static final Environment ENV = BondMockSources.ENV;
private static final double TOLERANCE = 1.0E-3;
@BeforeClass
public void init() throws IOException {
VersionCorrectionProvider vcProvider = new VersionCorrectionProvider() {
@Override
public VersionCorrection getPortfolioVersionCorrection() {
return VersionCorrection.LATEST;
}
@Override
public VersionCorrection getConfigVersionCorrection() {
return VersionCorrection.LATEST;
}
};
ImmutableMap<Class<?>, Object> components = BondMockSources.generateBaseComponents();
ThreadLocalServiceContext.init(ServiceContext.of(components).with(VersionCorrectionProvider.class,vcProvider));
_bundleFn = FunctionModel.build(DefaultDiscountingIssuerProviderBundleFn.class,
BondMockSources.getConfig(),
ComponentMap.of(components));
}
@Test
public void testCurveBundle() {
CurveConstructionConfiguration curveConfig = BondMockSources.getBondCurveConfig();
Result<IssuerProviderBundle> issuerProviderBundleResult = _bundleFn.generateBundle(ENV, curveConfig);
assertThat(issuerProviderBundleResult.isSuccess(), is(true));
IssuerProviderBundle providerBundle = issuerProviderBundleResult.getValue();
assertThat(providerBundle.getCurveBuildingBlockBundle().getData().isEmpty(), is(false));
assertThat(providerBundle.getParameterIssuerProvider().getAllCurveNames().isEmpty(), is(false));
IssuerProvider issuerProvider = (IssuerProvider) providerBundle.getParameterIssuerProvider().getIssuerProvider();
YieldCurve issuerCurve = (YieldCurve) issuerProvider.getIssuerCurve(BondMockSources.BOND_GBP_CURVE_NAME);
Double[] yData = issuerCurve.getCurve().getYData();
assertThat(yData[0], is(closeTo(0.01, TOLERANCE)));
assertThat(yData[1], is(closeTo(0.01, TOLERANCE)));
}
@Test
public void testEmptyCurveBundle() {
List<String> exogenous = Collections.emptyList();
List<CurveGroupConfiguration> groups = Collections.emptyList();
CurveConstructionConfiguration curveConfig = new CurveConstructionConfiguration("Empty", groups, exogenous);;
Result<IssuerProviderBundle> issuerProviderBundleResult = _bundleFn.generateBundle(ENV, curveConfig);
assertThat(issuerProviderBundleResult.isSuccess(), is(true));
IssuerProviderBundle providerBundle = issuerProviderBundleResult.getValue();
assertThat(providerBundle.getCurveBuildingBlockBundle().getData().isEmpty(), is(true));
assertThat(providerBundle.getParameterIssuerProvider().getAllCurveNames().isEmpty(), is(true));
}
}