Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.apache.jackrabbit.test.api.retention.HoldEffectTest Maven / Gradle / Ivy
/*
* 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.jackrabbit.test.api.retention;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
import javax.jcr.retention.Hold;
import org.apache.jackrabbit.test.NotExecutableException;
import org.apache.jackrabbit.test.RepositoryStub;
/**
* HoldEffectTest
...
*/
public class HoldEffectTest extends AbstractRetentionTest {
private Node childN;
private Property childP;
private Session otherS;
protected void setUp() throws Exception {
super.setUp();
childN = testRootNode.addNode(nodeName2);
Value v = getJcrValue(superuser, RepositoryStub.PROP_PROP_VALUE1, RepositoryStub.PROP_PROP_TYPE1, "test");
childP = testRootNode.setProperty(propertyName1, v);
superuser.save();
otherS = getHelper().getSuperuserSession();
}
protected void tearDown() throws Exception {
if (otherS != null) {
otherS.logout();
}
Hold[] holds = retentionMgr.getHolds(testNodePath);
for (int i = 0; i < holds.length; i++) {
retentionMgr.removeHold(testNodePath, holds[i]);
}
superuser.save();
super.tearDown();
}
// TODO: test importXML (session/wsp) / move (session/wsp) / copy ...
// TODO: test effect on child items
public void testTransientShallowHold() throws RepositoryException, NotExecutableException {
retentionMgr.addHold(testNodePath, getHoldName(), false);
assertNoEffect(testRootNode, nodeName3, propertyName2);
assertNoEffect(childN, nodeName3, propertyName2);
assertNoEffect(childP);
}
public void testTransientShallowHoldForOtherSession() throws RepositoryException, NotExecutableException {
retentionMgr.addHold(testNodePath, getHoldName(), false);
assertNoEffect((Node) otherS.getItem(testNodePath), nodeName3, propertyName2);
assertNoEffect((Node) otherS.getItem(childN.getPath()), nodeName3, propertyName2);
assertNoEffect((Property) otherS.getItem(childP.getPath()));
}
public void testTransientDeepHold() throws RepositoryException, NotExecutableException {
retentionMgr.addHold(testNodePath, getHoldName(), true);
assertNoEffect(testRootNode, nodeName3, propertyName2);
assertNoEffect(childN, nodeName3, propertyName2);
assertNoEffect(childP);
}
public void testTransientDeepHoldForOtherSession() throws RepositoryException, NotExecutableException {
retentionMgr.addHold(testNodePath, getHoldName(), true);
assertNoEffect((Node) otherS.getItem(testNodePath), nodeName3, propertyName2);
assertNoEffect((Node) otherS.getItem(childN.getPath()), nodeName3, propertyName2);
assertNoEffect((Property) otherS.getItem(childP.getPath()));
}
public void testShallowHold() throws RepositoryException, NotExecutableException {
retentionMgr.addHold(testNodePath, getHoldName(), false);
superuser.save();
// check for superuser
assertNoEffect(childN, nodeName3, propertyName2);
assertEffect(testRootNode, childN.getName(), childP.getName(), nodeName3, propertyName2);
}
public void testShallowHoldForOtherSession() throws RepositoryException, NotExecutableException {
retentionMgr.addHold(testNodePath, getHoldName(), false);
superuser.save();
// check for other session
assertNoEffect((Node) otherS.getItem(childN.getPath()), nodeName3, propertyName2);
assertEffect((Node) otherS.getItem(testNodePath), childN.getName(), childP.getName(), nodeName3, propertyName2);
}
public void testDeepHold() throws RepositoryException, NotExecutableException {
Node n = childN.addNode(nodeName2);
Value v = getJcrValue(superuser, RepositoryStub.PROP_PROP_VALUE1, RepositoryStub.PROP_PROP_TYPE1, "test");
Property p = childN.setProperty(propertyName1, v);
retentionMgr.addHold(testNodePath, getHoldName(), true);
superuser.save();
// check for superuser
assertEffect(testRootNode, childN.getName(), childP.getName(), nodeName3, propertyName2);
assertEffect(childN, n.getName(), p.getName(), nodeName3, propertyName2);
}
public void testDeepHoldForOtherSession() throws RepositoryException, NotExecutableException {
Node n = childN.addNode(nodeName2);
Value v = getJcrValue(superuser, RepositoryStub.PROP_PROP_VALUE1, RepositoryStub.PROP_PROP_TYPE1, "test");
Property p = childN.setProperty(propertyName1, v);
retentionMgr.addHold(testNodePath, getHoldName(), true);
superuser.save();
// check for other session
assertEffect((Node) otherS.getItem(testNodePath), childN.getName(), childP.getName(), nodeName3, propertyName2);
assertEffect((Node) otherS.getItem(childN.getPath()), n.getName(), p.getName(), nodeName3, propertyName2);
}
private void assertEffect(Node targetNode, String childName,
String propName, String childName2,
String propName2) throws RepositoryException {
Session s = targetNode.getSession();
try {
Node child = targetNode.getNode(childName);
child.remove();
s.save();
fail("Hold present must prevent a child node from being removed.");
} catch (RepositoryException e) {
// success
s.refresh(false);
}
try {
Property p = targetNode.getProperty(propName);
p.remove();
s.save();
fail("Hold present must prevent a child property from being removed.");
} catch (RepositoryException e) {
// success
s.refresh(false);
}
try {
Property p = targetNode.getProperty(propName);
p.setValue("test2");
s.save();
fail("Hold present must prevent the child property from being modified.");
} catch (RepositoryException e) {
// success
s.refresh(false);
}
try {
targetNode.addNode(childName2);
s.save();
fail("Hold present must prevent the target node from having new nodes added.");
} catch (RepositoryException e) {
// success
s.refresh(false);
}
try {
Value v = getJcrValue(s, RepositoryStub.PROP_PROP_VALUE2, RepositoryStub.PROP_PROP_TYPE2, "test");
targetNode.setProperty(propName2, v);
s.save();
fail("Hold present must prevent the target node from having new properties set.");
} catch (RepositoryException e) {
// success
s.refresh(false);
}
NodeType[] mixins = targetNode.getMixinNodeTypes();
if (mixins.length > 0) {
try {
targetNode.removeMixin(mixins[0].getName());
s.save();
fail("Hold present must prevent the target node from having it's mixin types changed.");
} catch (RepositoryException e) {
// success
s.refresh(false);
}
}
try {
targetNode.remove();
s.save();
fail("Hold present must prevent the target node from being removed.");
} catch (RepositoryException e) {
// success
s.refresh(false);
}
}
private void assertNoEffect(Node target, String childName, String propName) throws RepositoryException {
Session s = target.getSession();
Node n = target.addNode(childName);
Value v = getJcrValue(s, RepositoryStub.PROP_PROP_VALUE2, RepositoryStub.PROP_PROP_TYPE2, "test");
Property p = target.setProperty(propName, v);
n.remove();
p.remove();
}
private void assertNoEffect(Property target) throws RepositoryException {
target.setValue("test3");
target.remove();
}
}