/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.view.client; import static com.opengamma.engine.view.permission.PortfolioPermission.ALLOW; import static com.opengamma.engine.view.permission.PortfolioPermission.DENY; import static com.opengamma.engine.view.permission.PortfolioPermission.PARTIAL; import static com.opengamma.engine.view.client.PortfolioPermissionTestUtils.createAllowNodeChecker; import static com.opengamma.engine.view.client.PortfolioPermissionTestUtils.createDenyNodeChecker; import static com.opengamma.engine.view.client.PortfolioPermissionTestUtils.createMappedNodeChecker; import static com.opengamma.engine.view.client.PortfolioPermissionTestUtils.nodeTree; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import java.util.List; import java.util.Map; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.opengamma.core.position.PortfolioNode; import com.opengamma.core.position.impl.SimplePortfolio; import com.opengamma.core.position.impl.SimplePortfolioNode; import com.opengamma.engine.view.permission.PortfolioPermission; import com.opengamma.util.test.TestGroup; @Test(groups = TestGroup.UNIT) public class PortfolioPermissionCheckerTest { @Test public void testNonExistentNodeIsDenied() { SimplePortfolioNode node = new SimplePortfolioNode("not in the portfolio"); PortfolioPermissionChecker checker = new PortfolioPermissionChecker(new SimplePortfolio("test"), createAllowNodeChecker()); assertThat(checker.permissionCheck(node), is(DENY)); } @Test public void testSingleNodeWithAllow() { SimplePortfolioNode node = new SimplePortfolioNode(); PortfolioPermissionChecker checker = new PortfolioPermissionChecker(new SimplePortfolio("test", node), createAllowNodeChecker()); assertThat(checker.permissionCheck(node), is(ALLOW)); } @Test public void testSingleNodeWithDeny() { SimplePortfolioNode node = new SimplePortfolioNode(); PortfolioPermissionChecker checker = new PortfolioPermissionChecker(new SimplePortfolio("test", node), createDenyNodeChecker()); assertThat(checker.permissionCheck(node), is(DENY)); } @Test public void testAllChildrenAllowMeansParentAllows() { SimplePortfolioNode root = nodeTree(1, nodeTree(2), nodeTree(3), nodeTree(4)); Map<Integer, PortfolioPermission> permissions = ImmutableMap.of( 1, ALLOW, 2, ALLOW, 3, ALLOW, 4, ALLOW); PortfolioPermissionChecker checker = new PortfolioPermissionChecker(new SimplePortfolio("test", root), createMappedNodeChecker(permissions)); assertThat(checker.permissionCheck(root), is(ALLOW)); } @Test public void testAllChildrenDenyMeansParentPartials() { SimplePortfolioNode root = nodeTree(1, nodeTree(2), nodeTree(3), nodeTree(4)); Map<Integer, PortfolioPermission> permissions = ImmutableMap.of( 1, ALLOW, 2, DENY, 3, DENY, 4, DENY); PortfolioPermissionChecker checker = new PortfolioPermissionChecker(new SimplePortfolio("test", root), createMappedNodeChecker(permissions)); assertThat(checker.permissionCheck(root), is(PARTIAL)); } @Test public void testChildrenAllowAndDenyMeansParentPartials() { SimplePortfolioNode root = nodeTree(1, nodeTree(2), nodeTree(3), nodeTree(4)); Map<Integer, PortfolioPermission> permissions = ImmutableMap.of( 1, ALLOW, 2, ALLOW, 3, DENY, 4, ALLOW); PortfolioPermissionChecker checker = new PortfolioPermissionChecker(new SimplePortfolio("test", root), createMappedNodeChecker(permissions)); assertThat(checker.permissionCheck(root), is(PARTIAL)); } @Test public void testParentsDenialOverridesChildren() { SimplePortfolioNode root = nodeTree(1, nodeTree(2), nodeTree(3), nodeTree(4)); Map<Integer, PortfolioPermission> permissions = ImmutableMap.of( 1, DENY, 2, ALLOW, 3, ALLOW, 4, ALLOW); PortfolioPermissionChecker checker = new PortfolioPermissionChecker(new SimplePortfolio("test", root), createMappedNodeChecker(permissions)); assertThat(checker.permissionCheck(root), is(DENY)); } @Test public void testMultilevelTree() { SimplePortfolioNode root = nodeTree(1, nodeTree(2, nodeTree(5), nodeTree(6)), nodeTree(3, nodeTree(7)), nodeTree(4, nodeTree(8), nodeTree(9))); // When we add child nodes, it's possible they are copied, // so we can't just pull these vars out as we construct // the tree List<PortfolioNode> childNodes = root.getChildNodes(); PortfolioNode node2 = childNodes.get(0); PortfolioNode node3 = childNodes.get(1); PortfolioNode node4 = childNodes.get(2); Map< Integer, PortfolioPermission> permissions = ImmutableMap.<Integer, PortfolioPermission>builder() .put(1, ALLOW) .put(2, ALLOW) .put(3, DENY) .put(4, ALLOW) .put(5, DENY) .put(6, ALLOW) .put(7, ALLOW) .put(8, ALLOW) .put(9, ALLOW) .build(); PortfolioPermissionChecker checker = new PortfolioPermissionChecker(new SimplePortfolio("test", root), createMappedNodeChecker(permissions)); assertThat(checker.permissionCheck(root), is(PARTIAL)); assertThat(checker.permissionCheck(node2), is(PARTIAL)); assertThat(checker.permissionCheck(node3), is(DENY)); assertThat(checker.permissionCheck(node4), is(ALLOW)); } }