/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.core.position.impl;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import java.math.BigDecimal;
import java.util.Map;
import org.testng.annotations.Test;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.position.Portfolio;
import com.opengamma.core.position.Position;
import com.opengamma.core.security.impl.SimpleSecurityLink;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.AbstractRedisTestCase;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.INTEGRATION, enabled = false)
public class NonVersionedRedisPositionSourceTest extends AbstractRedisTestCase {
@Test(expectedExceptions={DataNotFoundException.class})
public void emptyPortfolioSearch() {
NonVersionedRedisPositionSource source = new NonVersionedRedisPositionSource(getJedisPool(), getRedisPrefix());
assertNull(source.getPortfolio(UniqueId.of("TEST", "NONE"), null));
}
@Test(expectedExceptions={DataNotFoundException.class})
public void emptyPositionSearch() {
NonVersionedRedisPositionSource source = new NonVersionedRedisPositionSource(getJedisPool(), getRedisPrefix());
assertNull(source.getPosition(UniqueId.of("TEST", "NONE")));
}
public void positionAddGet() {
NonVersionedRedisPositionSource source = new NonVersionedRedisPositionSource(getJedisPool(), getRedisPrefix());
SimplePosition position = new SimplePosition();
position.setQuantity(new BigDecimal(432));
position.setSecurityLink(new SimpleSecurityLink(ExternalId.of("Test", "Pos-1")));
position.addAttribute("Att-1", "Value-1");
position.addAttribute("Att-2", "Value-2");
UniqueId uniqueId = source.storePosition(position);
Position result = source.getPosition(uniqueId);
assertNotNull(result);
assertEquals(uniqueId, result.getUniqueId());
assertEquals(position.getQuantity(), result.getQuantity());
assertEquals(ExternalIdBundle.of(ExternalId.of("Test", "Pos-1")), position.getSecurityLink().getExternalId());
assertEquals("Value-1", position.getAttributes().get("Att-1"));
assertEquals("Value-2", position.getAttributes().get("Att-2"));
}
public void positionStoreQuantityChange() {
NonVersionedRedisPositionSource source = new NonVersionedRedisPositionSource(getJedisPool(), getRedisPrefix());
SimplePosition position = new SimplePosition();
position.setQuantity(new BigDecimal(432));
position.setSecurityLink(new SimpleSecurityLink(ExternalId.of("Test", "Pos-1")));
UniqueId uniqueId = source.storePosition(position);
position.setQuantity(new BigDecimal(9999));
position.setUniqueId(uniqueId);
source.updatePositionQuantity(position);
Position result = source.getPosition(uniqueId);
assertNotNull(result);
assertEquals(uniqueId, result.getUniqueId());
assertEquals(position.getQuantity(), result.getQuantity());
}
public void portfolioAddGet() {
NonVersionedRedisPositionSource source = new NonVersionedRedisPositionSource(getJedisPool(), getRedisPrefix());
SimplePortfolio portfolio = new SimplePortfolio("Fibble");
portfolio.setRootNode(new SimplePortfolioNode());
int nPositions = 100;
for (int i = 0; i < nPositions; i++) {
portfolio.getRootNode().addPosition(addPosition(i));
}
UniqueId uniqueId = source.storePortfolio(portfolio);
Portfolio result = source.getPortfolio(uniqueId, null);
assertNotNull(result);
assertEquals("Fibble", result.getName());
assertNotNull(result.getRootNode());
assertTrue((result.getRootNode().getChildNodes() == null) || result.getRootNode().getChildNodes().isEmpty());
assertEquals(nPositions, result.getRootNode().getPositions().size());
}
public void portfolioAddGetByName() {
NonVersionedRedisPositionSource source = new NonVersionedRedisPositionSource(getJedisPool(), getRedisPrefix());
SimplePortfolio portfolio = new SimplePortfolio("Fibble");
portfolio.setRootNode(new SimplePortfolioNode());
int nPositions = 5;
for (int i = 0; i < nPositions; i++) {
portfolio.getRootNode().addPosition(addPosition(i));
}
UniqueId uniqueId = source.storePortfolio(portfolio);
Portfolio result = source.getByName("Fibble");
assertNotNull(result);
assertEquals("Fibble", result.getName());
assertEquals(uniqueId, result.getUniqueId());
}
protected SimplePosition addPosition(int quantity) {
SimplePosition position = new SimplePosition();
position.setQuantity(new BigDecimal(quantity));
position.setSecurityLink(new SimpleSecurityLink(ExternalId.of("Test", "Pos-" + quantity)));
return position;
}
/**
* Test how fast we can add positions to an existing portfolio.
* When this was run on Kirk's machine (localhost) took 9.337sec at 50k positions
* (equivalent to 0.18674ms/position).
*/
@Test(enabled = false)
public void largePerformanceTest() {
NonVersionedRedisPositionSource source = new NonVersionedRedisPositionSource(getJedisPool(), getRedisPrefix());
SimplePortfolio portfolio = new SimplePortfolio("Fibble");
portfolio.setRootNode(new SimplePortfolioNode());
UniqueId uniqueId = source.storePortfolio(portfolio);
Portfolio p = source.getPortfolio(uniqueId, null);
long start = System.nanoTime();
final int NUM_POSITIONS = 50000;
for (int i = 0; i < NUM_POSITIONS; i++) {
source.addPositionToPortfolio(p, addPosition(i));
}
long end = System.nanoTime();
double durationInSec = ((double) (end - start)) / 1000000000.0;
System.out.println("Adding " + NUM_POSITIONS + " took " + durationInSec + " sec");
}
public void portfolioNames() {
NonVersionedRedisPositionSource source = new NonVersionedRedisPositionSource(getJedisPool(), getRedisPrefix());
SimplePortfolio portfolio1 = new SimplePortfolio("Fibble-1");
UniqueId id1 = source.storePortfolio(portfolio1);
SimplePortfolio portfolio2 = new SimplePortfolio("Fibble-2");
UniqueId id2 = source.storePortfolio(portfolio2);
SimplePortfolio portfolio3 = new SimplePortfolio("Fibble-3");
UniqueId id3 = source.storePortfolio(portfolio3);
Map<String, UniqueId> result = source.getAllPortfolioNames();
assertNotNull(result);
assertEquals(3, result.size());
assertEquals(id1, result.get(portfolio1.getName()));
assertEquals(id2, result.get(portfolio2.getName()));
assertEquals(id3, result.get(portfolio3.getName()));
}
}