Testes de integração com spring-security e ldap

Servidor ldap integrado à mola em testes unitários é semelhante, no entanto nenhuma resposta foi dada que suites me.

Eu posso executar meus testes de integração com a mola e o servidor ldap incorporado de segurança de mola sem qualquer problema. No entanto, ainda não encontrei uma maneira de limpar o servidor ldap incorporado e carregar o ldif novamente para fornecer um ambiente de teste comum.

O LdapTestUtils do spring-ldap fornece um método cleanAndSetup (). No entanto, isso não funciona com a versão sugerida (1.5.5) do apache-ds, já que o LdifFileLoader agora requerCoreSession ao invés deDirContext fornecido por LdapTestUtils. Isso faz com que um

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

Eu só quero um método que limpe o servidor ldap incorporado e preencha-o com o arquivo ldif novamente (como feito na inicialização). Alguém tem uma ideia sobre isso?

Versão: primavera 3.1, spring-ldap 1.3, spring-security 3.1, apache-ds 1.5.5

Solução (graças a 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
        }
    }
}

questionAnswers(1)

yourAnswerToTheQuestion