/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.core.permit; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.UUID; import org.eclipse.skalli.services.permit.Permit; import org.eclipse.skalli.testutil.TestUUIDs; import org.junit.Test; @SuppressWarnings("nls") public class PermitsConfigTest { @Test public void testEmptyPermits() throws Exception { PermitsConfig permits = new PermitsConfig(); assertNotNull(permits.getPermits()); assertTrue(permits.getPermits().isEmpty()); } @Test public void testAdd() throws Exception { PermitsConfig permits = new PermitsConfig(); PermitConfig permit = getPermit(TestUUIDs.TEST_UUIDS[0], -1, null); permits.add(permit); assertEquals(1, permits.getPermits().size()); assertEquals(permit, permits.get(TestUUIDs.TEST_UUIDS[0])); permit = getPermit(TestUUIDs.TEST_UUIDS[0], -1, "/projects"); permits.add(permit); assertEquals(1, permits.getPermits().size()); assertEquals(permit, permits.get(TestUUIDs.TEST_UUIDS[0])); assertEquals("/projects", permits.get(TestUUIDs.TEST_UUIDS[0]).getPath()); permit = getPermit(TestUUIDs.TEST_UUIDS[1], -1, null); permits.add(permit); assertEquals(2, permits.getPermits().size()); assertEquals(TestUUIDs.TEST_UUIDS[0], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[1], permits.getPermits().get(1).getUuid()); permit = getPermit(TestUUIDs.TEST_UUIDS[1], 0, null); permits.add(permit); assertEquals(2, permits.getPermits().size()); assertEquals(TestUUIDs.TEST_UUIDS[1], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[0], permits.getPermits().get(1).getUuid()); permit = getPermit(TestUUIDs.TEST_UUIDS[2], 1, null); permits.add(permit); assertEquals(3, permits.getPermits().size()); assertEquals(TestUUIDs.TEST_UUIDS[1], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[2], permits.getPermits().get(1).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[0], permits.getPermits().get(2).getUuid()); } @Test public void testGet() throws Exception { PermitsConfig permits = new PermitsConfig(); PermitConfig permit = getPermit(TestUUIDs.TEST_UUIDS[0], -1, null); permits.add(permit); assertEquals(permit, permits.get(TestUUIDs.TEST_UUIDS[0])); assertNull(permits.get(TestUUIDs.TEST_UUIDS[1])); assertNull(permits.get(null)); } @Test public void testRemove() throws Exception { PermitsConfig permits = new PermitsConfig(); assertNull(permits.remove(TestUUIDs.TEST_UUIDS[0])); permits.add(getPermit(TestUUIDs.TEST_UUIDS[0], -1, null)); permits.add(getPermit(TestUUIDs.TEST_UUIDS[1], -1, null)); permits.add(getPermit(TestUUIDs.TEST_UUIDS[2], -1, null)); assertEquals(3, permits.getPermits().size()); assertEquals(TestUUIDs.TEST_UUIDS[0], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[1], permits.getPermits().get(1).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[2], permits.getPermits().get(2).getUuid()); PermitConfig stored = permits.remove(TestUUIDs.TEST_UUIDS[1]); assertEquals(2, permits.getPermits().size()); assertEquals(TestUUIDs.TEST_UUIDS[1], stored.getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[0], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[2], permits.getPermits().get(1).getUuid()); stored = permits.remove(TestUUIDs.TEST_UUIDS[1]); assertEquals(2, permits.getPermits().size()); assertNull(stored); assertEquals(TestUUIDs.TEST_UUIDS[0], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[2], permits.getPermits().get(1).getUuid()); stored = permits.remove(TestUUIDs.TEST_UUIDS[2]); assertEquals(TestUUIDs.TEST_UUIDS[2], stored.getUuid()); assertNull(permits.remove(TestUUIDs.TEST_UUIDS[10])); stored = permits.remove(TestUUIDs.TEST_UUIDS[0]); assertEquals(TestUUIDs.TEST_UUIDS[0], stored.getUuid()); assertTrue(permits.getPermits().isEmpty()); assertNull(permits.remove(TestUUIDs.TEST_UUIDS[0])); assertNull(permits.remove(null)); } @Test public void testSet() throws Exception { PermitsConfig permits = new PermitsConfig(); permits.add(getPermit(TestUUIDs.TEST_UUIDS[0], -1, null)); permits.add(getPermit(TestUUIDs.TEST_UUIDS[1], -5, null)); // all negatives are treated as pso undefined permits.add(getPermit(TestUUIDs.TEST_UUIDS[2], -1, null)); assertEquals(TestUUIDs.TEST_UUIDS[1], permits.getPermits().get(1).getUuid()); List<PermitConfig> c = Arrays.asList( getPermit(TestUUIDs.TEST_UUIDS[3], -1, null), getPermit(TestUUIDs.TEST_UUIDS[4], -1, null), getPermit(TestUUIDs.TEST_UUIDS[5], 0, null), getPermit(TestUUIDs.TEST_UUIDS[1], 2, null)); permits.setPermits(c); assertEquals(4, permits.getPermits().size()); assertEquals(TestUUIDs.TEST_UUIDS[5], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[3], permits.getPermits().get(1).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[1], permits.getPermits().get(2).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[4], permits.getPermits().get(3).getUuid()); List<PermitConfig> d = Arrays.asList( getPermit(TestUUIDs.TEST_UUIDS[5], 0, null), getPermit(TestUUIDs.TEST_UUIDS[1], 2, null)); // index out of bounds => add at end permits.setPermits(d); assertEquals(2, permits.getPermits().size()); assertEquals(TestUUIDs.TEST_UUIDS[5], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[1], permits.getPermits().get(1).getUuid()); List<PermitConfig> e = Arrays.asList( getPermit(TestUUIDs.TEST_UUIDS[5], 0, null), getPermit(TestUUIDs.TEST_UUIDS[1], 0, null)); permits.setPermits(e); assertEquals(2, permits.getPermits().size()); assertEquals(TestUUIDs.TEST_UUIDS[1], permits.getPermits().get(0).getUuid()); assertEquals(TestUUIDs.TEST_UUIDS[5], permits.getPermits().get(1).getUuid()); List<PermitConfig> empty = Collections.emptyList(); permits.setPermits(empty); assertEquals(0, permits.getPermits().size()); permits.setPermits(c); assertEquals(4, permits.getPermits().size()); permits.setPermits(null); assertEquals(0, permits.getPermits().size()); } @Test public void testGetByTypeOrOwner() throws Exception { PermitsConfig permits = new PermitsConfig(); permits.add(getPermit(TestUUIDs.TEST_UUIDS[0], PermitsConfig.GLOBAL_PERMIT, null)); permits.add(getPermit(TestUUIDs.TEST_UUIDS[1], PermitsConfig.ROLE_PERMIT, "c")); permits.add(getPermit(TestUUIDs.TEST_UUIDS[2], PermitsConfig.GROUP_PERMIT, "foo")); permits.add(getPermit(TestUUIDs.TEST_UUIDS[3], PermitsConfig.USER_PERMIT, "hugo")); permits.add(getPermit(TestUUIDs.TEST_UUIDS[4], PermitsConfig.ROLE_PERMIT, "b")); permits.add(getPermit(TestUUIDs.TEST_UUIDS[5], PermitsConfig.USER_PERMIT, "hugo")); permits.add(getPermit(TestUUIDs.TEST_UUIDS[6], PermitsConfig.GLOBAL_PERMIT, null)); permits.add(getPermit(TestUUIDs.TEST_UUIDS[7], PermitsConfig.ROLE_PERMIT, "c")); permits.add(getPermit(TestUUIDs.TEST_UUIDS[8], PermitsConfig.ROLE_PERMIT, "c")); permits.add(getPermit(TestUUIDs.TEST_UUIDS[9], PermitsConfig.GLOBAL_PERMIT, null)); permits.add(getPermit(TestUUIDs.TEST_UUIDS[10], "something", "whatever")); Map<String, List<PermitConfig>> byType = permits.getByType(); assertNotNull(byType); assertEquals(5, byType.size()); assertNotNull(byType.get(PermitsConfig.GLOBAL_PERMIT)); assertEquals(3, byType.get(PermitsConfig.GLOBAL_PERMIT).size()); assertNotNull(byType.get(PermitsConfig.ROLE_PERMIT)); assertEquals(4, byType.get(PermitsConfig.ROLE_PERMIT).size()); assertNotNull(byType.get(PermitsConfig.GROUP_PERMIT)); assertEquals(1, byType.get(PermitsConfig.GROUP_PERMIT).size()); assertNotNull(byType.get(PermitsConfig.USER_PERMIT)); assertEquals(2, byType.get(PermitsConfig.USER_PERMIT).size()); assertNotNull(byType.get("something")); assertEquals(1, byType.get("something").size()); Map<String, List<PermitConfig>> byOwner = permits.getByOwner(); assertNotNull(byOwner); assertEquals(6, byOwner.size()); assertNotNull(byOwner.get(PermitsConfig.GLOBAL_PERMIT)); assertEquals(3, byOwner.get(PermitsConfig.GLOBAL_PERMIT).size()); assertNotNull(byOwner.get("b")); assertEquals(1, byOwner.get("b").size()); assertNotNull(byOwner.get("c")); assertEquals(3, byOwner.get("c").size()); assertNotNull(byOwner.get("foo")); assertEquals(1, byOwner.get("foo").size()); assertNotNull(byOwner.get("hugo")); assertEquals(2, byOwner.get("hugo").size()); assertNotNull(byOwner.get("whatever")); assertEquals(1, byOwner.get("whatever").size()); } @Test(expected=UnsupportedOperationException.class) public void testUnmodifiableGetPermits() throws Exception { PermitsConfig permits = new PermitsConfig(); permits.getPermits().add(new PermitConfig()); } private PermitConfig getPermit(UUID uuid, int pos, String path) { PermitConfig permit = new PermitConfig(); permit.setUuid(uuid); permit.setAction(Permit.ACTION_GET); if (path != null) { permit.setPath(path); } permit.setLevel(1); permit.setPos(pos); return permit; } private PermitConfig getPermit(UUID uuid, String type, String owner) { PermitConfig permit = new PermitConfig(); permit.setUuid(uuid); permit.setAction(Permit.ACTION_GET); permit.setPath("/"); permit.setLevel(1); if (type != null) { permit.setType(type); } if (owner != null) { permit.setOwner(owner); } return permit; } }