/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.target.lazy;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import net.sf.ehcache.CacheManager;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.engine.DefaultCachingComputationTargetResolver;
import com.opengamma.engine.target.MockComputationTargetResolver;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ehcache.EHCacheUtils;
import com.opengamma.util.test.TestGroup;
/**
* Tests the {@link LazyResolvedPortfolioNode} class
*/
@Test(groups = {TestGroup.UNIT, "ehcache" })
public class LazyResolvedPortfolioNodeTest {
private CacheManager _cacheManager;
@BeforeClass
public void setUpClass() {
_cacheManager = EHCacheUtils.createTestCacheManager(getClass());
}
@AfterClass
public void tearDownClass() {
EHCacheUtils.shutdownQuiet(_cacheManager);
}
@BeforeMethod
public void setUp() {
EHCacheUtils.clear(_cacheManager);
}
//-------------------------------------------------------------------------
public void testBasicMethods() {
final MockComputationTargetResolver resolver = MockComputationTargetResolver.resolved();
final PortfolioNode underlying = resolver.getPositionSource().getPortfolioNode(UniqueId.of("Node", "0"), VersionCorrection.LATEST);
final PortfolioNode node = new LazyResolvedPortfolioNode(new LazyResolveContext(resolver.getSecuritySource(), null).atVersionCorrection(VersionCorrection.LATEST), underlying);
assertEquals(node.getName(), underlying.getName());
assertEquals(node.getParentNodeId(), underlying.getParentNodeId());
assertEquals(node.getUniqueId(), underlying.getUniqueId());
assertEquals(node.getChildNodes().size(), underlying.getChildNodes().size());
assertEquals(node.getPositions().size(), underlying.getPositions().size());
}
public void testSerialization_full() throws Exception {
final MockComputationTargetResolver resolver = MockComputationTargetResolver.resolved();
final PortfolioNode underlying = resolver.getPositionSource().getPortfolioNode(UniqueId.of("Node", "0"), VersionCorrection.LATEST);
PortfolioNode node = new LazyResolvedPortfolioNode(new LazyResolveContext(resolver.getSecuritySource(), null).atVersionCorrection(VersionCorrection.LATEST), underlying);
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
new ObjectOutputStream(baos).writeObject(node);
final Object resultObject = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())).readObject();
assertTrue(resultObject instanceof SimplePortfolioNode);
node = (PortfolioNode) resultObject;
assertEquals(node.getName(), underlying.getName());
assertEquals(node.getChildNodes().size(), underlying.getChildNodes().size());
assertEquals(node.getPositions().size(), underlying.getPositions().size());
}
public void testSerialization_targetResolver() throws Exception {
final MockComputationTargetResolver resolver = MockComputationTargetResolver.resolved();
final PortfolioNode underlying = resolver.getPositionSource().getPortfolioNode(UniqueId.of("Node", "0"), VersionCorrection.LATEST);
PortfolioNode node = new LazyResolvedPortfolioNode(new LazyResolveContext(resolver.getSecuritySource(), new DefaultCachingComputationTargetResolver(resolver,
_cacheManager)).atVersionCorrection(VersionCorrection.LATEST), underlying);
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
new ObjectOutputStream(baos).writeObject(node);
final Object resultObject = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())).readObject();
assertTrue(resultObject instanceof TargetResolverPortfolioNode);
node = (PortfolioNode) resultObject;
assertEquals(node.getName(), underlying.getName());
assertEquals(node.getChildNodes().size(), underlying.getChildNodes().size());
assertEquals(node.getPositions().size(), underlying.getPositions().size());
}
}