/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.security.ldap; import java.io.File; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import junit.framework.TestCase; /** * Test Basic OpenDS functionality * @author Anil.Saldhana@redhat.com * @since Aug 23, 2007 * @version $Revision$ */ public class OpenDSUnitTestCase extends TestCase { protected String serverHost; protected String port = "10389"; protected String adminPW = "password"; protected String dn = "dc=jboss,dc=org"; protected String adminDN = "cn=Directory Manager"; protected OpenDSUtil util = new OpenDSUtil(); /** * Use a different value for the system property on * a JVM that is not shipped by Sun */ protected String ldapCtxFactory = System.getProperty("ldapctx.factory", "com.sun.jndi.ldap.LdapCtxFactory"); protected String baseDir = System.getProperty("user.dir"); protected String fs = System.getProperty("file.separator"); //System property when running in eclipse (-Declipse=jbosssx/ ) private String eclipsePath = System.getProperty("eclipse",""); protected String targetDir = eclipsePath + "target" + fs + "test-classes" + fs; protected String openDSDir = targetDir + "opends" ; protected OpenDS opends = null; public OpenDSUnitTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); //Ensure openDSDir exists and recycle opends db dir File openDSDirFile = new File(openDSDir); if(openDSDirFile.exists()) { File dbDir = new File(openDSDir + fs + "db"); assertTrue("Deletion of opendsDir db success", recursiveDeleteDir(dbDir)); assertTrue("Creation of opendsDir DB success", dbDir.mkdirs()); } serverHost = "localhost"; opends = new OpenDS(); opends.intialize(openDSDir); if(opends.isRunning()) opends.stopServer(); opends.startServer(); assertTrue(opends.isRunning()); } @Override protected void tearDown() throws Exception { super.tearDown(); assertTrue("DS is running",opends.isRunning()); shutdown(); assertFalse("DS is not running",opends.isRunning()); } public void testLDAPAddDelete() throws Exception { String fileName = targetDir + "ldap" + fs + "example1.ldif"; boolean op = util.addLDIF(serverHost, port, adminDN, adminPW, new File(fileName).toURI().toURL()); assertTrue(op); DirContext dc = null; NamingEnumeration<SearchResult> ne = null; try { dc = this.getDirContext(); assertNotNull("DirContext exists?", dc); //Use JDK JNDI code for a search SearchControls sc = new SearchControls(); sc.setSearchScope(SearchControls.SUBTREE_SCOPE); ne = dc.search(dn, "(objectclass=*)", sc); while (ne.hasMore()) { SearchResult sr = ne.next(); assertTrue("Search Result exists?", sr != null); } //We will delete the DIT just created assertTrue(util.deleteDNRecursively(serverHost, port, adminDN, adminPW, dn)); assertFalse("The DIT does not exist", util.existsDN(serverHost, port, dn)); } catch(Exception e) { System.err.println("Error in searching:"); e.printStackTrace(); } finally { if(ne != null) ne.close(); if(dc != null) dc.close(); } } protected void shutdown() throws Exception { //Check if the server is running if(opends.isRunning()) opends.stopServer(); } private DirContext getDirContext() throws Exception { String url = "ldap://" + serverHost + ":" + port; Hashtable<String, String> env = new Hashtable<String,String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, ldapCtxFactory); env.put(Context.PROVIDER_URL, url); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, adminDN); env.put(Context.SECURITY_CREDENTIALS, adminPW); return new InitialDirContext(env); } private boolean recursiveDeleteDir(File dirPath) { if( dirPath.exists() ) { File[] files = dirPath.listFiles(); for(int i=0; i<files.length; i++) { if(files[i].isDirectory()) { recursiveDeleteDir(files[i]); } else { files[i].delete(); } } } if(dirPath.exists()) return dirPath.delete(); else return true; } }