package com.teiid.quickstart.ldap;
import static org.junit.Assert.assertNotNull;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.ldap.InitialLdapContext;
import javax.resource.ResourceException;
import org.junit.Test;
import org.teiid.deployers.VirtualDatabaseException;
import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository.ConnectorManagerException;
import org.teiid.language.Command;
import org.teiid.resource.adapter.ldap.LDAPConnectionImpl;
import org.teiid.resource.adapter.ldap.LDAPManagedConnectionFactory;
import org.teiid.runtime.EmbeddedConfiguration;
import org.teiid.runtime.EmbeddedServer;
import org.teiid.translator.TranslatorException;
import org.teiid.translator.ldap.LDAPDirectSearchQueryExecution;
import org.teiid.translator.ldap.LDAPExecutionFactory;
import com.teiid.quickstart.FakeTranslationFactory;
import com.teiid.quickstart.TranslationUtility;
import com.teiid.quickstart.util.JDBCUtil;
public class TestLDAPDataSource {
static EmbeddedServer server = null;
static Connection conn = null;
@Test
public void testConnection() throws ResourceException, TranslatorException, NamingException{
LDAPManagedConnectionFactory factory = new LDAPManagedConnectionFactory();
factory.setLdapUrl("ldap://10.66.218.46:389");
factory.setLdapAdminUserDN("cn=Manager,dc=example,dc=com");
factory.setLdapAdminUserPassword("redhat");
LDAPConnectionImpl connection = factory.createConnectionFactory().getConnection();
Object obj = connection.lookup("ou=People,dc=example,dc=com");
System.out.println(obj);
assertNotNull(connection);
}
@Test
public void testSearch() throws TranslatorException, ResourceException {
LDAPExecutionFactory translator = new LDAPExecutionFactory();
translator.setSupportsDirectQueryProcedure(true);
translator.start();
LDAPManagedConnectionFactory factory = new LDAPManagedConnectionFactory();
factory.setLdapUrl("ldap://10.66.218.46:389");
factory.setLdapAdminUserDN("cn=Manager,dc=example,dc=com");
factory.setLdapAdminUserPassword("redhat");
LDAPConnectionImpl connection = factory.createConnectionFactory().getConnection();
String input = "exec native('search;context-name=ou=People,dc=example,dc=com;filter=(objectClass=*);count-limit=5;timeout=6;search-scope=ONELEVEL_SCOPE;attributes=uid,cn')";
TranslationUtility util = FakeTranslationFactory.getInstance().getExampleTranslationUtility();
Command command = util.parseCommand(input);
LDAPDirectSearchQueryExecution execution = (LDAPDirectSearchQueryExecution) translator.createExecution(command, null, util.createRuntimeMetadata(), connection);
execution.execute();
System.out.println(execution);
}
@Test
public void testLdapSearch() throws NamingException{
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://10.66.218.46:389");
env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=example,dc=com");
env.put(Context.SECURITY_CREDENTIALS, "redhat");
DirContext ctx = new InitialLdapContext(env, null);
Attributes attrs = ctx.getAttributes("ou=People,dc=example,dc=com");
Enumeration en = attrs.getAll();
while(en.hasMoreElements()){
Attribute attr = (Attribute) en.nextElement();
printAttribute(attr);
}
}
private void printAttribute(Attribute attr) throws NamingException {
System.out.println(attr);
Enumeration en = attr.getAll();
while(en.hasMoreElements()){
// Attribute subattr = (Attribute) en.nextElement();
// printAttribute(subattr);
System.out.println(en.nextElement());
}
}
@Test
public void testJNDIbasic() throws NamingException {
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://10.66.218.46:389");
env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=example,dc=com");
env.put(Context.SECURITY_CREDENTIALS, "redhat");
DirContext ctx = new InitialLdapContext(env, null);
Attributes attrs = ctx.getAttributes("uid=kylin,ou=People,dc=example,dc=com");
System.out.println(attrs.get("sn"));
}
@Test
public void testInitialization() throws Exception {
LDAPManagedConnectionFactory config = new LDAPManagedConnectionFactory();
config.setLdapUrl("ldap://10.66.218.46:389");
config.setLdapAdminUserDN("cn=Manager,dc=example,dc=com");
config.setLdapAdminUserPassword("redhat");
config.setLdapContextFactory("com.sun.jndi.ldap.LdapCtxFactory");
LDAPConnectionImpl conn = new LDAPConnectionImpl(config);
}
public void test() throws Exception {
server = new EmbeddedServer();
LDAPExecutionFactory executionFactory = new LDAPExecutionFactory();
executionFactory.start();
server.addTranslator("translator-ldap", executionFactory);
LDAPManagedConnectionFactory managedconnectionFactory = new LDAPManagedConnectionFactory();
managedconnectionFactory.setLdapUrl("ldap://10.66.218.46:389");
managedconnectionFactory.setLdapAdminUserDN("cn=Manager,dc=example,dc=com");
managedconnectionFactory.setLdapAdminUserPassword("redhat");
server.addConnectionFactory("java:/ldapDS", managedconnectionFactory.createConnectionFactory());
server.start(new EmbeddedConfiguration());
server.deployVDB(new FileInputStream(new File("src/vdb/ldap-vdb.xml")));
conn = server.getDriver().connect("jdbc:teiid:ldapVDB", null);
JDBCUtil.executeQuery(conn, "SELECT * FROM HR_Group");
JDBCUtil.close(conn);
}
public static void main(String[] args) throws Exception {
new TestLDAPDataSource().test();
}
}