/*
*
* Copyright (c) 2005, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.wso2.carbon.apacheds.impl;
import junit.framework.TestCase;
import org.apache.commons.io.FileUtils;
import org.wso2.carbon.apacheds.AdminGroupInfo;
import org.wso2.carbon.apacheds.AdminInfo;
import org.wso2.carbon.apacheds.DirectoryServiceFactory;
import org.wso2.carbon.apacheds.LDAPConfiguration;
import org.wso2.carbon.apacheds.LDAPServer;
import org.wso2.carbon.apacheds.PartitionInfo;
import org.wso2.carbon.apacheds.PartitionManager;
import org.wso2.carbon.apacheds.PasswordAlgorithm;
import org.wso2.carbon.ldap.server.exception.DirectoryServerException;
import java.io.File;
import java.io.IOException;
public abstract class AbstractDirectoryTestCase extends TestCase {
protected final static String KDC_ENABLED_TEST_CASE = "testKdcEnabledTest";
protected LDAPServer embeddedLdap;
protected DirectoryServerWorker worker;
protected boolean kdcEnabled = false;
protected Thread serverThread;
public void setUp()
throws Exception {
String temDir = "tmp";
File file = new File(".");
String temDirectory = file.getAbsolutePath() + File.separator + temDir;
File tempDirectory = new File(temDirectory);
if (tempDirectory.exists()) {
try {
FileUtils.deleteDirectory(tempDirectory);
} catch (IOException e) {
e.printStackTrace();
}
}
assertFalse(tempDirectory.exists());
tempDirectory.mkdir();
kdcEnabled = false;
System.setProperty("schema.zip.store.location", "./src/test/resources/is-default-schema.zip");
System.out.println("Running Test case - " + this.getName());
if (KDC_ENABLED_TEST_CASE.equals(this.getName())) {
kdcEnabled = true;
}
embeddedLdap =
DirectoryServiceFactory.createLDAPServer(DirectoryServiceFactory.LDAPServerType.APACHE_DIRECTORY_SERVICE);
worker = new DirectoryServerWorker(embeddedLdap, tempDirectory.getAbsolutePath());
serverThread = new Thread(worker);
serverThread.start();
while (!worker.isServerStarted()) {
Thread.sleep(1000 * 10);
}
System.out.println("Server started ...");
}
public void tearDown()
throws Exception {
// If you want to connect using Apache Directory Studio, just uncomment following line
//Thread.sleep(1000 * 60 * 10);
System.out.println("Stopping the server ...");
this.worker.stopServer();
this.serverThread.join();
this.serverThread = null;
//Thread.sleep(1000 * 60);
}
protected void addDummyPartition()
throws DirectoryServerException {
PartitionManager partitionManager = this.embeddedLdap.getPartitionManager();
AdminGroupInfo groupInfo = new AdminGroupInfo("cn", "member", "admin");
AdminInfo adminInfo =
new AdminInfo("uid", "amilaj", "Amila", "Jayasekara", "amilaj@wso2.com", "iceage", PasswordAlgorithm.SHA,
groupInfo);
PartitionInfo partitionInfo = new PartitionInfo("example", "example.com", "dc=example,dc=com", adminInfo);
partitionInfo.setKdcEnabled(kdcEnabled);
partitionManager.addPartition(partitionInfo);
assertTrue("Partition has not created", partitionManager.partitionInitialized(partitionInfo.getPartitionId()));
}
public class MonitorObject {
}
class DirectoryServerWorker implements Runnable {
private boolean stop = false;
private boolean started = false;
private LDAPServer ldapServer = null;
private String temDirectory = null;
public DirectoryServerWorker(LDAPServer server, String directory) {
this.ldapServer = server;
this.temDirectory = directory;
}
MonitorObject myMonitorObject = new MonitorObject();
public void stopServer()
throws DirectoryServerException {
synchronized (myMonitorObject) {
stop = true;
myMonitorObject.notifyAll();
}
}
public boolean isServerStarted() {
return started;
}
public void run() {
try {
LDAPConfiguration config = new LDAPConfiguration();
// use a different port other than default port in order to make sure no bind exception occurs even
// if a product is up at test running time
config.setLdapPort(10798);
config.setWorkingDirectory(temDirectory);
ldapServer.init(config);
ldapServer.start();
this.started = true;
} catch (Exception e) {
e.printStackTrace();
}
synchronized (myMonitorObject) {
while (!stop) {
try {
myMonitorObject.wait();
} catch (InterruptedException e) {
}
}
}
try {
PartitionManager partitionManager = this.ldapServer.getPartitionManager();
partitionManager.removeAllPartitions();
this.ldapServer.stop();
} catch (DirectoryServerException e) {
e.printStackTrace();
}
}
}
}