在单元测试中春嵌入式LDAP服务器是类似的,但是没有答案因为我的套房。
我可以用春,没有任何问题弹簧安全的嵌入式LDAP服务器运行我的集成测试。 但是,我还没有找到一种方法尚未明确嵌入式LDAP服务器,并再次加载LDIF提供了一个通用的测试环境。
弹簧LDAP的LdapTestUtils提供cleanAndSetup()方法。 然而,这并不与Apache-DS的建议版本(1.5.5)工作,因为LdifFileLoader,现在需要一个CoreSession而不是由LdapTestUtils提供的DirContext。 这导致
java.lang.NoSuchMethodError:
org.apache.directory.server.protocol.shared.store.LdifFileLoader.<init>(Ljavax/naming/directory/DirContext;Ljava/lang/String;)
我只想要清除嵌入式LDAP服务器,并再次与ldif文件来填充它(在启动时为已完成)的方法。 没有任何人有这方面的想法?
版本:3.1春天,春天LDAP 1.3,弹簧安全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
}
}
}