/* * 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.version; import java.util.GregorianCalendar; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.nodetype.ConstraintViolationException; /** * <code>VersionStorageTest</code> provides tests regarding {@link * javax.jcr.version.VersionHistory#addVersionLabel(String, String, boolean)} * */ public class VersionStorageTest extends AbstractVersionTest { // path to version storage protected String versionStoragePath; protected void setUp() throws Exception { super.setUp(); // get versionStorage path versionStoragePath = superuser.getNamespacePrefix(NS_JCR_URI) + ":system/" + superuser.getNamespacePrefix(NS_JCR_URI) + ":versionStorage"; } /** * Entire subtree is protected. */ public void testVersionStorageProtected() throws RepositoryException { try { versionableNode.getBaseVersion().setProperty(jcrCreated, GregorianCalendar.getInstance()); fail("It should not be possible to modify a subnode/version in version storage."); } catch (ConstraintViolationException e) { // success } } /** * The full set of version histories in the version storage, though stored * in a single location in the repository, must be reflected in each * workspace as a subtree below the node /jcr:system/jcr:versionStorage. * Entire subtree must be identical across all workspaces and is protected. */ public void testVersionStorageIdenticalAcrossAllWorkspaces() throws RepositoryException { // The superuser session for the second workspace Session superuserW2 = getHelper().getSuperuserSession(workspaceName); try { // check path to version storage assertTrue("Version strorage must be reflected as a subtree below the node '" + versionStoragePath + "'", superuserW2.getRootNode().hasNode(versionStoragePath)); // check if subnodes in versionStorage are protected try { // try to create a version node Node versionStorageNodeW2 = superuserW2.getRootNode().getNode(versionStoragePath); versionStorageNodeW2.addNode(nodeName1, ntVersion); fail("It should not be possible to add a subnode/version in version storage."); } catch (ConstraintViolationException e) { // success } } finally { superuserW2.logout(); } } }