/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.curve.exposure;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
import static org.testng.AssertJUnit.fail;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.OffsetTime;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.core.config.impl.ConfigItem;
import com.opengamma.core.position.Counterparty;
import com.opengamma.core.position.Trade;
import com.opengamma.core.position.impl.SimpleCounterparty;
import com.opengamma.core.position.impl.SimpleTrade;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.financial.security.fra.FRASecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.master.config.ConfigMasterUtils;
import com.opengamma.master.config.impl.InMemoryConfigMaster;
import com.opengamma.master.config.impl.MasterConfigSource;
import com.opengamma.master.security.impl.InMemorySecurityMaster;
import com.opengamma.master.security.impl.MasterSecuritySource;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
/**
* Unit test for ConfigDBInstrumentExposuresProvider.
*/
@Test(groups = TestGroup.UNIT)
public class ConfigDBInstrumentExposuresProviderTest {
@Test
public void testEmptyCurveConfigs() {
ConfigMaster configMaster = new InMemoryConfigMaster();
ConfigSource configSource = new MasterConfigSource(configMaster);
SecuritySource securitySource = new MasterSecuritySource(new InMemorySecurityMaster());
String name = "test";
List<String> exposureFunctions = Lists.newArrayList(CurrencyExposureFunction.NAME);
Map<ExternalId, String> idsToNames = Maps.newHashMap();
ExposureFunctions exposures = new ExposureFunctions(name, exposureFunctions, idsToNames);
ConfigMasterUtils.storeByName(configMaster, ConfigItem.of(exposures));
ConfigDBInstrumentExposuresProvider provider = new ConfigDBInstrumentExposuresProvider(configSource, securitySource, VersionCorrection.LATEST);
FRASecurity security = ExposureFunctionTestHelper.getFRASecurity();
Trade trade = new SimpleTrade(security, BigDecimal.ONE, new SimpleCounterparty(ExternalId.of(Counterparty.DEFAULT_SCHEME, "TEST")), LocalDate.now(), OffsetTime.now());
try {
provider.getCurveConstructionConfigurationsForConfig(name, trade);
fail("Expected exception for empty curve configs");
} catch (OpenGammaRuntimeException e) {
// test has passed
}
}
@Test
public void testMultipleCurveConfigs() {
ConfigMaster configMaster = new InMemoryConfigMaster();
ConfigSource configSource = new MasterConfigSource(configMaster);
SecuritySource securitySource = new MasterSecuritySource(new InMemorySecurityMaster());
FRASecurity security = ExposureFunctionTestHelper.getFRASecurity();
String name = "test";
List<String> exposureFunctions = Lists.newArrayList(SecurityTypeExposureFunction.NAME, CurrencyExposureFunction.NAME);
Map<ExternalId, String> idsToNames = new HashMap<>();
String securityTypeCurveConfig = "SecurityTypeConfig";
idsToNames.put(ExternalId.of(ExposureFunction.SECURITY_IDENTIFIER, security.getSecurityType()), securityTypeCurveConfig);
String currencyCurveConfig = "CurrencyConfig";
idsToNames.put(ExternalId.of(Currency.OBJECT_SCHEME, security.getCurrency().getCode()), currencyCurveConfig);
ExposureFunctions exposures = new ExposureFunctions(name, exposureFunctions, idsToNames);
ConfigMasterUtils.storeByName(configMaster, ConfigItem.of(exposures));
ConfigDBInstrumentExposuresProvider provider = new ConfigDBInstrumentExposuresProvider(configSource, securitySource, VersionCorrection.LATEST);
Trade trade = new SimpleTrade(security, BigDecimal.ONE, new SimpleCounterparty(ExternalId.of(Counterparty.DEFAULT_SCHEME, "TEST")), LocalDate.now(), OffsetTime.now());
Set<String> curveConfigs = provider.getCurveConstructionConfigurationsForConfig(name, trade);
assertEquals("Expected single curve config", 1, curveConfigs.size());
assertTrue("Expected configs to contain security type config", curveConfigs.contains(securityTypeCurveConfig));
assertFalse("Expected configs to not contain currency config", curveConfigs.contains(currencyCurveConfig));
}
}