keycloak-uncached

Changes

audit/jpa/pom.xml 17(+0 -17)

audit/jpa/src/test/java/org/keycloak/audit/jpa/JpaAuditProviderTest.java 17(+0 -17)

audit/mongo/pom.xml 91(+0 -91)

audit/mongo/src/test/java/org/keycloak/audit/mongo/MongoAuditProviderTest.java 17(+0 -17)

audit/pom.xml 1(+0 -1)

audit/tests/pom.xml 53(+0 -53)

audit/tests/src/main/java/org/keycloak/audit/tests/AbstractAuditProviderTest.java 139(+0 -139)

model/jpa/pom.xml 51(+0 -51)

model/mongo/pom.xml 129(+0 -129)

model/pom.xml 7(+0 -7)

model/tests/pom.xml 208(+0 -208)

model/tests/src/test/resources/ldap/ldap-connection.properties 9(+0 -9)

model/tests/src/test/resources/ldap/users.ldif 30(+0 -30)

Details

audit/jpa/pom.xml 17(+0 -17)

diff --git a/audit/jpa/pom.xml b/audit/jpa/pom.xml
index 08df5b9..dd725b8 100755
--- a/audit/jpa/pom.xml
+++ b/audit/jpa/pom.xml
@@ -38,12 +38,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-audit-tests</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>org.hibernate.javax.persistence</groupId>
             <artifactId>hibernate-jpa-2.0-api</artifactId>
             <scope>provided</scope>
@@ -64,16 +58,5 @@
             <artifactId>jackson-core-asl</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <scope>test</scope>
-        </dependency>
    </dependencies>
-
 </project>

audit/mongo/pom.xml 91(+0 -91)

diff --git a/audit/mongo/pom.xml b/audit/mongo/pom.xml
index 3f40488..e928784 100755
--- a/audit/mongo/pom.xml
+++ b/audit/mongo/pom.xml
@@ -38,12 +38,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-audit-tests</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.jboss.logging</groupId>
             <artifactId>jboss-logging</artifactId>
             <scope>provided</scope>
@@ -53,90 +47,5 @@
             <artifactId>mongo-java-driver</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
    </dependencies>
-
-    <properties>
-        <keycloak.audit.mongo.host>localhost</keycloak.audit.mongo.host>
-        <keycloak.audit.mongo.port>27018</keycloak.audit.mongo.port>
-        <keycloak.audit.mongo.db>keycloak</keycloak.audit.mongo.db>
-        <keycloak.audit.mongo.clearOnStartup>true</keycloak.audit.mongo.clearOnStartup>
-        <keycloak.audit.mongo.bindIp>127.0.0.1</keycloak.audit.mongo.bindIp>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.6</source>
-                    <target>1.6</target>
-                </configuration>
-            </plugin>
-
-            <!-- Postpone tests to "integration-test" phase, so that we can bootstrap embedded mongo on 27018 before running tests -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>test</id>
-                        <phase>integration-test</phase>
-                        <goals>
-                            <goal>test</goal>
-                        </goals>
-                        <configuration>
-                            <systemPropertyVariables>
-                                <keycloak.audit.mongo.host>${keycloak.audit.mongo.host}</keycloak.audit.mongo.host>
-                                <keycloak.audit.mongo.port>${keycloak.audit.mongo.port}</keycloak.audit.mongo.port>
-                                <keycloak.audit.mongo.db>${keycloak.audit.mongo.db}</keycloak.audit.mongo.db>
-                                <keycloak.audit.mongo.clearOnStartup>${keycloak.audit.mongo.clearOnStartup}</keycloak.audit.mongo.clearOnStartup>
-                                <keycloak.audit.mongo.bindIp>${keycloak.model.mongo.bindIp}</keycloak.audit.mongo.bindIp>
-                            </systemPropertyVariables>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>default-test</id>
-                        <configuration>
-                            <skip>true</skip>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <!-- Embedded mongo -->
-            <plugin>
-                <groupId>com.github.joelittlejohn.embedmongo</groupId>
-                <artifactId>embedmongo-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>start-mongodb</id>
-                        <phase>pre-integration-test</phase>
-                        <goals>
-                            <goal>start</goal>
-                        </goals>
-                        <configuration>
-                            <port>${keycloak.audit.mongo.port}</port>
-                            <logging>file</logging>
-                            <logFile>${project.build.directory}/mongodb.log</logFile>
-                            <bindIp>${keycloak.audit.mongo.bindIp}</bindIp>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>stop-mongodb</id>
-                        <phase>post-integration-test</phase>
-                        <goals>
-                            <goal>stop</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-        </plugins>
-    </build>
 </project>

audit/pom.xml 1(+0 -1)

diff --git a/audit/pom.xml b/audit/pom.xml
index b6ae9e3..0f210d3 100755
--- a/audit/pom.xml
+++ b/audit/pom.xml
@@ -21,6 +21,5 @@
         <module>jpa</module>
         <module>jboss-logging</module>
         <module>mongo</module>
-        <module>tests</module>
     </modules>
 </project>
diff --git a/connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java b/connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
index 2b40f80..cea49ff 100644
--- a/connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
+++ b/connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
@@ -31,7 +31,8 @@ public class DefaultMongoConnectionFactoryProvider implements MongoConnectionPro
             "org.keycloak.models.mongo.keycloak.entities.MongoApplicationEntity",
             "org.keycloak.models.mongo.keycloak.entities.MongoOAuthClientEntity",
             "org.keycloak.models.sessions.mongo.entities.MongoUsernameLoginFailureEntity",
-            "org.keycloak.models.sessions.mongo.entities.MongoUserSessionEntity"
+            "org.keycloak.models.sessions.mongo.entities.MongoUserSessionEntity",
+            "org.keycloak.models.entities.FederationProviderEntity"
     };
 
     private static final Logger logger = Logger.getLogger(DefaultMongoConnectionFactoryProvider.class);
diff --git a/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java b/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java
index 41dc75c..513a7fc 100755
--- a/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java
+++ b/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java
@@ -1,6 +1,7 @@
 package org.keycloak.connections.mongo.impl.types;
 
 import com.mongodb.BasicDBObject;
+import org.keycloak.connections.mongo.api.MongoIdentifiableEntity;
 import org.keycloak.connections.mongo.api.types.Mapper;
 import org.keycloak.connections.mongo.api.types.MapperContext;
 import org.keycloak.connections.mongo.api.types.MapperRegistry;
@@ -38,7 +39,7 @@ public class MongoEntityMapper<T> implements Mapper<T, BasicDBObject> {
             String propName = property.getName();
 
             // Ignore "id" property
-            if (!"id".equals(propName)) {
+            if (!"id".equals(propName) || !(applicationObject instanceof MongoIdentifiableEntity)) {
                 Object propValue = property.getValue(applicationObject);
                 if (propValue != null) {
                     Object dbValue = propValue == null ? null : mapperRegistry.convertApplicationObjectToDBObject(propValue, Object.class);
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java
index 57f3f90..dfbd165 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java
@@ -243,14 +243,18 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
     public RoleModel getRoleById(String id, RealmModel realm) {
         if (!cache.isEnabled()) return getDelegate().getRoleById(id, realm);
         CachedRole cached = cache.getRole(id);
+        if (cached != null && !cached.getRealm().equals(realm.getId())) {
+            cached = null;
+        }
+
         if (cached == null) {
             RoleModel model = getDelegate().getRoleById(id, realm);
             if (model == null) return null;
             if (roleInvalidations.contains(id)) return model;
             if (model.getContainer() instanceof ApplicationModel) {
-                cached = new CachedApplicationRole(((ApplicationModel) model.getContainer()).getId(), model);
+                cached = new CachedApplicationRole(((ApplicationModel) model.getContainer()).getId(), model, realm);
             } else {
-                cached = new CachedRealmRole(model);
+                cached = new CachedRealmRole(model, realm);
             }
             cache.addCachedRole(cached);
 
@@ -268,6 +272,10 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
     public ApplicationModel getApplicationById(String id, RealmModel realm) {
         if (!cache.isEnabled()) return getDelegate().getApplicationById(id, realm);
         CachedApplication cached = cache.getApplication(id);
+        if (cached != null && !cached.getRealm().equals(realm.getId())) {
+            cached = null;
+        }
+
         if (cached == null) {
             ApplicationModel model = getDelegate().getApplicationById(id, realm);
             if (model == null) return null;
@@ -288,6 +296,10 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
     public OAuthClientModel getOAuthClientById(String id, RealmModel realm) {
         if (!cache.isEnabled()) return getDelegate().getOAuthClientById(id, realm);
         CachedOAuthClient cached = cache.getOAuthClient(id);
+        if (cached != null && !cached.getRealm().equals(realm.getId())) {
+            cached = null;
+        }
+
         if (cached == null) {
             OAuthClientModel model = getDelegate().getOAuthClientById(id, realm);
             if (model == null) return null;
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java
index 3ccacbf..db0e1c0 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java
@@ -32,7 +32,7 @@ public class CachedApplication extends CachedClient {
         bearerOnly = model.isBearerOnly();
         for (RoleModel role : model.getRoles()) {
             roles.put(role.getName(), role.getId());
-            cache.addCachedRole(new CachedApplicationRole(id, role));
+            cache.addCachedRole(new CachedApplicationRole(id, role, realm));
         }
 
 
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java
index 269fba9..da0451c 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java
@@ -1,5 +1,6 @@
 package org.keycloak.models.cache.entities;
 
+import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleModel;
 
 /**
@@ -9,8 +10,8 @@ import org.keycloak.models.RoleModel;
 public class CachedApplicationRole extends CachedRole {
     private final String appId;
 
-    public CachedApplicationRole(String appId, RoleModel model) {
-        super(model);
+    public CachedApplicationRole(String appId, RoleModel model, RealmModel realm) {
+        super(model, realm);
         this.appId = appId;
 
     }
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java
index feabb45..8e4b008 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java
@@ -16,6 +16,7 @@ import java.util.Set;
 public class CachedClient {
     protected String id;
     protected String name;
+    protected String realm;
     protected long allowedClaimsMask;
     protected Set<String> redirectUris = new HashSet<String>();
     protected boolean enabled;
@@ -30,6 +31,7 @@ public class CachedClient {
         id = model.getId();
         secret = model.getSecret();
         name = model.getClientId();
+        this.realm = realm.getId();
         enabled = model.isEnabled();
         notBefore = model.getNotBefore();
         directGrantsOnly = model.isDirectGrantsOnly();
@@ -51,6 +53,10 @@ public class CachedClient {
         return name;
     }
 
+    public String getRealm() {
+        return realm;
+    }
+
     public long getAllowedClaimsMask() {
         return allowedClaimsMask;
     }
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
index 507cef4..cfd6018 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
@@ -136,7 +136,7 @@ public class CachedRealm {
 
         for (RoleModel role : model.getRoles()) {
             realmRoles.put(role.getName(), role.getId());
-            CachedRole cachedRole = new CachedRealmRole(role);
+            CachedRole cachedRole = new CachedRealmRole(role, model);
             cache.addCachedRole(cachedRole);
         }
 
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java
index f1f34dc..e34478e 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java
@@ -1,5 +1,6 @@
 package org.keycloak.models.cache.entities;
 
+import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleModel;
 
 /**
@@ -9,8 +10,8 @@ import org.keycloak.models.RoleModel;
 public class CachedRealmRole extends CachedRole {
 
 
-    public CachedRealmRole(RoleModel model) {
-        super(model);
+    public CachedRealmRole(RoleModel model, RealmModel realm) {
+        super(model, realm);
 
     }
 
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java
index ed451e2..d52d0ff 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java
@@ -1,5 +1,6 @@
 package org.keycloak.models.cache.entities;
 
+import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleModel;
 
 import java.util.HashSet;
@@ -12,15 +13,17 @@ import java.util.Set;
 public class CachedRole {
     final protected String id;
     final protected String name;
+    final protected String realm;
     final protected String description;
     final protected boolean composite;
     final protected Set<String> composites = new HashSet<String>();
 
-    public CachedRole(RoleModel model) {
+    public CachedRole(RoleModel model, RealmModel realm) {
         composite = model.isComposite();
         description = model.getDescription();
         id = model.getId();
         name = model.getName();
+        this.realm = realm.getId();
         if (composite) {
             for (RoleModel child : model.getComposites()) {
                 composites.add(child.getId());
@@ -37,6 +40,10 @@ public class CachedRole {
         return name;
     }
 
+    public String getRealm() {
+        return realm;
+    }
+
     public String getDescription() {
         return description;
     }
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
index b4fa0c8..deed00b 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
@@ -1,5 +1,6 @@
 package org.keycloak.models.cache;
 
+import org.keycloak.Config;
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.AuthenticationProviderModel;
 import org.keycloak.models.ClientModel;
@@ -726,8 +727,7 @@ public class RealmAdapter implements RealmModel {
 
     @Override
     public ApplicationModel getMasterAdminApp() {
-        if (updated != null) return updated.getMasterAdminApp();
-        return getApplicationById(cached.getMasterAdminApp());
+        return cacheSession.getRealm(Config.getAdminRealm()).getApplicationById(cached.getMasterAdminApp());
     }
 
     @Override

model/jpa/pom.xml 51(+0 -51)

diff --git a/model/jpa/pom.xml b/model/jpa/pom.xml
index 9a3e026..52c7db5 100755
--- a/model/jpa/pom.xml
+++ b/model/jpa/pom.xml
@@ -83,26 +83,6 @@
                 </exclusion>
             </exclusions>
         </dependency>
-
-        <!--<dependency>-->
-            <!--<groupId>org.keycloak</groupId>-->
-            <!--<artifactId>keycloak-model-tests</artifactId>-->
-            <!--<version>${project.version}</version>-->
-            <!--<scope>test</scope>-->
-        <!--</dependency>-->
-        <!--<dependency>-->
-            <!--<groupId>org.keycloak</groupId>-->
-            <!--<artifactId>keycloak-model-tests</artifactId>-->
-            <!--<version>${project.version}</version>-->
-            <!--<classifier>tests</classifier>-->
-            <!--<scope>test</scope>-->
-        <!--</dependency>-->
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <scope>test</scope>
-        </dependency>
-
     </dependencies>
     <build>
         <plugins>
@@ -114,37 +94,6 @@
                     <target>${maven.compiler.target}</target>
                 </configuration>
             </plugin>
-
-            <!-- Test jar used in export-import -->
-            <!--<plugin>-->
-                <!--<groupId>org.apache.maven.plugins</groupId>-->
-                <!--<artifactId>maven-jar-plugin</artifactId>-->
-                <!--<executions>-->
-                    <!--<execution>-->
-                        <!--<id>package-tests-jar</id>-->
-                        <!--<phase>package</phase>-->
-                        <!--<goals>-->
-                            <!--<goal>test-jar</goal>-->
-                        <!--</goals>-->
-                    <!--</execution>-->
-                <!--</executions>-->
-            <!--</plugin>-->
-
-            <!--<plugin>-->
-                <!--<groupId>org.apache.maven.plugins</groupId>-->
-                <!--<artifactId>maven-surefire-plugin</artifactId>-->
-                <!--<executions>-->
-                    <!--<execution>-->
-                        <!--<id>default-test</id>-->
-                        <!--<configuration>-->
-                            <!--<dependenciesToScan>-->
-                                <!--<dependency>org.keycloak:keycloak-model-tests</dependency>-->
-                            <!--</dependenciesToScan>-->
-                        <!--</configuration>-->
-                    <!--</execution>-->
-                <!--</executions>-->
-            <!--</plugin>-->
-
         </plugins>
     </build>
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserRequiredActionEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserRequiredActionEntity.java
index 2d3ddbd..d2161e9 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserRequiredActionEntity.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserRequiredActionEntity.java
@@ -20,7 +20,7 @@ import java.io.Serializable;
  * @version $Revision: 1 $
  */
 @NamedQueries({
-        @NamedQuery(name="deleteUserRequiredActionsByRealm", query="delete from UserRequiredActionEntity action where action.user IN (select u from UserEntity u where realm=:realm)")
+        @NamedQuery(name="deleteUserRequiredActionsByRealm", query="delete from UserRequiredActionEntity action where action.user IN (select u from UserEntity u where u.realmId=:realmId)")
 })
 @Entity
 @Table(name="USER_REQUIRED_ACTION")
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaUserProvider.java b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaUserProvider.java
index 24e6797..b93fdff 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaUserProvider.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaUserProvider.java
@@ -123,6 +123,8 @@ public class JpaUserProvider implements UserProvider {
     public void preRemove(RealmModel realm) {
         int num = em.createNamedQuery("deleteUserRoleMappingsByRealm")
                 .setParameter("realmId", realm.getId()).executeUpdate();
+        num = em.createNamedQuery("deleteUserRequiredActionsByRealm")
+                .setParameter("realmId", realm.getId()).executeUpdate();
         num = em.createNamedQuery("deleteSocialLinkByRealm")
                 .setParameter("realmId", realm.getId()).executeUpdate();
         num = em.createNamedQuery("deleteCredentialsByRealm")

model/mongo/pom.xml 129(+0 -129)

diff --git a/model/mongo/pom.xml b/model/mongo/pom.xml
index cdf80b3..c239f07 100755
--- a/model/mongo/pom.xml
+++ b/model/mongo/pom.xml
@@ -44,12 +44,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-invalidation-cache-model</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.jboss.logging</groupId>
             <artifactId>jboss-logging</artifactId>
             <scope>provided</scope>
@@ -59,128 +53,5 @@
             <artifactId>mongo-java-driver</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-model-sessions-mem</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-
-        </dependency>
-        <dependency>
-            <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-model-tests</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.jboss.resteasy</groupId>
-            <artifactId>resteasy-jaxrs</artifactId>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-simple</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <!--<dependency>-->
-            <!--<groupId>org.keycloak</groupId>-->
-            <!--<artifactId>keycloak-model-tests</artifactId>-->
-            <!--<version>${project.version}</version>-->
-            <!--<classifier>tests</classifier>-->
-            <!--<scope>test</scope>-->
-        <!--</dependency>-->
     </dependencies>
-
-    <properties>
-        <keycloak.model.mongo.host>localhost</keycloak.model.mongo.host>
-        <keycloak.model.mongo.port>27018</keycloak.model.mongo.port>
-        <keycloak.model.mongo.db>keycloak</keycloak.model.mongo.db>
-        <keycloak.model.mongo.clearOnStartup>true</keycloak.model.mongo.clearOnStartup>
-        <keycloak.model.mongo.bindIp>127.0.0.1</keycloak.model.mongo.bindIp>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>${maven.compiler.source}</source>
-                    <target>${maven.compiler.target}</target>
-                </configuration>
-            </plugin>
-
-            <!-- Postpone tests to "integration-test" phase, so that we can bootstrap embedded mongo on 27018 before running tests -->
-            <!--<plugin>-->
-                <!--<groupId>org.apache.maven.plugins</groupId>-->
-                <!--<artifactId>maven-surefire-plugin</artifactId>-->
-                <!--<executions>-->
-                    <!--<execution>-->
-                        <!--<id>test</id>-->
-                        <!--<phase>integration-test</phase>-->
-                        <!--<goals>-->
-                            <!--<goal>test</goal>-->
-                        <!--</goals>-->
-                        <!--<configuration>-->
-                            <!--<systemPropertyVariables>-->
-                                <!--<keycloak.model.mongo.host>${keycloak.model.mongo.host}</keycloak.model.mongo.host>-->
-                                <!--<keycloak.model.mongo.port>${keycloak.model.mongo.port}</keycloak.model.mongo.port>-->
-                                <!--<keycloak.model.mongo.db>${keycloak.model.mongo.db}</keycloak.model.mongo.db>-->
-                                <!--<keycloak.model.mongo.clearOnStartup>${keycloak.model.mongo.clearOnStartup}</keycloak.model.mongo.clearOnStartup>-->
-                                <!--<keycloak.model.mongo.bindIp>${keycloak.model.mongo.bindIp}</keycloak.model.mongo.bindIp>-->
-                            <!--</systemPropertyVariables>-->
-                            <!--<dependenciesToScan>-->
-                                <!--<dependency>org.keycloak:keycloak-model-tests</dependency>-->
-                            <!--</dependenciesToScan>-->
-                        <!--</configuration>-->
-                    <!--</execution>-->
-                    <!--<execution>-->
-                        <!--<id>default-test</id>-->
-                        <!--<configuration>-->
-                            <!--<skip>true</skip>-->
-                        <!--</configuration>-->
-                    <!--</execution>-->
-                <!--</executions>-->
-            <!--</plugin>-->
-
-            <!-- Embedded mongo -->
-            <!--<plugin>-->
-                <!--<groupId>com.github.joelittlejohn.embedmongo</groupId>-->
-                <!--<artifactId>embedmongo-maven-plugin</artifactId>-->
-                <!--<executions>-->
-                    <!--<execution>-->
-                        <!--<id>start-mongodb</id>-->
-                        <!--<phase>pre-integration-test</phase>-->
-                        <!--<goals>-->
-                            <!--<goal>start</goal>-->
-                        <!--</goals>-->
-                        <!--<configuration>-->
-                            <!--<port>${keycloak.model.mongo.port}</port>-->
-                            <!--<logging>file</logging>-->
-                            <!--<logFile>${project.build.directory}/mongodb.log</logFile>-->
-                            <!--<bindIp>${keycloak.model.mongo.bindIp}</bindIp>-->
-                        <!--</configuration>-->
-                    <!--</execution>-->
-                    <!--<execution>-->
-                        <!--<id>stop-mongodb</id>-->
-                        <!--<phase>post-integration-test</phase>-->
-                        <!--<goals>-->
-                            <!--<goal>stop</goal>-->
-                        <!--</goals>-->
-                    <!--</execution>-->
-                <!--</executions>-->
-            <!--</plugin>-->
-
-        </plugins>
-    </build>
 </project>
\ No newline at end of file

model/pom.xml 7(+0 -7)

diff --git a/model/pom.xml b/model/pom.xml
index cc61acb..bfb162d 100755
--- a/model/pom.xml
+++ b/model/pom.xml
@@ -29,15 +29,8 @@
         <module>invalidation-cache</module>
         <module>jpa</module>
         <module>mongo</module>
-        <module>tests</module>
-
         <module>sessions-jpa</module>
         <module>sessions-mem</module>
         <module>sessions-mongo</module>
-
-        <!--<module>hybrid</module>-->
-        <!--<module>realms-jpa</module>-->
-        <!--<module>users-jpa</module>-->
-        <!--<module>tests-hybrid</module>-->
     </modules>
 </project>
diff --git a/services/src/main/java/org/keycloak/services/managers/AuthenticationManager.java b/services/src/main/java/org/keycloak/services/managers/AuthenticationManager.java
index 6b972ce..7df23f2 100755
--- a/services/src/main/java/org/keycloak/services/managers/AuthenticationManager.java
+++ b/services/src/main/java/org/keycloak/services/managers/AuthenticationManager.java
@@ -301,16 +301,16 @@ public class AuthenticationManager {
                 if (!session.users().validCredentials(realm, user, UserCredentialModel.totp(token))) {
                     return AuthenticationStatus.INVALID_CREDENTIALS;
                 }
-            } else {
-                logger.debug("validating password for user: " + username);
+            }
 
-                AuthProviderStatus authStatus = AuthenticationProviderManager.getManager(realm, session).validatePassword(user, password);
-                if (authStatus == AuthProviderStatus.INVALID_CREDENTIALS) {
-                    logger.debug("invalid password for user: " + username);
-                    return AuthenticationStatus.INVALID_CREDENTIALS;
-                } else if (authStatus == AuthProviderStatus.FAILED) {
-                    return AuthenticationStatus.FAILED;
-                }
+            logger.debug("validating password for user: " + username);
+
+            AuthProviderStatus authStatus = AuthenticationProviderManager.getManager(realm, session).validatePassword(user, password);
+            if (authStatus == AuthProviderStatus.INVALID_CREDENTIALS) {
+                logger.debug("invalid password for user: " + username);
+                return AuthenticationStatus.INVALID_CREDENTIALS;
+            } else if (authStatus == AuthProviderStatus.FAILED) {
+                return AuthenticationStatus.FAILED;
             }
 
             if (!user.getRequiredActions().isEmpty()) {
diff --git a/testsuite/integration/pom.xml b/testsuite/integration/pom.xml
index 3aa1ffd..55fe1a0 100755
--- a/testsuite/integration/pom.xml
+++ b/testsuite/integration/pom.xml
@@ -30,7 +30,19 @@
             <version>${project.version}</version>
             <type>pom</type>
         </dependency>
-
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.jboss.spec.javax.servlet</groupId>
             <artifactId>jboss-servlet-api_3.0_spec</artifactId>
@@ -177,12 +189,16 @@
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-chrome-driver</artifactId>
         </dependency>
-
-        <!-- This adds couple of other dependencies (like picketlink) -->
         <dependency>
-            <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-model-tests</artifactId>
-            <version>${project.version}</version>
+            <groupId>org.picketbox</groupId>
+            <artifactId>picketbox-ldap</artifactId>
+            <scope>compile</scope>
+            <type>test-jar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.picketbox</groupId>
+            <artifactId>picketbox-ldap</artifactId>
+            <scope>compile</scope>
         </dependency>
     </dependencies>
     <build>
@@ -257,13 +273,28 @@
         </profile>
 
         <profile>
+            <id>jpa</id>
+
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <systemPropertyVariables>
+                                <keycloak.realm.provider>jpa</keycloak.realm.provider>
+                                <keycloak.user.provider>jpa</keycloak.user.provider>
+                                <keycloak.audit.provider>jpa</keycloak.audit.provider>
+                                <keycloak.userSessions.provider>jpa</keycloak.userSessions.provider>
+                            </systemPropertyVariables>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
             <id>mongo</id>
-            <activation>
-                <property>
-                    <name>keycloak.realm.provider</name>
-                    <value>mongo</value>
-                </property>
-            </activation>
 
             <properties>
                 <keycloak.connectionsMongo.host>localhost</keycloak.connectionsMongo.host>
@@ -292,7 +323,7 @@
                                         <keycloak.realm.provider>mongo</keycloak.realm.provider>
                                         <keycloak.user.provider>mongo</keycloak.user.provider>
                                         <keycloak.audit.provider>mongo</keycloak.audit.provider>
-                                        <!--<keycloak.userSessions.provider>mongo</keycloak.userSessions.provider>-->
+                                        <keycloak.userSessions.provider>mongo</keycloak.userSessions.provider>
                                         <keycloak.connectionsMongo.host>${keycloak.connectionsMongo.host}</keycloak.connectionsMongo.host>
                                         <keycloak.connectionsMongo.port>${keycloak.connectionsMongo.port}</keycloak.connectionsMongo.port>
                                         <keycloak.connectionsMongo.db>${keycloak.connectionsMongo.db}</keycloak.connectionsMongo.db>
diff --git a/testsuite/integration/src/main/resources/META-INF/keycloak-server.json b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
index 9c23dad..8e1ef4c 100755
--- a/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
+++ b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
@@ -77,7 +77,7 @@
             "host": "${keycloak.connectionsMongo.host:127.0.0.1}",
             "port": "${keycloak.connectionsMongo.port:27017}",
             "db": "${keycloak.connectionsMongo.db:keycloak}",
-            "clearOnStartup": "${keycloak.connectionsMongo.clearOnStartup:false}"
+            "clearOnStartup": "${keycloak.connectionsMongo.clearOnStartup:true}"
         }
     }
 }
\ No newline at end of file
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/audit/AuditProviderTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/audit/AuditProviderTest.java
new file mode 100644
index 0000000..6c0c538
--- /dev/null
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/audit/AuditProviderTest.java
@@ -0,0 +1,134 @@
+package org.keycloak.testsuite.audit;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.keycloak.audit.AuditProvider;
+import org.keycloak.audit.Event;
+import org.keycloak.audit.EventType;
+import org.keycloak.models.KeycloakSession;
+import org.keycloak.testsuite.rule.KeycloakRule;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
+ */
+public class AuditProviderTest {
+
+    @ClassRule
+    public static KeycloakRule kc = new KeycloakRule();
+
+    private KeycloakSession session;
+
+    private AuditProvider audit;
+
+    @Before
+    public void before() {
+        session = kc.startSession();
+        audit = session.getProvider(AuditProvider.class);
+    }
+
+    @After
+    public void after() {
+        audit.clear();
+        kc.stopSession(session, true);
+    }
+
+    @Test
+    public void save() {
+        audit.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+    }
+
+    @Test
+    public void query() {
+        long oldest = System.currentTimeMillis() - 30000;
+        long newest = System.currentTimeMillis() + 30000;
+
+        audit.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(newest, EventType.REGISTER, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(newest, EventType.REGISTER, "realmId", "clientId", "userId2", "127.0.0.1", "error"));
+        audit.onEvent(create(EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(oldest, EventType.LOGIN, "realmId", "clientId2", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId2", "127.0.0.1", "error"));
+
+        resetSession();
+
+        Assert.assertEquals(5, audit.createQuery().client("clientId").getResultList().size());
+        Assert.assertEquals(5, audit.createQuery().realm("realmId").getResultList().size());
+        Assert.assertEquals(4, audit.createQuery().event(EventType.LOGIN).getResultList().size());
+        Assert.assertEquals(6, audit.createQuery().event(EventType.LOGIN, EventType.REGISTER).getResultList().size());
+        Assert.assertEquals(4, audit.createQuery().user("userId").getResultList().size());
+
+        Assert.assertEquals(1, audit.createQuery().user("userId").event(EventType.REGISTER).getResultList().size());
+
+        Assert.assertEquals(2, audit.createQuery().maxResults(2).getResultList().size());
+        Assert.assertEquals(1, audit.createQuery().firstResult(5).getResultList().size());
+
+        Assert.assertEquals(newest, audit.createQuery().maxResults(1).getResultList().get(0).getTime());
+        Assert.assertEquals(oldest, audit.createQuery().firstResult(5).maxResults(1).getResultList().get(0).getTime());
+    }
+
+    @Test
+    public void clear() {
+        audit.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(System.currentTimeMillis() - 20000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
+
+        resetSession();
+
+        audit.clear("realmId");
+
+        Assert.assertEquals(1, audit.createQuery().getResultList().size());
+    }
+
+    @Test
+    public void clearOld() {
+        audit.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(System.currentTimeMillis() - 20000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+        audit.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
+
+        resetSession();
+
+        audit.clear("realmId", System.currentTimeMillis() - 10000);
+
+        Assert.assertEquals(3, audit.createQuery().getResultList().size());
+    }
+
+    private Event create(EventType event, String realmId, String clientId, String userId, String ipAddress, String error) {
+        return create(System.currentTimeMillis(), event, realmId, clientId, userId, ipAddress, error);
+    }
+
+    private Event create(long time, EventType event, String realmId, String clientId, String userId, String ipAddress, String error) {
+        Event e = new Event();
+        e.setTime(time);
+        e.setEvent(event);
+        e.setRealmId(realmId);
+        e.setClientId(clientId);
+        e.setUserId(userId);
+        e.setIpAddress(ipAddress);
+        e.setError(error);
+
+        Map<String, String> details = new HashMap<String, String>();
+        details.put("key1", "value1");
+        details.put("key2", "value2");
+
+        e.setDetails(details);
+
+        return e;
+    }
+
+    private void resetSession() {
+        kc.stopSession(session, true);
+        session = kc.startSession();
+        audit = session.getProvider(AuditProvider.class);
+    }
+
+}
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java
index ede84bf..49ac620 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java
@@ -9,7 +9,7 @@ import org.junit.rules.RuleChain;
 import org.junit.rules.TestRule;
 import org.junit.runners.MethodSorters;
 import org.keycloak.OAuth2Constants;
-import org.keycloak.model.test.LDAPTestUtils;
+import org.keycloak.testsuite.LDAPTestUtils;
 import org.keycloak.models.AuthenticationProviderModel;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.PasswordPolicy;
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
index a2d0305..56221f8 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
@@ -11,8 +11,8 @@ import org.junit.runners.MethodSorters;
 import org.keycloak.OAuth2Constants;
 import org.keycloak.authentication.AuthProviderConstants;
 import org.keycloak.federation.ldap.LDAPFederationProviderFactory;
-import org.keycloak.model.test.LDAPEmbeddedServer;
-import org.keycloak.model.test.LDAPTestUtils;
+import org.keycloak.testsuite.LDAPEmbeddedServer;
+import org.keycloak.testsuite.LDAPTestUtils;
 import org.keycloak.models.AuthenticationProviderModel;
 import org.keycloak.models.FederationProviderModel;
 import org.keycloak.models.KeycloakSession;
@@ -36,7 +36,6 @@ import org.keycloak.testsuite.rule.WebRule;
 import org.openqa.selenium.WebDriver;
 
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
index 6ff7436..da334fa 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
@@ -8,6 +8,7 @@ import io.undertow.servlet.api.WebResourceCollection;
 import org.junit.rules.ExternalResource;
 import org.keycloak.Config;
 import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.KeycloakSessionFactory;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.UserModel;
 import org.keycloak.models.utils.ModelToRepresentation;
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/LDAPRule.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/LDAPRule.java
index 3409b0e..b2b4aae 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/LDAPRule.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/LDAPRule.java
@@ -1,7 +1,7 @@
 package org.keycloak.testsuite.rule;
 
 import org.junit.rules.ExternalResource;
-import org.keycloak.model.test.LDAPEmbeddedServer;
+import org.keycloak.testsuite.LDAPEmbeddedServer;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>