Ori Liel has uploaded a new change for review.

Change subject: restapi: Improve Performance in mapper tests
......................................................................

restapi: Improve Performance in mapper tests

Change-Id: I29908ea9d5cf232a3079f28927b70ad0ce37a010
Signed-off-by: Ori Liel <[email protected]>
---
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/MappingTestHelper.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkMapperTest.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
3 files changed, 33 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/70/19670/1

diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/MappingTestHelper.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/MappingTestHelper.java
index 63a1641..ac4409c 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/MappingTestHelper.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/MappingTestHelper.java
@@ -6,6 +6,7 @@
 import java.util.List;
 import java.util.UUID;
 
+import org.ovirt.engine.api.model.BaseResource;
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
@@ -26,7 +27,21 @@
      * @return a populated instance
      */
     public static Object populate(Class<?> clz) {
-        return populate(instantiate(clz), clz, new ArrayList<Class<?>>());
+        List<Class<?>> seen = getSetMethodTypes(clz);
+        return populate(instantiate(clz), clz, seen, 1);
+    }
+
+    private static List<Class<?>> getSetMethodTypes(Class<?> clz) {
+        List<Class<?>> types = new ArrayList<Class<?>>();
+        for (Method method : clz.getMethods()) {
+            if (isSetter(method)) {
+                Class<?> type = method.getParameterTypes()[0];
+                if (BaseResource.class.isAssignableFrom(type) && 
!types.contains(type)) {
+                    types.add(type);
+                }
+            }
+        }
+        return types;
     }
 
     /**
@@ -41,7 +56,7 @@
      *            model types seen so far
      * @return a populated instance
      */
-    public static Object populate(Object model, Class<?> clz, List<Class<?>> 
seen) {
+    public static Object populate(Object model, Class<?> clz, List<Class<?>> 
seen, int level) {
 
         for (Method method : clz.getMethods()) {
             if (isSetter(method)) {
@@ -54,10 +69,10 @@
                     populateBigDecimal(method,model);
                 }
                 else {
-                    descend(method, model, scope(seen));
+                    descend(method, model, scope(seen), level);
                 }
             } else if (isGetter(method) && returnsList(method)) {
-                fill(method, model, seen);
+                fill(method, model, seen, level);
             }
         }
         return model;
@@ -121,12 +136,12 @@
         }
     }
 
-    private static void descend(Method method, Object model, List<Class<?>> 
seen) {
+    private static void descend(Method method, Object model, List<Class<?>> 
seen, int level) {
         try {
             Object child = method.getParameterTypes()[0].newInstance();
             method.invoke(model, child);
-            if (unseen(method, seen)) {
-                populate(child, child.getClass(), seen);
+            if (level == 1 || unseen(method, seen)) {
+                populate(child, child.getClass(), seen, ++level);
             }
         } catch (Exception e) {
             // simple setter, exception should not be thrown
@@ -134,13 +149,13 @@
     }
 
     @SuppressWarnings("unchecked")
-    private static void fill(Method method, Object model, List<Class<?>> seen) 
{
+    private static void fill(Method method, Object model, List<Class<?>> seen, 
int level) {
         try {
             // List<T> type parameter removed by erasure, hence we attempt to
             // infer from method name
             String elementType = method.getName().substring(GET_ROOT.length());
             Class<?> childType = coPackaged(model, elementType);
-            if (unseen(childType, seen)) {
+            if (level == 1 || unseen(childType, seen)) {
                 List<Object> list = (List<Object>) method.invoke(model);
                 Object child = null;
                 if (childType.isEnum()) {
@@ -150,7 +165,7 @@
                     child = childType.newInstance();
                 }
                 list.add(child);
-                populate(child, child.getClass(), seen);
+                populate(child, child.getClass(), seen, ++level);
             }
         } catch (Exception e) {
             // simple getter, exception should not be thrown
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkMapperTest.java
index 4503308..99290e3 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkMapperTest.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkMapperTest.java
@@ -3,6 +3,7 @@
 import org.ovirt.engine.api.common.util.StatusUtils;
 import org.ovirt.engine.api.model.Network;
 import org.ovirt.engine.api.model.NetworkStatus;
+import org.ovirt.engine.api.model.Usages;
 
 public class NetworkMapperTest extends AbstractInvertibleMappingTest<Network, 
org.ovirt.engine.core.common.businessentities.network.Network, 
org.ovirt.engine.core.common.businessentities.network.Network> {
 
@@ -33,6 +34,8 @@
     @Override
     protected Network postPopulate(Network model) {
         
model.setStatus(StatusUtils.create(MappingTestHelper.shuffle(NetworkStatus.class)));
+        model.setUsages(new Usages());
+        model.getUsages().getUsages().add("aaa");
         return super.postPopulate(model);
     }
 }
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
index 08bdc43..d41272c 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
@@ -8,11 +8,13 @@
 import org.ovirt.engine.api.model.ConfigurationType;
 import org.ovirt.engine.api.model.CpuTune;
 import org.ovirt.engine.api.model.DisplayType;
+import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.Payload;
 import org.ovirt.engine.api.model.Usb;
 import org.ovirt.engine.api.model.VCpuPin;
 import org.ovirt.engine.api.model.VM;
 import org.ovirt.engine.api.model.VmDeviceType;
+import org.ovirt.engine.api.model.VmPlacementPolicy;
 import org.ovirt.engine.api.model.VmType;
 import org.ovirt.engine.api.restapi.utils.OsTypeMockUtils;
 import org.ovirt.engine.core.common.businessentities.OriginType;
@@ -78,6 +80,9 @@
         cpuTune.getVCpuPin().add(pin);
         from.getCpu().setCpuTune(cpuTune);
         from.setTimezone("Australia/Darwin");
+        from.setPlacementPolicy(new VmPlacementPolicy());
+        from.getPlacementPolicy().setHost(new Host());
+        from.getPlacementPolicy().getHost().setId(Guid.Empty.toString());
         return from;
     }
 


-- 
To view, visit http://gerrit.ovirt.org/19670
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I29908ea9d5cf232a3079f28927b70ad0ce37a010
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ori Liel <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to