| /* |
| * 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.directory.server.config; |
| |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.File; |
| import java.util.List; |
| |
| import org.apache.commons.io.FileUtils; |
| import org.apache.directory.server.core.DirectoryService; |
| import org.apache.directory.server.core.partition.ldif.LdifPartition; |
| import org.apache.directory.server.core.schema.SchemaPartition; |
| import org.apache.directory.server.ldap.LdapServer; |
| import org.apache.directory.server.protocol.shared.transport.Transport; |
| import org.apache.directory.shared.ldap.schema.SchemaManager; |
| import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor; |
| import org.apache.directory.shared.ldap.schema.ldif.extractor.impl.DefaultSchemaLdifExtractor; |
| import org.apache.directory.shared.ldap.schema.loader.ldif.LdifSchemaLoader; |
| import org.apache.directory.shared.ldap.schema.manager.impl.DefaultSchemaManager; |
| import org.apache.directory.shared.ldap.schema.registries.SchemaLoader; |
| import org.apache.directory.shared.ldap.util.LdapExceptionUtils; |
| import org.apache.mina.util.AvailablePortFinder; |
| import org.junit.AfterClass; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| |
| /** |
| * Test class for ConfigPartitionReader |
| * |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| * @version $Rev$, $Date$ |
| */ |
| public class ConfigPartitionReaderTest |
| { |
| |
| private static DirectoryService dirService; |
| |
| private static LdapServer server; |
| |
| private static SchemaManager schemaManager; |
| |
| |
| @BeforeClass |
| public static void readConfig() throws Exception |
| { |
| File workDir = new File( System.getProperty( "java.io.tmpdir" ) + "/server-work" ); |
| FileUtils.deleteDirectory( workDir ); |
| workDir.mkdir(); |
| |
| String workingDirectory = workDir.getPath(); |
| // Extract the schema on disk (a brand new one) and load the registries |
| File schemaRepository = new File( workingDirectory, "schema" ); |
| |
| if ( schemaRepository.exists() ) |
| { |
| FileUtils.deleteDirectory( schemaRepository ); |
| } |
| |
| SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( new File( workingDirectory ) ); |
| extractor.extractOrCopy(); |
| |
| SchemaLoader loader = new LdifSchemaLoader( schemaRepository ); |
| schemaManager = new DefaultSchemaManager( loader ); |
| |
| // We have to load the schema now, otherwise we won't be able |
| // to initialize the Partitions, as we won't be able to parse |
| // and normalize their suffix DN |
| schemaManager.loadAllEnabled(); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| |
| if ( errors.size() != 0 ) |
| { |
| throw new Exception( "Schema load failed : " + LdapExceptionUtils.printErrors( errors ) ); |
| } |
| |
| LdifConfigExtractor.extract( workDir, true ); |
| |
| LdifPartition configPartition = new LdifPartition(); |
| configPartition.setId( "config" ); |
| configPartition.setSuffix( "ou=config" ); |
| configPartition.setSchemaManager( schemaManager ); |
| configPartition.setWorkingDirectory( workingDirectory + "/config" ); |
| configPartition.setPartitionDir( new File( configPartition.getWorkingDirectory() ) ); |
| |
| configPartition.initialize(); |
| |
| ConfigPartitionReader cpReader = new ConfigPartitionReader( configPartition ); |
| dirService = cpReader.getDirectoryService(); |
| |
| SchemaPartition schemaPartition = dirService.getSchemaService().getSchemaPartition(); |
| |
| // Init the schema partition's wrapped LdifPartition |
| LdifPartition wrappedPartition = new LdifPartition(); |
| wrappedPartition.setWorkingDirectory( new File( workDir, schemaPartition.getId() ).getAbsolutePath() ); |
| schemaPartition.setWrappedPartition( wrappedPartition ); |
| schemaPartition.setSchemaManager( schemaManager ); |
| |
| dirService.setWorkingDirectory( workDir ); |
| dirService.setSchemaManager( schemaManager ); |
| dirService.startup(); |
| |
| server = cpReader.getLdapServer(); |
| server.setDirectoryService( dirService ); |
| |
| // this is a hack to use a different port than the one |
| // configured in the actual configuration data |
| // in case the configured port is already in use during the test run |
| Transport[] transports = server.getTransports(); |
| for( Transport t : transports ) |
| { |
| int port = t.getPort(); |
| port = AvailablePortFinder.getNextAvailable( port ); |
| t.setPort( port ); |
| t.init(); |
| } |
| |
| server.start(); |
| } |
| |
| |
| @AfterClass |
| public static void cleanup() throws Exception |
| { |
| server.stop(); |
| dirService.shutdown(); |
| } |
| |
| |
| @Test |
| public void testDirService() |
| { |
| assertTrue( dirService.isStarted() ); |
| assertEquals( "default", dirService.getInstanceId() ); |
| } |
| |
| |
| @Test |
| public void testLdapServer() |
| { |
| assertTrue( server.isStarted() ); |
| assertEquals( dirService, server.getDirectoryService() ); |
| } |
| } |