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

Reply via email to