Интеграционные тесты с spring-security и ldap

Spring встроил ldap сервер в юнит-тесты похоже, однако ответа не было дано, что меня устраивает.

Я могу без проблем запускать свои интеграционные тесты с помощью Spring и встроенного ldap-сервера Spring-Security. Тем не менее, я неПока еще не найдется способ очистить встроенный ldap-сервер и снова загрузить ldif, чтобы обеспечить общую среду тестирования.

LdapTestUtils из spring-ldap предоставляет метод cleanAndSetup (). Однако это не работает с предложенной версией (1.5.5) apache-ds, так как LdifFileLoader теперь требуетCoreSession вместоDirContext предоставлено LdapTestUtils. Это вызывает

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

Мне нужен только метод, который очищает встроенный сервер ldap и снова заполняет его файлом ldif (как это делается при запуске). У кого-нибудь есть идеи по этому поводу?

Версия: spring 3.1, spring-ldap 1.3, spring-security 3.1, apache-ds 1.5.5

Решение (спасибо Люку Тейлору):

@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
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос