Я пытаюсь установить встроенный ldap для модульного теста с помощью Spring Ldap. Но мне нужно использовать настраиваемую схему для пользовательских определений objectClasses/attributes. Как я могу настроить его с помощью теста Spring Ldap (LdapTestUtils?)Тестирование модуля Spring Ldap с использованием пользовательской схемы
На самом деле, если я запускаю тест, она не справится о том, что мой пользовательский объектный «грецкий» не определен в схеме со следующим сообщением:
org.springframework.ldap.UncategorizedLdapException: Failed to populate LDIF; nested exception is javax.naming.directory.NoSuchAttributeException: [LDAP: error code 16 - NO_SUCH_ATTRIBUTE: failed for Add Request :
...
: OID for name 'myOb' was not found within the OID registry]; remaining name 'cn=123456, ou=MyUser, o=company.com'
Если я прокомментирую objectClass: myOb
из ldif, сбой теста с нулевым значением (атрибут не читается).
Вот мой тестовый класс:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = LdapConfiguration.class, loader = AnnotationConfigContextLoader.class)
public class LdapTest {
// Ldap port
private static final int LDAP_PORT = 18880;
// Base DN for test data
private static final LdapName baseName = LdapUtils.newLdapName("o=company.com");
@Autowired
LdapTemplate ldapTemplate;
@BeforeClass
public static void setupBeforeClass() {
LdapTestUtils.startEmbeddedServer(LDAP_PORT, baseName.toString(), "ldaptest");
// How to load schema definition ?
}
@AfterClass
public static void teardownAfterClass() throws Exception {
LdapTestUtils.shutdownEmbeddedServer();
}
@Before
public void setup() throws Exception {
LdapTestUtils.cleanAndSetup(ldapTemplate.getContextSource(), baseName, new ClassPathResource("ldap/test-users.ldif"));
}
@Test
public void testSearchLdap() throws Exception {
String myObId = ldapTemplate.lookup(LdapNameBuilder.newInstance("ou=MyUser, o=company.com").add("cn", "123456").build(), new AbstractContextMapper<String>() {
@Override
protected String doMapFromContext(DirContextOperations ctx) {
return ctx.getStringAttribute("myObId"); // custom type
}
});
Assert.assertNotNull(myObId); // myObId is null if I comment `objectClass: myOb` !
}
}
и мой LDIF:
dn: ou=MyUser, o=company.com
ou: User
description: MyUser
objectClass: top
objectClass: organizationalunit
dn: cn=123456, ou=MyUser, o=company.com
objectClass: top
objectClass: person
objectClass: myOb
cn: 123456
sn: 823456
myObId: TEST
Привет, я смотрю на такая же проблема. Удалось ли вам это решить или вы использовали обходное решение, предложенное ниже, в конце? – Jan
Да, я использую серверное решение 'InMemoryDirectoryServer', предложенное ниже – Aure77
Хорошо, спасибо, похоже, что мне нужно будет сделать то же самое ... – Jan