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
