Author: supun
Date: Tue Jun  8 22:05:25 2010
New Revision: 952839

URL: http://svn.apache.org/viewvc?rev=952839&view=rev
Log:
adding a test case for the Weighted Round Robin Least coneection algorithm

Added:
    synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/endpoints/
    
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/endpoints/algorithms/
    
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/endpoints/algorithms/WeightedRRLCAlgorithmTest.java

Added: 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/endpoints/algorithms/WeightedRRLCAlgorithmTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/endpoints/algorithms/WeightedRRLCAlgorithmTest.java?rev=952839&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/endpoints/algorithms/WeightedRRLCAlgorithmTest.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/endpoints/algorithms/WeightedRRLCAlgorithmTest.java
 Tue Jun  8 22:05:25 2010
@@ -0,0 +1,173 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.synapse.endpoints.algorithms;
+
+import junit.framework.TestCase;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.synapse.endpoints.Endpoint;
+import org.apache.synapse.endpoints.AddressEndpoint;
+import org.apache.synapse.endpoints.EndpointDefinition;
+import org.apache.synapse.endpoints.LoadbalanceEndpoint;
+import org.apache.synapse.mediators.MediatorProperty;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.config.SynapseConfiguration;
+import org.apache.synapse.core.axis2.Axis2MessageContext;
+import org.apache.synapse.core.axis2.Axis2SynapseEnvironment;
+import org.apache.synapse.core.SynapseEnvironment;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.engine.AxisConfiguration;
+
+public class WeightedRRLCAlgorithmTest extends TestCase {
+    private String[] hosts = {"localhost:9000", "localhost:9001",
+                              "localhost:9002", "localhost:9003",
+                              "localhost:9004"};
+
+    private String[] weights = {"6", "5", "3", "2", "1"};
+
+    private AtomicInteger[] connections = {
+            new AtomicInteger(18), new AtomicInteger(5),
+            new AtomicInteger(4), new AtomicInteger(2),
+            new AtomicInteger(1)};
+
+    public void testInitialization () {
+        LoadbalanceEndpoint endpoint = createLoadBalanceEndpoint();
+
+        LoadbalanceAlgorithm algo = endpoint.getAlgorithm();
+
+        assert algo instanceof WeightedRRLCAlgorithm;                    
+        WeightedRRLCAlgorithm algorithm = (WeightedRRLCAlgorithm) algo;
+
+        assertEquals(10 + 5 + 3 + 2 + 1, algorithm.getTotalWeight());
+        assertEquals(0, algorithm.getTotalConnections());
+        assertEquals(0, algorithm.getEndpointCursor());
+        assertEquals(2, algorithm.getRoundsPerRecalculation());
+    }
+
+    public void testNextEndpoint() {
+        MessageContext messageContext = createMessageContext();
+        LoadbalanceEndpoint endpoint = createLoadBalanceEndpoint();
+
+        String []firstTwoRoundsExpected = {
+                "6", "6", "6", "6", "6", "6", "5", "5", "5", "5", "5", "3", 
"3", "3", "2", "2", "1",
+                "6", "6", "6", "6", "6", "6", "5", "5", "5", "5", "5", "3", 
"3", "3", "2", "2", "1"};
+
+        LoadbalanceAlgorithm algo = endpoint.getAlgorithm();
+
+        String []firstTwoRoundsResults = new String[34];
+        for (int i = 0; i < 34; i++) {
+            Endpoint epr = algo.getNextEndpoint(messageContext, null);
+            if (epr instanceof AddressEndpoint) {
+                firstTwoRoundsResults[i] =
+                        ((AddressEndpoint)epr).getProperty(
+                                
WeightedRRLCAlgorithm.LB_WEIGHTED_RRLC_WEIGHT).getValue();
+            }
+        }
+
+        for (int i = 0; i < 34; i++) {
+            assertEquals(firstTwoRoundsExpected[i], firstTwoRoundsResults[i]);
+        }
+
+        String []secondTwoRoundsExpected = {
+                "6", "6", "6", "6", "5", "5", "5", "5", "5", "5", "5", "3", 
"3", "3", "3", "2", "2",
+                "2", "2", "1", "1", "6", "6", "6", "6", "5", "5", "5", "5", 
"5", "5", "5", "3", "3"};
+        String []secondTwoRoundsResults = new String[34];
+        for (int i = 0; i < 34; i++) {
+            Endpoint epr = algo.getNextEndpoint(messageContext, null);
+            if (epr instanceof AddressEndpoint) {
+                secondTwoRoundsResults[i] =
+                        ((AddressEndpoint)epr).getProperty(
+                                
WeightedRRLCAlgorithm.LB_WEIGHTED_RRLC_WEIGHT).getValue();
+            }
+        }
+
+        for (int i = 0; i < 34; i++) {
+            assertEquals(secondTwoRoundsExpected[i], 
secondTwoRoundsResults[i]);
+        }
+    }
+
+    private LoadbalanceEndpoint createLoadBalanceEndpoint() {
+        LoadbalanceEndpoint loadbalanceEndpoint = new LoadbalanceEndpoint();
+        List<Endpoint> endpoints = createEndpoints();
+        WeightedRRLCAlgorithm algorithm = new WeightedRRLCAlgorithm();
+
+        MediatorProperty property = new MediatorProperty();
+        
property.setName(WeightedRRLCAlgorithm.LB_WEIGHTED_RRLC_ROUNDS_PER_RECAL);
+        property.setValue("2");
+        loadbalanceEndpoint.addProperty(property);        
+
+        algorithm.setEndpoints(endpoints);
+        algorithm.setLoadBalanceEndpoint(loadbalanceEndpoint);
+
+        loadbalanceEndpoint.setChildren(endpoints);
+        loadbalanceEndpoint.setAlgorithm(algorithm);
+
+        SynapseEnvironment env = new Axis2SynapseEnvironment(
+                new ConfigurationContext(new AxisConfiguration()), new 
SynapseConfiguration());
+        loadbalanceEndpoint.init(env);
+        return loadbalanceEndpoint;
+    }
+
+    private MessageContext createMessageContext() {
+        org.apache.axis2.context.MessageContext axisMessageContext =
+                new org.apache.axis2.context.MessageContext();
+
+        MessageContext synapseMessageContext =
+                new Axis2MessageContext(axisMessageContext, null, null);
+
+        axisMessageContext.setProperty("OPEN_CONNNECTIONS_MAP", createMap());
+
+        return synapseMessageContext;
+    }
+
+    private Map<String, AtomicInteger> createMap() {
+        Map<String, AtomicInteger> connectionsMap = new HashMap<String, 
AtomicInteger>();
+        for (int i = 0; i < hosts.length; i++) {
+            connectionsMap.put(hosts[i], connections[i]);
+        }
+        return connectionsMap;
+    }
+
+
+    private List<Endpoint> createEndpoints() {
+        List<Endpoint> endpoints = new ArrayList<Endpoint>();
+        for (int i = 0; i < hosts.length; i++) {
+            AddressEndpoint addressEndpoint = new AddressEndpoint();
+
+            EndpointDefinition definition = new EndpointDefinition();
+            definition.setAddress("http://"; + hosts[i] + "/");
+            addressEndpoint.setDefinition(definition);
+
+            MediatorProperty property = new MediatorProperty();
+            property.setName(WeightedRRLCAlgorithm.LB_WEIGHTED_RRLC_WEIGHT);
+            property.setValue(weights[i]);
+            addressEndpoint.addProperty(property);
+
+            endpoints.add(addressEndpoint);
+        }
+
+        return endpoints;
+    }
+}


Reply via email to