keycloak-memoizeit

Fixing mongo

8/2/2016 3:13:15 AM

Details

diff --git a/model/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java b/model/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
index 440886f..b899e0d 100755
--- a/model/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
+++ b/model/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
@@ -78,7 +78,7 @@ public class DefaultMongoConnectionFactoryProvider implements MongoConnectionPro
             "org.keycloak.models.entities.RequiredActionProviderEntity",
             "org.keycloak.models.entities.PersistentUserSessionEntity",
             "org.keycloak.models.entities.PersistentClientSessionEntity",
-            "org.keycloak.models.entities.StorageProviderEntity",
+            "org.keycloak.models.entities.ComponentEntity",
             "org.keycloak.authorization.mongo.entities.PolicyEntity",
             "org.keycloak.authorization.mongo.entities.ResourceEntity",
             "org.keycloak.authorization.mongo.entities.ResourceServerEntity",
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 8b945ef..551f6fd 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
@@ -1841,6 +1841,7 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
         RequiredActionProviderEntity entity = getRequiredActionProviderEntity(model.getId());
         if (entity == null) return;
         entity.setAlias(model.getAlias());
+        entity.setName(model.getName());
         entity.setProviderId(model.getProviderId());
         entity.setEnabled(model.isEnabled());
         entity.setDefaultAction(model.isDefaultAction());
@@ -2066,7 +2067,6 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
             entity.setId(model.getId());
         }
         entity.setConfig(model.getConfig());
-        entity.setId(model.getId());
         entity.setParentId(model.getParentId());
         entity.setProviderType(model.getProviderType());
         entity.setProviderId(model.getProviderId());
@@ -2083,7 +2083,6 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
         for (ComponentEntity entity : realm.getComponentEntities()) {
             if (entity.getId().equals(model.getId())) {
                 entity.setConfig(model.getConfig());
-                entity.setId(model.getId());
                 entity.setParentId(model.getParentId());
                 entity.setProviderType(model.getProviderType());
                 entity.setProviderId(model.getProviderId());
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AdapterTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AdapterTest.java
index eecf8c9..42d190c 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AdapterTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AdapterTest.java
@@ -22,6 +22,7 @@ import org.junit.FixMethodOrder;
 import org.junit.Test;
 import org.junit.runners.MethodSorters;
 import org.keycloak.Config;
+import org.keycloak.component.ComponentModel;
 import org.keycloak.models.ClientModel;
 import org.keycloak.models.FederatedIdentityModel;
 import org.keycloak.models.ModelDuplicateException;
@@ -36,6 +37,9 @@ import org.keycloak.models.UserModel;
 import org.keycloak.models.UserProvider;
 import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.services.managers.RealmManager;
+import org.keycloak.storage.UserStorageProvider;
+import org.keycloak.storage.UserStorageProviderModel;
+import org.keycloak.testsuite.federation.storage.UserMapStorageFactory;
 
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
@@ -831,6 +835,61 @@ public class AdapterTest extends AbstractModelTest {
         realmManager.removeRealm(realmModel);
     }
 
+    @Test
+    public void testComponentModelCRUD() {
+        // Add
+        realmModel = realmManager.createRealm("foo-realm");
+        UserStorageProviderModel model = new UserStorageProviderModel();
+        model.setName("memory");
+        model.setPriority(0);
+        model.setProviderId(UserMapStorageFactory.PROVIDER_ID);
+        model.setParentId(realmModel.getId());
+        ComponentModel createdModel = realmModel.addComponentModel(model);
+        String id = createdModel.getId();
+        Assert.assertNotNull(id);
+
+        commit();
+
+        realmModel = realmManager.getRealmByName("foo-realm");
+        ComponentModel foundModel = realmModel.getComponent(id);
+        assertComponentModel(foundModel, id, UserMapStorageFactory.PROVIDER_ID, realmModel.getId(), "memory");
+
+        List<ComponentModel> components = realmModel.getComponents();
+        Assert.assertEquals(components.size(), 1);
+        assertComponentModel(components.get(0), id, UserMapStorageFactory.PROVIDER_ID, realmModel.getId(), "memory");
+
+        components = realmModel.getComponents(realmModel.getId(), UserStorageProvider.class.getName());
+        Assert.assertEquals(components.size(), 1);
+        assertComponentModel(components.get(0), id, UserMapStorageFactory.PROVIDER_ID, realmModel.getId(), "memory");
+
+        // Update
+        foundModel.getConfig().putSingle("foo", "bar");
+        realmModel.updateComponent(foundModel);
+
+        commit();
+
+        realmModel = realmManager.getRealmByName("foo-realm");
+        foundModel = realmModel.getComponent(id);
+        assertComponentModel(foundModel, id, UserMapStorageFactory.PROVIDER_ID, realmModel.getId(), "memory");
+        Assert.assertEquals("bar", foundModel.getConfig().getFirst("foo"));
+
+        // Remove
+        realmModel.removeComponent(foundModel);
+
+        commit();
+
+        realmModel = realmManager.getRealmByName("foo-realm");
+        foundModel = realmModel.getComponent(id);
+        Assert.assertNull(foundModel);
+    }
+
+    private void assertComponentModel(ComponentModel componentModel, String expectedId, String expectedProviderId, String expectedParentId, String expectedName) {
+        Assert.assertEquals(expectedId, componentModel.getId());
+        Assert.assertEquals(expectedProviderId, componentModel.getProviderId());
+        Assert.assertEquals(expectedParentId, componentModel.getParentId());
+        Assert.assertEquals(expectedName, componentModel.getName());
+    }
+
     private KeyPair generateKeypair() throws NoSuchAlgorithmException {
         return KeyPairGenerator.getInstance("RSA").generateKeyPair();
     }