Integrationstests mit spring-security und ldap

Spring Embedded LDAP-Server in Unit-Tests Ähnlich ist es, allerdings wurde keine Antwort gegeben, die zu mir passt.

Ich kann meine Integrationstests problemlos mit spring und dem eingebetteten ldap-Server von spring-security durchführen. Ich habe jedoch noch keine Möglichkeit gefunden, den eingebetteten LDAP-Server zu löschen und die LDIF erneut zu laden, um eine gemeinsame Testumgebung bereitzustellen.

LdapTestUtils von spring-ldap bietet eine cleanAndSetup () -Methode. Dies funktioniert jedoch nicht mit der vorgeschlagenen Version (1.5.5) von apache-ds, da LdifFileLoader jetzt a benötigtCoreSession anstatt derDirContext bereitgestellt von LdapTestUtils. Dies verursacht a

java.lang.NoSuchMethodError:
org.apache.directory.server.protocol.shared.store.LdifFileLoader.<init>(Ljavax/naming/directory/DirContext;Ljava/lang/String;)

Ich möchte nur eine Methode, die den eingebetteten LDAP-Server löscht und ihn wieder mit der LDIF-Datei füllt (wie beim Start). Hat jemand eine Idee dazu?

Version: spring 3.1, spring-ldap 1.3, spring-security 3.1, apache-ds 1.5.5

Lösung (Dank an Luke Taylor):

@Inject
private ApplicationContext applicationContext;

@Before
public void reloadLdapDirectory() throws NamingException, IOException{
    ApacheDSContainer apacheDSContainer = (ApacheDSContainer) applicationContext.getBean(BeanIds.EMBEDDED_APACHE_DS);
    LdapTestUtils.clearSubContexts(contextSource, DistinguishedName.EMPTY_PATH);

    ClassPathResource classPathResource = new ClassPathResource("ldap.ldif");

    File tempFile = File.createTempFile("spring_ldap_test", ".ldif");
    try {
        InputStream inputStream = classPathResource.getInputStream();
        IOUtils.copy(inputStream, new FileOutputStream(tempFile));
        LdifFileLoader fileLoader = new LdifFileLoader(apacheDSContainer.getService().getAdminSession(), tempFile.getAbsolutePath());
        fileLoader.execute();
    }
    finally {
        try {
            tempFile.delete();
        }
        catch (Exception e) {
            // Ignore this
        }
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage