Ich möchte die Spring Environment
Schnittstelle implementieren, um meine Klasse zu testen, aber ich kann die Schnittstellenimplementierung nirgendwo finden und weiß nicht, welche Werte sie zurückgeben sollten oder wohin schnappt sie.Implementieren von Spring Environment Interface zum Testen
Ich schreibe Tests mit Scala Tests und habe in das Problem der Implementierung der Environment
Schnittstelle, die im Frühjahr weitergegeben wird, geraten. Allerdings erhalte ich eine Fehlermeldung, dass die Werte, die ich für die implementierten Methoden bin Rückkehr sind nicht gültig
An exception or error caused a run to abort: Invalid name: conductor.ldap.baseDn; nested exception is javax.naming.InvalidNameException: Invalid name: conductor.ldap.baseDn
org.springframework.ldap.InvalidNameException: Invalid name: conductor.ldap.baseDn; nested exception is javax.naming.InvalidNameException: Invalid name: conductor.ldap.baseDn
at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:136)
at org.springframework.ldap.support.LdapUtils.newLdapName(LdapUtils.java:416)
at org.springframework.ldap.support.LdapNameBuilder.add(LdapNameBuilder.java:121)
at com.ojolabs.conductor.engine.services.GluuIdmIdentityService.<init>(GluuIdmIdentityService.scala:28)
at GluuIdmIdentityServiceTest.<init>(GluuIdmIdentityServiceTest.scala:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
Ich weiß, dass dies geschieht, weil ich falsche Werte bin zurückkehren, aber ich habe nicht gewesen in der Lage, eine Dokumentation zu finden, die zeigt, welcher Wert voraussichtlich zurückgegeben wird.
ist die Klasse I
@Component
class GluuIdmIdentityService @Autowired() (ldapTemplate: LdapTemplate, env: Environment) extends IdmIdentityServiceImpl with StrictLogging {
private val baseDn = LdapNameBuilder.newInstance().add(env.getRequiredProperty("conductor.ldap.baseDn")).build()
private val userBaseDn = LdapNameBuilder.newInstance(baseDn).add(env.getRequiredProperty("conductor.ldap.userBaseDn")).build()
private val groupBaseDn = LdapNameBuilder.newInstance(baseDn).add(env.getRequiredProperty("conductor.ldap.groupBaseDn")).build()
private val userByIdCache: LoadingCache[String, Option[LdapUser]] = {
CacheBuilder.
newBuilder().
maximumSize(500).
expireAfterWrite(5, TimeUnit.MINUTES).
build(new CacheLoader[String, Option[LdapUser]] {
override def load(key: String): Option[LdapUser] = getUser(key)
})
}
private def getUser(id: String): Option[LdapUser] = {
val query = LdapQueryBuilder.query().base(userBaseDn).where("uid").is(id)
val users = try {
ldapTemplate.search(query, new AbstractContextMapper[LdapUser] {
override def doMapFromContext(ctx: DirContextOperations): LdapUser = {
val fullUserDn = LdapNameBuilder.newInstance(userBaseDn).add("inum", ctx.getStringAttribute("inum")).build()
val groupQuery = LdapQueryBuilder.query().base(groupBaseDn).where("member").is(fullUserDn.toString)
val groups: Seq[LdapGroup] = try {
ldapTemplate.search(groupQuery, new AbstractContextMapper[LdapGroup] {
override def doMapFromContext(groupCtx: DirContextOperations): LdapGroup = {
LdapGroup(
LdapNameBuilder.newInstance(ctx.getDn).build(),
Option(groupCtx.getStringAttribute("displayName")).getOrElse(""),
Option(groupCtx.getStringAttribute("description")).getOrElse(""),
Option(groupCtx.getStringAttribute("gluuGroupType"))
)
}
}).asScala
} catch {
case e: NamingException =>
throw new FlowableException(s"Could not find groups for user $id", e)
}
LdapUser(
LdapNameBuilder.newInstance(ctx.getDn).build(),
ctx.getStringAttribute("uid"),
Option(ctx.getStringAttribute("givenName")),
Option(ctx.getStringAttribute("sn")),
Option(ctx.getStringAttribute("mail")),
Option(ctx.getStringAttribute("displayName")),
groups
)
}
}).asScala
} catch {
case e: NamingException =>
throw new FlowableException(s"Could not find user with id $id", e)
}
if(users.size > 1) {
throw new RuntimeException(s"More than one user returned for UID $id")
} else {
users.headOption
}
}
override def createUserQuery(): UserQuery = new CachedUserQuery(userByIdCache)
override def createGroupQuery(): GroupQuery = new CachedGroupQuery(userByIdCache)
override def checkPassword(userId: String, password: String): Boolean = {
//TODO: Ldap actually does support auth, build this in at some point
throw new FlowableException("Gluu identity provider does not currently support authentication.")
}
override def newUser(userId: String): User ={
throw new FlowableException("LDAP identity service doesn't support creating a new user")
}
override def saveUser(user: User): Unit = {
throw new FlowableException("LDAP identity service doesn't support saving an user")
}
override def createNativeUserQuery(): NativeUserQuery = {
throw new FlowableException("LDAP identity service doesn't support native querying")
}
override def deleteUser(userId: String): Unit = {
throw new FlowableException("LDAP identity service doesn't support deleting an user")
}
override def newGroup(groupId: String): Group = {
throw new FlowableException("LDAP identity service doesn't support creating a new group")
}
override def createNativeGroupQuery(): NativeGroupQuery = {
throw new FlowableException("LDAP identity service doesn't support native querying")
}
override def saveGroup(group: Group): Unit = {
throw new FlowableException("LDAP identity service doesn't support saving a group")
}
override def deleteGroup(groupId: String): Unit = {
throw new FlowableException("LDAP identity service doesn't support deleting a group")
}
Hier ist mein Test
class GluuIdmIdentityServiceTest extends FlatSpec with Matchers {
val env: Environment = new Environment {
override def getDefaultProfiles = Array("default")
override def getActiveProfiles = Array("default")
override def acceptsProfiles(profiles: String*): Boolean = true
override def getRequiredProperty(key: String): String = key
override def getRequiredProperty[T](key: String, targetType: Class[T]) = targetType.cast(AnyRef)
override def getProperty(key: String) = key
override def getProperty(key: String, defaultValue: String) = key
override def getProperty[T](key: String, targetType: Class[T]) = targetType.cast(AnyRef)
override def getProperty[T](key: String, targetType: Class[T], defaultValue: T) = targetType.cast(AnyRef)
override def resolveRequiredPlaceholders(text: String): String = text
override def resolvePlaceholders(text: String): String = text
override def containsProperty(key: String) = true
}
val source = new LdapContextSource()
source.setUrl(env.getRequiredProperty("conductor.ldap.serverUrl"))
source.setUserDn(env.getRequiredProperty("conductor.ldap.bindDn"))
source.setPassword(env.getRequiredProperty("conductor.ldap.bindPassword"))
//source.setBase(env.getRequiredProperty("conductor.ldap.baseDn"))
source.setPooled(true)
val ldapTemplate: LdapTemplate = new LdapTemplate(source)
val idm: GluuIdmIdentityService = new GluuIdmIdentityService(ldapTemplate, env)
"Create Group Query" should "return group query" in {
assert(idm.createGroupQuery().isInstanceOf[GroupQuery])
}
}