Попытка запустить AD-подобный сервер для проверки запросов ldap для «пользовательских» сущностей.
Тест:
import org.zapodot.junit.ldap.EmbeddedLdapRule
import org.zapodot.junit.ldap.EmbeddedLdapRuleBuilder
class FooSpec extends Specification {
@Rule
public EmbeddedLdapRule embeddedLdapRule = EmbeddedLdapRuleBuilder
.newInstance()
.withSchema('schema.ldif')
.importingLdifs('import.ldif')
//...
}
schema.ldif:
dn: cn=user,cn=schema,cn=configuration,dc=example,dc=com
changetype: add
objectclass: classSchema
governsId: 1.2.840.113556.1.5.9
objectClassCategory: 1
subClassOf: organizationalPerson
lDAPDisplayName: user
description: a user
import.ldif:
dn: CN=alice,DC=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: user
cn: alice
sn: alice
Получающий:
Невозможно добавить запись «CN = alice, DC = example, dc = com», поскольку она нарушает предоставленную схему: запись содержит пользователя класса объекта, который не определен в схеме.
Что я делаю неправильно?
Спасибо!





Это не похоже на вопрос Спока, я думаю, у вас здесь проблема с синтаксисом LDAP. Я понятия не имею о LDAP, мне просто стало любопытно, и я использовал этот файл LDIF, предоставленный используемым вами инструментом (встроенный-ldap-junit), чтобы показать вам, как он прекрасно работает со Spock, если вы просто используете правильные определения LDAP в своем файле ресурсов:
package de.scrum_master.stackoverflow
import com.unboundid.ldap.sdk.SearchScope
import org.junit.Rule
import org.zapodot.junit.ldap.EmbeddedLdapRule
import org.zapodot.junit.ldap.EmbeddedLdapRuleBuilder
import spock.lang.Specification
import spock.lang.Unroll
class EmbeddedLDAPServerTest extends Specification {
static final String BASE_DN = "dc=zapodot,dc=org"
@Rule
public EmbeddedLdapRule embeddedLdapRule = EmbeddedLdapRuleBuilder
.newInstance()
.usingDomainDsn(BASE_DN)
.importingLdifs('example.ldif')
.build()
@Unroll
def "Search for #searchFor"() {
given:
def connection = embeddedLdapRule.ldapConnection()
when:
def searchResult = connection.search(BASE_DN, SearchScope.SUB, "($searchFor)")
then:
searchResult.entryCount == entryCount
where:
searchFor | entryCount
"objectClass=person" | 1
"cn=Sondre Eikanger Kvalo" | 1
"ou=people" | 1
"ou=groups" | 1
"objectclass=organizationalUnit" | 2
"objectclass=top" | 4
}
}
Я знаю, что вам не понравился этот пример. Я просто хотел помочь вам отладить, поскольку теперь ясно, что проблема не в Споке, а в ваших данных LDIF. Ну или вы столкнулись с ошибкой в библиотеке LDAP, я не могу сказать наверняка, не зная о правилах синтаксиса или семантике языка. Я предполагаю, что ваши данные как-то неполны, в них отсутствует какое-то определение.
спасибо, @kriegaex, за пример. Однако я не собираюсь работать с образцом org.zapodot. Я специально хочу заполнить embeddedLdapRule, чтобы он возвращал объекты при запросе
(objectClass=user)