/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.curve; import static org.testng.AssertJUnit.assertEquals; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import com.opengamma.analytics.financial.legalentity.LegalEntity; import com.opengamma.analytics.financial.legalentity.LegalEntityFilter; import com.opengamma.analytics.financial.legalentity.LegalEntityRegion; import com.opengamma.analytics.financial.legalentity.LegalEntitySector; import com.opengamma.analytics.financial.legalentity.LegalEntityShortName; import com.opengamma.financial.analytics.fudgemsg.AnalyticsTestBase; import com.opengamma.id.ExternalId; import com.opengamma.id.UniqueId; import com.opengamma.util.i18n.Country; import com.opengamma.util.money.Currency; import com.opengamma.util.test.TestGroup; import com.opengamma.util.time.Tenor; /** * */ @Test(groups = TestGroup.UNIT) public class CurveConfigurationBuildersTest extends AnalyticsTestBase { private static final String DISCOUNTING_NAME = "USD Discounting"; private static final String DISCOUNTING_CODE = "USD"; private static final DiscountingCurveTypeConfiguration DISCOUNTING_CONFIG = new DiscountingCurveTypeConfiguration(DISCOUNTING_CODE); private static final String LIBOR_3M_NAME = "USD Forward3M"; private static final ExternalId LIBOR_3M_CONVENTION = ExternalId.of("Test", "USD 3m Libor"); private static final IborCurveTypeConfiguration LIBOR_3M_CONFIG = new IborCurveTypeConfiguration(LIBOR_3M_CONVENTION, Tenor.THREE_MONTHS); private static final String LIBOR_6M_NAME = "USD Forward3M"; private static final ExternalId LIBOR_6M_CONVENTION = ExternalId.of("Test", "USD 6m Libor"); private static final IborCurveTypeConfiguration LIBOR_6M_CONFIG = new IborCurveTypeConfiguration(LIBOR_6M_CONVENTION, Tenor.SIX_MONTHS); private static final String BOND_CURVE_NAME = "OG Bond Curve"; private static final String BOND_ISSUER_NAME = "OG"; private static final String BOND_CODE = "USD"; private static final IssuerCurveTypeConfiguration DEPRECATED_ISSUER_CONFIG = new IssuerCurveTypeConfiguration(BOND_ISSUER_NAME, BOND_CODE); private static final IssuerCurveTypeConfiguration ISSUER_CONFIG; private static final ExternalId OVERNIGHT_CONVENTION = ExternalId.of("Test", "USD Overnight"); private static final OvernightCurveTypeConfiguration OVERNIGHT_CONFIG = new OvernightCurveTypeConfiguration(OVERNIGHT_CONVENTION); private static final InflationCurveTypeConfiguration INFLATION_CONFIG = new InflationCurveTypeConfiguration("US", ExternalId.of("Test", "USCPI")); private static final CurveGroupConfiguration GROUP1; private static final CurveGroupConfiguration GROUP2; private static final CurveGroupConfiguration GROUP3; private static final CurveConstructionConfiguration CONSTRUCTION; static { final Set<Object> keys = new HashSet<>(); keys.add("INDUSTRY"); keys.add("North America"); keys.add(Country.US); keys.add(Currency.USD); final Set<LegalEntityFilter<LegalEntity>> filters = new HashSet<>(); filters.add(new LegalEntitySector(true, false, Collections.<String>emptySet())); filters.add(new LegalEntityRegion(true, true, Collections.singleton(Country.US), true, Collections.singleton(Currency.USD))); ISSUER_CONFIG = new IssuerCurveTypeConfiguration(keys, filters); final Map<String, List<? extends CurveTypeConfiguration>> group1Map = new HashMap<>(); group1Map.put(DISCOUNTING_NAME, Arrays.asList(DISCOUNTING_CONFIG, OVERNIGHT_CONFIG)); GROUP1 = new CurveGroupConfiguration(1, group1Map); final Map<String, List<? extends CurveTypeConfiguration>> group2Map = new HashMap<>(); group2Map.put(LIBOR_3M_NAME, Arrays.asList(LIBOR_3M_CONFIG)); group2Map.put(LIBOR_6M_NAME, Arrays.asList(LIBOR_6M_CONFIG)); GROUP2 = new CurveGroupConfiguration(2, group2Map); final Map<String, List<? extends CurveTypeConfiguration>> group3Map = new HashMap<>(); group3Map.put(BOND_CURVE_NAME, Arrays.asList(ISSUER_CONFIG)); GROUP3 = new CurveGroupConfiguration(3, group3Map); CONSTRUCTION = new CurveConstructionConfiguration("Config", Arrays.asList(GROUP1, GROUP2, GROUP3), ImmutableList.<String>of()); CONSTRUCTION.setUniqueId(UniqueId.of(UniqueId.EXTERNAL_SCHEME.getName(), "678")); } @Test public void testDiscountingCurveTypeConfiguration() { assertEquals(DISCOUNTING_CONFIG, cycleObject(DiscountingCurveTypeConfiguration.class, DISCOUNTING_CONFIG)); } @Test public void testIborCurveTypeConfiguration() { assertEquals(LIBOR_3M_CONFIG, cycleObject(IborCurveTypeConfiguration.class, LIBOR_3M_CONFIG)); } @Test public void testOvernightCurveTypeConfiguration() { assertEquals(OVERNIGHT_CONFIG, cycleObject(OvernightCurveTypeConfiguration.class, OVERNIGHT_CONFIG)); } @Test public void testIssuerCurveTypeConfiguration() { final Set<Object> keys = Sets.<Object>newHashSet("OG", Currency.USD); final Set<LegalEntityFilter<LegalEntity>> filterSet = new HashSet<>(); filterSet.add(new LegalEntityRegion(false, false, Collections.<Country>emptySet(), true, Collections.singleton(Currency.USD))); filterSet.add(new LegalEntityShortName()); assertEquals(new IssuerCurveTypeConfiguration(keys, filterSet), cycleObject(IssuerCurveTypeConfiguration.class, DEPRECATED_ISSUER_CONFIG)); assertEquals(ISSUER_CONFIG, cycleObject(IssuerCurveTypeConfiguration.class, ISSUER_CONFIG)); } @Test public void testInflationCurveTypeConfiguration() { assertEquals(INFLATION_CONFIG, cycleObject(InflationCurveTypeConfiguration.class, INFLATION_CONFIG)); } @Test public void testCurveGroupConfiguration() { assertEquals(GROUP1, cycleObject(CurveGroupConfiguration.class, GROUP1)); assertEquals(GROUP2, cycleObject(CurveGroupConfiguration.class, GROUP2)); assertEquals(GROUP3, cycleObject(CurveGroupConfiguration.class, GROUP3)); } @Test public void testCurveConstructionConfiguration() { assertEquals(CONSTRUCTION, cycleObject(CurveConstructionConfiguration.class, CONSTRUCTION)); final List<String> exogenousConfigs = Arrays.asList("Config1", "Config2"); final CurveConstructionConfiguration construction = new CurveConstructionConfiguration("Config", Arrays.asList(GROUP1, GROUP2, GROUP3), exogenousConfigs); construction.setUniqueId(UniqueId.of(UniqueId.EXTERNAL_SCHEME.getName(), "789")); assertEquals(construction, cycleObject(CurveConstructionConfiguration.class, construction)); } }