Package org.apache.jackrabbit.core.config

Source Code of org.apache.jackrabbit.core.config.WorkspaceConfigTest

/*
* 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.core.config;

import junit.framework.TestCase;
import org.apache.jackrabbit.core.security.authorization.AccessControlProvider;
import org.apache.jackrabbit.core.security.user.UserImporter;
import org.apache.jackrabbit.core.xml.AccessControlImporter;
import org.apache.jackrabbit.core.xml.ProtectedNodeImporter;
import org.apache.jackrabbit.core.xml.ProtectedPropertyImporter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.List;
import java.util.Properties;

/**
* Test cases for workspace configuration handling.
*/
public class WorkspaceConfigTest extends TestCase {

    private RepositoryConfigurationParser parser;

    protected void setUp() {
        Properties variables = new Properties();
        variables.setProperty("wsp.home", "target");
        parser = new RepositoryConfigurationParser(variables);
    }

    /**
     * Test that a standard workspace configuration file is
     * correctly parsed.
     *
     * @throws Exception on errors
     */
    public void testWorkspaceXml() throws Exception {
        InputStream xml = getClass().getClassLoader().getResourceAsStream(
                "org/apache/jackrabbit/core/config/workspace.xml");
        WorkspaceConfig config =
            parser.parseWorkspaceConfig(new InputSource(xml));

        assertEquals("target", config.getHomeDir());
        assertEquals("default", config.getName());

        PersistenceManagerConfig pmc = config.getPersistenceManagerConfig();
        assertEquals(
                "org.apache.jackrabbit.core.persistence.obj.ObjectPersistenceManager",
                pmc.getClassName());
        assertTrue(pmc.getParameters().isEmpty());

        assertTrue(config.isSearchEnabled());

        WorkspaceSecurityConfig ws = config.getSecurityConfig();
        if (ws != null) {
            BeanConfig ppfConfig =  ws.getAccessControlProviderConfig();
            if (ppfConfig != null) {
                AccessControlProvider prov = (AccessControlProvider) ppfConfig.newInstance();
            }
        }
    }

    public void testImportConfig() throws Exception {
        // XML_1 ---------------------------------------------------------------
        Element xml = parseXML(new InputSource(new StringReader(XML_1)), true);
        ImportConfig config = parser.parseImportConfig(xml);

        List<ProtectedNodeImporter> ln = config.getProtectedNodeImporters();
        assertEquals(1, ln.size());
        assertTrue(ln.get(0) instanceof AccessControlImporter);

        List<ProtectedPropertyImporter> lp = config.getProtectedPropertyImporters();
        assertEquals(1, lp.size());
        assertTrue(lp.get(0) instanceof UserImporter);

        // XML_2 ---------------------------------------------------------------
        xml = parseXML(new InputSource(new StringReader(XML_2)), true);
        config = parser.parseImportConfig(xml);

        ln = config.getProtectedNodeImporters();
        assertTrue(ln.isEmpty());

        lp = config.getProtectedPropertyImporters();
        assertTrue(lp.isEmpty());

        // XML_3 ---------------------------------------------------------------
        xml = parseXML(new InputSource(new StringReader(XML_3)), true);
        config = parser.parseImportConfig(xml);

        ln = config.getProtectedNodeImporters();
        assertEquals(2, ln.size());

        lp = config.getProtectedPropertyImporters();
        assertEquals(2, lp.size());

        // XML_4 ---------------------------------------------------------------
        xml = parseXML(new InputSource(new StringReader(XML_4)), true);
        config = parser.parseImportConfig(xml);

        ln = config.getProtectedNodeImporters();
        assertEquals(1, ln.size());

        lp = config.getProtectedPropertyImporters();
        assertEquals(1, lp.size());

        // XML_5 ---------------------------------------------------------------
        xml = parseXML(new InputSource(new StringReader(XML_5)), true);
        config = parser.parseImportConfig(xml);

        lp = config.getProtectedPropertyImporters();
        assertEquals(1, lp.size());
        assertTrue(lp.get(0) instanceof UserImporter);
        assertEquals(UserImporter.ImportBehavior.NAME_BESTEFFORT, ((UserImporter)lp.get(0)).getImportBehavior());
    }

    private static Element parseXML(InputSource xml, boolean validate) throws ConfigurationException {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setValidating(validate);
            DocumentBuilder builder = factory.newDocumentBuilder();
            if (validate) {
                builder.setErrorHandler(new ConfigurationErrorHandler());
            }
            builder.setEntityResolver(ConfigurationEntityResolver.INSTANCE);
            Document document = builder.parse(xml);
            return document.getDocumentElement();
        } catch (ParserConfigurationException e) {
            throw new ConfigurationException("Unable to create configuration XML parser", e);
        } catch (SAXParseException e) {
            throw new ConfigurationException("Configuration file syntax error. (Line: " + e.getLineNumber() + " Column: " + e.getColumnNumber() + ")", e);
        } catch (SAXException e) {
            throw new ConfigurationException("Configuration file syntax error. ", e);
        } catch (IOException e) {
            throw new ConfigurationException("Configuration file could not be read.", e);
        }
    }



    private static final String XML_1 =
            " <Workspace><Import>\n" +
                    "    <ProtectedNodeImporter class=\"org.apache.jackrabbit.core.xml.AccessControlImporter\"/>\n" +
                    "    <ProtectedPropertyImporter class=\"org.apache.jackrabbit.core.security.user.UserImporter\"/>\n" +
                    " </Import></Workspace>";

    private static final String XML_2 =
            " <Workspace><Import>\n" +
                    " </Import></Workspace>";

    private static final String XML_3 =
            " <Workspace><Import>\n" +
                    "    <ProtectedNodeImporter class=\"org.apache.jackrabbit.core.xml.AccessControlImporter\"/>\n" +
                    "    <ProtectedPropertyImporter class=\"org.apache.jackrabbit.core.security.user.UserImporter\"/>\n" +
                    "    <ProtectedNodeImporter class=\"org.apache.jackrabbit.core.xml.DefaultProtectedNodeImporter\"/>\n" +
                    "    <ProtectedPropertyImporter class=\"org.apache.jackrabbit.core.xml.DefaultProtectedPropertyImporter\"/>\n" +
                    " </Import></Workspace>";

    private static final String XML_4 =
            " <Workspace><Import>\n" +
                    "    <ProtectedNodeImporter class=\"org.apache.jackrabbit.core.xml.AccessControlImporter\"/>\n" +
                    "    <ProtectedPropertyImporter class=\"org.apache.jackrabbit.core.security.user.UserImporter\"/>\n" +
                    "    <ProtectedNodeImporter class=\"org.apache.jackrabbit.core.InvalidImporter\"/>\n" +
                    "    <ProtectedPropertyImporter class=\"org.apache.jackrabbit.core.InvalidImporter\"/>\n" +
                    " </Import></Workspace>";

    private static final String XML_5 =
            " <Workspace><Import>\n" +
                    "    <ProtectedPropertyImporter class=\"org.apache.jackrabbit.core.security.user.UserImporter\">" +
                    "       <param name=\"importBehavior\" value=\"besteffort\"/>" +
                    "    </ProtectedPropertyImporter>\n" +
                    " </Import></Workspace>";
}
TOP

Related Classes of org.apache.jackrabbit.core.config.WorkspaceConfigTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.