Package com.opengamma.core.position

Source Code of com.opengamma.core.position.PortfolioNodeAndPositionFudgeEncodingTest

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

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;

import java.math.BigDecimal;
import java.util.List;

import org.fudgemsg.FudgeField;
import org.fudgemsg.FudgeMsg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.core.position.impl.SimplePosition;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.id.UniqueIdSupplier;
import com.opengamma.util.test.AbstractFudgeBuilderTestCase;
import com.opengamma.util.test.TestGroup;

/**
* Test {@link PortfolioNodeFudgeBuilder} and {@link PositionFudgeBuilder}.
*/
@Test(groups = TestGroup.UNIT)
public class PortfolioNodeAndPositionFudgeEncodingTest extends AbstractFudgeBuilderTestCase {

  private static final Logger s_logger = LoggerFactory.getLogger(PortfolioNodeAndPositionFudgeEncodingTest.class);

  private UniqueIdSupplier _uniqueIdSupplier;

  @BeforeMethod
  public void init() {
    _uniqueIdSupplier = new UniqueIdSupplier("PortfolioNodeBuilderTest");
  }

  private UniqueId nextUniqueId() {
    return _uniqueIdSupplier.get();
  }

  private void linkNodes(final SimplePortfolioNode parent, final SimplePortfolioNode child) {
    child.setParentNodeId(parent.getUniqueId());
    parent.addChildNode(child);
  }

  private SimplePortfolioNode[] createPortfolioNodes() {
    final SimplePortfolioNode nodes[] = new SimplePortfolioNode[7];
    for (int i = 0; i < nodes.length; i++) {
      nodes[i] = new SimplePortfolioNode(nextUniqueId(), "node " + i);
    }
    linkNodes(nodes[0], nodes[1]);
    linkNodes(nodes[0], nodes[2]);
    linkNodes(nodes[1], nodes[3]);
    linkNodes(nodes[1], nodes[4]);
    linkNodes(nodes[2], nodes[5]);
    linkNodes(nodes[2], nodes[6]);
    return nodes;
  }

  private void addPositions(final SimplePortfolioNode node, final int num) {
    for (int i = 0; i < num; i++) {
      node.addPosition(new SimplePosition(nextUniqueId(), new BigDecimal(10), ExternalId.of("Security", "Foo")));
    }
  }

  private SimplePortfolioNode createPortfolioWithPositions() {
    final SimplePortfolioNode[] nodes = createPortfolioNodes();
    addPositions(nodes[1], 1);
    addPositions(nodes[3], 2);
    addPositions(nodes[5], 1);
    addPositions(nodes[6], 2);
    return nodes[0];
  }

  private void assertPortfolioNodeEquals(final PortfolioNode expected, final PortfolioNode actual) {
    assertNotNull(expected);
    assertNotNull(actual);
    s_logger.debug("testing portfolio node {}", expected.getUniqueId());
    assertEquals(expected.getUniqueId(), actual.getUniqueId());
    assertEquals(expected.getName(), actual.getName());
    assertEquals(expected.size(), actual.size());
    assertEquals(expected.getParentNodeId(), actual.getParentNodeId());
    final List<PortfolioNode> expectedChildren = expected.getChildNodes();
    final List<PortfolioNode> actualChildren = actual.getChildNodes();
    assertNotNull(expectedChildren);
    assertNotNull(actualChildren);
    assertEquals(expectedChildren.size(), actualChildren.size());
    for (int i = 0; i < expectedChildren.size(); i++) {
      s_logger.debug("testing child {} of {}", i, actual.getUniqueId());
      assertPortfolioNodeEquals(expectedChildren.get(i), actualChildren.get(i));
    }
    final List<Position> expectedPositions = expected.getPositions();
    final List<Position> actualPositions = actual.getPositions();
    assertNotNull(expectedPositions);
    assertNotNull(actualPositions);
    assertEquals(expectedPositions.size(), actualPositions.size());
    for (int i = 0; i < expectedPositions.size(); i++) {
      s_logger.debug("testing position {} of {}", i, actual.getUniqueId());
      assertPositionEquals(expectedPositions.get(i), actualPositions.get(i));
    }
  }

  private void assertPositionEquals(final Position expected, final Position actual) {
    assertNotNull(expected);
    assertNotNull(actual);
    s_logger.debug("testing position {}", expected.getUniqueId());
    assertEquals(expected.getUniqueId(), actual.getUniqueId());
    assertEquals(expected.getQuantity(), actual.getQuantity());
    assertEquals(expected.getSecurityLink(), actual.getSecurityLink());
  }

  private FudgeMsg runPortfolioNodeTest(final PortfolioNode original) {
    final FudgeMsg message = getFudgeSerializer().objectToFudgeMsg(original);
    s_logger.debug("Message = {}", message);
    final PortfolioNode portfolio = getFudgeDeserializer().fudgeMsgToObject(PortfolioNode.class, message);
    assertPortfolioNodeEquals(original, portfolio);
    return message;
  }

  private int countParents(final FudgeMsg message) {
    int count = 0;
    for (FudgeField field : message) {
      if (PortfolioNodeFudgeBuilder.PARENT_FIELD_NAME.equals(field.getName())) {
        s_logger.debug("Found parent ref {}", field.getValue());
        count++;
      } else if (field.getValue() instanceof FudgeMsg) {
        count += countParents((FudgeMsg) field.getValue());
      }
    }
    return count;
  }

  public void testPortfolio() {
    final FudgeMsg message = runPortfolioNodeTest(createPortfolioNodes()[0]);
    assertEquals(0, countParents(message));
  }

  public void testPortfolioWithPositions() {
    final FudgeMsg message = runPortfolioNodeTest(createPortfolioWithPositions());
    assertEquals(0, countParents(message));
  }

  public void testPortfolioWithParent() {
    final SimplePortfolioNode root = createPortfolioNodes()[0];
    root.setParentNodeId(nextUniqueId());
    final FudgeMsg message = runPortfolioNodeTest(root);
    assertEquals(1, countParents(message));
  }

  private FudgeMsg runPositionTest(final Position original) {
    final FudgeMsg message = getFudgeSerializer().objectToFudgeMsg(original);
    s_logger.debug("Message = {}", message);
    final Position position = getFudgeDeserializer().fudgeMsgToObject(Position.class, message);
    assertPositionEquals(original, position);
    return message;
  }

  public void testPosition() {
    final FudgeMsg message = runPositionTest(new SimplePosition(nextUniqueId(), new BigDecimal(100), ExternalIdBundle.of(ExternalId.of("Scheme 1", "Id 1"), ExternalId
        .of("Scheme 2", "Id 2"))));
    assertEquals(0, countParents(message));
  }

}
TOP

Related Classes of com.opengamma.core.position.PortfolioNodeAndPositionFudgeEncodingTest

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.