Skip to content

Commit

Permalink
Added embedded LDAP-server for testing
Browse files Browse the repository at this point in the history
- Using Apache Directory Server
  • Loading branch information
OliviaYtterbrink authored and henriknyman committed Jun 27, 2016
1 parent aea434e commit e4df4f0
Show file tree
Hide file tree
Showing 3 changed files with 174 additions and 4 deletions.
6 changes: 6 additions & 0 deletions enterprise/security/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,12 @@
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-integ</artifactId>
<version>2.0.0-M21</version>
<scope>test</scope>
</dependency>
<!-- http://mvnrepository.com/artifact/com.googlecode.thread-weaver/threadweaver -->
<dependency>
<groupId>com.googlecode.thread-weaver</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,20 @@
*/
package org.neo4j.server.security.enterprise.auth.integration.bolt;

import org.apache.directory.server.annotations.CreateLdapServer;
import org.apache.directory.server.annotations.CreateTransport;
import org.apache.directory.server.core.annotations.ApplyLdifFiles;
import org.apache.directory.server.core.annotations.ContextEntry;
import org.apache.directory.server.core.annotations.CreateDS;
import org.apache.directory.server.core.annotations.CreatePartition;
import org.apache.directory.server.core.annotations.LoadSchema;
import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
import org.apache.directory.server.core.integ.FrameworkRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.Map;
import java.util.function.Consumer;
Expand All @@ -47,7 +57,22 @@
import static org.neo4j.bolt.v1.transport.integration.TransportTestUtil.eventuallyRecieves;
import static org.neo4j.helpers.collection.MapUtil.map;

public class LdapAuthenticationIT
@RunWith( FrameworkRunner.class )
@CreateDS(
name = "Test",
partitions = {@CreatePartition(
name = "example",
suffix = "dc=example,dc=com", contextEntry = @ContextEntry(
entryLdif = "dn: dc=example,dc=com\n" +
"dc: example\n" +
"o: example\n" +
"objectClass: top\n" +
"objectClass: dcObject\n" +
"objectClass: organization\n\n" ) )}, loadedSchemas = {
@LoadSchema( name = "nis", enabled = true ),
@LoadSchema( name = "posix", enabled = false )} )
@CreateLdapServer( transports = {@CreateTransport( protocol = "LDAP", port = 10389, address = "0.0.0.0" )} )
public class LdapAuthenticationIT extends AbstractLdapTestUnit
{
@Rule
public Neo4jWithSocket server = new Neo4jWithSocket( getTestGraphDatabaseFactory(), getSettingsFunction() );
Expand All @@ -65,10 +90,10 @@ protected Consumer<Map<Setting<?>, String>> getSettingsFunction()
settings.put( SecuritySettings.external_auth_enabled, "true" );
settings.put( SecuritySettings.ldap_auth_enabled, "true" );
// TODO: This is the configuration for an ldap test server
settings.put( SecuritySettings.ldap_server, "localhost:9000" );
settings.put( SecuritySettings.ldap_server, "0.0.0.0:10389" );
settings.put( SecuritySettings.ldap_user_dn_template, "cn={0},ou=users,dc=example,dc=com" );
//settings.put( SecuritySettings.ldap_system_username, "xcn=read-only-admin,dc=example,dc=com" );
//settings.put( SecuritySettings.ldap_system_password, "password" );
//settings.put( SecuritySettings.ldap_system_username, "uid=admin,ou=system" );
//settings.put( SecuritySettings.ldap_system_password, "secret" );
};
}

Expand All @@ -79,6 +104,7 @@ protected Consumer<Map<Setting<?>, String>> getSettingsFunction()
protected Connection client;

@Test
@ApplyLdifFiles( "ldap_test_data.ldif" )
public void shouldBeAbleToLoginWithLdap() throws Throwable
{
// When
Expand Down
138 changes: 138 additions & 0 deletions enterprise/security/src/test/resources/ldap_test_data.ldif
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# LDIF Export for dc=example,dc=com
# Server: Neo4j Test LDAP Server (10.0.2.15)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 14
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on June 20, 2016 8:43 am
# Version: 1.2.2

version: 1

# Entry 1: dc=example,dc=com
#dn: dc=example,dc=com
#dc: example
#o: example
#objectclass: top
#objectclass: dcObject
#objectclass: organization

# Entry 2: cn=admin,dc=example,dc=com
dn: cn=admin,dc=example,dc=com
cn: admin
description: LDAP administrator
objectclass: simpleSecurityObject
objectclass: organizationalRole
userpassword: {SSHA}szBKVyl4liWB/3FhbbpuYk1bf6dclbyD

# Entry 3: ou=groups,dc=example,dc=com
dn: ou=groups,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: groups

# Entry 4: cn=admin,ou=groups,dc=example,dc=com
dn: cn=admin,ou=groups,dc=example,dc=com
cn: admin
gidnumber: 503
objectclass: posixGroup
objectclass: top

# Entry 5: cn=agent,ou=groups,dc=example,dc=com
dn: cn=agent,ou=groups,dc=example,dc=com
cn: agent
gidnumber: 504
objectclass: posixGroup
objectclass: top

# Entry 6: cn=architect,ou=groups,dc=example,dc=com
dn: cn=architect,ou=groups,dc=example,dc=com
cn: architect
gidnumber: 502
objectclass: posixGroup
objectclass: top

# Entry 7: cn=publisher,ou=groups,dc=example,dc=com
dn: cn=publisher,ou=groups,dc=example,dc=com
cn: publisher
gidnumber: 501
objectclass: posixGroup
objectclass: top

# Entry 8: cn=reader,ou=groups,dc=example,dc=com
dn: cn=reader,ou=groups,dc=example,dc=com
cn: reader
gidnumber: 500
objectclass: posixGroup
objectclass: top

# Entry 9: ou=users,dc=example,dc=com
dn: ou=users,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: users

# Entry 10: cn=morpheus,ou=users,dc=example,dc=com
dn: cn=morpheus,ou=users,dc=example,dc=com
cn: morpheus
gidnumber: 503
homedirectory: /home/users/morpheus
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: morpheus
uid: morpheus
uidnumber: 1003
userpassword: {MD5}6ZoYxCjLONXyYIU2eJIuAw==

# Entry 11: cn=neo,ou=users,dc=example,dc=com
dn: cn=neo,ou=users,dc=example,dc=com
cn: neo
gidnumber: 500
homedirectory: /home/users/neo
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: neo
uid: neo
uidnumber: 1000
userpassword: {MD5}6ZoYxCjLONXyYIU2eJIuAw==

# Entry 12: cn=smith,ou=users,dc=example,dc=com
dn: cn=smith,ou=users,dc=example,dc=com
cn: smith
gidnumber: 504
homedirectory: /home/users/smith
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: smith
uid: smith
uidnumber: 1004
userpassword: {MD5}6ZoYxCjLONXyYIU2eJIuAw==

# Entry 13: cn=tank,ou=users,dc=example,dc=com
dn: cn=tank,ou=users,dc=example,dc=com
cn: tank
gidnumber: 501
homedirectory: /home/users/tank
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: tank
uid: tank
uidnumber: 1001
userpassword: {MD5}6ZoYxCjLONXyYIU2eJIuAw==

# Entry 14: cn=trinity,ou=users,dc=example,dc=com
dn: cn=trinity,ou=users,dc=example,dc=com
cn: trinity
gidnumber: 502
homedirectory: /home/users/trinity
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: trinity
uid: trinity
uidnumber: 1002
userpassword: {MD5}6ZoYxCjLONXyYIU2eJIuAw==

0 comments on commit e4df4f0

Please sign in to comment.