Robert Sanders 20 年 前
コミット
90c77f2899

+ 79 - 11
sandbox/src/test/java/org/acegisecurity/providers/dao/ldap/LdapTestHelper.java

@@ -1,6 +1,14 @@
 package net.sf.acegisecurity.providers.dao.ldap;
 
 import java.io.File;
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+import org.apache.ldap.server.jndi.EnvKeys;
 
 /** 
  * LdapTestHelper - used as static field in BaseLdapTestCase;
@@ -12,27 +20,74 @@ public class LdapTestHelper {
 	
 	private File tempDirectory;
 	
-	/**
+	private DirContext serverContext;
+	
+    /**
 	 * 
 	 */
 	public LdapTestHelper() {
+		tempDirectory = initTempFiles();
+		startServer();
+	}
+    
+	
+	protected File initTempFiles() {
 		String tmpDir = System.getProperty("java.io.tmpdir");
 		File dir = new File(tmpDir);
-		tempDirectory = new File(dir, "apacheds_tmp");
-		if (!tempDirectory.exists()) {
-			tempDirectory.mkdir();
-			//tempDirectory.deleteOnExit();
+		File tmp = new File(dir, "apacheds_tmp");
+		if (tmp.exists()) {
+            cleanupTempFiles(tmp);
+		} else {
+            tmp.mkdir();
+        }
+        System.out.println("Directory temp files at: " + tmp.getAbsolutePath());
+		return tmp;
+	}
+	
+	protected void startServer() {
+		try {
+			serverContext = new InitialDirContext( getServerEnvironment() );
+		} catch (NamingException nx) {
+			nx.printStackTrace( System.err );
 		}
 	}
 	
-	/** since file..deleteOnExit() isn't working for me, explicitly force cleanup. */
-	protected void finalize() throws Throwable {
-		File[] files = tempDirectory.listFiles();
-		for (int i = 0; i < files.length; i++) {
-			files[i].delete();
+	protected void shutdownServer() {
+		try {
+			serverContext.close();
+		} catch (NamingException e) {
+			e.printStackTrace( System.err );
+		}
+		serverContext = null;
+		
+		Hashtable env = getServerEnvironment();
+		env.put(EnvKeys.SHUTDOWN, "true");
+		try {
+			new InitialDirContext( env );
+		} catch (NamingException e) {
+			e.printStackTrace( System.err );
 		}
-		tempDirectory.delete();
+	}
+	
+	protected void cleanupTempFiles(File tempDir) {
+		if ((null != tempDir) && (tempDir.exists())) {
+			File[] files = tempDir.listFiles();
+			for (int i = 0; i < files.length; i++) {
+				if (!files[i].delete()) {
+                    System.err.println("Error: unable to cleanup Apache Directory Server file: " + files[i]);
+                }
+			}
+		}
+	}
+	
+	/** since file..deleteOnExit() isn't working for me, explicitly force cleanup. */
+	public void finalize() throws Throwable {
+        System.out.println("Entering LdapTestHelper.finalize()");
+		shutdownServer();
+		cleanupTempFiles(tempDirectory);
+        tempDirectory.delete();
 		super.finalize();
+        System.out.println("Leaving LdapTestHelper.finalize()");
 	}
 	
 
@@ -44,6 +99,19 @@ public class LdapTestHelper {
 		return tempDirectory.getAbsolutePath();
 	}
 	
+	/** Create and return a Hashtable with standard JNDI settings for our tests. */
+	protected Hashtable getServerEnvironment() {
+		Hashtable env = new Hashtable();
+		env.put( Context.PROVIDER_URL, "ou=system" );
+		env.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.ldap.server.jndi.ServerContextFactory" );
+		env.put( Context.SECURITY_PRINCIPAL, "uid=admin,ou=system" );
+		env.put( Context.SECURITY_CREDENTIALS, "secret" );
+		env.put( EnvKeys.WKDIR, tempDirectory.getAbsolutePath() );
+		return env;
+	}
 	
+	public DirContext getServerContext() {
+		return serverContext;
+	}
 
 }