You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2012/04/28 18:33:39 UTC
svn commit: r1331791 [4/12] - in /chemistry/opencmis/trunk: ./
chemistry-opencmis-client/chemistry-opencmis-client-bindings/
chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/...
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java Sat Apr 28 16:33:35 2012
@@ -1,367 +1,367 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBasicPermissions;
-import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAce;
-import org.apache.chemistry.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class AclServiceTest extends AbstractServiceTest {
-
- private static final Log LOG = LogFactory.getLog(AclServiceTest.class);
- private ObjectCreator fCreator;
- private static final String DOCUMENT_NAME = "DocumentWithAcl";
- private static final String FOLDER_NAME = "FolderWithAcl";
- private static final String DOCUMENT_TYPE_ID = InMemoryDocumentTypeDefinition.getRootDocumentType().getId();
- private static final String FOLDER_TYPE_ID = InMemoryFolderTypeDefinition.getRootFolderType().getId();
- private static final String USER = "user";
- private static final String ALICE = "alice";
- private static final String BOB = "bob";
- private static final String CHRIS = "chris";
- private static final String DAN = "dan";
- private Acl defaultAcl = null;
-
- @Override
- @Before
- public void setUp() {
- super.setTypeCreatorClass(ObjectTestTypeSystemCreator.class.getName());
- super.setUp();
- fCreator = new ObjectCreator(fFactory, fObjSvc, fRepositoryId);
-
- List<Ace> defaultACEs = new ArrayList<Ace>(1);
- defaultACEs.add(fFactory.createAccessControlEntry(InMemoryAce.getAnyoneUser(), Collections.singletonList( EnumBasicPermissions.CMIS_ALL.value())));
- defaultAcl = fFactory.createAccessControlList(defaultACEs);
-
- }
-
- @Override
- @After
- public void tearDown() {
- super.tearDown();
- }
-
- @Test
- public void testCreateDocumentWithAcl() {
- LOG.info("starting testCreateDocumentWithAcl() ...");
- Acl removeAces = defaultAcl;
- Acl acl = createSimpleTestAcl();
-
- String id = createDocument(fRootFolderId, acl, removeAces);
- LOG.debug("created document with id: " + id);
-
- // get ACL using AclService
- Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
- checkSimpleTestAcl(acl, aclReturn);
-
- // get ACL using ObjectService getObject
- ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, true, null);
- checkSimpleTestAcl(acl, aclReturn);
-
- // get ACL using ObjectService getObjectByPath
- objData = fObjSvc.getObjectByPath(fRepositoryId, "/" + DOCUMENT_NAME, "*", false, IncludeRelationships.NONE, null, false,
- true, null);
- assertNotNull(objData);
- aclReturn = objData.getAcl();
- checkSimpleTestAcl(acl, aclReturn);
-
- LOG.info("... testCreateDocumentWithAcl() finished.");
- }
-
- @Test
- public void testCreateFolderWithAcl() {
- LOG.info("starting testCreateFolderWithAcl() ...");
- Acl removeAces = defaultAcl;
- Acl acl = createSimpleTestAcl();
-
- String id = createFolder(fRootFolderId, acl, removeAces);
- LOG.debug("created folder with id: " + id);
-
- // get ACL using AclService
- Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
- checkSimpleTestAcl(acl, aclReturn);
-
- // get ACL using ObjectService getObject
- ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, true, null);
- checkSimpleTestAcl(acl, aclReturn);
-
- // get ACL using ObjectService getObjectByPath
- objData = fObjSvc.getObjectByPath(fRepositoryId, "/" + FOLDER_NAME, "*", false, IncludeRelationships.NONE, null, false,
- true, null);
- assertNotNull(objData);
- aclReturn = objData.getAcl();
- checkSimpleTestAcl(acl, aclReturn);
- LOG.info("... testCreateFolderWithAcl() finished.");
- }
-
- @Test
- public void testApplyAcl() {
- LOG.info("starting testApplyAcl() ...");
- Acl acl = createSimpleTestAcl();
-
- String id = createDocument(fRootFolderId, null, null);
- LOG.debug("created document with id: " + id);
-
- // apply absolute ACL using AclService
- Acl acl1 = fAclSvc.applyAcl(fRepositoryId, id, acl, defaultAcl, AclPropagation.OBJECTONLY, null);
- checkSimpleTestAcl(acl, acl1);
-
- // get ACL using AclService
- Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
- checkSimpleTestAcl(acl, aclReturn);
-
- LOG.info("... testApplyAcl() finished.");
- }
-
- @Test
- public void testAddRemoveAcl() {
-
- LOG.info("starting testAddRemoveAcl() ...");
- Acl acl = createAdvancedTestAcl();
-
- String id = createDocument(fRootFolderId, acl, defaultAcl);
- LOG.debug("created document with id: " + id);
-
- Acl aclAdd = createAclAdd();
- Acl aclRemove = createAclRemove();
- // apply absolute ACL using AclService
- Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id, aclAdd, aclRemove, AclPropagation.OBJECTONLY, null);
-
- checkAclAfterAddRemove(aclReturn);
-
- LOG.info("... testAddRemoveAcl() finished.");
- }
-
- @Test
- public void testAddRemoveDuplicatedAcl() {
- final String DOCUMENT_NAME_1 = "DocumentWithAcl-1";
- final String DOCUMENT_NAME_2 = "DocumentWithAcl-2";
-
- LOG.info("starting testAddRemoveDuplicatedAcl() ...");
- Acl acl = createAdvancedTestAcl();
- String id1 = createDocument(DOCUMENT_NAME_1, fRootFolderId, acl, defaultAcl);
- String id2 = createDocument(DOCUMENT_NAME_2, fRootFolderId, acl, defaultAcl);
-
-// // modify ACL of first doc
-// List<Ace> acesRemove = Arrays.asList(new Ace[] {
-// createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
-// });
-// Acl aclRemove = new AccessControlListImpl(acesRemove);
-// List<Ace> acesAdd = Arrays.asList(new Ace[] {
-// createAce(DAN, EnumBasicPermissions.CMIS_WRITE.value()),
-// });
-// Acl aclAdd = new AccessControlListImpl(acesAdd);
- Acl aclAdd = createAclAdd();
- Acl aclRemove = createAclRemove();
- Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id1, aclAdd, aclRemove, AclPropagation.OBJECTONLY, null);
-
- checkAclAfterAddRemove(aclReturn);
-
- // Ensure that ACL of second doc is unchanged
- aclReturn = fAclSvc.getAcl(fRepositoryId, id2, true, null);
- checkAdvancedTestAcl(acl, aclReturn);
- LOG.info("... testAddRemoveDuplicatedAcl() finished.");
- }
-
- @Test
- public void testApplyAclRecursiveSimple () {
- LOG.info("starting testApplyAclRecursiveSimple() ...");
- Acl acl = createSimpleTestAcl();
- String[] ids = createHierarchy(acl, defaultAcl);
- fAclSvc.applyAcl(fRepositoryId, ids[0], acl, null, AclPropagation.PROPAGATE, null);
- checkAclRecursiveSimple(ids, acl);
- LOG.info("... testApplyAclRecursiveSimple() finished.");
- }
-
- @Test
- public void testApplyAclRecursiveIncremental() {
- LOG.info("starting testApplyAclRecursiveIncremental() ...");
- Acl acl = createAdvancedTestAcl();
- String[] ids = createHierarchy(acl, defaultAcl);
-
- Acl aclRemove = createAclRemove();
- Acl aclAdd = createAclAdd();
-
- Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, ids[0], aclAdd, aclRemove, AclPropagation.PROPAGATE, null);
- checkAclAfterAddRemove(aclReturn);
- for (String id : ids) {
- aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
- checkAclAfterAddRemove(aclReturn);
- }
- LOG.info("... testApplyAclRecursiveIncremental() finished.");
- }
-
- @Test
- public void testRemoveAllAcls() {
- LOG.info("starting testRemoveAllAcls() ...");
-
- Acl acl = createAdvancedTestAcl();
- String id = createDocument(fRootFolderId, acl, defaultAcl);
- LOG.debug("created document with id: " + id);
-
- Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id, null, acl, AclPropagation.OBJECTONLY, null);
- assertNotNull(aclReturn);
- assertEquals(1, aclReturn.getAces().size());
- assertTrue(aclHasPermission(aclReturn, "anyone", EnumBasicPermissions.CMIS_ALL.value()));
-
- LOG.info("... testRemoveAllAcls() finished.");
- }
-
- private String createDocument(String name, String folderId, Acl addAces, Acl removeAces) {
- return createDocumentNoCatch(name, folderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false, addAces,
- removeAces);
- }
-
- private String createDocument(String folderId, Acl addAces, Acl removeAces) {
- return createDocumentNoCatch(DOCUMENT_NAME, folderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false, addAces,
- removeAces);
- }
-
- private String createFolder(String folderId, Acl addAces, Acl removeAces) {
- return createFolderNoCatch(FOLDER_NAME, folderId, FOLDER_TYPE_ID, addAces, removeAces);
- }
-
- private String[] createHierarchy(Acl addAces, Acl removeAces) {
- String result[] = new String [6];
- String rootFolderId = createFolderNoCatch(FOLDER_NAME, fRootFolderId, FOLDER_TYPE_ID, addAces, removeAces);
- result[0] = rootFolderId;
- result[1] = createDocument(DOCUMENT_NAME + "-1", rootFolderId, addAces, removeAces);
- result[2] = createDocument(DOCUMENT_NAME + "-2", rootFolderId, addAces, removeAces);
- String subFolderId = createFolderNoCatch(FOLDER_NAME, rootFolderId, FOLDER_TYPE_ID, addAces, removeAces);
- result[3] = subFolderId;
- result[4] = createDocument(DOCUMENT_NAME + "-1", subFolderId, addAces, removeAces);
- result[5] = createDocument(DOCUMENT_NAME + "-2", subFolderId, addAces, removeAces);
- return result;
- }
-
- private void checkAclRecursiveSimple(String[] ids, Acl acl) {
- // get ACL using ObjectService getObject
- for (String id : ids) {
- ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, true, null);
- checkSimpleTestAcl(acl, objData.getAcl());
- }
- }
-
- private Acl createSimpleTestAcl() {
- List<Ace> aces = Arrays.asList(new Ace[] { createAce(USER, EnumBasicPermissions.CMIS_READ.value()) });
- return fFactory.createAccessControlList(aces);
- }
-
- private void checkSimpleTestAcl(Acl acl, Acl aclReturn) {
- assertNotNull(aclReturn);
- assertEquals(acl.getAces().size(), aclReturn.getAces().size());
- assertTrue(aclHasPermission(aclReturn, USER, EnumBasicPermissions.CMIS_READ.value()));
- }
-
- private Acl createAdvancedTestAcl() {
- List<Ace> aces = Arrays.asList(new Ace[] {
- createAce(ALICE, EnumBasicPermissions.CMIS_READ.value()),
- createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
- createAce(CHRIS, EnumBasicPermissions.CMIS_ALL.value()),
- });
- return fFactory.createAccessControlList(aces);
- }
-
- private Acl createAclAdd() {
- List<Ace> acesAdd = Arrays.asList(new Ace[] {
- createAce(DAN, EnumBasicPermissions.CMIS_WRITE.value()),
- });
- return fFactory.createAccessControlList(acesAdd);
- }
-
- private Acl createAclRemove() {
- List<Ace> acesRemove = Arrays.asList(new Ace[] {
- createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
- createAce(CHRIS, EnumBasicPermissions.CMIS_ALL.value())
- });
- return fFactory.createAccessControlList(acesRemove);
- }
-
- private void checkAclAfterAddRemove(Acl aclReturn) {
- assertNotNull(aclReturn);
- assertEquals(2, aclReturn.getAces().size());
- assertTrue(aclHasPermission(aclReturn, ALICE, EnumBasicPermissions.CMIS_READ.value()));
- assertTrue(aclHasPermission(aclReturn, DAN, EnumBasicPermissions.CMIS_WRITE.value()));
- assertFalse(aclHasPermission(aclReturn, BOB, EnumBasicPermissions.CMIS_WRITE.value()));
- assertFalse(aclHasPermission(aclReturn, CHRIS, EnumBasicPermissions.CMIS_ALL.value()));
- assertTrue(aclHasNoPermission(aclReturn, BOB));
- assertTrue(aclHasNoPermission(aclReturn, CHRIS));
- }
-
- private void checkAdvancedTestAcl(Acl acl, Acl aclReturn) {
- assertNotNull(aclReturn);
- assertEquals(acl.getAces().size(), aclReturn.getAces().size());
- assertTrue(aclHasPermission(aclReturn, ALICE, EnumBasicPermissions.CMIS_READ.value()));
- assertTrue(aclHasPermission(aclReturn, BOB, EnumBasicPermissions.CMIS_WRITE.value()));
- assertTrue(aclHasPermission(aclReturn, CHRIS, EnumBasicPermissions.CMIS_ALL.value()));
- }
-
- private Ace createAce(String principalId, String permission) {
- return fFactory.createAccessControlEntry(principalId, Collections.singletonList( permission ));
- }
-
- private boolean aclHasPermission(Acl acl, String principalId, String permission) {
- for (Ace ace : acl.getAces()) {
- if (ace.getPrincipalId().equals(principalId) && aceContainsPermission(ace, permission))
- return true;
- }
- return false;
- }
-
- private boolean aclHasNoPermission(Acl acl, String principalId) {
- if (null == acl)
- return false;
-
- for (Ace ace : acl.getAces()) {
- if (ace.getPrincipalId().equals(principalId))
- return false;
- }
- return true;
- }
-
- private boolean aceContainsPermission(Ace ace, String permission) {
- for (String acePerm : ace.getPermissions())
- if (permission.equals(acePerm))
- return true;
- return false;
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.inmemory;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.chemistry.opencmis.commons.data.Ace;
+import org.apache.chemistry.opencmis.commons.data.Acl;
+import org.apache.chemistry.opencmis.commons.data.ObjectData;
+import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
+import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
+import org.apache.chemistry.opencmis.commons.enums.VersioningState;
+import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBasicPermissions;
+import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
+import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAce;
+import org.apache.chemistry.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
+import org.apache.chemistry.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AclServiceTest extends AbstractServiceTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AclServiceTest.class);
+ private ObjectCreator fCreator;
+ private static final String DOCUMENT_NAME = "DocumentWithAcl";
+ private static final String FOLDER_NAME = "FolderWithAcl";
+ private static final String DOCUMENT_TYPE_ID = InMemoryDocumentTypeDefinition.getRootDocumentType().getId();
+ private static final String FOLDER_TYPE_ID = InMemoryFolderTypeDefinition.getRootFolderType().getId();
+ private static final String USER = "user";
+ private static final String ALICE = "alice";
+ private static final String BOB = "bob";
+ private static final String CHRIS = "chris";
+ private static final String DAN = "dan";
+ private Acl defaultAcl = null;
+
+ @Override
+ @Before
+ public void setUp() {
+ super.setTypeCreatorClass(ObjectTestTypeSystemCreator.class.getName());
+ super.setUp();
+ fCreator = new ObjectCreator(fFactory, fObjSvc, fRepositoryId);
+
+ List<Ace> defaultACEs = new ArrayList<Ace>(1);
+ defaultACEs.add(fFactory.createAccessControlEntry(InMemoryAce.getAnyoneUser(), Collections.singletonList( EnumBasicPermissions.CMIS_ALL.value())));
+ defaultAcl = fFactory.createAccessControlList(defaultACEs);
+
+ }
+
+ @Override
+ @After
+ public void tearDown() {
+ super.tearDown();
+ }
+
+ @Test
+ public void testCreateDocumentWithAcl() {
+ LOG.info("starting testCreateDocumentWithAcl() ...");
+ Acl removeAces = defaultAcl;
+ Acl acl = createSimpleTestAcl();
+
+ String id = createDocument(fRootFolderId, acl, removeAces);
+ LOG.debug("created document with id: " + id);
+
+ // get ACL using AclService
+ Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
+ checkSimpleTestAcl(acl, aclReturn);
+
+ // get ACL using ObjectService getObject
+ ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, true, null);
+ checkSimpleTestAcl(acl, aclReturn);
+
+ // get ACL using ObjectService getObjectByPath
+ objData = fObjSvc.getObjectByPath(fRepositoryId, "/" + DOCUMENT_NAME, "*", false, IncludeRelationships.NONE, null, false,
+ true, null);
+ assertNotNull(objData);
+ aclReturn = objData.getAcl();
+ checkSimpleTestAcl(acl, aclReturn);
+
+ LOG.info("... testCreateDocumentWithAcl() finished.");
+ }
+
+ @Test
+ public void testCreateFolderWithAcl() {
+ LOG.info("starting testCreateFolderWithAcl() ...");
+ Acl removeAces = defaultAcl;
+ Acl acl = createSimpleTestAcl();
+
+ String id = createFolder(fRootFolderId, acl, removeAces);
+ LOG.debug("created folder with id: " + id);
+
+ // get ACL using AclService
+ Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
+ checkSimpleTestAcl(acl, aclReturn);
+
+ // get ACL using ObjectService getObject
+ ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, true, null);
+ checkSimpleTestAcl(acl, aclReturn);
+
+ // get ACL using ObjectService getObjectByPath
+ objData = fObjSvc.getObjectByPath(fRepositoryId, "/" + FOLDER_NAME, "*", false, IncludeRelationships.NONE, null, false,
+ true, null);
+ assertNotNull(objData);
+ aclReturn = objData.getAcl();
+ checkSimpleTestAcl(acl, aclReturn);
+ LOG.info("... testCreateFolderWithAcl() finished.");
+ }
+
+ @Test
+ public void testApplyAcl() {
+ LOG.info("starting testApplyAcl() ...");
+ Acl acl = createSimpleTestAcl();
+
+ String id = createDocument(fRootFolderId, null, null);
+ LOG.debug("created document with id: " + id);
+
+ // apply absolute ACL using AclService
+ Acl acl1 = fAclSvc.applyAcl(fRepositoryId, id, acl, defaultAcl, AclPropagation.OBJECTONLY, null);
+ checkSimpleTestAcl(acl, acl1);
+
+ // get ACL using AclService
+ Acl aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
+ checkSimpleTestAcl(acl, aclReturn);
+
+ LOG.info("... testApplyAcl() finished.");
+ }
+
+ @Test
+ public void testAddRemoveAcl() {
+
+ LOG.info("starting testAddRemoveAcl() ...");
+ Acl acl = createAdvancedTestAcl();
+
+ String id = createDocument(fRootFolderId, acl, defaultAcl);
+ LOG.debug("created document with id: " + id);
+
+ Acl aclAdd = createAclAdd();
+ Acl aclRemove = createAclRemove();
+ // apply absolute ACL using AclService
+ Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id, aclAdd, aclRemove, AclPropagation.OBJECTONLY, null);
+
+ checkAclAfterAddRemove(aclReturn);
+
+ LOG.info("... testAddRemoveAcl() finished.");
+ }
+
+ @Test
+ public void testAddRemoveDuplicatedAcl() {
+ final String DOCUMENT_NAME_1 = "DocumentWithAcl-1";
+ final String DOCUMENT_NAME_2 = "DocumentWithAcl-2";
+
+ LOG.info("starting testAddRemoveDuplicatedAcl() ...");
+ Acl acl = createAdvancedTestAcl();
+ String id1 = createDocument(DOCUMENT_NAME_1, fRootFolderId, acl, defaultAcl);
+ String id2 = createDocument(DOCUMENT_NAME_2, fRootFolderId, acl, defaultAcl);
+
+// // modify ACL of first doc
+// List<Ace> acesRemove = Arrays.asList(new Ace[] {
+// createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
+// });
+// Acl aclRemove = new AccessControlListImpl(acesRemove);
+// List<Ace> acesAdd = Arrays.asList(new Ace[] {
+// createAce(DAN, EnumBasicPermissions.CMIS_WRITE.value()),
+// });
+// Acl aclAdd = new AccessControlListImpl(acesAdd);
+ Acl aclAdd = createAclAdd();
+ Acl aclRemove = createAclRemove();
+ Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id1, aclAdd, aclRemove, AclPropagation.OBJECTONLY, null);
+
+ checkAclAfterAddRemove(aclReturn);
+
+ // Ensure that ACL of second doc is unchanged
+ aclReturn = fAclSvc.getAcl(fRepositoryId, id2, true, null);
+ checkAdvancedTestAcl(acl, aclReturn);
+ LOG.info("... testAddRemoveDuplicatedAcl() finished.");
+ }
+
+ @Test
+ public void testApplyAclRecursiveSimple () {
+ LOG.info("starting testApplyAclRecursiveSimple() ...");
+ Acl acl = createSimpleTestAcl();
+ String[] ids = createHierarchy(acl, defaultAcl);
+ fAclSvc.applyAcl(fRepositoryId, ids[0], acl, null, AclPropagation.PROPAGATE, null);
+ checkAclRecursiveSimple(ids, acl);
+ LOG.info("... testApplyAclRecursiveSimple() finished.");
+ }
+
+ @Test
+ public void testApplyAclRecursiveIncremental() {
+ LOG.info("starting testApplyAclRecursiveIncremental() ...");
+ Acl acl = createAdvancedTestAcl();
+ String[] ids = createHierarchy(acl, defaultAcl);
+
+ Acl aclRemove = createAclRemove();
+ Acl aclAdd = createAclAdd();
+
+ Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, ids[0], aclAdd, aclRemove, AclPropagation.PROPAGATE, null);
+ checkAclAfterAddRemove(aclReturn);
+ for (String id : ids) {
+ aclReturn = fAclSvc.getAcl(fRepositoryId, id, true, null);
+ checkAclAfterAddRemove(aclReturn);
+ }
+ LOG.info("... testApplyAclRecursiveIncremental() finished.");
+ }
+
+ @Test
+ public void testRemoveAllAcls() {
+ LOG.info("starting testRemoveAllAcls() ...");
+
+ Acl acl = createAdvancedTestAcl();
+ String id = createDocument(fRootFolderId, acl, defaultAcl);
+ LOG.debug("created document with id: " + id);
+
+ Acl aclReturn = fAclSvc.applyAcl(fRepositoryId, id, null, acl, AclPropagation.OBJECTONLY, null);
+ assertNotNull(aclReturn);
+ assertEquals(1, aclReturn.getAces().size());
+ assertTrue(aclHasPermission(aclReturn, "anyone", EnumBasicPermissions.CMIS_ALL.value()));
+
+ LOG.info("... testRemoveAllAcls() finished.");
+ }
+
+ private String createDocument(String name, String folderId, Acl addAces, Acl removeAces) {
+ return createDocumentNoCatch(name, folderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false, addAces,
+ removeAces);
+ }
+
+ private String createDocument(String folderId, Acl addAces, Acl removeAces) {
+ return createDocumentNoCatch(DOCUMENT_NAME, folderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false, addAces,
+ removeAces);
+ }
+
+ private String createFolder(String folderId, Acl addAces, Acl removeAces) {
+ return createFolderNoCatch(FOLDER_NAME, folderId, FOLDER_TYPE_ID, addAces, removeAces);
+ }
+
+ private String[] createHierarchy(Acl addAces, Acl removeAces) {
+ String result[] = new String [6];
+ String rootFolderId = createFolderNoCatch(FOLDER_NAME, fRootFolderId, FOLDER_TYPE_ID, addAces, removeAces);
+ result[0] = rootFolderId;
+ result[1] = createDocument(DOCUMENT_NAME + "-1", rootFolderId, addAces, removeAces);
+ result[2] = createDocument(DOCUMENT_NAME + "-2", rootFolderId, addAces, removeAces);
+ String subFolderId = createFolderNoCatch(FOLDER_NAME, rootFolderId, FOLDER_TYPE_ID, addAces, removeAces);
+ result[3] = subFolderId;
+ result[4] = createDocument(DOCUMENT_NAME + "-1", subFolderId, addAces, removeAces);
+ result[5] = createDocument(DOCUMENT_NAME + "-2", subFolderId, addAces, removeAces);
+ return result;
+ }
+
+ private void checkAclRecursiveSimple(String[] ids, Acl acl) {
+ // get ACL using ObjectService getObject
+ for (String id : ids) {
+ ObjectData objData = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, true, null);
+ checkSimpleTestAcl(acl, objData.getAcl());
+ }
+ }
+
+ private Acl createSimpleTestAcl() {
+ List<Ace> aces = Arrays.asList(new Ace[] { createAce(USER, EnumBasicPermissions.CMIS_READ.value()) });
+ return fFactory.createAccessControlList(aces);
+ }
+
+ private void checkSimpleTestAcl(Acl acl, Acl aclReturn) {
+ assertNotNull(aclReturn);
+ assertEquals(acl.getAces().size(), aclReturn.getAces().size());
+ assertTrue(aclHasPermission(aclReturn, USER, EnumBasicPermissions.CMIS_READ.value()));
+ }
+
+ private Acl createAdvancedTestAcl() {
+ List<Ace> aces = Arrays.asList(new Ace[] {
+ createAce(ALICE, EnumBasicPermissions.CMIS_READ.value()),
+ createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
+ createAce(CHRIS, EnumBasicPermissions.CMIS_ALL.value()),
+ });
+ return fFactory.createAccessControlList(aces);
+ }
+
+ private Acl createAclAdd() {
+ List<Ace> acesAdd = Arrays.asList(new Ace[] {
+ createAce(DAN, EnumBasicPermissions.CMIS_WRITE.value()),
+ });
+ return fFactory.createAccessControlList(acesAdd);
+ }
+
+ private Acl createAclRemove() {
+ List<Ace> acesRemove = Arrays.asList(new Ace[] {
+ createAce(BOB, EnumBasicPermissions.CMIS_WRITE.value()),
+ createAce(CHRIS, EnumBasicPermissions.CMIS_ALL.value())
+ });
+ return fFactory.createAccessControlList(acesRemove);
+ }
+
+ private void checkAclAfterAddRemove(Acl aclReturn) {
+ assertNotNull(aclReturn);
+ assertEquals(2, aclReturn.getAces().size());
+ assertTrue(aclHasPermission(aclReturn, ALICE, EnumBasicPermissions.CMIS_READ.value()));
+ assertTrue(aclHasPermission(aclReturn, DAN, EnumBasicPermissions.CMIS_WRITE.value()));
+ assertFalse(aclHasPermission(aclReturn, BOB, EnumBasicPermissions.CMIS_WRITE.value()));
+ assertFalse(aclHasPermission(aclReturn, CHRIS, EnumBasicPermissions.CMIS_ALL.value()));
+ assertTrue(aclHasNoPermission(aclReturn, BOB));
+ assertTrue(aclHasNoPermission(aclReturn, CHRIS));
+ }
+
+ private void checkAdvancedTestAcl(Acl acl, Acl aclReturn) {
+ assertNotNull(aclReturn);
+ assertEquals(acl.getAces().size(), aclReturn.getAces().size());
+ assertTrue(aclHasPermission(aclReturn, ALICE, EnumBasicPermissions.CMIS_READ.value()));
+ assertTrue(aclHasPermission(aclReturn, BOB, EnumBasicPermissions.CMIS_WRITE.value()));
+ assertTrue(aclHasPermission(aclReturn, CHRIS, EnumBasicPermissions.CMIS_ALL.value()));
+ }
+
+ private Ace createAce(String principalId, String permission) {
+ return fFactory.createAccessControlEntry(principalId, Collections.singletonList( permission ));
+ }
+
+ private boolean aclHasPermission(Acl acl, String principalId, String permission) {
+ for (Ace ace : acl.getAces()) {
+ if (ace.getPrincipalId().equals(principalId) && aceContainsPermission(ace, permission))
+ return true;
+ }
+ return false;
+ }
+
+ private boolean aclHasNoPermission(Acl acl, String principalId) {
+ if (null == acl)
+ return false;
+
+ for (Ace ace : acl.getAces()) {
+ if (ace.getPrincipalId().equals(principalId))
+ return false;
+ }
+ return true;
+ }
+
+ private boolean aceContainsPermission(Ace ace, String permission) {
+ for (String acePerm : ace.getPermissions())
+ if (permission.equals(acePerm))
+ return true;
+ return false;
+ }
+}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclTest.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclTest.java Sat Apr 28 16:33:35 2012
@@ -1,302 +1,302 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.chemistry.opencmis.inmemory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBasicPermissions;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAce;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAcl;
-import org.apache.chemistry.opencmis.inmemory.storedobj.impl.Permission;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.junit.Test;
-
-public class AclTest {
-
- private static final Log LOG = LogFactory.getLog(AclTest.class);
-
- final static String ANDREAS = "andreas";
- final static String BERTA = "berta";
- final static String CHRISTIAN = "christian";
- final static String DOROTHEE = "dorothee";
-
- final InMemoryAce aceN = new InMemoryAce(ANDREAS, Permission.NONE);
- final InMemoryAce aceR = new InMemoryAce(BERTA, Permission.READ);
- final InMemoryAce aceW = new InMemoryAce(CHRISTIAN, Permission.WRITE);
- final InMemoryAce aceA = new InMemoryAce(DOROTHEE, Permission.ALL);
-
- @Test
- public void testCreateAce() {
- InMemoryAce ace;
- try {
- ace = new InMemoryAce(null, Permission.NONE);
- fail("create an ACE with null principalId should fail.");
- } catch (RuntimeException e) {
- }
-
- try {
- ace = new InMemoryAce("xxx", null);
- fail("create an ACE with null permission should fail.");
- } catch (RuntimeException e) {
- }
-
- }
-
- @Test
- public void testCreate() {
-
- InMemoryAcl acl = new InMemoryAcl();
- acl.addAce(aceA);
- assertEquals(1, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceA);
-
- acl = new InMemoryAcl(createAceList());
- LOG.debug(acl);
-
- assertEquals(2, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceR);
- assertTrue(acl.getAces().get(1) == aceA);
-
- acl = createDefaultAcl();
- checkDefaultAcl(acl);
-
- try {
- List<InMemoryAce> aces = createAceList();
- aces.add(null);
- acl = new InMemoryAcl(aces);
- fail("create an ACL with a null ACE should fail.");
- } catch (RuntimeException e) {
- }
- }
-
- @Test
- public void testAdd() {
- InMemoryAcl acl = new InMemoryAcl();
- acl.addAce(aceR);
- assertEquals(1, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceR);
- acl.addAce(aceW);
- assertEquals(2, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceR);
- assertTrue(acl.getAces().get(1) == aceW);
- acl.addAce(aceN);
- assertEquals(3, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceN);
- assertTrue(acl.getAces().get(1) == aceR);
- assertTrue(acl.getAces().get(2) == aceW);
- acl.addAce(aceA);
- assertEquals(4, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceN);
- assertTrue(acl.getAces().get(1) == aceR);
- assertTrue(acl.getAces().get(2) == aceW);
- assertTrue(acl.getAces().get(3) == aceA);
-
- assertFalse("Adding an existing ACE to an ACL should fail.", acl.addAce(aceN));
- assertFalse("Adding null to an ACL should fail.", acl.addAce(null));
- }
-
- @Test
- public void testRemove() {
- InMemoryAcl acl = createDefaultAcl();
- checkDefaultAcl(acl);
-
- acl.removeAce(aceR);
- assertEquals(3, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceN);
- assertTrue(acl.getAces().get(1) == aceW);
- assertTrue(acl.getAces().get(2) == aceA);
- acl.removeAce(aceW);
- assertEquals(2, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceN);
- assertTrue(acl.getAces().get(1) == aceA);
- acl.removeAce(aceN);
- assertEquals(1, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceA);
- acl.removeAce(aceA);
- assertEquals(0, acl.getAces().size());
-
- acl = createDefaultAcl();
- final InMemoryAce ace = new InMemoryAce("xyu", Permission.ALL);
- assertFalse("Removing an unknown ACE from an ACL should fail.", acl.removeAce(ace));
- assertFalse("Removing null from an ACL should fail.", acl.removeAce(null));
- }
-
- @Test
- public void testMerge() {
- final InMemoryAce aceNew = new InMemoryAce("Hugo", Permission.WRITE); // will be added
- final InMemoryAce aceRCopy = new InMemoryAce(BERTA, Permission.READ); // is same
- final InMemoryAce aceChange = new InMemoryAce(CHRISTIAN, Permission.ALL); // changes permission
-
- InMemoryAcl acl1 = createDefaultAcl();
- InMemoryAcl acl2 = new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(aceNew); add(aceRCopy); add(aceChange); }});
- acl1.mergeAcl(acl2);
- assertEquals(5, acl1.getAces().size());
- assertEquals(Permission.NONE, acl1.getPermission(ANDREAS));
- assertEquals(Permission.READ, acl1.getPermission(BERTA));
- assertEquals(Permission.ALL, acl1.getPermission(CHRISTIAN));
- assertEquals(Permission.ALL, acl1.getPermission(DOROTHEE));
- assertEquals(Permission.WRITE, acl1.getPermission("Hugo"));
- }
-
- @Test
- public void testAclEquality() {
- final InMemoryAce aceNew = new InMemoryAce("Hugo", Permission.WRITE);
- final InMemoryAce aceRCopy = new InMemoryAce(BERTA, Permission.READ);
-
- InMemoryAcl acl1 = createDefaultAcl();
- InMemoryAcl acl2 = new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(aceRCopy); add(aceA); add(aceW); add(aceN); }});
- InMemoryAcl acl3 = new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(aceR); add(aceNew); add(aceW); add(aceN); }});
- assertEquals(acl1, acl2);
- assertFalse(acl1.equals(acl3));
- }
-
-
- @Test
- public void testCheckPermissions() {
- InMemoryAcl acl = createDefaultAcl();
-
- assertTrue(acl.hasPermission(ANDREAS, Permission.NONE));
- assertFalse(acl.hasPermission(ANDREAS, Permission.READ));
- assertFalse(acl.hasPermission(ANDREAS, Permission.WRITE));
- assertFalse(acl.hasPermission(ANDREAS, Permission.ALL));
-
- assertTrue(acl.hasPermission(BERTA, Permission.NONE));
- assertTrue(acl.hasPermission(BERTA, Permission.READ));
- assertFalse(acl.hasPermission(BERTA, Permission.WRITE));
- assertFalse(acl.hasPermission(BERTA, Permission.ALL));
-
- assertTrue(acl.hasPermission(CHRISTIAN, Permission.NONE));
- assertTrue(acl.hasPermission(CHRISTIAN, Permission.READ));
- assertTrue(acl.hasPermission(CHRISTIAN, Permission.WRITE));
- assertFalse(acl.hasPermission(CHRISTIAN, Permission.ALL));
-
- assertTrue(acl.hasPermission(DOROTHEE, Permission.NONE));
- assertTrue(acl.hasPermission(DOROTHEE, Permission.READ));
- assertTrue(acl.hasPermission(DOROTHEE, Permission.WRITE));
- assertTrue(acl.hasPermission(DOROTHEE, Permission.ALL));
- }
-
- @Test
- public void testConvertFomCmisAcl() {
- List<Ace> aces = Arrays.asList(new Ace[] { createAce(ANDREAS, EnumBasicPermissions.CMIS_READ.value()), createAce(DOROTHEE, EnumBasicPermissions.CMIS_WRITE.value()) });
- AccessControlListImpl cAcl = new AccessControlListImpl(aces);
- InMemoryAcl acl = InMemoryAcl.createFromCommonsAcl(cAcl);
- assertEquals(2, acl.size());
- assertEquals(Permission.READ, acl.getPermission(ANDREAS));
- assertEquals(Permission.WRITE, acl.getPermission(DOROTHEE));
-
- try {
- List<Ace> aces2 = Arrays.asList(new Ace[] { new AccessControlEntryImpl(null, Arrays.asList(new String[] { EnumBasicPermissions.CMIS_READ.value()}))});
- acl = InMemoryAcl.createFromCommonsAcl(new AccessControlListImpl(aces2));
- fail("create Ace will null principal should raise exception.");
- } catch (RuntimeException e) { }
- try {
- List<Ace> aces2 = Arrays.asList(new Ace[] { new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(ANDREAS), null)});
- acl = InMemoryAcl.createFromCommonsAcl(new AccessControlListImpl(aces2));
- fail("create Ace will null permission should raise exception.");
- } catch (RuntimeException e) { }
- }
-
-
- @Test
- public void testConvertToCmisAcl() {
- Ace ace = aceN.toCommonsAce();
- assertEquals(ANDREAS, ace.getPrincipalId());
- assertEquals(1, ace.getPermissions().size());
- assertEquals("", ace.getPermissions().get(0));
-
- ace = aceR.toCommonsAce();
- assertEquals(BERTA, ace.getPrincipalId());
- assertEquals(1, ace.getPermissions().size());
- assertEquals(EnumBasicPermissions.CMIS_READ.value(), ace.getPermissions().get(0));
-
- ace = aceW.toCommonsAce();
- assertEquals(CHRISTIAN, ace.getPrincipalId());
- assertEquals(1, ace.getPermissions().size());
- assertEquals(EnumBasicPermissions.CMIS_WRITE.value(), ace.getPermissions().get(0));
-
- ace = aceA.toCommonsAce();
- assertEquals(DOROTHEE, ace.getPrincipalId());
- assertEquals(1, ace.getPermissions().size());
- assertEquals(EnumBasicPermissions.CMIS_ALL.value(), ace.getPermissions().get(0));
-
- InMemoryAcl acl = createDefaultAcl();
- Acl commonsAcl = acl.toCommonsAcl();
- assertEquals(4, commonsAcl.getAces().size());
- assertTrue(hasCommonsAce(commonsAcl, ANDREAS, ""));
- assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_READ.value()));
- assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_WRITE.value()));
- assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_ALL.value()));
- assertTrue(hasCommonsAce(commonsAcl, BERTA, EnumBasicPermissions.CMIS_READ.value()));
- assertTrue(hasCommonsAce(commonsAcl, CHRISTIAN, EnumBasicPermissions.CMIS_WRITE.value()));
- assertTrue(hasCommonsAce(commonsAcl, DOROTHEE, EnumBasicPermissions.CMIS_ALL.value()));
- }
-
- @Test
- public void testCloneAcl() {
- InMemoryAcl acl = createDefaultAcl();
- InMemoryAcl acl2 = acl.clone();
- assertFalse(acl == acl2);
- assertEquals(acl, acl2);
- }
-
- private InMemoryAcl createDefaultAcl() {
- return new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(aceA); add(aceR); add(aceN); add(aceW); }});
- }
-
- private void checkDefaultAcl(InMemoryAcl acl) {
- assertEquals(4, acl.getAces().size());
- assertTrue(acl.getAces().get(0) == aceN);
- assertTrue(acl.getAces().get(1) == aceR);
- assertTrue(acl.getAces().get(2) == aceW);
- assertTrue(acl.getAces().get(3) == aceA);
- }
-
- private List<InMemoryAce> createAceList() {
- return new ArrayList<InMemoryAce>() {{ add(aceA); add(aceR); }};
- }
-
- private Ace createAce(String principalId, String permission) {
- AccessControlEntryImpl ace = new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalId),
- Arrays.asList(new String[] { permission }));
- return ace;
- }
-
- private boolean hasCommonsAce(Acl acl, String principalId, String permission) {
- for (Ace ace : acl.getAces()) {
- if (ace.getPrincipalId().equals(principalId) && ace.getPermissions().get(0).equals(permission))
- return true;
- }
- return false;
-
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.inmemory;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.chemistry.opencmis.commons.data.Ace;
+import org.apache.chemistry.opencmis.commons.data.Acl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
+import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBasicPermissions;
+import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAce;
+import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAcl;
+import org.apache.chemistry.opencmis.inmemory.storedobj.impl.Permission;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.junit.Test;
+
+public class AclTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AclTest.class);
+
+ final static String ANDREAS = "andreas";
+ final static String BERTA = "berta";
+ final static String CHRISTIAN = "christian";
+ final static String DOROTHEE = "dorothee";
+
+ final InMemoryAce aceN = new InMemoryAce(ANDREAS, Permission.NONE);
+ final InMemoryAce aceR = new InMemoryAce(BERTA, Permission.READ);
+ final InMemoryAce aceW = new InMemoryAce(CHRISTIAN, Permission.WRITE);
+ final InMemoryAce aceA = new InMemoryAce(DOROTHEE, Permission.ALL);
+
+ @Test
+ public void testCreateAce() {
+ InMemoryAce ace;
+ try {
+ ace = new InMemoryAce(null, Permission.NONE);
+ fail("create an ACE with null principalId should fail.");
+ } catch (RuntimeException e) {
+ }
+
+ try {
+ ace = new InMemoryAce("xxx", null);
+ fail("create an ACE with null permission should fail.");
+ } catch (RuntimeException e) {
+ }
+
+ }
+
+ @Test
+ public void testCreate() {
+
+ InMemoryAcl acl = new InMemoryAcl();
+ acl.addAce(aceA);
+ assertEquals(1, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceA);
+
+ acl = new InMemoryAcl(createAceList());
+ LOG.debug(acl.toString());
+
+ assertEquals(2, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceR);
+ assertTrue(acl.getAces().get(1) == aceA);
+
+ acl = createDefaultAcl();
+ checkDefaultAcl(acl);
+
+ try {
+ List<InMemoryAce> aces = createAceList();
+ aces.add(null);
+ acl = new InMemoryAcl(aces);
+ fail("create an ACL with a null ACE should fail.");
+ } catch (RuntimeException e) {
+ }
+ }
+
+ @Test
+ public void testAdd() {
+ InMemoryAcl acl = new InMemoryAcl();
+ acl.addAce(aceR);
+ assertEquals(1, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceR);
+ acl.addAce(aceW);
+ assertEquals(2, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceR);
+ assertTrue(acl.getAces().get(1) == aceW);
+ acl.addAce(aceN);
+ assertEquals(3, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceN);
+ assertTrue(acl.getAces().get(1) == aceR);
+ assertTrue(acl.getAces().get(2) == aceW);
+ acl.addAce(aceA);
+ assertEquals(4, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceN);
+ assertTrue(acl.getAces().get(1) == aceR);
+ assertTrue(acl.getAces().get(2) == aceW);
+ assertTrue(acl.getAces().get(3) == aceA);
+
+ assertFalse("Adding an existing ACE to an ACL should fail.", acl.addAce(aceN));
+ assertFalse("Adding null to an ACL should fail.", acl.addAce(null));
+ }
+
+ @Test
+ public void testRemove() {
+ InMemoryAcl acl = createDefaultAcl();
+ checkDefaultAcl(acl);
+
+ acl.removeAce(aceR);
+ assertEquals(3, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceN);
+ assertTrue(acl.getAces().get(1) == aceW);
+ assertTrue(acl.getAces().get(2) == aceA);
+ acl.removeAce(aceW);
+ assertEquals(2, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceN);
+ assertTrue(acl.getAces().get(1) == aceA);
+ acl.removeAce(aceN);
+ assertEquals(1, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceA);
+ acl.removeAce(aceA);
+ assertEquals(0, acl.getAces().size());
+
+ acl = createDefaultAcl();
+ final InMemoryAce ace = new InMemoryAce("xyu", Permission.ALL);
+ assertFalse("Removing an unknown ACE from an ACL should fail.", acl.removeAce(ace));
+ assertFalse("Removing null from an ACL should fail.", acl.removeAce(null));
+ }
+
+ @Test
+ public void testMerge() {
+ final InMemoryAce aceNew = new InMemoryAce("Hugo", Permission.WRITE); // will be added
+ final InMemoryAce aceRCopy = new InMemoryAce(BERTA, Permission.READ); // is same
+ final InMemoryAce aceChange = new InMemoryAce(CHRISTIAN, Permission.ALL); // changes permission
+
+ InMemoryAcl acl1 = createDefaultAcl();
+ InMemoryAcl acl2 = new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(aceNew); add(aceRCopy); add(aceChange); }});
+ acl1.mergeAcl(acl2);
+ assertEquals(5, acl1.getAces().size());
+ assertEquals(Permission.NONE, acl1.getPermission(ANDREAS));
+ assertEquals(Permission.READ, acl1.getPermission(BERTA));
+ assertEquals(Permission.ALL, acl1.getPermission(CHRISTIAN));
+ assertEquals(Permission.ALL, acl1.getPermission(DOROTHEE));
+ assertEquals(Permission.WRITE, acl1.getPermission("Hugo"));
+ }
+
+ @Test
+ public void testAclEquality() {
+ final InMemoryAce aceNew = new InMemoryAce("Hugo", Permission.WRITE);
+ final InMemoryAce aceRCopy = new InMemoryAce(BERTA, Permission.READ);
+
+ InMemoryAcl acl1 = createDefaultAcl();
+ InMemoryAcl acl2 = new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(aceRCopy); add(aceA); add(aceW); add(aceN); }});
+ InMemoryAcl acl3 = new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(aceR); add(aceNew); add(aceW); add(aceN); }});
+ assertEquals(acl1, acl2);
+ assertFalse(acl1.equals(acl3));
+ }
+
+
+ @Test
+ public void testCheckPermissions() {
+ InMemoryAcl acl = createDefaultAcl();
+
+ assertTrue(acl.hasPermission(ANDREAS, Permission.NONE));
+ assertFalse(acl.hasPermission(ANDREAS, Permission.READ));
+ assertFalse(acl.hasPermission(ANDREAS, Permission.WRITE));
+ assertFalse(acl.hasPermission(ANDREAS, Permission.ALL));
+
+ assertTrue(acl.hasPermission(BERTA, Permission.NONE));
+ assertTrue(acl.hasPermission(BERTA, Permission.READ));
+ assertFalse(acl.hasPermission(BERTA, Permission.WRITE));
+ assertFalse(acl.hasPermission(BERTA, Permission.ALL));
+
+ assertTrue(acl.hasPermission(CHRISTIAN, Permission.NONE));
+ assertTrue(acl.hasPermission(CHRISTIAN, Permission.READ));
+ assertTrue(acl.hasPermission(CHRISTIAN, Permission.WRITE));
+ assertFalse(acl.hasPermission(CHRISTIAN, Permission.ALL));
+
+ assertTrue(acl.hasPermission(DOROTHEE, Permission.NONE));
+ assertTrue(acl.hasPermission(DOROTHEE, Permission.READ));
+ assertTrue(acl.hasPermission(DOROTHEE, Permission.WRITE));
+ assertTrue(acl.hasPermission(DOROTHEE, Permission.ALL));
+ }
+
+ @Test
+ public void testConvertFomCmisAcl() {
+ List<Ace> aces = Arrays.asList(new Ace[] { createAce(ANDREAS, EnumBasicPermissions.CMIS_READ.value()), createAce(DOROTHEE, EnumBasicPermissions.CMIS_WRITE.value()) });
+ AccessControlListImpl cAcl = new AccessControlListImpl(aces);
+ InMemoryAcl acl = InMemoryAcl.createFromCommonsAcl(cAcl);
+ assertEquals(2, acl.size());
+ assertEquals(Permission.READ, acl.getPermission(ANDREAS));
+ assertEquals(Permission.WRITE, acl.getPermission(DOROTHEE));
+
+ try {
+ List<Ace> aces2 = Arrays.asList(new Ace[] { new AccessControlEntryImpl(null, Arrays.asList(new String[] { EnumBasicPermissions.CMIS_READ.value()}))});
+ acl = InMemoryAcl.createFromCommonsAcl(new AccessControlListImpl(aces2));
+ fail("create Ace will null principal should raise exception.");
+ } catch (RuntimeException e) { }
+ try {
+ List<Ace> aces2 = Arrays.asList(new Ace[] { new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(ANDREAS), null)});
+ acl = InMemoryAcl.createFromCommonsAcl(new AccessControlListImpl(aces2));
+ fail("create Ace will null permission should raise exception.");
+ } catch (RuntimeException e) { }
+ }
+
+
+ @Test
+ public void testConvertToCmisAcl() {
+ Ace ace = aceN.toCommonsAce();
+ assertEquals(ANDREAS, ace.getPrincipalId());
+ assertEquals(1, ace.getPermissions().size());
+ assertEquals("", ace.getPermissions().get(0));
+
+ ace = aceR.toCommonsAce();
+ assertEquals(BERTA, ace.getPrincipalId());
+ assertEquals(1, ace.getPermissions().size());
+ assertEquals(EnumBasicPermissions.CMIS_READ.value(), ace.getPermissions().get(0));
+
+ ace = aceW.toCommonsAce();
+ assertEquals(CHRISTIAN, ace.getPrincipalId());
+ assertEquals(1, ace.getPermissions().size());
+ assertEquals(EnumBasicPermissions.CMIS_WRITE.value(), ace.getPermissions().get(0));
+
+ ace = aceA.toCommonsAce();
+ assertEquals(DOROTHEE, ace.getPrincipalId());
+ assertEquals(1, ace.getPermissions().size());
+ assertEquals(EnumBasicPermissions.CMIS_ALL.value(), ace.getPermissions().get(0));
+
+ InMemoryAcl acl = createDefaultAcl();
+ Acl commonsAcl = acl.toCommonsAcl();
+ assertEquals(4, commonsAcl.getAces().size());
+ assertTrue(hasCommonsAce(commonsAcl, ANDREAS, ""));
+ assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_READ.value()));
+ assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_WRITE.value()));
+ assertFalse(hasCommonsAce(commonsAcl, ANDREAS, EnumBasicPermissions.CMIS_ALL.value()));
+ assertTrue(hasCommonsAce(commonsAcl, BERTA, EnumBasicPermissions.CMIS_READ.value()));
+ assertTrue(hasCommonsAce(commonsAcl, CHRISTIAN, EnumBasicPermissions.CMIS_WRITE.value()));
+ assertTrue(hasCommonsAce(commonsAcl, DOROTHEE, EnumBasicPermissions.CMIS_ALL.value()));
+ }
+
+ @Test
+ public void testCloneAcl() {
+ InMemoryAcl acl = createDefaultAcl();
+ InMemoryAcl acl2 = acl.clone();
+ assertFalse(acl == acl2);
+ assertEquals(acl, acl2);
+ }
+
+ private InMemoryAcl createDefaultAcl() {
+ return new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(aceA); add(aceR); add(aceN); add(aceW); }});
+ }
+
+ private void checkDefaultAcl(InMemoryAcl acl) {
+ assertEquals(4, acl.getAces().size());
+ assertTrue(acl.getAces().get(0) == aceN);
+ assertTrue(acl.getAces().get(1) == aceR);
+ assertTrue(acl.getAces().get(2) == aceW);
+ assertTrue(acl.getAces().get(3) == aceA);
+ }
+
+ private List<InMemoryAce> createAceList() {
+ return new ArrayList<InMemoryAce>() {{ add(aceA); add(aceR); }};
+ }
+
+ private Ace createAce(String principalId, String permission) {
+ AccessControlEntryImpl ace = new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalId),
+ Arrays.asList(new String[] { permission }));
+ return ace;
+ }
+
+ private boolean hasCommonsAce(Acl acl, String principalId, String permission) {
+ for (Ace ace : acl.getAces()) {
+ if (ace.getPrincipalId().equals(principalId) && ace.getPermissions().get(0).equals(permission))
+ return true;
+ }
+ return false;
+
+ }
+}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java Sat Apr 28 16:33:35 2012
@@ -28,14 +28,14 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.junit.Before;
import org.junit.Test;
public class DiscoveryServiceTest extends AbstractServiceTest {
- private static final Log log = LogFactory.getLog(DiscoveryServiceTest.class);
+ private static final Logger log = LoggerFactory.getLogger(DiscoveryServiceTest.class);
private static final String TEST_FOLDER_TYPE_ID = ObjectServiceTest.TEST_FOLDER_TYPE_ID;
private static final String TEST_DOCUMENT_TYPE_ID = ObjectServiceTest.TEST_DOCUMENT_TYPE_ID;
private static final String TEST_FOLDER_STRING_PROP_ID = ObjectServiceTest.TEST_FOLDER_STRING_PROP_ID;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java Sat Apr 28 16:33:35 2012
@@ -41,15 +41,15 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.server.CallContext;
import org.apache.chemistry.opencmis.commons.spi.Holder;
import org.apache.chemistry.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class MultiFilingTest extends AbstractServiceTest {
- private static final Log LOG = LogFactory.getLog(MultiFilingTest.class);
+ private static final Logger LOG = LoggerFactory.getLogger(MultiFilingTest.class);
private static final String DOCUMENT_TYPE_ID = UnitTestTypeSystemCreator.COMPLEX_TYPE;
private static final String FOLDER_TYPE_ID = InMemoryFolderTypeDefinition.getRootFolderType().getId();
private static final String UNFILED_DOC_NAME = "Unfiled document";
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java Sat Apr 28 16:33:35 2012
@@ -37,8 +37,8 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -47,7 +47,7 @@ import org.junit.Test;
* @author Jens
*/
public class NavigationServiceTest extends AbstractServiceTest {
- private static final Log log = LogFactory.getLog(NavigationServiceTest.class);
+ private static final Logger log = LoggerFactory.getLogger(NavigationServiceTest.class);
private static final int NUM_ROOT_FOLDERS = 10;
private String fLevel1FolderId;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java?rev=1331791&r1=1331790&r2=1331791&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java Sat Apr 28 16:33:35 2012
@@ -65,8 +65,8 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -77,7 +77,7 @@ import org.junit.Test;
public class ObjectServiceTest extends AbstractServiceTest {
- private static final Log log = LogFactory.getLog(ObjectServiceTest.class);
+ private static final Logger log = LoggerFactory.getLogger(ObjectServiceTest.class);
public static final String TEST_FOLDER_TYPE_ID = "MyFolderType";
public static final String TEST_DOCUMENT_TYPE_ID = "MyDocumentType";
public static final String TEST_DOC_TYPE_WITH_DEFAULTS_ID = "DocumentTypeWithDefault";