keycloak-uncached

Changes

Details

diff --git a/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.RC1.xml b/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.RC1.xml
index 6fc69db..3477168 100755
--- a/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.RC1.xml
+++ b/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.RC1.xml
@@ -48,5 +48,23 @@
         </update>
         <dropColumn tableName="CLIENT" columnName="DTYPE"/>
         <renameColumn tableName="CLIENT" newColumnName="CLIENT_ID" oldColumnName="NAME"/>
+        <renameColumn tableName="REALM" newColumnName="MASTER_ADMIN_CLIENT" oldColumnName="MASTER_ADMIN_APP"/>
+
+        <renameTable oldTableName="REALM_APPLICATION" newTableName="REALM_CLIENT"/>
+        <renameColumn tableName="REALM_CLIENT" newColumnName="CLIENT_ID" oldColumnName="APPLICATION_ID"/>
+
+        <renameTable oldTableName="APPLICATION_DEFAULT_ROLES" newTableName="CLIENT_DEFAULT_ROLES"/>
+        <renameColumn tableName="CLIENT_DEFAULT_ROLES" newColumnName="CLIENT_ID" oldColumnName="APPLICATION_ID"/>
+
+        <renameTable oldTableName="APP_NODE_REGISTRATIONS" newTableName="CLIENT_NODE_REGISTRATIONS"/>
+        <renameColumn tableName="CLIENT_NODE_REGISTRATIONS" newColumnName="CLIENT_ID" oldColumnName="APPLICATION_ID"/>
+
+        <renameColumn tableName="KEYCLOAK_ROLE" newColumnName="CLIENT" oldColumnName="APPLICATION"/>
+        <renameColumn tableName="KEYCLOAK_ROLE" newColumnName="CLIENT_ROLE" oldColumnName="APPLICATION_ROLE"/>
+        <renameColumn tableName="KEYCLOAK_ROLE" newColumnName="CLIENT_REALM_CONSTRAINT" oldColumnName="APP_REALM_CONSTRAINT"/>
+
+        <dropUniqueConstraint tableName="KEYCLOAK_ROLE" constraintName="UK_J3RWUVD56ONTGSUHOGM184WW2"/>
+        <addUniqueConstraint columnNames="NAME,CLIENT_REALM_CONSTRAINT" constraintName="UK_J3RWUVD56ONTGSUHOGM184WW2-2" tableName="KEYCLOAK_ROLE"/>
+
     </changeSet>
 </databaseChangeLog>
diff --git a/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/updates/Update1_2_0_RC1.java b/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/updates/Update1_2_0_RC1.java
index 5954199..c980067 100644
--- a/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/updates/Update1_2_0_RC1.java
+++ b/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/updates/Update1_2_0_RC1.java
@@ -19,6 +19,9 @@ public class Update1_2_0_RC1 extends Update {
     public void update(KeycloakSession session) {
         convertApplicationsToClients();
         convertOAuthClientsToClients();
+
+        db.getCollection("realms").update(new BasicDBObject(), new BasicDBObject("$rename", new BasicDBObject("adminAppId", "clientId")), false, true);
+
     }
 
     private void convertApplicationsToClients() {
@@ -31,6 +34,10 @@ public class Update1_2_0_RC1 extends Update {
         DBCollection roles = db.getCollection("roles");
         roles.update(new BasicDBObject(), new BasicDBObject("$rename", new BasicDBObject("applicationId", "clientId")), false, true);
         log.debugv("Renamed roles.applicationId to roles.clientId");
+
+        db.getCollection("clients").dropIndex("realmId_1_name_1");
+        ensureIndex("clients", new String[]{"realmId", "clientId"}, true, false);
+
     }
 
     private void convertOAuthClientsToClients() {
diff --git a/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java b/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java
index bba27c8..3c978f9 100755
--- a/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java
+++ b/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java
@@ -64,7 +64,7 @@ public class RealmEntity extends AbstractIdentifiableEntity {
     private List<String> eventsListeners = new ArrayList<String>();
     private List<String> enabledEventTypes = new ArrayList<String>();
 
-    private String adminAppId;
+    private String masterAdminClient;
 
     private boolean internationalizationEnabled;
     private List<String> supportedLocales = new ArrayList<String>();
@@ -391,12 +391,12 @@ public class RealmEntity extends AbstractIdentifiableEntity {
         this.enabledEventTypes = enabledEventTypes;
     }
     
-    public String getAdminAppId() {
-        return adminAppId;
+    public String getMasterAdminClient() {
+        return masterAdminClient;
     }
 
-    public void setAdminAppId(String adminAppId) {
-        this.adminAppId = adminAppId;
+    public void setMasterAdminClient(String masterAdminClient) {
+        this.masterAdminClient = masterAdminClient;
     }
 
     public List<UserFederationProviderEntity> getUserFederationProviders() {
diff --git a/model/file/src/main/java/org/keycloak/models/file/adapter/RealmAdapter.java b/model/file/src/main/java/org/keycloak/models/file/adapter/RealmAdapter.java
index 31b4bfc..cdd658a 100755
--- a/model/file/src/main/java/org/keycloak/models/file/adapter/RealmAdapter.java
+++ b/model/file/src/main/java/org/keycloak/models/file/adapter/RealmAdapter.java
@@ -966,14 +966,14 @@ public class RealmAdapter implements RealmModel {
     @Override
     public void setMasterAdminClient(ClientModel client) {
         if (client == null) {
-            realm.setAdminAppId(null);
+            realm.setMasterAdminClient(null);
             this.masterAdminApp = null;
         } else {
             String appId = client.getId();
             if (appId == null) {
                 throw new IllegalStateException("Master Admin app not initialized.");
             }
-            realm.setAdminAppId(appId);
+            realm.setMasterAdminClient(appId);
             this.masterAdminApp = client;
         }
     }
diff --git a/model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/InfinispanRealmCache.java b/model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/InfinispanRealmCache.java
index b5204e8..ec93a7a 100755
--- a/model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/InfinispanRealmCache.java
+++ b/model/invalidation-cache/infinispan/src/main/java/org/keycloak/models/cache/infinispan/InfinispanRealmCache.java
@@ -3,7 +3,7 @@ package org.keycloak.models.cache.infinispan;
 import org.infinispan.Cache;
 import org.jboss.logging.Logger;
 import org.keycloak.models.cache.RealmCache;
-import org.keycloak.models.cache.entities.CachedApplication;
+import org.keycloak.models.cache.entities.CachedClient;
 import org.keycloak.models.cache.entities.CachedRealm;
 import org.keycloak.models.cache.entities.CachedRole;
 
@@ -77,19 +77,19 @@ public class InfinispanRealmCache implements RealmCache {
     }
 
     @Override
-    public CachedApplication getApplication(String id) {
+    public CachedClient getApplication(String id) {
         if (!enabled) return null;
-        return get(id, CachedApplication.class);
+        return get(id, CachedClient.class);
     }
 
     @Override
-    public void invalidateApplication(CachedApplication app) {
+    public void invalidateApplication(CachedClient app) {
         logger.tracev("Removing application {0}", app.getId());
         cache.remove(app.getId());
     }
 
     @Override
-    public void addCachedApplication(CachedApplication app) {
+    public void addCachedClient(CachedClient app) {
         if (!enabled) return;
         logger.tracev("Adding application {0}", app.getId());
         cache.put(app.getId(), app);
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/ClientAdapter.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/ClientAdapter.java
index 5330fbc..436405e 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/ClientAdapter.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/ClientAdapter.java
@@ -6,7 +6,7 @@ import org.keycloak.models.ProtocolMapperModel;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleContainerModel;
 import org.keycloak.models.RoleModel;
-import org.keycloak.models.cache.entities.CachedApplication;
+import org.keycloak.models.cache.entities.CachedClient;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -24,9 +24,9 @@ public class ClientAdapter implements ClientModel {
     protected RealmCache cache;
 
     protected ClientModel updated;
-    protected CachedApplication cached;
+    protected CachedClient cached;
 
-    public ClientAdapter(RealmModel cachedRealm, CachedApplication cached, CacheRealmProvider cacheSession, RealmCache cache) {
+    public ClientAdapter(RealmModel cachedRealm, CachedClient cached, CacheRealmProvider cacheSession, RealmCache cache) {
         this.cachedRealm = cachedRealm;
         this.cache = cache;
         this.cacheSession = cacheSession;
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 933ac74..13f6924 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
@@ -6,8 +6,8 @@ import org.keycloak.models.KeycloakTransaction;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RealmProvider;
 import org.keycloak.models.RoleModel;
-import org.keycloak.models.cache.entities.CachedApplication;
-import org.keycloak.models.cache.entities.CachedApplicationRole;
+import org.keycloak.models.cache.entities.CachedClient;
+import org.keycloak.models.cache.entities.CachedClientRole;
 import org.keycloak.models.cache.entities.CachedRealm;
 import org.keycloak.models.cache.entities.CachedRealmRole;
 import org.keycloak.models.cache.entities.CachedRole;
@@ -235,7 +235,7 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
             if (model == null) return null;
             if (roleInvalidations.contains(id)) return model;
             if (model.getContainer() instanceof ClientModel) {
-                cached = new CachedApplicationRole(((ClientModel) model.getContainer()).getId(), model, realm);
+                cached = new CachedClientRole(((ClientModel) model.getContainer()).getId(), model, realm);
             } else {
                 cached = new CachedRealmRole(model, realm);
             }
@@ -254,7 +254,7 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
     @Override
     public ClientModel getClientById(String id, RealmModel realm) {
         if (!cache.isEnabled()) return getDelegate().getClientById(id, realm);
-        CachedApplication cached = cache.getApplication(id);
+        CachedClient cached = cache.getApplication(id);
         if (cached != null && !cached.getRealm().equals(realm.getId())) {
             cached = null;
         }
@@ -263,8 +263,8 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
             ClientModel model = getDelegate().getClientById(id, realm);
             if (model == null) return null;
             if (appInvalidations.contains(id)) return model;
-            cached = new CachedApplication(cache, getDelegate(), realm, model);
-            cache.addCachedApplication(cached);
+            cached = new CachedClient(cache, getDelegate(), realm, model);
+            cache.addCachedClient(cached);
         } else if (appInvalidations.contains(id)) {
             return getDelegate().getClientById(id, realm);
         } else if (managedApplications.containsKey(id)) {
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 d302c48..e490814 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
@@ -66,7 +66,7 @@ public class CachedRealm {
     private String accountTheme;
     private String adminTheme;
     private String emailTheme;
-    private String masterAdminApp;
+    private String masterAdminClient;
 
     private List<RequiredCredentialModel> requiredCredentials = new ArrayList<RequiredCredentialModel>();
     private List<UserFederationProviderModel> userFederationProviders = new ArrayList<UserFederationProviderModel>();
@@ -81,7 +81,6 @@ public class CachedRealm {
     private Set<String> enabledEventTypes = new HashSet<String>();
     private List<String> defaultRoles = new LinkedList<String>();
     private Map<String, String> realmRoles = new HashMap<String, String>();
-    private Map<String, String> applications = new HashMap<String, String>();
     private Map<String, String> clients = new HashMap<String, String>();
     private boolean internationalizationEnabled;
     private Set<String> supportedLocales = new HashSet<String>();
@@ -155,7 +154,7 @@ public class CachedRealm {
         eventsListeners.addAll(model.getEventsListeners());
         enabledEventTypes.addAll(model.getEnabledEventTypes());
         defaultRoles.addAll(model.getDefaultRoles());
-        masterAdminApp = model.getMasterAdminClient().getId();
+        masterAdminClient = model.getMasterAdminClient().getId();
 
         for (RoleModel role : model.getRoles()) {
             realmRoles.put(role.getName(), role.getId());
@@ -163,10 +162,10 @@ public class CachedRealm {
             cache.addCachedRole(cachedRole);
         }
 
-        for (ClientModel app : model.getClients()) {
-            applications.put(app.getClientId(), app.getId());
-            CachedApplication cachedApp = new CachedApplication(cache, delegate, model, app);
-            cache.addCachedApplication(cachedApp);
+        for (ClientModel client : model.getClients()) {
+            clients.put(client.getClientId(), client.getId());
+            CachedClient cachedClient = new CachedClient(cache, delegate, model, client);
+            cache.addCachedClient(cachedClient);
         }
 
         internationalizationEnabled = model.isInternationalizationEnabled();
@@ -180,8 +179,8 @@ public class CachedRealm {
         return id;
     }
 
-    public String getMasterAdminApp() {
-        return masterAdminApp;
+    public String getMasterAdminClient() {
+        return masterAdminClient;
     }
 
     public String getName() {
@@ -196,10 +195,6 @@ public class CachedRealm {
         return realmRoles;
     }
 
-    public Map<String, String> getApplications() {
-        return applications;
-    }
-
     public Map<String, String> getClients() {
         return clients;
     }
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/MemoryRealmCache.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/MemoryRealmCache.java
index 25064c6..3b04670 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/MemoryRealmCache.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/MemoryRealmCache.java
@@ -1,6 +1,6 @@
 package org.keycloak.models.cache;
 
-import org.keycloak.models.cache.entities.CachedApplication;
+import org.keycloak.models.cache.entities.CachedClient;
 import org.keycloak.models.cache.entities.CachedRealm;
 import org.keycloak.models.cache.entities.CachedRole;
 
@@ -14,7 +14,7 @@ public class MemoryRealmCache implements RealmCache {
 
     protected ConcurrentHashMap<String, CachedRealm> realmCache = new ConcurrentHashMap<String, CachedRealm>();
     protected ConcurrentHashMap<String, CachedRealm> realmCacheByName = new ConcurrentHashMap<String, CachedRealm>();
-    protected ConcurrentHashMap<String, CachedApplication> applicationCache = new ConcurrentHashMap<String, CachedApplication>();
+    protected ConcurrentHashMap<String, CachedClient> applicationCache = new ConcurrentHashMap<String, CachedClient>();
     protected ConcurrentHashMap<String, CachedRole> roleCache = new ConcurrentHashMap<String, CachedRole>();
     protected volatile boolean enabled = true;
 
@@ -72,18 +72,18 @@ public class MemoryRealmCache implements RealmCache {
     }
 
     @Override
-    public CachedApplication getApplication(String id) {
+    public CachedClient getApplication(String id) {
         if (!enabled) return null;
         return applicationCache.get(id);
     }
 
     @Override
-    public void invalidateApplication(CachedApplication app) {
+    public void invalidateApplication(CachedClient app) {
         applicationCache.remove(app.getId());
     }
 
     @Override
-    public void addCachedApplication(CachedApplication app) {
+    public void addCachedClient(CachedClient app) {
         if (!enabled) return;
         applicationCache.put(app.getId(), app);
     }
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 f2532af..68a65ac 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
@@ -474,7 +474,7 @@ public class RealmAdapter implements RealmModel {
     public Map<String, ClientModel> getClientNameMap() {
         if (updated != null) return updated.getClientNameMap();
         Map<String, ClientModel> map = new HashMap<String, ClientModel>();
-        for (String id : cached.getApplications().values()) {
+        for (String id : cached.getClients().values()) {
             ClientModel model = cacheSession.getClientById(id, this);
             if (model == null) {
                 throw new IllegalStateException("Cached application not found: " + id);
@@ -488,7 +488,7 @@ public class RealmAdapter implements RealmModel {
     public List<ClientModel> getClients() {
         if (updated != null) return updated.getClients();
         List<ClientModel> apps = new LinkedList<ClientModel>();
-        for (String id : cached.getApplications().values()) {
+        for (String id : cached.getClients().values()) {
             ClientModel model = cacheSession.getClientById(id, this);
             if (model == null) {
                 throw new IllegalStateException("Cached application not found: " + id);
@@ -531,7 +531,7 @@ public class RealmAdapter implements RealmModel {
     @Override
     public ClientModel getClientByClientId(String clientId) {
         if (updated != null) return updated.getClientByClientId(clientId);
-        String id = cached.getApplications().get(clientId);
+        String id = cached.getClients().get(clientId);
         if (id == null) return null;
         return getClientById(id);
     }
@@ -752,7 +752,7 @@ public class RealmAdapter implements RealmModel {
     
     @Override
     public ClientModel getMasterAdminClient() {
-        return cacheSession.getRealm(Config.getAdminRealm()).getClientById(cached.getMasterAdminApp());
+        return cacheSession.getRealm(Config.getAdminRealm()).getClientById(cached.getMasterAdminClient());
     }
 
     @Override
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmCache.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmCache.java
index 3d66462..b683f57 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmCache.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmCache.java
@@ -1,6 +1,6 @@
 package org.keycloak.models.cache;
 
-import org.keycloak.models.cache.entities.CachedApplication;
+import org.keycloak.models.cache.entities.CachedClient;
 import org.keycloak.models.cache.entities.CachedRealm;
 import org.keycloak.models.cache.entities.CachedRole;
 
@@ -21,11 +21,11 @@ public interface RealmCache {
 
     void invalidateCachedRealmById(String id);
 
-    CachedApplication getApplication(String id);
+    CachedClient getApplication(String id);
 
-    void invalidateApplication(CachedApplication app);
+    void invalidateApplication(CachedClient app);
 
-    void addCachedApplication(CachedApplication app);
+    void addCachedClient(CachedClient app);
 
     void invalidateCachedApplicationById(String id);
 
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RoleAdapter.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RoleAdapter.java
index 0f30ecd..3323338 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RoleAdapter.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RoleAdapter.java
@@ -3,7 +3,7 @@ package org.keycloak.models.cache;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleContainerModel;
 import org.keycloak.models.RoleModel;
-import org.keycloak.models.cache.entities.CachedApplicationRole;
+import org.keycloak.models.cache.entities.CachedClientRole;
 import org.keycloak.models.cache.entities.CachedRealmRole;
 import org.keycloak.models.cache.entities.CachedRole;
 import org.keycloak.models.utils.KeycloakModelUtils;
@@ -106,8 +106,8 @@ public class RoleAdapter implements RoleModel {
         if (cached instanceof CachedRealmRole) {
             return realm;
         } else {
-            CachedApplicationRole appRole = (CachedApplicationRole)cached;
-            return realm.getClientById(appRole.getAppId());
+            CachedClientRole appRole = (CachedClientRole)cached;
+            return realm.getClientById(appRole.getIdClient());
         }
     }
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
index b04a92c..7ebb242 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
@@ -545,9 +545,9 @@ public class ClientAdapter implements ClientModel {
 
     @Override
     public RoleModel getRole(String name) {
-        TypedQuery<RoleEntity> query = em.createNamedQuery("getAppRoleByName", RoleEntity.class);
+        TypedQuery<RoleEntity> query = em.createNamedQuery("getClientRoleByName", RoleEntity.class);
         query.setParameter("name", name);
-        query.setParameter("application", entity);
+        query.setParameter("client", entity);
         List<RoleEntity> roles = query.getResultList();
         if (roles.size() == 0) return null;
         return new RoleAdapter(realm, em, roles.get(0));
@@ -563,8 +563,8 @@ public class ClientAdapter implements ClientModel {
         RoleEntity roleEntity = new RoleEntity();
         roleEntity.setId(id);
         roleEntity.setName(name);
-        roleEntity.setApplication(entity);
-        roleEntity.setApplicationRole(true);
+        roleEntity.setClient(entity);
+        roleEntity.setClientRole(true);
         roleEntity.setRealmId(realm.getId());
         em.persist(roleEntity);
         entity.getRoles().add(roleEntity);
@@ -581,13 +581,13 @@ public class ClientAdapter implements ClientModel {
 
         session.users().preRemove(getRealm(), roleModel);
         RoleEntity role = RoleAdapter.toRoleEntity(roleModel, em);
-        if (!role.isApplicationRole()) return false;
+        if (!role.isClientRole()) return false;
 
         entity.getRoles().remove(role);
         entity.getDefaultRoles().remove(role);
         em.createNativeQuery("delete from COMPOSITE_ROLE where CHILD_ROLE = :role").setParameter("role", role).executeUpdate();
         em.createNamedQuery("deleteScopeMappingByRole").setParameter("role", role).executeUpdate();
-        role.setApplication(null);
+        role.setClient(null);
         em.flush();
         em.remove(role);
         em.flush();
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/ClientEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/ClientEntity.java
index f8a25f1..26322d4 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/ClientEntity.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/ClientEntity.java
@@ -96,17 +96,17 @@ public class ClientEntity {
     @Column(name="NODE_REREG_TIMEOUT")
     private int nodeReRegistrationTimeout;
 
-    @OneToMany(fetch = FetchType.EAGER, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "application")
+    @OneToMany(fetch = FetchType.EAGER, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "client")
     Collection<RoleEntity> roles = new ArrayList<RoleEntity>();
 
     @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true)
-    @JoinTable(name="APPLICATION_DEFAULT_ROLES", joinColumns = { @JoinColumn(name="APPLICATION_ID")}, inverseJoinColumns = { @JoinColumn(name="ROLE_ID")})
+    @JoinTable(name="CLIENT_DEFAULT_ROLES", joinColumns = { @JoinColumn(name="CLIENT_ID")}, inverseJoinColumns = { @JoinColumn(name="ROLE_ID")})
     Collection<RoleEntity> defaultRoles = new ArrayList<RoleEntity>();
 
     @ElementCollection
     @MapKeyColumn(name="NAME")
     @Column(name="VALUE")
-    @CollectionTable(name="APP_NODE_REGISTRATIONS", joinColumns={ @JoinColumn(name="APPLICATION_ID") })
+    @CollectionTable(name="CLIENT_NODE_REGISTRATIONS", joinColumns={ @JoinColumn(name="CLIENT_ID") })
     Map<String, Integer> registeredNodes = new HashMap<String, Integer>();
 
     public RealmEntity getRealm() {
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java
index d39b62e..efdb4a8 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java
@@ -104,8 +104,8 @@ public class RealmEntity {
     List<UserFederationProviderEntity> userFederationProviders = new ArrayList<UserFederationProviderEntity>();
 
     @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true)
-    @JoinTable(name="REALM_APPLICATION", joinColumns={ @JoinColumn(name="REALM_ID") }, inverseJoinColumns={ @JoinColumn(name="APPLICATION_ID") })
-    Collection<ClientEntity> applications = new ArrayList<ClientEntity>();
+    @JoinTable(name="REALM_CLIENT", joinColumns={ @JoinColumn(name="REALM_ID") }, inverseJoinColumns={ @JoinColumn(name="CLIENT_ID") })
+    Collection<ClientEntity> clients = new ArrayList<>();
 
     @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
     Collection<RoleEntity> roles = new ArrayList<RoleEntity>();
@@ -136,8 +136,8 @@ public class RealmEntity {
     protected Set<String> enabledEventTypes = new HashSet<String>();
 
     @OneToOne
-    @JoinColumn(name="MASTER_ADMIN_APP")
-    protected ClientEntity masterAdminApp;
+    @JoinColumn(name="MASTER_ADMIN_CLIENT")
+    protected ClientEntity masterAdminClient;
 
     @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
     protected List<IdentityProviderEntity> identityProviders = new ArrayList<IdentityProviderEntity>();
@@ -318,12 +318,12 @@ public class RealmEntity {
         this.requiredCredentials = requiredCredentials;
     }
 
-    public Collection<ClientEntity> getApplications() {
-        return applications;
+    public Collection<ClientEntity> getClients() {
+        return clients;
     }
 
-    public void setApplications(Collection<ClientEntity> applications) {
-        this.applications = applications;
+    public void setClients(Collection<ClientEntity> clients) {
+        this.clients = clients;
     }
 
     public Collection<RoleEntity> getRoles() {
@@ -437,12 +437,12 @@ public class RealmEntity {
         this.enabledEventTypes = enabledEventTypes;
     }
     
-    public ClientEntity getMasterAdminApp() {
-        return masterAdminApp;
+    public ClientEntity getMasterAdminClient() {
+        return masterAdminClient;
     }
 
-    public void setMasterAdminApp(ClientEntity masterAdminApp) {
-        this.masterAdminApp = masterAdminApp;
+    public void setMasterAdminClient(ClientEntity masterAdminClient) {
+        this.masterAdminClient = masterAdminClient;
     }
 
     public List<UserFederationProviderEntity> getUserFederationProviders() {
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java
index ffbd711..262a469 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java
@@ -21,11 +21,11 @@ import java.util.Collection;
  */
 @Entity
 @Table(name="KEYCLOAK_ROLE", uniqueConstraints = {
-        @UniqueConstraint(columnNames = { "NAME", "APP_REALM_CONSTRAINT" })
+        @UniqueConstraint(columnNames = { "NAME", "CLIENT_REALM_CONSTRAINT" })
 })
 @NamedQueries({
-        @NamedQuery(name="getAppRoleByName", query="select role from RoleEntity role where role.name = :name and role.application = :application"),
-        @NamedQuery(name="getRealmRoleByName", query="select role from RoleEntity role where role.applicationRole = false and role.name = :name and role.realm = :realm")
+        @NamedQuery(name="getClientRoleByName", query="select role from RoleEntity role where role.name = :name and role.client = :client"),
+        @NamedQuery(name="getRealmRoleByName", query="select role from RoleEntity role where role.clientRole = false and role.name = :name and role.realm = :realm")
 })
 
 public class RoleEntity {
@@ -46,16 +46,16 @@ public class RoleEntity {
     @JoinColumn(name = "REALM")
     private RealmEntity realm;
 
-    @Column(name="APPLICATION_ROLE")
-    private boolean applicationRole;
+    @Column(name="CLIENT_ROLE")
+    private boolean clientRole;
 
     @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "APPLICATION")
-    private ClientEntity application;
+    @JoinColumn(name = "CLIENT")
+    private ClientEntity client;
 
-    // Hack to ensure that either name+application or name+realm are unique. Needed due to MS-SQL as it don't allow multiple NULL values in the column, which is part of constraint
-    @Column(name="APP_REALM_CONSTRAINT", length = 36)
-    private String appRealmConstraint;
+    // Hack to ensure that either name+client or name+realm are unique. Needed due to MS-SQL as it don't allow multiple NULL values in the column, which is part of constraint
+    @Column(name="CLIENT_REALM_CONSTRAINT", length = 36)
+    private String clientRealmConstraint;
 
     @ManyToMany(fetch = FetchType.LAZY, cascade = {})
     @JoinTable(name = "COMPOSITE_ROLE", joinColumns = @JoinColumn(name = "COMPOSITE"), inverseJoinColumns = @JoinColumn(name = "CHILD_ROLE"))
@@ -101,12 +101,12 @@ public class RoleEntity {
         this.compositeRoles = compositeRoles;
     }
 
-    public boolean isApplicationRole() {
-        return applicationRole;
+    public boolean isClientRole() {
+        return clientRole;
     }
 
-    public void setApplicationRole(boolean applicationRole) {
-        this.applicationRole = applicationRole;
+    public void setClientRole(boolean clientRole) {
+        this.clientRole = clientRole;
     }
 
     public RealmEntity getRealm() {
@@ -115,26 +115,26 @@ public class RoleEntity {
 
     public void setRealm(RealmEntity realm) {
         this.realm = realm;
-        this.appRealmConstraint = realm.getId();
+        this.clientRealmConstraint = realm.getId();
     }
 
-    public ClientEntity getApplication() {
-        return application;
+    public ClientEntity getClient() {
+        return client;
     }
 
-    public void setApplication(ClientEntity application) {
-        this.application = application;
-        if (application != null) {
-            this.appRealmConstraint = application.getId();
+    public void setClient(ClientEntity client) {
+        this.client = client;
+        if (client != null) {
+            this.clientRealmConstraint = client.getId();
         }
     }
 
-    public String getAppRealmConstraint() {
-        return appRealmConstraint;
+    public String getClientRealmConstraint() {
+        return clientRealmConstraint;
     }
 
-    public void setAppRealmConstraint(String appRealmConstraint) {
-        this.appRealmConstraint = appRealmConstraint;
+    public void setClientRealmConstraint(String clientRealmConstraint) {
+        this.clientRealmConstraint = clientRealmConstraint;
     }
 
     @Override
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaRealmProvider.java b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaRealmProvider.java
index f887670..1be423a 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaRealmProvider.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaRealmProvider.java
@@ -91,7 +91,7 @@ public class JpaRealmProvider implements RealmProvider {
 
         RealmAdapter adapter = new RealmAdapter(session, em, realm);
         session.users().preRemove(adapter);
-        for (ClientEntity a : new LinkedList<>(realm.getApplications())) {
+        for (ClientEntity a : new LinkedList<>(realm.getClients())) {
             adapter.removeClient(a.getId());
         }
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index 4370165..2ab9ac7 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -619,8 +619,8 @@ public class RealmAdapter implements RealmModel {
     @Override
     public List<ClientModel> getClients() {
         List<ClientModel> list = new ArrayList<ClientModel>();
-        if (realm.getApplications() == null) return list;
-        for (ClientEntity entity : realm.getApplications()) {
+        if (realm.getClients() == null) return list;
+        for (ClientEntity entity : realm.getClients()) {
             list.add(new ClientAdapter(this, em, session, entity));
         }
         return list;
@@ -633,15 +633,15 @@ public class RealmAdapter implements RealmModel {
 
     @Override
     public ClientModel addClient(String id, String clientId) {
-        ClientEntity applicationData = new ClientEntity();
-        applicationData.setId(id);
-        applicationData.setClientId(clientId);
-        applicationData.setEnabled(true);
-        applicationData.setRealm(realm);
-        realm.getApplications().add(applicationData);
-        em.persist(applicationData);
+        ClientEntity entity = new ClientEntity();
+        entity.setId(id);
+        entity.setClientId(clientId);
+        entity.setEnabled(true);
+        entity.setRealm(realm);
+        realm.getClients().add(entity);
+        em.persist(entity);
         em.flush();
-        final ClientModel resource = new ClientAdapter(this, em, session, applicationData);
+        final ClientModel resource = new ClientAdapter(this, em, session, entity);
         em.flush();
         session.getKeycloakSessionFactory().publish(new ClientCreationEvent() {
             @Override
@@ -655,15 +655,15 @@ public class RealmAdapter implements RealmModel {
     @Override
     public boolean removeClient(String id) {
         if (id == null) return false;
-        ClientModel application = getClientById(id);
-        if (application == null) return false;
+        ClientModel client = getClientById(id);
+        if (client == null) return false;
 
-        for (RoleModel role : application.getRoles()) {
-            application.removeRole(role);
+        for (RoleModel role : client.getRoles()) {
+            client.removeRole(role);
         }
 
         ClientEntity clientEntity = null;
-        Iterator<ClientEntity> it = realm.getApplications().iterator();
+        Iterator<ClientEntity> it = realm.getClients().iterator();
         while (it.hasNext()) {
             ClientEntity ae = it.next();
             if (ae.getId().equals(id)) {
@@ -672,12 +672,12 @@ public class RealmAdapter implements RealmModel {
                 break;
             }
         }
-        for (ClientEntity a : realm.getApplications()) {
+        for (ClientEntity a : realm.getClients()) {
             if (a.getId().equals(id)) {
                 clientEntity = a;
             }
         }
-        if (application == null) {
+        if (client == null) {
             return false;
         }
         em.remove(clientEntity);
@@ -1066,13 +1066,13 @@ public class RealmAdapter implements RealmModel {
 
     @Override
     public ClientModel getMasterAdminClient() {
-        return new ClientAdapter(this, em, session, realm.getMasterAdminApp());
+        return new ClientAdapter(this, em, session, realm.getMasterAdminClient());
     }
 
     @Override
     public void setMasterAdminClient(ClientModel client) {
         ClientEntity appEntity = client !=null ? em.getReference(ClientEntity.class, client.getId()) : null;
-        realm.setMasterAdminApp(appEntity);
+        realm.setMasterAdminClient(appEntity);
         em.flush();
     }
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
index 1687855..4a8e258 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
@@ -104,8 +104,8 @@ public class RoleAdapter implements RoleModel {
 
     @Override
     public RoleContainerModel getContainer() {
-        if (role.isApplicationRole()) {
-            return realm.getClientById(role.getApplication().getId());
+        if (role.isClientRole()) {
+            return realm.getClientById(role.getClient().getId());
 
         } else {
             return realm;
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
index d7a534a..e515dde 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
@@ -91,7 +91,7 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
 
     @Override
     public SslRequired getSslRequired() {
-        return SslRequired.valueOf(realm.getSslRequired());
+        return realm.getSslRequired() != null ? SslRequired.valueOf(realm.getSslRequired()) : null;
     }
 
     @Override
@@ -604,11 +604,11 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
         DBObject query = new QueryBuilder()
                 .and("realmId").is(getId())
                 .get();
-        List<MongoClientEntity> appDatas = getMongoStore().loadEntities(MongoClientEntity.class, query, invocationContext);
+        List<MongoClientEntity> clientEntities = getMongoStore().loadEntities(MongoClientEntity.class, query, invocationContext);
 
         List<ClientModel> result = new ArrayList<ClientModel>();
-        for (MongoClientEntity appData : appDatas) {
-            result.add(new ClientAdapter(session, this, appData, invocationContext));
+        for (MongoClientEntity clientEntity : clientEntities) {
+            result.add(new ClientAdapter(session, this, clientEntity, invocationContext));
         }
         return result;
     }
@@ -620,14 +620,14 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
 
     @Override
     public ClientModel addClient(String id, String clientId) {
-        MongoClientEntity appData = new MongoClientEntity();
-        appData.setId(id);
-        appData.setClientId(clientId);
-        appData.setRealmId(getId());
-        appData.setEnabled(true);
-        getMongoStore().insertEntity(appData, invocationContext);
-
-        final ClientModel model = new ClientAdapter(session, this, appData, invocationContext);
+        MongoClientEntity clientEntity = new MongoClientEntity();
+        clientEntity.setId(id);
+        clientEntity.setClientId(clientId);
+        clientEntity.setRealmId(getId());
+        clientEntity.setEnabled(true);
+        getMongoStore().insertEntity(clientEntity, invocationContext);
+
+        final ClientModel model = new ClientAdapter(session, this, clientEntity, invocationContext);
         session.getKeycloakSessionFactory().publish(new ClientCreationEvent() {
             @Override
             public ClientModel getCreatedClient() {
@@ -979,14 +979,14 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
 
     @Override
     public ClientModel getMasterAdminClient() {
-        MongoClientEntity appData = getMongoStore().loadEntity(MongoClientEntity.class, realm.getAdminAppId(), invocationContext);
+        MongoClientEntity appData = getMongoStore().loadEntity(MongoClientEntity.class, realm.getMasterAdminClient(), invocationContext);
         return appData != null ? new ClientAdapter(session, this, appData, invocationContext) : null;
     }
 
     @Override
     public void setMasterAdminClient(ClientModel client) {
         String adminAppId = client != null ? client.getId() : null;
-        realm.setAdminAppId(adminAppId);
+        realm.setMasterAdminClient(adminAppId);
         updateRealm();
     }
 
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTestStrategy.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTestStrategy.java
index ba41ceb..550de17 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTestStrategy.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTestStrategy.java
@@ -51,6 +51,7 @@ import org.keycloak.testsuite.rule.WebResource;
 import org.keycloak.testsuite.rule.WebRule;
 import org.keycloak.testutils.KeycloakServer;
 import org.keycloak.util.BasicAuthHelper;
+import org.keycloak.util.Time;
 import org.openqa.selenium.WebDriver;
 
 import javax.ws.rs.client.Client;
@@ -303,7 +304,7 @@ public class AdapterTestStrategy extends ExternalResource {
         session.getTransaction().commit();
         session.close();
 
-        Thread.sleep(2000);
+        Time.setOffset(2);
 
 
         // test SSO
@@ -315,6 +316,8 @@ public class AdapterTestStrategy extends ExternalResource {
         realm.setSsoSessionIdleTimeout(originalIdle);
         session.getTransaction().commit();
         session.close();
+
+        Time.setOffset(0);
     }
 
     public void testLoginSSOIdleRemoveExpiredUserSessions() throws Exception {
@@ -336,7 +339,7 @@ public class AdapterTestStrategy extends ExternalResource {
         session.getTransaction().commit();
         session.close();
 
-        Thread.sleep(2000);
+        Time.setOffset(2);
 
         session = keycloakRule.startSession();
         realm = session.realms().getRealmByName("demo");
@@ -356,6 +359,8 @@ public class AdapterTestStrategy extends ExternalResource {
         realm.setSsoSessionIdleTimeout(originalIdle);
         session.getTransaction().commit();
         session.close();
+
+        Time.setOffset(0);
     }
 
     public void testLoginSSOMax() throws Exception {
@@ -377,7 +382,7 @@ public class AdapterTestStrategy extends ExternalResource {
         session.getTransaction().commit();
         session.close();
 
-        Thread.sleep(2000);
+        Time.setOffset(2);
 
 
         // test SSO
@@ -389,6 +394,8 @@ public class AdapterTestStrategy extends ExternalResource {
         realm.setSsoSessionMaxLifespan(original);
         session.getTransaction().commit();
         session.close();
+
+        Time.setOffset(0);
     }
 
     /**
@@ -541,7 +548,7 @@ public class AdapterTestStrategy extends ExternalResource {
         driver.navigate().to(logoutUri);
 
         // Wait until accessToken is expired
-        Thread.sleep(2000);
+        Time.setOffset(2);
 
         // Assert that http session was invalidated
         driver.navigate().to(APP_SERVER_BASE_URL + "/session-portal");
@@ -563,6 +570,8 @@ public class AdapterTestStrategy extends ExternalResource {
             }
 
         }, "demo");
+
+        Time.setOffset(0);
     }
 
     /**
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/ResetPasswordTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/ResetPasswordTest.java
index 1b53664..55e6ed3 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/ResetPasswordTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/ResetPasswordTest.java
@@ -37,6 +37,7 @@ import org.keycloak.services.managers.RealmManager;
 import org.keycloak.testsuite.AssertEvents;
 import org.keycloak.testsuite.MailUtil;
 import org.keycloak.testsuite.OAuthClient;
+import org.keycloak.testsuite.Retry;
 import org.keycloak.testsuite.pages.AppPage;
 import org.keycloak.testsuite.pages.AppPage.RequestType;
 import org.keycloak.testsuite.pages.ErrorPage;
@@ -253,8 +254,6 @@ public class ResetPasswordTest {
 
         assertEquals("You should receive an email shortly with further instructions.", resetPasswordPage.getSuccessMessage());
 
-        Thread.sleep(1000);
-
         assertEquals(0, greenMail.getReceivedMessages().length);
 
         events.expectRequiredAction(EventType.SEND_RESET_PASSWORD).user((String) null).session((String) null).detail(Details.USERNAME, "invalid").removeDetail(Details.EMAIL).removeDetail(Details.CODE_ID).error("user_not_found").assertEvent();
@@ -318,8 +317,6 @@ public class ResetPasswordTest {
 
             assertEquals("You should receive an email shortly with further instructions.", resetPasswordPage.getSuccessMessage());
 
-            Thread.sleep(1000);
-
             assertEquals(0, greenMail.getReceivedMessages().length);
 
             events.expectRequiredAction(EventType.SEND_RESET_PASSWORD).session((String) null).user(userId).detail(Details.USERNAME, "login-test").removeDetail(Details.CODE_ID).error("user_disabled").assertEvent();
@@ -358,8 +355,6 @@ public class ResetPasswordTest {
 
             assertEquals("You should receive an email shortly with further instructions.", resetPasswordPage.getSuccessMessage());
 
-            Thread.sleep(1000);
-
             assertEquals(0, greenMail.getReceivedMessages().length);
 
             events.expectRequiredAction(EventType.SEND_RESET_PASSWORD_ERROR).session((String) null).user(userId).detail(Details.USERNAME, "login-test").removeDetail(Details.CODE_ID).error("invalid_email").assertEvent();
@@ -396,8 +391,6 @@ public class ResetPasswordTest {
 
             assertEquals("Failed to send email, please try again later.", errorPage.getError());
 
-            Thread.sleep(1000);
-
             assertEquals(0, greenMail.getReceivedMessages().length);
 
             events.expectRequiredAction(EventType.SEND_RESET_PASSWORD_ERROR).user(userId).detail(Details.USERNAME, "login-test").removeDetail(Details.CODE_ID).error(Errors.EMAIL_SEND_FAILED).assertEvent();
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AuthenticationManagerTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AuthenticationManagerTest.java
index d43e636..15aeffa 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AuthenticationManagerTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AuthenticationManagerTest.java
@@ -18,6 +18,7 @@ import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.services.managers.AuthenticationManager;
 import org.keycloak.services.managers.AuthenticationManager.AuthenticationStatus;
 import org.keycloak.services.managers.BruteForceProtector;
+import org.keycloak.util.Time;
 
 import javax.ws.rs.core.MultivaluedMap;
 import java.util.UUID;
@@ -238,10 +239,12 @@ public class AuthenticationManagerTest extends AbstractModelTest {
             String passwordToken = new JWSBuilder().jsonContent(new PasswordToken(realm.getName(), "invalid")).rsa256(realm.getPrivateKey());
             formData.add(CredentialRepresentation.PASSWORD_TOKEN, passwordToken);
 
-            Thread.sleep(2000);
+            Time.setOffset(2);
 
             AuthenticationStatus status = am.authenticateForm(session, dummyConnection, realm, formData);
             Assert.assertEquals(AuthenticationStatus.INVALID_CREDENTIALS, status);
+
+            Time.setOffset(0);
         } finally {
             realm.setAccessCodeLifespanUserAction(lifespan);
         }
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/AccessTokenTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/AccessTokenTest.java
index 1fd4528..0920be5 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/AccessTokenTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/AccessTokenTest.java
@@ -55,6 +55,7 @@ import org.keycloak.testsuite.rule.KeycloakRule;
 import org.keycloak.testsuite.rule.WebResource;
 import org.keycloak.testsuite.rule.WebRule;
 import org.keycloak.util.BasicAuthHelper;
+import org.keycloak.util.Time;
 import org.openqa.selenium.WebDriver;
 
 import javax.ws.rs.client.Client;
@@ -211,10 +212,7 @@ public class AccessTokenTest {
 
         String code = oauth.getCurrentQuery().get(OAuth2Constants.CODE);
 
-        try {
-            Thread.sleep(2000);
-        } catch (InterruptedException e) {
-        }
+        Time.setOffset(2);
 
         OAuthClient.AccessTokenResponse response = oauth.doAccessTokenRequest(code, "password");
         Assert.assertEquals(400, response.getStatusCode());
@@ -231,6 +229,8 @@ public class AccessTokenTest {
                 appRealm.setAccessCodeLifespan(60);
             }
         });
+
+        Time.setOffset(0);
     }
 
     @Test
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/RefreshTokenTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/RefreshTokenTest.java
index 3776c03..363a1e9 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/RefreshTokenTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/RefreshTokenTest.java
@@ -143,7 +143,7 @@ public class RefreshTokenTest {
 
         Assert.assertEquals(sessionId, refreshToken.getSessionState());
 
-        Thread.sleep(2000);
+        Time.setOffset(2);
 
         AccessTokenResponse response = oauth.doRefreshTokenRequest(refreshTokenString, "password");
         AccessToken refreshedToken = oauth.verifyToken(response.getAccessToken());
@@ -157,8 +157,8 @@ public class RefreshTokenTest {
         Assert.assertThat(response.getExpiresIn(), allOf(greaterThanOrEqualTo(250), lessThanOrEqualTo(300)));
         Assert.assertThat(refreshedToken.getExpiration() - Time.currentTime(), allOf(greaterThanOrEqualTo(250), lessThanOrEqualTo(300)));
 
-        Assert.assertThat(refreshedToken.getExpiration() - token.getExpiration(), allOf(greaterThanOrEqualTo(1), lessThanOrEqualTo(5)));
-        Assert.assertThat(refreshedRefreshToken.getExpiration() - refreshToken.getExpiration(), allOf(greaterThanOrEqualTo(1), lessThanOrEqualTo(5)));
+        Assert.assertThat(refreshedToken.getExpiration() - token.getExpiration(), allOf(greaterThanOrEqualTo(1), lessThanOrEqualTo(10)));
+        Assert.assertThat(refreshedRefreshToken.getExpiration() - refreshToken.getExpiration(), allOf(greaterThanOrEqualTo(1), lessThanOrEqualTo(10)));
 
         Assert.assertNotEquals(token.getId(), refreshedToken.getId());
         Assert.assertNotEquals(refreshToken.getId(), refreshedRefreshToken.getId());
@@ -177,6 +177,8 @@ public class RefreshTokenTest {
         Event refreshEvent = events.expectRefresh(tokenEvent.getDetails().get(Details.REFRESH_TOKEN_ID), sessionId).assertEvent();
         Assert.assertNotEquals(tokenEvent.getDetails().get(Details.TOKEN_ID), refreshEvent.getDetails().get(Details.TOKEN_ID));
         Assert.assertNotEquals(tokenEvent.getDetails().get(Details.REFRESH_TOKEN_ID), refreshEvent.getDetails().get(Details.UPDATED_REFRESH_TOKEN_ID));
+
+        Time.setOffset(0);
     }
 
     PrivateKey privateKey;
@@ -277,7 +279,7 @@ public class RefreshTokenTest {
         session.getTransaction().commit();
         session.close();
 
-        Thread.sleep(2000);
+        Time.setOffset(2);
 
         tokenResponse = oauth.doRefreshTokenRequest(tokenResponse.getRefreshToken(), "password");
 
@@ -302,7 +304,7 @@ public class RefreshTokenTest {
         session.getTransaction().commit();
         session.close();
 
-        Thread.sleep(2000);
+        Time.setOffset(4);
         tokenResponse = oauth.doRefreshTokenRequest(tokenResponse.getRefreshToken(), "password");
 
         session = keycloakRule.startSession();
@@ -323,7 +325,7 @@ public class RefreshTokenTest {
         session.close();
 
         events.clear();
-        Thread.sleep(2000);
+        Time.setOffset(6);
         tokenResponse = oauth.doRefreshTokenRequest(tokenResponse.getRefreshToken(), "password");
 
         // test idle timeout
@@ -341,6 +343,8 @@ public class RefreshTokenTest {
         session.close();
 
         events.clear();
+
+        Time.setOffset(0);
     }
 
     @Test
@@ -365,7 +369,7 @@ public class RefreshTokenTest {
         session.getTransaction().commit();
         session.close();
 
-        Thread.sleep(1000);
+        Time.setOffset(1);
 
         tokenResponse = oauth.doRefreshTokenRequest(tokenResponse.getRefreshToken(), "password");
 
@@ -383,6 +387,8 @@ public class RefreshTokenTest {
         events.expectRefresh(refreshId, sessionId).error(Errors.INVALID_TOKEN);
 
         events.clear();
+
+        Time.setOffset(0);
     }
 
     @Test
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/saml/SamlBindingTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/saml/SamlBindingTest.java
index e91d58c..5470041 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/saml/SamlBindingTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/saml/SamlBindingTest.java
@@ -126,11 +126,6 @@ public class SamlBindingTest {
     @WebResource
     protected LoginPage loginPage;
 
-    //@Test
-    public void runit() throws Exception {
-        Thread.sleep(10000000);
-    }
-
     protected void checkLoggedOut(String mainUrl) {
         String pageSource = driver.getPageSource();
         System.out.println("*** logout pagesouce ***");