首页 > 解决方案 > ldif 将“用户”类添加到 org.zapodot.junit.ldap.EmbeddedLdapRule

问题描述

尝试启动类似 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')
            //...
}

架构.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

进口.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”,因为它违反了提供的架构:该条目包含架构中未定义的对象类用户。

我究竟做错了什么?

谢谢!

标签: testingactive-directoryldapspockunboundid-ldap-sdk

解决方案


这似乎不是特定于 Spock 的问题,我猜您在这里遇到了 LDAP 语法问题。我对 LDAP 一无所知,我只是好奇并使用了您使用的工具(embedded-ldap-junit)提供的这个 LDIF 文件,以便向您展示如果您在您的文件中使用正确的 LDAP 定义,它如何与 Spock 完美配合资源文件:

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

推荐阅读