2017-01-31 38 views
0

为了测试我的类,我想实现Spring Environment接口,但是我无法在任何地方找到接口实现,也不知道应该返回什么值,抓住他们。实现Spring环境接口进行测试

我正在使用Scala测试编写测试,并遇到了必须实现在Spring中传递的Environment接口的问题。不过,我得到一个错误,说我回来了实现的方法的价值,是无效的

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) 

我知道这种情况正在发生,因为我返回不正确的值,但我一直没能够找到显示预期返回的值的文档。

这里是我想要测试

@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") 
    } 

类下面是我的测试

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]) 

    } 
} 

回答