Initial implementation of gateway load balancer for SONA app
Change-Id: Idd03646d637acd448985eb6e62204a8a9d759867
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
index a6c4bc3..e33637e 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
@@ -16,17 +16,32 @@
package org.onosproject.openstacknetworking.util;
import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import com.google.common.testing.EqualsTester;
import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.IpAddress;
+import org.onosproject.net.Device;
+import org.onosproject.net.DeviceId;
+import org.onosproject.openstacknode.api.NodeState;
+import org.onosproject.openstacknode.api.OpenstackNode;
+import org.onosproject.openstacknode.impl.OpenstackNodeTest;
import org.openstack4j.model.network.NetFloatingIP;
import org.openstack4j.openstack.networking.domain.NeutronFloatingIP;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByComputeDevId;
public final class OpenstackNetworkingUtilTest {
@@ -56,4 +71,58 @@
OpenstackNetworkingUtil.jsonToModelEntity(is, NeutronFloatingIP.class);
new EqualsTester().addEqualityGroup(floatingIp, floatingIp2).testEquals();
}
+
+ /**
+ * Tests the getGwByComputeDevId method.
+ */
+ @Test
+ public void testGetGwByComputeDevId() {
+ Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
+ gws.add(genGateway(1));
+ gws.add(genGateway(2));
+ gws.add(genGateway(3));
+
+ Set<OpenstackNode> cloneOfGws = ImmutableSet.copyOf(gws);
+
+ Map<String, Integer> gwCountMap = Maps.newConcurrentMap();
+ int numOfDev = 99;
+
+ for (int i = 1; i < 1 + numOfDev; i++) {
+ OpenstackNode gw = getGwByComputeDevId(gws, genDeviceId(i));
+
+ if (gwCountMap.get(gw.hostname()) == null) {
+ gwCountMap.put(gw.hostname(), 1);
+ } else {
+ gwCountMap.compute(gw.hostname(), (k, v) -> v + 1);
+ }
+
+ new EqualsTester().addEqualityGroup(
+ getGwByComputeDevId(gws, genDeviceId(i)),
+ getGwByComputeDevId(cloneOfGws, genDeviceId(i)))
+ .testEquals();
+ }
+
+ int sum = gwCountMap.values().stream().mapToInt(Integer::intValue).sum();
+ assertEquals(numOfDev, sum);
+ }
+
+ private OpenstackNode genGateway(int index) {
+
+ Device intgBrg = InternalOpenstackNodeTest.createDevice(index);
+
+ String hostname = "gateway-" + index;
+ IpAddress ip = Ip4Address.valueOf("10.10.10." + index);
+ NodeState state = NodeState.COMPLETE;
+ String uplinkPort = "eth0";
+ return InternalOpenstackNodeTest.createNode(hostname,
+ OpenstackNode.NodeType.GATEWAY, intgBrg, ip, uplinkPort, state);
+
+ }
+
+ private DeviceId genDeviceId(int index) {
+ return DeviceId.deviceId("of:compute-" + index);
+ }
+
+ protected class InternalOpenstackNodeTest extends OpenstackNodeTest {
+ }
}