/* * 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; import org.apache.jackrabbit.test.AbstractJCRTest; import javax.jcr.Repository; import javax.jcr.Session; import javax.jcr.Value; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import java.util.Set; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Arrays; /** * Tests if the required repository descriptors are available. * */ public class RepositoryDescriptorTest extends AbstractJCRTest { private static final Set<String> requiredDescriptorKeys = new HashSet<String>(); static { requiredDescriptorKeys.add(Repository.IDENTIFIER_STABILITY); requiredDescriptorKeys.add(Repository.LEVEL_1_SUPPORTED); requiredDescriptorKeys.add(Repository.LEVEL_2_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_NODE_TYPE_MANAGEMENT_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_AUTOCREATED_DEFINITIONS_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_INHERITANCE); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_MULTIPLE_BINARY_PROPERTIES_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_MULTIVALUED_PROPERTIES_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_ORDERABLE_CHILD_NODES_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_OVERRIDES_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_PRIMARY_ITEM_NAME_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_PROPERTY_TYPES); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_RESIDUAL_DEFINITIONS_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_SAME_NAME_SIBLINGS_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_VALUE_CONSTRAINTS_SUPPORTED); requiredDescriptorKeys.add(Repository.NODE_TYPE_MANAGEMENT_UPDATE_IN_USE_SUPORTED); requiredDescriptorKeys.add(Repository.OPTION_ACCESS_CONTROL_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_JOURNALED_OBSERVATION_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_LIFECYCLE_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_LOCKING_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_OBSERVATION_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_NODE_AND_PROPERTY_WITH_SAME_NAME_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_QUERY_SQL_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_RETENTION_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_SHAREABLE_NODES_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_SIMPLE_VERSIONING_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_TRANSACTIONS_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_UNFILED_CONTENT_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_UPDATE_MIXIN_NODE_TYPES_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_UPDATE_PRIMARY_NODE_TYPE_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_VERSIONING_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_XML_EXPORT_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_XML_IMPORT_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_ACTIVITIES_SUPPORTED); requiredDescriptorKeys.add(Repository.OPTION_BASELINES_SUPPORTED); requiredDescriptorKeys.add(Repository.QUERY_FULL_TEXT_SEARCH_SUPPORTED); requiredDescriptorKeys.add(Repository.QUERY_JOINS); requiredDescriptorKeys.add(Repository.QUERY_LANGUAGES); requiredDescriptorKeys.add(Repository.QUERY_STORED_QUERIES_SUPPORTED); requiredDescriptorKeys.add(Repository.QUERY_XPATH_DOC_ORDER); requiredDescriptorKeys.add(Repository.QUERY_XPATH_POS_INDEX); requiredDescriptorKeys.add(Repository.REP_NAME_DESC); requiredDescriptorKeys.add(Repository.REP_VENDOR_DESC); requiredDescriptorKeys.add(Repository.REP_VENDOR_URL_DESC); requiredDescriptorKeys.add(Repository.SPEC_NAME_DESC); requiredDescriptorKeys.add(Repository.SPEC_VERSION_DESC); requiredDescriptorKeys.add(Repository.WRITE_SUPPORTED); } /** The session for the tests */ private Session session; /** * Sets up the fixture for this test. */ protected void setUp() throws Exception { isReadOnly = true; super.setUp(); session = getHelper().getReadOnlySession(); } /** * Releases the session aquired in {@link #setUp}. */ protected void tearDown() throws Exception { if (session != null) { session.logout(); session = null; } super.tearDown(); } /** * Tests that the required repository descriptors are available. */ public void testRequiredDescriptors() { Repository rep = session.getRepository(); for (Iterator<String> it = requiredDescriptorKeys.iterator(); it.hasNext();) { String descName = it.next(); assertTrue(descName + " is a standard descriptor", rep.isStandardDescriptor(descName)); if (rep.isSingleValueDescriptor(descName)) { Value val = rep.getDescriptorValue(descName); assertNotNull("Required descriptor is missing: " + descName, val); } else { Value[] vals = rep.getDescriptorValues(descName); assertNotNull("Required descriptor is missing: " + descName, vals); } } } /** * Tests if {@link Repository#getDescriptorKeys()} returns all required * descriptors keys. */ public void testGetDescriptorKeys() { List<String> keys = Arrays.asList(session.getRepository().getDescriptorKeys()); for (Iterator<String> it = requiredDescriptorKeys.iterator(); it.hasNext();) { String key = it.next(); assertTrue("Required descriptor is missing: " + key, keys.contains(key)); } } /** * Tests whether {@link Repository#getDescriptorValues(String)} returns an * Value[] of size 1 for single valued descriptors. */ public void testGetDescriptorValues() { Repository rep = session.getRepository(); // "option.node.type.management.supported" denotes a single-valued BOOLEAN descriptor String descName = Repository.OPTION_NODE_TYPE_MANAGEMENT_SUPPORTED; assertTrue(rep.isSingleValueDescriptor(descName)); Value[] vals = rep.getDescriptorValues(descName); assertNotNull("Required descriptor is missing: " + descName, vals); assertEquals(1, vals.length); assertEquals(PropertyType.BOOLEAN, vals[0].getType()); try { // getDescriptorValue(key).getString() is equivalent to getDescriptor(key) assertEquals(vals[0].getString(), rep.getDescriptor(descName)); } catch (RepositoryException e) { fail(e.getMessage()); } // "option.node.type.management.supported" denotes a single-valued BOOLEAN descriptor descName = Repository.QUERY_LANGUAGES; assertFalse(rep.isSingleValueDescriptor(descName)); Value val = rep.getDescriptorValue(descName); assertNull(descName + " is a multi-value descriptor, getDescriptorValue() should return null", val); } }