Package com.opengamma.integration.tool.portfolio

Source Code of com.opengamma.integration.tool.portfolio.XmlPortfolioLoaderToolTest

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.tool.portfolio;

import static org.testng.Assert.assertEquals;

import java.io.File;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.testng.collections.Sets;

import com.google.common.collect.Iterables;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.financial.tool.ToolContext;
import com.opengamma.master.portfolio.ManageablePortfolio;
import com.opengamma.master.portfolio.PortfolioMaster;
import com.opengamma.master.portfolio.PortfolioSearchRequest;
import com.opengamma.master.portfolio.impl.InMemoryPortfolioMaster;
import com.opengamma.master.position.ManageablePosition;
import com.opengamma.master.position.ManageableTrade;
import com.opengamma.master.position.PositionMaster;
import com.opengamma.master.position.PositionSearchRequest;
import com.opengamma.master.position.impl.InMemoryPositionMaster;
import com.opengamma.master.security.ManageableSecurity;
import com.opengamma.master.security.SecurityMaster;
import com.opengamma.master.security.SecuritySearchRequest;
import com.opengamma.master.security.impl.InMemorySecurityMaster;
import com.opengamma.util.test.TestGroup;

/**
* Test the portfolio loader tool behaves as expected. Data should be read from a file and
* inserted into the correct database masters.
*/
@Test(groups = TestGroup.UNIT)
public class XmlPortfolioLoaderToolTest {

  private ToolContext _toolContext;
  private PortfolioMaster _portfolioMaster;
  private PositionMaster _positionMaster;
  private SecurityMaster _securityMaster;

  @BeforeMethod
  public void setUp() throws Exception {

    _toolContext = new ToolContext();
    _portfolioMaster = new InMemoryPortfolioMaster();
    _toolContext.setPortfolioMaster(_portfolioMaster);
    _positionMaster = new InMemoryPositionMaster();
    _toolContext.setPositionMaster(_positionMaster);
    _securityMaster = new InMemorySecurityMaster();
    _toolContext.setSecurityMaster(_securityMaster);
  }

  @AfterMethod
  public void tearDown() throws Exception {
    _toolContext = null;
    _positionMaster = null;
    _portfolioMaster = null;
    _securityMaster = null;
  }

  @Test(expectedExceptions = OpenGammaRuntimeException.class)
  public void testLoadingFileWithWrongRootElementFails() {
    String fileLocation = "src/test/resources/xml_portfolios/wrong_root_element.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();
  }

  @Test(expectedExceptions = OpenGammaRuntimeException.class)
  public void testLoadingFileWithNoSchemaVersionFails() {
    String fileLocation = "src/test/resources/xml_portfolios/empty_portfolio_no_version";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();
  }

  @Test(expectedExceptions = OpenGammaRuntimeException.class)
  public void testDuplicateExternalIds() {
    String fileLocation = "src/test/resources/xml_portfolios/duplicate_external_ids.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();
  }

  @Test
  public void testEmptyPortfolio() {

    // We should get a default portfolio and position automatically generated for the trades
    String fileLocation = "src/test/resources/xml_portfolios/empty_portfolio.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 0);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 0);
  }

  @Test
  public void testMissingReference() {

    String fileLocation = "src/test/resources/xml_portfolios/missing_trade_reference.xml";
    File file = new File(fileLocation);
    try {
      new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true,
                          true, null).execute();
    }
    catch (OpenGammaRuntimeException e) {

      // Parse failed so no data should have been added to masters
      assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 0);
      assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 0);
      assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 0);
    }
  }

  @Test
  public void testSinglePortfolioSinglePositionNoTrades() {
    // to be added
  }

  @Test
  public void testSinglePortfolioMultiplePositionNoTrades() {
    // to be added
  }

  @Test
  public void testNoPortfolioMultiplePositionNoTradesCreatesDefaultPortfolio() {
     // to be added
  }

  @Test
  public void testNoPortfolioNoPositionMultipleTradesCreatesDefaultPortfolioAndPositions() {

    // We should get a default portfolio and position automatically generated for the trades
    String fileLocation = "src/test/resources/xml_portfolios/double_fx_option_no_position_no_portfolio.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 2);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 2);
  }

  @Test
  public void testSinglePortfolioSinglePositionSingleIrs() {

    String fileLocation = "src/test/resources/xml_portfolios/single_irs.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

  @Test
  public void testSinglePortfolioSinglePositionFra() {

    String fileLocation = "src/test/resources/xml_portfolios/single_fra.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

 
  @Test
  public void testSinglePortfolioSinglePositionSingleFxOption() {

    String fileLocation = "src/test/resources/xml_portfolios/single_fx_option.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

  @Test
  public void testSinglePortfolioNoPositionSingleFxOption() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/single_fx_option_no_position.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }


  /*
  Removed until ready to fully implement
  @Test
  public void testSinglePortfolioNoPositionSingleEquityVarianceSwap() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/single_equity_variance_swap_no_position.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, true, false, false, false, true).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }
  */

  @Test
  public void testSinglePortfolioNoPositionSingleFxDigitalOption() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/fx_digital_option_no_position.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

  @Test
  public void testSinglePortfolioNoPositionSingleFxForward() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/fx_forward_no_position.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

  @Test
  public void testSinglePortfolioNoPositionSingleNdfFxForward() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/ndf_fx_forward_no_position.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

  @Test
  public void testSinglePortfolioNoPositionSingleOtcEquityIndexOption() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/otc_equity_index_option.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    List<ManageablePosition> positions = _positionMaster.search(new PositionSearchRequest()).getPositions();
    assertEquals(positions.size(), 1);

    assertEquals(Iterables.getOnlyElement(positions.get(0).getTrades()).getQuantity(), new BigDecimal(250000));
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

  @Test
  public void testSinglePortfolioNoPositionListedEquityIndexOption() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/listed_index_option.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    List<ManageablePosition> positions = _positionMaster.search(new PositionSearchRequest()).getPositions();
    assertEquals(positions.size(), 1);

    ManageablePosition position = positions.get(0);
    List<ManageableTrade> trades = position.getTrades();
    assertEquals(trades.size(), 2);
    assertEquals(trades.get(0).getQuantity(), BigDecimal.valueOf(25000));
    assertEquals(trades.get(1).getQuantity(), BigDecimal.valueOf(-10000));

    assertEquals(position.getQuantity(), BigDecimal.valueOf(15000));
    assertEquals(position.getAttributes().get("pos-attr1"), "pos-attr1-value");
    assertEquals(position.getAttributes().get("pos-attr2"), "pos-attr2-value");

    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

  @Test
  public void testSinglePortfolioNoPositionListedEquityIndexFuture() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/listed_index_future.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    List<ManageablePosition> positions = _positionMaster.search(new PositionSearchRequest()).getPositions();
    assertEquals(positions.size(), 1);

    ManageablePosition position = positions.get(0);
    List<ManageableTrade> trades = position.getTrades();
    assertEquals(trades.size(), 1);
    assertEquals(trades.get(0).getQuantity(), BigDecimal.valueOf(1000));
    assertEquals(position.getQuantity(), BigDecimal.valueOf(1000));

    List<ManageableSecurity> securities = _securityMaster.search(new SecuritySearchRequest()).getSecurities();
    assertEquals(securities.size(), 1);
    assertEquals(securities.get(0).getAttributes().get("sec-attr1"), "sec-attr1-value");
    assertEquals(securities.get(0).getAttributes().get("sec-attr2"), "sec-attr2-value"); }

  @Test
  public void testSinglePortfolioNoPositionListedEquityIndexFutureOption() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/listed_index_future_option.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    List<ManageablePosition> positions = _positionMaster.search(new PositionSearchRequest()).getPositions();
    assertEquals(positions.size(), 1);

    ManageablePosition position = positions.get(0);
    List<ManageableTrade> trades = position.getTrades();
    assertEquals(trades.size(), 1);
    ManageableTrade trade = trades.get(0);
    assertEquals(trade.getQuantity(), BigDecimal.valueOf(1000));
    assertEquals(trade.getAttributes().get("attr1"), "attr1-value");
    assertEquals(trade.getAttributes().get("attr2"), "attr2-value");

    assertEquals(position.getQuantity(), BigDecimal.valueOf(1000));

    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }

  @Test
  public void testSinglePortfolioNoPositionSingleSwaption() {

    // We should get a position automatically generated for the trade
    String fileLocation = "src/test/resources/xml_portfolios/swaption_no_position.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);

    // We end up with 2 securities: the swaption itself, and its underlying swap
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 2);
  }

  @Test
  public void testSinglePortfolioNoPositionMultipleFxOption() {

    // We should get a position automatically generated for the trades
    String fileLocation = "src/test/resources/xml_portfolios/double_fx_option_no_position.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 2);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 2);
  }

  @Test
  public void testSinglePortfolioSinglePositionMultipleIrs() {

    String fileLocation = "src/test/resources/xml_portfolios/triple_irs.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 3);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 3);
  }

  @Test
  public void testNestedPortfolios() {
    String fileLocation = "src/test/resources/xml_portfolios/nested_portfolios.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    List<ManageablePortfolio> portfolios = _portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios();
    assertEquals(portfolios.size(), 1);

    assertEquals(portfolios.get(0).getRootNode().getChildNodes().size(), 2);

    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 4);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 4);
  }

  @Test
  public void testDefineSecuritiesAgainstPositions() {

    String fileLocation = "src/test/resources/xml_portfolios/position_defined_securities_portfolio.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 2);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 2);
  }

  @Test
  public void testMultiPortfolioLoad() {

    String fileLocation = "src/test/resources/xml_portfolios/multi_portfolio.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 2);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 2);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 2);
  }

  @Test
  public void testMultitypePortfolioLoad() {

    String fileLocation = "src/test/resources/xml_portfolios/multitype_portfolio.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 2);
    Set<ManageableTrade> tradeSet = extractTrades(_positionMaster);
    assertEquals(tradeSet.size(), 2);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 2);
  }
 
  private Set<ManageableTrade> extractTrades(PositionMaster positionMaster) {
    Set<ManageableTrade> tradeSet = Sets.newHashSet();
    for (ManageablePosition p : positionMaster.search(new PositionSearchRequest()).getPositions()) {
      tradeSet.addAll(p.getTrades());
    }
    return tradeSet;
  }

  @Test
  public void testMultiPortfolioLoadWithBadPortfolio() {

    String fileLocation = "src/test/resources/xml_portfolios/double_portfolio_one_bad.xml";
    File file = new File(fileLocation);
    new PortfolioLoader(_toolContext, "guff", null, file.getAbsolutePath(), true, false, false, false, true, true, null).execute();

    // Only one of the portfolios should ,make it in
    assertEquals(_portfolioMaster.search(new PortfolioSearchRequest()).getPortfolios().size(), 1);
    assertEquals(_positionMaster.search(new PositionSearchRequest()).getPositions().size(), 1);
    assertEquals(_securityMaster.search(new SecuritySearchRequest()).getSecurities().size(), 1);
  }
}
TOP

Related Classes of com.opengamma.integration.tool.portfolio.XmlPortfolioLoaderToolTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.