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;
+ }
+}