Laszlo Hornyak has uploaded a new change for review. Change subject: engine: junit test for external scheduler broker ......................................................................
engine: junit test for external scheduler broker - added external scheduler broker - code formated on ExternalSchedulerDiscoveryResult Change-Id: Idd51a58b25e6f44a0dc979af1d54aeee7dd5dd7c Signed-off-by: Laszlo Hornyak <[email protected]> --- M backend/manager/modules/bll/pom.xml M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryResult.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerBrokerImplTest.java 3 files changed, 109 insertions(+), 12 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/06/18306/1 diff --git a/backend/manager/modules/bll/pom.xml b/backend/manager/modules/bll/pom.xml index 16e52db..a3ad466 100644 --- a/backend/manager/modules/bll/pom.xml +++ b/backend/manager/modules/bll/pom.xml @@ -142,6 +142,12 @@ <artifactId>jackson-mapper-asl</artifactId> </dependency> + <dependency> + <groupId>org.apache.xmlrpc</groupId> + <artifactId>xmlrpc-server</artifactId> + <version>3.1.3</version> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryResult.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryResult.java index ca010ec..b97a3da 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryResult.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryResult.java @@ -27,22 +27,23 @@ public boolean populate(Object xmlRpcRawResult) { try { - if (xmlRpcRawResult == null || !(xmlRpcRawResult instanceof HashMap)) { - log.error("External scheduler error, malformed discover results"); - return false; - } - @SuppressWarnings("unchecked") - HashMap<String, HashMap<String, Object[]>> castedResult = (HashMap<String, HashMap<String, Object[]>>) xmlRpcRawResult; + if (xmlRpcRawResult == null || !(xmlRpcRawResult instanceof HashMap)) { + log.error("External scheduler error, malformed discover results"); + return false; + } + @SuppressWarnings("unchecked") + HashMap<String, HashMap<String, Object[]>> castedResult = + (HashMap<String, HashMap<String, Object[]>>) xmlRpcRawResult; - // keys will be filter, score and balance - for (String type : castedResult.keySet()) { - HashMap<String, Object[]> typeMap = castedResult.get(type); + // keys will be filter, score and balance + for (String type : castedResult.keySet()) { + HashMap<String, Object[]> typeMap = castedResult.get(type); List<ExternalSchedulerDiscoveryUnit> currentList = getRelevantList(type); if (currentList == null) { log.error("External scheduler error, got unknown type"); return false; } - // list of module names as keys and [description, regex] as value + // list of module names as keys and [description, regex] as value for (String moduleName : typeMap.keySet()) { Object[] singleModule = typeMap.get(moduleName); // check custom properties format. @@ -58,8 +59,8 @@ customPropertiesRegex); currentList.add(currentUnit); } - } - return true; + } + return true; } catch (Exception e) { log.error("External scheduler error, exception why parsing discovery results", e); return false; diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerBrokerImplTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerBrokerImplTest.java new file mode 100644 index 0000000..b8556d0 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerBrokerImplTest.java @@ -0,0 +1,90 @@ +package org.ovirt.engine.core.bll.scheduling.external; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.XmlRpcHandler; +import org.apache.xmlrpc.XmlRpcRequest; +import org.apache.xmlrpc.server.XmlRpcHandlerMapping; +import org.apache.xmlrpc.server.XmlRpcNoSuchHandlerException; +import org.apache.xmlrpc.webserver.WebServer; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.utils.MockConfigRule; + +public class ExternalSchedulerBrokerImplTest { + final static private int testPort = 12345; + private WebServer server; + + @Rule + public MockConfigRule mcr = new MockConfigRule(MockConfigRule.mockConfig(ConfigValues.ExternalSchedulerServiceURL, + "http://localhost:" + testPort + "/"), + MockConfigRule.mockConfig(ConfigValues.ExternalSchedulerConnectionTimeout, 100), + MockConfigRule.mockConfig(ConfigValues.ExternalSchedulerResponseTimeout, 100000)); + + @Before + public void setupServer() throws IOException, XmlRpcException { + final XmlRpcHandler discovery = new XmlRpcHandler() { + + @Override + public Object execute(XmlRpcRequest pRequest) throws XmlRpcException { + HashMap<String, Map<String, Object[]>> map = new HashMap<String, Map<String, Object[]>>(); + HashMap<String, Object[]> filters = new HashMap<String, Object[]>(); + filters.put("foo", new Object[] { "", "" }); + filters.put("evil", new Object[] { "", ".*" }); + HashMap<String, Object[]> scores = new HashMap<String, Object[]>(); + scores.put("bar", new Object[] { "", "" }); + scores.put("evil", new Object[] { "", ".*" }); + map.put("filters", filters); + map.put("scores", scores); + return map; + } + }; + server = new WebServer(testPort); + server.getXmlRpcServer().setHandlerMapping(new XmlRpcHandlerMapping() { + + @Override + public XmlRpcHandler getHandler(String handlerName) throws XmlRpcNoSuchHandlerException, XmlRpcException { + switch (handlerName) { + case "discover": + return discovery; + default: + return null; + } + } + }); + server.start(); + + } + + @After + public void shutdownServer() throws IOException { + server.shutdown(); + } + + @Test + public void testDiscover() { + ExternalSchedulerBrokerImpl broker = new ExternalSchedulerBrokerImpl(); + ExternalSchedulerDiscoveryResult discoveryResult = broker.runDiscover(); + Assert.assertNotNull(discoveryResult); + Assert.assertNotNull(discoveryResult.getFilters()); + Assert.assertEquals(1, discoveryResult.getFilters().size()); // "evil" will be filtered out + Assert.assertNotNull(discoveryResult.getScores()); + Assert.assertEquals(1, discoveryResult.getScores().size()); // "evil" will be filtered out + } + + @Test + public void testDiscoverAndFail() { + mcr.mockConfigValue(ConfigValues.ExternalSchedulerServiceURL, "http://localhost:1/"); // intentionally bead port + ExternalSchedulerBrokerImpl broker = new ExternalSchedulerBrokerImpl(); + //if fail, null is returned + Assert.assertNull(broker.runDiscover()); + } + +} -- To view, visit http://gerrit.ovirt.org/18306 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Idd51a58b25e6f44a0dc979af1d54aeee7dd5dd7c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Laszlo Hornyak <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
