Incrementing versions by 0.1.0 for post-helium master branch 74/14774/1
authorShreshthaJoshi <shreshtha.joshi@tcs.com>
Tue, 3 Feb 2015 10:30:31 +0000 (16:00 +0530)
committerShreshthaJoshi <shreshtha.joshi@tcs.com>
Tue, 3 Feb 2015 10:52:46 +0000 (16:22 +0530)
Adding files to enable LBaaS support in OpenContrail via OpenDayLight

Change-Id: Ic964b9833184625e66d95ef69307d6b39adbb2c7
Signed-off-by: ShreshthaJoshi <shreshtha.joshi@tcs.com>
17 files changed:
commons/parent/pom.xml
distribution-karaf/pom.xml
features-plugin2oc/pom.xml
features-plugin2oc/src/main/resources/features.xml
neutron/pom.xml
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/Activator.java
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHandler.java [new file with mode: 0644]
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHealthMonitorHandler.java [new file with mode: 0644]
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerListenerHandler.java [new file with mode: 0644]
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolHandler.java [new file with mode: 0644]
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolMemberHandler.java [new file with mode: 0644]
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHandlerTest.java [new file with mode: 0644]
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHealthMonitorHandlerTest.java [new file with mode: 0644]
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerListenerHandlerTest.java [new file with mode: 0644]
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolHandlerTest.java [new file with mode: 0644]
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolMemberHandlerTest.java [new file with mode: 0644]
pom.xml

index 0148a7d13a3535863fe1dfa9867f40c4768d4723..f63c388af24fab54887318d4785f7d2cdb192e36 100755 (executable)
@@ -7,11 +7,11 @@
   <parent>
     <groupId>org.opendaylight.controller</groupId>
     <artifactId>commons.opendaylight</artifactId>
-    <version>1.4.2-SNAPSHOT</version>
+    <version>1.5.0-SNAPSHOT</version>
   </parent>
   <groupId>org.opendaylight.plugin2oc</groupId>
   <artifactId>commons.plugin2oc</artifactId>
-  <version>0.1-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <properties>
index d8a6e88c2bcca2eeaf122ddce37e4058f73503b3..423d68e016b290fe9b6d83015b0a6906952d18d5 100755 (executable)
@@ -4,7 +4,7 @@
   <parent>\r
     <artifactId>commons.plugin2oc</artifactId>\r
     <groupId>org.opendaylight.plugin2oc</groupId>\r
-    <version>0.1-SNAPSHOT</version>\r
+    <version>0.2.0-SNAPSHOT</version>\r
     <relativePath>../commons/parent</relativePath>\r
 </parent>\r
   <artifactId>distribution-karaf</artifactId>\r
@@ -14,8 +14,8 @@
     <maven>3.0</maven>\r
   </prerequisites>\r
   <properties>\r
-    <branding.version>1.0.0-SNAPSHOT</branding.version>\r
-    <karaf.resources.version>1.4.2-SNAPSHOT</karaf.resources.version>\r
+    <branding.version>1.1.0-SNAPSHOT</branding.version>\r
+    <karaf.resources.version>1.5.0-SNAPSHOT</karaf.resources.version>\r
     <karaf.version>3.0.1</karaf.version>\r
   </properties>\r
   <dependencies>\r
@@ -37,7 +37,7 @@
     <dependency>\r
         <groupId>org.opendaylight.controller</groupId>\r
         <artifactId>features-adsal</artifactId>\r
-        <version>0.8.1-SNAPSHOT</version>\r
+        <version>0.9.0-SNAPSHOT</version>\r
         <classifier>features</classifier>\r
         <type>xml</type>\r
         <scope>runtime</scope>\r
@@ -45,7 +45,7 @@
     <dependency>\r
         <groupId>org.opendaylight.controller</groupId>\r
         <artifactId>features-base</artifactId>\r
-        <version>1.4.2-SNAPSHOT</version>\r
+        <version>1.5.0-SNAPSHOT</version>\r
         <classifier>features</classifier>\r
         <type>xml</type>\r
         <scope>runtime</scope>\r
@@ -53,7 +53,7 @@
     <dependency>\r
         <groupId>org.opendaylight.controller</groupId>\r
         <artifactId>features-nsf</artifactId>\r
-        <version>0.4.2-SNAPSHOT</version>\r
+        <version>0.5.0-SNAPSHOT</version>\r
         <classifier>features</classifier>\r
         <type>xml</type>\r
         <scope>runtime</scope>\r
@@ -61,7 +61,7 @@
     <dependency>\r
         <groupId>org.opendaylight.plugin2oc</groupId>\r
         <artifactId>features-plugin2oc</artifactId>\r
-        <version>0.1-SNAPSHOT</version>\r
+        <version>0.2.0-SNAPSHOT</version>\r
         <classifier>features</classifier>\r
         <type>xml</type>\r
         <scope>runtime</scope>\r
@@ -69,7 +69,7 @@
     <dependency>\r
         <groupId>org.opendaylight.yangtools</groupId>\r
         <artifactId>features-yangtools</artifactId>\r
-        <version>0.6.2-SNAPSHOT</version>\r
+        <version>0.7.0-SNAPSHOT</version>\r
         <classifier>features</classifier>\r
         <type>xml</type>\r
         <scope>runtime</scope>\r
@@ -77,7 +77,7 @@
       <dependency>\r
         <groupId>org.opendaylight.controller</groupId>\r
         <artifactId>features-mdsal</artifactId>\r
-        <version>1.1-SNAPSHOT</version>\r
+        <version>1.2.0-SNAPSHOT</version>\r
         <classifier>features</classifier>\r
         <type>xml</type>\r
         <scope>runtime</scope>\r
index cf4349004e8de5d57853ff8fb7020b4b73ae2675..9a4b14747f652eb1b83b2d3fe9176ae55c137e70 100755 (executable)
@@ -9,83 +9,83 @@
    <parent>\r
     <artifactId>plugin2oc.project</artifactId>\r
     <groupId>org.opendaylight.plugin2oc</groupId>\r
-    <version>0.1-SNAPSHOT</version>\r
+    <version>0.2.0-SNAPSHOT</version>\r
   </parent>\r
    <artifactId>features-plugin2oc</artifactId>\r
    <groupId>org.opendaylight.plugin2oc</groupId>\r
    <packaging>jar</packaging>\r
    <properties>\r
       <features.file>features.xml</features.file>\r
-      <branding.version>1.0.0-SNAPSHOT</branding.version>\r
-      <karaf.resources.version>1.4.2-SNAPSHOT</karaf.resources.version>\r
+      <branding.version>1.1.0-SNAPSHOT</branding.version>\r
+      <karaf.resources.version>1.5.0-SNAPSHOT</karaf.resources.version>\r
       <karaf.version>3.0.1</karaf.version>\r
-      <feature.test.version>0.6.2-SNAPSHOT</feature.test.version>\r
-      <karaf.empty.version>1.4.2-SNAPSHOT</karaf.empty.version>\r
+      <feature.test.version>0.7.0-SNAPSHOT</feature.test.version>\r
+      <karaf.empty.version>1.5.0-SNAPSHOT</karaf.empty.version>\r
       <surefire.version>2.17</surefire.version>\r
-      <yangtools.version>0.6.2-SNAPSHOT</yangtools.version>\r
+      <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>\r
    </properties>\r
 \r
    <dependencies>\r
         <dependency>\r
           <groupId>org.opendaylight.yangtools</groupId>\r
           <artifactId>features-yangtools</artifactId>\r
-          <version>0.6.2-SNAPSHOT</version>\r
+          <version>0.7.0-SNAPSHOT</version>\r
           <classifier>features</classifier>\r
           <type>xml</type>\r
         </dependency>\r
         <dependency>\r
           <groupId>org.opendaylight.controller</groupId>\r
           <artifactId>features-nsf</artifactId>\r
-          <version>0.4.2-SNAPSHOT</version>\r
+          <version>0.5.0-SNAPSHOT</version>\r
           <classifier>features</classifier>\r
           <type>xml</type>\r
         </dependency>\r
         <dependency>\r
           <groupId>org.opendaylight.controller</groupId>\r
           <artifactId>features-adsal</artifactId>\r
-          <version>0.8.1-SNAPSHOT</version>\r
+          <version>0.9.0-SNAPSHOT</version>\r
           <classifier>features</classifier>\r
           <type>xml</type>\r
         </dependency>\r
         <dependency>\r
           <groupId>org.opendaylight.controller</groupId>\r
           <artifactId>features-base</artifactId>\r
-          <version>1.4.2-SNAPSHOT</version>\r
+          <version>1.5.0-SNAPSHOT</version>\r
           <classifier>features</classifier>\r
           <type>xml</type>\r
         </dependency>\r
         <dependency>\r
             <groupId>org.opendaylight.controller</groupId>\r
             <artifactId>features-mdsal</artifactId>\r
-            <version>1.1-SNAPSHOT</version>\r
+            <version>1.2.0-SNAPSHOT</version>\r
             <classifier>features</classifier>\r
             <type>xml</type>\r
         </dependency>\r
         <dependency>\r
             <groupId>org.opendaylight.controller</groupId>\r
             <artifactId>sal</artifactId>\r
-            <version>0.8.1-SNAPSHOT</version>\r
+            <version>0.9.0-SNAPSHOT</version>\r
         </dependency>\r
         <dependency>\r
             <groupId>org.opendaylight.controller</groupId>\r
             <artifactId>sal-binding-api</artifactId>\r
-            <version>1.1-SNAPSHOT</version>\r
+            <version>1.2.0-SNAPSHOT</version>\r
         </dependency>\r
         <dependency>\r
             <groupId>org.opendaylight.controller</groupId>\r
-            <version>0.4.2-SNAPSHOT</version>\r
+            <version>0.5.0-SNAPSHOT</version>\r
             <artifactId>networkconfig.neutron</artifactId>\r
         </dependency>\r
         <dependency>\r
             <groupId>org.opendaylight.plugin2oc</groupId>\r
-            <version>0.1-SNAPSHOT</version>\r
+            <version>0.2.0-SNAPSHOT</version>\r
             <artifactId>plugin2oc.neutron</artifactId>\r
         </dependency>\r
     <!-- test the features.xml -->\r
     <dependency>\r
       <groupId>org.opendaylight.yangtools</groupId>\r
       <artifactId>features-test</artifactId>\r
-      <version>0.6.2-SNAPSHOT</version>\r
+      <version>0.7.0-SNAPSHOT</version>\r
       <scope>test</scope>\r
     </dependency>\r
 \r
@@ -93,7 +93,7 @@
     <dependency>\r
       <groupId>org.opendaylight.controller</groupId>\r
       <artifactId>opendaylight-karaf-empty</artifactId>\r
-      <version>1.4.2-SNAPSHOT</version>\r
+      <version>1.5.0-SNAPSHOT</version>\r
       <type>zip</type>\r
     </dependency>\r
    </dependencies>\r
index ea9e8df9c8cee2a1ebedc1f5ebc17f242f16fb77..ecd1721bcd0f6e278d07b9540637156c70fdc2e2 100755 (executable)
@@ -8,11 +8,11 @@
 <features name="odl-plugin2oc-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
-    <repository>mvn:org.opendaylight.yangtools/features-yangtools/0.6.2-SNAPSHOT/xml/features</repository>
-    <repository>mvn:org.opendaylight.controller/features-nsf/0.4.2-SNAPSHOT/xml/features</repository>
-    <repository>mvn:org.opendaylight.controller/features-adsal/0.8.1-SNAPSHOT/xml/features</repository>
-    <repository>mvn:org.opendaylight.controller/features-base/1.4.2-SNAPSHOT/xml/features</repository>
-    <repository>mvn:org.opendaylight.controller/features-mdsal/1.1-SNAPSHOT/xml/features</repository>
+    <repository>mvn:org.opendaylight.yangtools/features-yangtools/0.7.0-SNAPSHOT/xml/features</repository>
+    <repository>mvn:org.opendaylight.controller/features-nsf/0.5.0-SNAPSHOT/xml/features</repository>
+    <repository>mvn:org.opendaylight.controller/features-adsal/0.9.0-SNAPSHOT/xml/features</repository>
+    <repository>mvn:org.opendaylight.controller/features-base/1.5.0-SNAPSHOT/xml/features</repository>
+    <repository>mvn:org.opendaylight.controller/features-mdsal/1.2.0-SNAPSHOT/xml/features</repository>
     <feature name='odl-plugin2oc' description="OpenDaylight :: plugin2oc :: Plugin" version='${project.version}'>
         <feature>odl-nsf-all</feature>
         <feature>odl-adsal-all</feature>
@@ -20,9 +20,9 @@
         <feature>odl-mdsal-broker</feature>
         <feature>odl-yangtools-models</feature>
         <feature>odl-yangtools-binding</feature>
-        <bundle>mvn:org.opendaylight.controller/networkconfig.neutron/0.4.2-SNAPSHOT</bundle>
-        <bundle>mvn:org.opendaylight.controller/sal/0.8.1-SNAPSHOT</bundle>
-        <bundle>mvn:org.opendaylight.controller/sal-binding-api/1.1-SNAPSHOT</bundle>
-        <bundle>mvn:org.opendaylight.plugin2oc/plugin2oc.neutron/0.1-SNAPSHOT</bundle>
+        <bundle>mvn:org.opendaylight.controller/networkconfig.neutron/0.5.0-SNAPSHOT</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal/0.9.0-SNAPSHOT</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-binding-api/1.2.0-SNAPSHOT</bundle>
+        <bundle>mvn:org.opendaylight.plugin2oc/plugin2oc.neutron/0.2.0-SNAPSHOT</bundle>
     </feature>
 </features>
index 68f61e14a653ebb308dc6514e61d6101f32dcc07..c3daf8b7487c5f1094d1ba588f4efea7b00eed4b 100755 (executable)
@@ -5,11 +5,11 @@
     <parent>\r
         <groupId>org.opendaylight.plugin2oc</groupId>\r
         <artifactId>commons.plugin2oc</artifactId>\r
-        <version>0.1-SNAPSHOT</version>\r
+        <version>0.2.0-SNAPSHOT</version>\r
         <relativePath>../commons/parent</relativePath>\r
     </parent>\r
     <artifactId>plugin2oc.neutron</artifactId>\r
-    <version>0.1-SNAPSHOT</version>\r
+    <version>0.2.0-SNAPSHOT</version>\r
     <packaging>bundle</packaging>\r
     <repositories>\r
         <repository>\r
@@ -68,7 +68,7 @@
         </dependency>\r
         <dependency>\r
             <groupId>org.opendaylight.controller</groupId>\r
-            <version>0.4.2-SNAPSHOT</version>\r
+            <version>0.5.0-SNAPSHOT</version>\r
             <artifactId>networkconfig.neutron</artifactId>\r
         </dependency>\r
         <dependency>\r
         <dependency>\r
             <groupId>org.opendaylight.controller</groupId>\r
             <artifactId>sal</artifactId>\r
-            <version>0.8.1-SNAPSHOT</version>\r
+            <version>0.9.0-SNAPSHOT</version>\r
         </dependency>\r
         <dependency>\r
             <groupId>org.opendaylight.controller</groupId>\r
             <artifactId>sal-binding-api</artifactId>\r
-            <version>1.1-SNAPSHOT</version>\r
+            <version>1.2.0-SNAPSHOT</version>\r
         </dependency>\r
         <dependency>\r
             <groupId>org.mockito</groupId>\r
index f81d01615fca1ae083d1e1f80dc6ed8fc852b29c..8e7ce59a45532644d4732d6d7294eb1b19132684 100755 (executable)
@@ -80,7 +80,10 @@ public class Activator extends ComponentActivatorAbstractBase {
      */
     @Override
     public Object[] getImplementations() {
-        Object[] res = { NetworkHandler.class, SubnetHandler.class, PortHandler.class, RouterHandler.class, FloatingIpHandler.class, SecurityGroupHandler.class, SecurityGroupRulesHandler.class };
+        Object[] res = { NetworkHandler.class, SubnetHandler.class, PortHandler.class, RouterHandler.class,
+                FloatingIpHandler.class, SecurityGroupHandler.class, SecurityGroupRulesHandler.class,
+                LoadBalancerHandler.class, LoadBalancerHealthMonitorHandler.class, LoadBalancerListenerHandler.class,
+                LoadBalancerPoolHandler.class, LoadBalancerPoolMemberHandler.class, };
         return res;
     }
 
@@ -88,10 +91,10 @@ public class Activator extends ComponentActivatorAbstractBase {
      * Function that is called when configuration of the dependencies is
      * required.
      *
-     * @param c
+     *@param c
      *            dependency manager Component object, used for configuring the
      *            dependencies exported and imported
-     * @param imp
+     *@param imp
      *            Implementation class that is being configured, needed as long
      *            as the same routine can configure multiple implementations
      * @param containerName
@@ -122,6 +125,21 @@ public class Activator extends ComponentActivatorAbstractBase {
         if (imp.equals(SecurityGroupRulesHandler.class)) {
             c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
         }
+        if (imp.equals(LoadBalancerHandler.class)) {
+            c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
+        }
+        if (imp.equals(LoadBalancerHealthMonitorHandler.class)) {
+            c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
+        }
+        if (imp.equals(LoadBalancerListenerHandler.class)) {
+            c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
+        }
+        if (imp.equals(LoadBalancerPoolHandler.class)) {
+            c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
+        }
+        if (imp.equals(LoadBalancerPoolMemberHandler.class)) {
+            c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
+        }
         // Create service dependencies.
         c.add(createServiceDependency().setService(BindingAwareBroker.class).setCallbacks("setBindingAwareBroker", "unsetBindingAwareBroker")
                 .setRequired(true));
diff --git a/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHandler.java b/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHandler.java
new file mode 100644 (file)
index 0000000..61a0af2
--- /dev/null
@@ -0,0 +1,344 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.util.List;
+import java.util.UUID;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.ObjectReference;
+import net.juniper.contrail.api.types.InstanceIp;
+import net.juniper.contrail.api.types.Project;
+import net.juniper.contrail.api.types.VirtualMachineInterface;
+import net.juniper.contrail.api.types.VirtualNetwork;
+import net.juniper.contrail.api.types.VnSubnetsType;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
+import org.opendaylight.controller.networkconfig.neutron.NeutronCRUDInterfaces;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancer;
+import org.opendaylight.controller.networkconfig.neutron.NeutronSubnet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Handle requests for Neutron LoadBalancer.
+ */
+public class LoadBalancerHandler implements INeutronLoadBalancerAware {
+    /**
+     * Logger instance.
+     */
+    static final Logger LOGGER = LoggerFactory.getLogger(LoadBalancerHandler.class);
+    static ApiConnector apiConnector;
+
+    /**
+     * Invoked when a LoadBalancer creation is requested to check if the specified
+     * LoadBalancer can be created and then creates the LoadBalancer
+     *
+     * @param loadBalancer
+     *            An instance of proposed new Neutron LoadBalancer object.
+     *
+     * @return A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronLoadBalancer(NeutronLoadBalancer loadBalancer) {
+        if (loadBalancer == null) {
+            LOGGER.error("LoadBalancer object can't be null..");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        apiConnector = Activator.apiConnector;
+        if (loadBalancer.getLoadBalancerTenantID() == null || loadBalancer.getLoadBalancerVipSubnetID() == null) {
+            LOGGER.error("LoadBalancer TenanID/SubnetID can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            String loadBalancerID = loadBalancer.getLoadBalancerID();
+            String loadBalancerVipSubnetID = loadBalancer.getLoadBalancerVipSubnetID();
+            String projectUUID = loadBalancer.getLoadBalancerTenantID();
+            try {
+                if (!(loadBalancerID.contains("-"))) {
+                    loadBalancerID = Utils.uuidFormater(loadBalancerID);
+                }
+                if (!(projectUUID.contains("-"))) {
+                    projectUUID = Utils.uuidFormater(projectUUID);
+                }
+                if (!(loadBalancerVipSubnetID.contains("-"))) {
+                    loadBalancerVipSubnetID = Utils.uuidFormater(loadBalancerVipSubnetID);
+                }
+                boolean isValidLoadBalancerID = Utils.isValidHexNumber(loadBalancerID);
+                boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);
+                boolean isValidVipSubnetID = Utils.isValidHexNumber(loadBalancerVipSubnetID);
+                if (!isValidLoadBalancerID || !isValidprojectUUID || !isValidVipSubnetID) {
+                    LOGGER.info("Badly formed Hexadecimal UUID...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                projectUUID = UUID.fromString(projectUUID).toString();
+                loadBalancerID = UUID.fromString(loadBalancerID).toString();
+                loadBalancerVipSubnetID = UUID.fromString(loadBalancerVipSubnetID).toString();
+            } catch (Exception ex) {
+                LOGGER.error("UUID input incorrect", ex);
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            if (project == null) {
+                try {
+                    Thread.currentThread();
+                    Thread.sleep(3000);
+                } catch (InterruptedException e) {
+                    LOGGER.error("InterruptedException :    ", e);
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                project = (Project) apiConnector.findById(Project.class, projectUUID);
+                if (project == null) {
+                    LOGGER.error("Could not find projectUUID...");
+                    return HttpURLConnection.HTTP_NOT_FOUND;
+                }
+            }
+            /* TODO: support for LoadBalancer is not provided in OpenContrail */
+            // LoadBalancer loadBalancer = (LoadBalancer)
+            // apiConnector.findById(LoadBalancer.class, loadBalancerID);
+            // if (loadBalancer != null) {
+            // LOGGER.warn("Loadbalancer already exists with UUID" +
+            // loadBalancerID);
+            // return HttpURLConnection.HTTP_FORBIDDEN;
+            // }
+
+            /* to check if provided subnet ID already exists in contrail */
+
+            INeutronSubnetCRUD subnetInterface = NeutronCRUDInterfaces.getINeutronSubnetCRUD(this);
+            if (subnetInterface == null) {
+                LOGGER.error("The subnet does not exists in ODL itself..");
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            NeutronSubnet subnet = subnetInterface.getSubnet(loadBalancerVipSubnetID);
+            if (subnet == null) {
+                LOGGER.error("Subnet does not exists...");
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            String networkUUID = subnet.getNetworkUUID();
+            VirtualNetwork virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+            if (virtualnetwork == null) {
+                LOGGER.error("No network exists for the specified subnet...");
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            } else {
+                try {
+                    boolean ifSubnetExist = subnetExists(virtualnetwork.getNetworkIpam(), subnet);
+                    if (!ifSubnetExist) {
+                        LOGGER.error("The subnet does not exists..");
+                        return HttpURLConnection.HTTP_FORBIDDEN;
+                    }
+                } catch (Exception e) {
+                    LOGGER.error("Exception:  " + e);
+                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
+                }
+            }
+            return HttpURLConnection.HTTP_OK;
+        } catch (IOException ie) {
+            LOGGER.error("IOException :   " + ie);
+            System.out.println("exception 1");
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        } catch (Exception e) {
+            LOGGER.error("Exception :   " + e);
+            System.out.println("exception 2");
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+
+    }
+
+    /**
+     * Invoked to take action after a loadBalancer has been created.
+     *
+     * @param loadBalancer
+     *            An instance of new Neutron loadBalancer object.
+     */
+    @Override
+    public void neutronLoadBalancerCreated(NeutronLoadBalancer loadBalancer) {
+        try {
+            createLoadBalancer(loadBalancer);
+        } catch (IOException ex) {
+            LOGGER.warn("Exception  :    " + ex);
+        }
+//        LoadBalancer loadBalancer = null;
+        try {
+            String loadBalanceUUID = loadBalancer.getLoadBalancerID();
+            if (!(loadBalanceUUID.contains("-"))) {
+                loadBalanceUUID = Utils.uuidFormater(loadBalanceUUID);
+            }
+            loadBalanceUUID = UUID.fromString(loadBalanceUUID).toString();
+            /* TODO: support for LoadBalancer is not provided in OpenContrail */
+            // loadBalancer = (LoadBalancer)
+            // apiConnector.findById(LoadBalancer.class, loadBalancerID);
+            // if (loadBalancer != null) {
+            // LOGGER.warn("Loadbalancer creation verified...." +
+            // loadBalancerID);
+            // return HttpURLConnection.HTTP_FORBIDDEN;
+            // }
+        } catch (Exception e) {
+            LOGGER.error("Exception :     " + e);
+        }
+    }
+
+    /**
+     * Invoked to create the specified Neutron LoadBalancer.
+     *
+     * @param loadBalancer
+     *            An instance of new Neutron LoadBalancer object.
+     */
+    private void createLoadBalancer(NeutronLoadBalancer loadBalancer) throws IOException {
+//        LoadBalancer virtualLoadBalancer = new LoadBalancer();
+//        virtualLoadBalancer = mapLoadBalancerProperties(loadBalancer, virtualLoadBalancer);
+        Project project = (Project) apiConnector.findById(Project.class, loadBalancer.getLoadBalancerTenantID());
+        INeutronSubnetCRUD subnetInterface = NeutronCRUDInterfaces.getINeutronSubnetCRUD(this);
+        NeutronSubnet subnet = subnetInterface.getSubnet(loadBalancer.getLoadBalancerVipSubnetID());
+        String networkUUID = subnet.getNetworkUUID();
+        VirtualNetwork virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+        VirtualMachineInterface vmi = new VirtualMachineInterface();
+        vmi.setName(UUID.randomUUID().toString());
+        vmi.setUuid(UUID.randomUUID().toString());
+        vmi.setParent(project);
+        vmi.setVirtualNetwork(virtualnetwork);
+        boolean virtualMachineInterfaceCreated = apiConnector.create(vmi);
+        if (!virtualMachineInterfaceCreated) {
+            LOGGER.warn("actual virtualMachineInterface creation failed..");
+        }
+//        /* setting vmi in LoadBalancer in OpenContrail */
+//        virtualLoadBalancer.setVirtualMachineInterface(vmi);
+         String ips = loadBalancer.getLoadBalancerVipAddress();
+         InstanceIp instanceIp = new InstanceIp();
+         String instaneIpUuid = UUID.randomUUID().toString();
+         instanceIp.setAddress(ips);
+         instanceIp.setName(instaneIpUuid);
+         instanceIp.setUuid(instaneIpUuid);
+         instanceIp.setParent(vmi);
+         instanceIp.setVirtualMachineInterface(vmi);
+         instanceIp.setVirtualNetwork(virtualnetwork);
+         boolean instanceIpCreated = apiConnector.create(instanceIp);
+         if (!instanceIpCreated) {
+         LOGGER.warn("instanceIp addition failed..");
+         }
+         LOGGER.info("Instance IP " + instanceIp.getAddress() +
+         " added sucessfully...");
+//        boolean loadBalancerCreated;
+        try {
+//            loadBalancerCreated = apiConnector.create(virtualLoadBalancer);
+//            LOGGER.debug("loadBalancer:   " + loadBalancerCreated);
+//            if (!loadBalancerCreated) {
+//                LOGGER.info("loadBalancer creation failed..");
+//            }
+        } catch (Exception Ex) {
+            LOGGER.error("Exception : " + Ex);
+        }
+    }
+
+    @Override
+    public int canUpdateNeutronLoadBalancer(NeutronLoadBalancer delta, NeutronLoadBalancer original) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public void neutronLoadBalancerUpdated(NeutronLoadBalancer loadBalancer) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public int canDeleteNeutronLoadBalancer(NeutronLoadBalancer loadBalancer) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public void neutronLoadBalancerDeleted(NeutronLoadBalancer loadBalancer) {
+        // TODO Auto-generated method stub
+
+    }
+    /**
+     * Invoked to map the NeutronLoadBalancer object properties to the LoadBalancer
+     * object.
+     *
+     * @param loadBalancer
+     *            An instance of new NeutronLoadBalancer object.
+     * @param virtualLoadBalancer
+     *            An instance of new LoadBalancer object.
+     * @return {@link LoadBalancer}
+     */
+//    private LoadBalancer mapLoadBalancerProperties(NeutronLoadBalancer loadBalancer, LoadBalancer virtualLoadBalancer) {
+//        String loadBalancerID = loadBalancer.getLoadBalancerID();
+//        String loadBalancerName = loadBalancer.getLoadBalancerName();
+//        String projectUUID = loadBalancer.getLoadBalancerTenantID();
+//        try {
+//            if (!(loadBalancerID.contains("-"))) {
+//                loadBalancerID = Utils.uuidFormater(loadBalancerID);
+//            }
+//            loadBalancerID = UUID.fromString(loadBalancerID).toString();
+//            if (!(projectUUID.contains("-"))) {
+//                projectUUID = Utils.uuidFormater(projectUUID);
+//            }
+//            projectUUID = UUID.fromString(projectUUID).toString();
+//            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+//            virtualLoadBalancer.setParent(project);
+//        } catch (Exception ex) {
+//            LOGGER.error("UUID input incorrect", ex);
+//        }
+//        LoadBalancerType loadBalancerType = new LoadBalancerType();
+//        loadBalancerType.setAddress(loadBalancer.getLoadBalancerVipAddress());
+//        loadBalancerType.setAdminState(true);
+//        loadBalancerType.setSubnetId(loadBalancer.getLoadBalancerVipSubnetID());
+//        virtualLoadBalancer.setDisplayName(loadBalancerName);
+//        virtualLoadBalancer.setUuid(loadBalancerID);
+//        return virtualLoadBalancer;
+//    }
+
+    /**
+     * Invoked to check if subnet exists from the Neutron Subnet object.
+     *
+     * @param ipamRefs
+     *            An list of new ObjectReference<VnSubnetsType> objects.
+     *
+     * @param subnet
+     *            An instance of new Neutron Subnet object.
+     *
+     * @return boolean
+     */
+    private boolean subnetExists(List<ObjectReference<VnSubnetsType>> ipamRefs, NeutronSubnet subnet) {
+        if (ipamRefs != null) {
+            for (ObjectReference<VnSubnetsType> ref : ipamRefs) {
+                VnSubnetsType vnSubnetsType = ref.getAttr();
+                if (vnSubnetsType != null) {
+                    List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetsType.getIpamSubnets();
+                    if (subnets != null) {
+                        for (VnSubnetsType.IpamSubnetType subnetValue : subnets) {
+                            String[] ipPrefix = getIpPrefix(subnet);
+                            Boolean doesSubnetExist = subnetValue.getSubnet().getIpPrefix().matches(ipPrefix[0]);
+                            if (doesSubnetExist) {
+                                return doesSubnetExist;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Invoked to get the IP Prefix from the Neutron Subnet object.
+     *
+     * @param subnet
+     *            An instance of new Neutron Subnet object.
+     *
+     * @return IP Prefix
+     * @throws Exception
+     */
+    String[] getIpPrefix(NeutronSubnet subnet) {
+        String[] ipPrefix = null;
+        String cidr = subnet.getCidr();
+        if (cidr.contains("/")) {
+            ipPrefix = cidr.split("/");
+        } else {
+            throw new IllegalArgumentException("String " + cidr + " not in correct format..");
+        }
+        return ipPrefix;
+    }
+}
diff --git a/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHealthMonitorHandler.java b/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHealthMonitorHandler.java
new file mode 100644 (file)
index 0000000..1976609
--- /dev/null
@@ -0,0 +1,251 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.util.UUID;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.types.LoadbalancerHealthmonitor;
+import net.juniper.contrail.api.types.LoadbalancerHealthmonitorType;
+import net.juniper.contrail.api.types.Project;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerHealthMonitorAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerHealthMonitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Handle requests for Neutron LoadBalancerHealthMonitor.
+ */
+public class LoadBalancerHealthMonitorHandler implements INeutronLoadBalancerHealthMonitorAware {
+
+    /**
+     * Logger instance.
+     */
+    static final Logger LOGGER = LoggerFactory.getLogger(LoadBalancerHealthMonitorHandler.class);
+    static ApiConnector apiConnector;
+
+    /**
+     * Invoked when a health monitor creation is requested to check if the specified
+     * health monitor can be created and then creates the health monitor
+     *
+     * @param loadBalancerHealthMonitor
+     *            An instance of proposed new NeutronLoadBalancerHealthMonitor object.
+     *
+     * @return A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
+        if (loadBalancerHealthMonitor == null) {
+            LOGGER.error("LoadBalancerHealthMonitor object can't be null..");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        apiConnector = Activator.apiConnector;
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID() == null) {
+            LOGGER.error("LoadBalancerHealthMonitor tenant Id can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
+            String projectUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID();
+            try {
+                if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
+                    loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
+                }
+                if (!(projectUUID.contains("-"))) {
+                    projectUUID = Utils.uuidFormater(projectUUID);
+                }
+                boolean isValidLoadBalancerHealthMonitorUUID = Utils.isValidHexNumber(loadBalancerHealthMonitorUUID);
+                boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);
+                if (!isValidLoadBalancerHealthMonitorUUID || !isValidprojectUUID) {
+                    LOGGER.info("Badly formed Hexadecimal UUID...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                projectUUID = UUID.fromString(projectUUID).toString();
+                loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
+            } catch (Exception ex) {
+                LOGGER.error("UUID input incorrect", ex);
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            if (project == null) {
+                try {
+                    Thread.currentThread();
+                    Thread.sleep(3000);
+                } catch (InterruptedException e) {
+                    LOGGER.error("InterruptedException :    ", e);
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                project = (Project) apiConnector.findById(Project.class, projectUUID);
+                if (project == null) {
+                    LOGGER.error("Could not find projectUUID...");
+                    return HttpURLConnection.HTTP_NOT_FOUND;
+                }
+            }
+            LoadbalancerHealthmonitor virtualHealthMonitorByID = (LoadbalancerHealthmonitor) apiConnector.findById(
+                    LoadbalancerHealthmonitor.class, loadBalancerHealthMonitorUUID);
+            if (virtualHealthMonitorByID != null) {
+                LOGGER.warn("LoadBalancerHealthMonitor already exists with UUID" + virtualHealthMonitorByID);
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            return HttpURLConnection.HTTP_OK;
+        } catch (IOException ie) {
+            LOGGER.error("IOException :   " + ie);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        } catch (Exception e) {
+            LOGGER.error("Exception :   " + e);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+    }
+
+    /**
+     * Invoked to take action after a health monitor has been created.
+     *
+     * @param loadBalancerHealthMonitor
+     *            An instance of new NeutronLoadBalancerHealthMonitor object.
+     */
+    @Override
+    public void neutronLoadBalancerHealthMonitorCreated(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
+        try {
+            createHealthMonitor(loadBalancerHealthMonitor);
+        } catch (IOException ex) {
+            LOGGER.warn("Exception  :    " + ex);
+        }
+        LoadbalancerHealthmonitor virtuaLoadbalancerHealthMonitor = null;
+        try {
+            String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
+            if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
+                loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
+            }
+            loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
+            virtuaLoadbalancerHealthMonitor = (LoadbalancerHealthmonitor) apiConnector.findById(
+                    LoadbalancerHealthmonitor.class, loadBalancerHealthMonitorUUID);
+            if (virtuaLoadbalancerHealthMonitor != null) {
+                LOGGER.info("LoadBalancerHealthMonitor creation verified....");
+            } else {
+                LOGGER.info("LoadBalancerHealthMonitor creation failed...");
+            }
+        } catch (Exception e) {
+            LOGGER.error("Exception :     " + e);
+        }
+    }
+
+    /**
+     * Invoked to create the specified NeutronLoadBalancerHealthMonitor.
+     *
+     * @param loadBalancerHealthMonitor
+     *            An instance of new NeutronLoadBalancerHealthMonitor object.
+     */
+    private void createHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) throws IOException {
+        LoadbalancerHealthmonitor virtualLoadBalancerHealthMonitor = new LoadbalancerHealthmonitor();
+        virtualLoadBalancerHealthMonitor = mapLoadBalancerHealthMonitorProperties(loadBalancerHealthMonitor,
+                virtualLoadBalancerHealthMonitor);
+        boolean loadBalancerHealthMonitorCreated;
+        try {
+            loadBalancerHealthMonitorCreated = apiConnector.create(virtualLoadBalancerHealthMonitor);
+            LOGGER.debug("loadBalancerHealthMonitor:   " + loadBalancerHealthMonitorCreated);
+            if (!loadBalancerHealthMonitorCreated) {
+                LOGGER.info("loadBalancerHealthMonitor creation failed..");
+            }
+        } catch (Exception Ex) {
+            LOGGER.error("Exception : " + Ex);
+        }
+        LOGGER.info("loadBalancerHealthMonitor:" + loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID()
+                + "succesfully created.");
+    }
+
+    @Override
+    public int canUpdateNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor delta,
+            NeutronLoadBalancerHealthMonitor original) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public void neutronLoadBalancerHealthMonitorUpdated(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public int canDeleteNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public void neutronLoadBalancerHealthMonitorDeleted(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * Invoked to map the NeutronLoadBalancerHealthMonitor object properties to the LoadbalancerHealthmonitor
+     * object.
+     *
+     * @param loadBalancerHealthMonitor
+     *            An instance of new NeutronLoadBalancerHealthMonitor object.
+     * @param virtualLoadBalancerHealthMonitor
+     *            An instance of new LoadbalancerHealthmonitor object.
+     * @return {@link LoadbalancerHealthmonitor}
+     */
+    private LoadbalancerHealthmonitor mapLoadBalancerHealthMonitorProperties(
+            NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor,
+            LoadbalancerHealthmonitor virtualLoadBalancerHealthMonitor) {
+        String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
+        String projectUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID();
+        try {
+            if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
+                loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
+            }
+            if (!(projectUUID.contains("-"))) {
+                projectUUID = Utils.uuidFormater(projectUUID);
+            }
+            projectUUID = UUID.fromString(projectUUID).toString();
+            loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            virtualLoadBalancerHealthMonitor.setParent(project);
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+        }
+        virtualLoadBalancerHealthMonitor.setDisplayName(loadBalancerHealthMonitorUUID);
+        virtualLoadBalancerHealthMonitor.setName(loadBalancerHealthMonitorUUID);
+        virtualLoadBalancerHealthMonitor.setUuid(loadBalancerHealthMonitorUUID);
+        LoadbalancerHealthmonitorType loadbalancer_healthmonitor_properties = new LoadbalancerHealthmonitorType();
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp() != null) {
+            loadbalancer_healthmonitor_properties.setAdminState(loadBalancerHealthMonitor
+                    .getLoadBalancerHealthMonitorAdminStateIsUp());
+        } else {
+            loadbalancer_healthmonitor_properties.setAdminState(true);
+        }
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
+            loadbalancer_healthmonitor_properties.setDelay(loadBalancerHealthMonitor
+                    .getLoadBalancerHealthMonitorDelay());
+        }
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
+            loadbalancer_healthmonitor_properties.setExpectedCodes(loadBalancerHealthMonitor
+                    .getLoadBalancerHealthMonitorExpectedCodes());
+        }
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
+            loadbalancer_healthmonitor_properties.setHttpMethod(loadBalancerHealthMonitor
+                    .getLoadBalancerHealthMonitorHttpMethod());
+        }
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
+            loadbalancer_healthmonitor_properties.setMaxRetries(loadBalancerHealthMonitor
+                    .getLoadBalancerHealthMonitorMaxRetries());
+        }
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
+            loadbalancer_healthmonitor_properties.setTimeout(loadBalancerHealthMonitor
+                    .getLoadBalancerHealthMonitorTimeout());
+        }
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorType() != null) {
+            loadbalancer_healthmonitor_properties.setType(loadBalancerHealthMonitor.getLoadBalancerHealthMonitorType());
+        }
+        if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
+            loadbalancer_healthmonitor_properties.setUrlPath(loadBalancerHealthMonitor
+                    .getLoadBalancerHealthMonitorUrlPath());
+        }
+        virtualLoadBalancerHealthMonitor.setProperties(loadbalancer_healthmonitor_properties);
+        return virtualLoadBalancerHealthMonitor;
+    }
+}
diff --git a/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerListenerHandler.java b/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerListenerHandler.java
new file mode 100644 (file)
index 0000000..c5ae3ed
--- /dev/null
@@ -0,0 +1,240 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.util.UUID;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.types.LoadbalancerPool;
+import net.juniper.contrail.api.types.Project;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerListenerAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Handle requests for Neutron LoadBalancerListener.
+ */
+public class LoadBalancerListenerHandler implements INeutronLoadBalancerListenerAware {
+    /**
+     * Logger instance.
+     */
+    static final Logger LOGGER = LoggerFactory.getLogger(LoadBalancerListenerHandler.class);
+    static ApiConnector apiConnector;
+
+    /**
+     * Invoked when a listener creation is requested to check if the specified
+     * listener can be created and then creates the listener
+     *
+     * @param loadBalancerListener
+     *            An instance of proposed new NeutronLoadBalancerListener
+     *            object.
+     *
+     * @return A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronLoadBalancerListener(NeutronLoadBalancerListener loadBalancerListener) {
+        if (loadBalancerListener == null) {
+            LOGGER.error("loadBalancerListener object can't be null..");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        apiConnector = Activator.apiConnector;
+        if (loadBalancerListener.getLoadBalancerListenerTenantID() == null) {
+            LOGGER.error("LoadBalancerListener tenant Id can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (loadBalancerListener.getNeutronLoadBalancerListenerDefaultPoolID() == null) {
+            LOGGER.error("LoadBalancerListener DefaultPoolID can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (loadBalancerListener.getNeutronLoadBalancerListenerLoadBalancerID() == null) {
+            LOGGER.error("LoadBalancerListener ID can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (loadBalancerListener.getNeutronLoadBalancerListenerProtocol() == null) {
+            LOGGER.error("LoadBalancerListener protocol can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (!(loadBalancerListener.getNeutronLoadBalancerListenerProtocol().equals("TCP")
+                || loadBalancerListener.getNeutronLoadBalancerListenerProtocol().equals("HTTP") || loadBalancerListener
+                .getNeutronLoadBalancerListenerProtocol().equals("HTTPS"))) {
+            LOGGER.error("LoadBalancerListener Protocol can not be other than TCP/HTTP/HTTPS");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            String loadBalancerListenerUUID = loadBalancerListener.getLoadBalancerListenerID();
+            String loadBalancerDefaultPoolID = loadBalancerListener.getNeutronLoadBalancerListenerDefaultPoolID();
+            String loadBalancerUUID = loadBalancerListener.getNeutronLoadBalancerListenerLoadBalancerID();
+            String projectUUID = loadBalancerListener.getLoadBalancerListenerTenantID();
+            try {
+                if (!(loadBalancerListenerUUID.contains("-"))) {
+                    loadBalancerListenerUUID = Utils.uuidFormater(loadBalancerListenerUUID);
+                }
+                if (!(loadBalancerDefaultPoolID.contains("-"))) {
+                    loadBalancerDefaultPoolID = Utils.uuidFormater(loadBalancerDefaultPoolID);
+                }
+                if (!(loadBalancerUUID.contains("-"))) {
+                    loadBalancerUUID = Utils.uuidFormater(loadBalancerUUID);
+                }
+                if (!(projectUUID.contains("-"))) {
+                    projectUUID = Utils.uuidFormater(projectUUID);
+                }
+                boolean isValidLoadBalancerListenerUUID = Utils.isValidHexNumber(loadBalancerListenerUUID);
+                boolean isValidLoadBalancerDefaultPoolID = Utils.isValidHexNumber(loadBalancerDefaultPoolID);
+                boolean isValidLoadBalancerUUID = Utils.isValidHexNumber(loadBalancerUUID);
+                boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);
+                if (!isValidLoadBalancerListenerUUID || !isValidLoadBalancerDefaultPoolID || !isValidLoadBalancerUUID
+                        || !isValidprojectUUID) {
+                    LOGGER.info("Badly formed Hexadecimal UUID...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                loadBalancerListenerUUID = UUID.fromString(loadBalancerListenerUUID).toString();
+                loadBalancerDefaultPoolID = UUID.fromString(loadBalancerDefaultPoolID).toString();
+                loadBalancerUUID = UUID.fromString(loadBalancerUUID).toString();
+                projectUUID = UUID.fromString(projectUUID).toString();
+            } catch (Exception ex) {
+                LOGGER.error("UUID input incorrect", ex);
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            if (project == null) {
+                try {
+                    Thread.currentThread();
+                    Thread.sleep(3000);
+                } catch (InterruptedException e) {
+                    LOGGER.error("InterruptedException :    ", e);
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                project = (Project) apiConnector.findById(Project.class, projectUUID);
+                if (project == null) {
+                    LOGGER.error("Could not find projectUUID...");
+                    return HttpURLConnection.HTTP_NOT_FOUND;
+                }
+            }
+            // String virtualLoadbalancerListenerByName =
+            // apiConnector.findByName(LoadbalancerListener.class, project,
+            // loadBalancerListener.getLoadBalancerListenerName());
+            // if (virtualLoadbalancerListenerByName != null) {
+            // LOGGER.warn("Lsitener already exists with name : " +
+            // virtualLoadbalancerListenerByName);
+            // return HttpURLConnection.HTTP_FORBIDDEN;
+            // }
+            // LoadBalancerListener virtualLoadbalancerListenerById =
+            // (LoadBalancerListener) apiConnector.findById(
+            // LoadBalancerListener.class, loadBalancerListenerUUID);
+            // if (virtualLoadbalancerListenerById != null) {
+            // LOGGER.warn("LoadbalancerListener already exists with UUID" +
+            // loadBalancerListenerUUID);
+            // return HttpURLConnection.HTTP_FORBIDDEN;
+            // }
+            LoadbalancerPool virtualLoadBalancerDefaultPoolID = (LoadbalancerPool) apiConnector.findById(
+                    LoadbalancerPool.class, loadBalancerDefaultPoolID);
+            if (virtualLoadBalancerDefaultPoolID == null) {
+                LOGGER.warn("Default LoadbalancerPool does not exists with UUID");
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            // LoadBalancer virtualLoadBalancerListenerID = (LoadBalancer)
+            // apiConnector.findById(
+            // LoadBalancer.class, loadBalancerUUID);
+            // if (virtualLoadBalancerListenerID== null) {
+            // LOGGER.warn("Listener does not exists");
+            // return HttpURLConnection.HTTP_FORBIDDEN;
+            // }
+            return HttpURLConnection.HTTP_OK;
+        } catch (IOException ie) {
+            LOGGER.error("IOException :   " + ie);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        } catch (Exception e) {
+            LOGGER.error("Exception :   " + e);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+    }
+
+    /**
+     * Invoked to take action after a listener has been created.
+     *
+     * @param loadBalancerListener
+     *            An instance of new NeutronLoadBalancerListener object.
+     */
+    @Override
+    public void neutronLoadBalancerListenerCreated(NeutronLoadBalancerListener loadBalancerListener) {
+        try {
+            createLoadBalancerListener(loadBalancerListener);
+        } catch (IOException ex) {
+            LOGGER.warn("Exception  :    " + ex);
+        }
+        // LoadBalancerListener LoadBalancerListener = null;
+        try {
+            String loadBalancerListenerUUID = loadBalancerListener.getLoadBalancerListenerID();
+            if (!(loadBalancerListenerUUID.contains("-"))) {
+                loadBalancerListenerUUID = Utils.uuidFormater(loadBalancerListenerUUID);
+            }
+            loadBalancerListenerUUID = UUID.fromString(loadBalancerListenerUUID).toString();
+            // LoadBalancerListener loadbalancerListener= (LoadbalancerListener)
+            // apiConnector.findById(LoadbalancerListener.class,
+            // loadBalancerListenerUUID);
+            // if (loadbalancerListener != null) {
+            // LOGGER.info("LoadbalancerListener creation verified....");
+            // } else {
+            // LOGGER.info("LoadbalancerListener creation failed...");
+            // }
+        } catch (Exception e) {
+            LOGGER.error("Exception :     " + e);
+        }
+
+    }
+
+    /**
+     * Invoked to create the specified NeutronLoadBalancerListener.
+     *
+     * @param loadBalancerListener
+     *            An instance of new NeutronLoadBalancerListener object.
+     */
+    private void createLoadBalancerListener(NeutronLoadBalancerListener loadBalancerListener) throws IOException {
+        // TODO: write code once v2 support is available with opencontrail
+    }
+
+    @Override
+    public int canUpdateNeutronLoadBalancerListener(NeutronLoadBalancerListener delta,
+            NeutronLoadBalancerListener original) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public void neutronLoadBalancerListenerUpdated(NeutronLoadBalancerListener loadBalancerListener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public int canDeleteNeutronLoadBalancerListener(NeutronLoadBalancerListener loadBalancerListener) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public void neutronLoadBalancerListenerDeleted(NeutronLoadBalancerListener loadBalancerListener) {
+        // TODO Auto-generated method stub
+
+    }
+    /**
+     * Invoked to map the NeutronLoadBalancerListener object properties to the
+     * LoadBalancerListener object.
+     *
+     * @param loadBalancerListener
+     *            An instance of new NeutronLoadBalancerListener object.
+     * @param virtualLoadBalancerListener
+     *            An instance of new LoadBalancerListener object.
+     * @return {@link LoadBalancerListener}
+     */
+    // private LoadBalancerListener
+    // mapLoadBalancerListenerProperties(NeutronLoadBalancerListener
+    // loadBalancerListener,
+    // LoadBalancerListener virtualLoadBalancerListener) {
+    // TODO: map properties between ODL-Neutron-Listener object and Opencontrail
+    // Listener object
+    // return virtualLoadBalancerListener;
+    // }
+}
diff --git a/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolHandler.java b/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolHandler.java
new file mode 100644 (file)
index 0000000..90c8284
--- /dev/null
@@ -0,0 +1,382 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.util.List;
+import java.util.UUID;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.types.LoadbalancerMember;
+import net.juniper.contrail.api.types.LoadbalancerPool;
+import net.juniper.contrail.api.types.LoadbalancerPoolType;
+import net.juniper.contrail.api.types.Project;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPool;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPoolMember;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Handle requests for Neutron LoadbalancerPool.
+ */
+
+public class LoadBalancerPoolHandler implements INeutronLoadBalancerPoolAware {
+    /**
+     * Logger instance.
+     */
+    static final Logger LOGGER = LoggerFactory.getLogger(LoadBalancerPoolHandler.class);
+    static ApiConnector apiConnector;
+
+    /**
+     * Invoked when a pool creation is requested to check if the specified
+     * pool can be created and then creates the pool
+     *
+     * @param loadBalancerPool
+     *            An instance of proposed new Neutron Pool object.
+     *
+     * @return A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronLoadBalancerPool(NeutronLoadBalancerPool loadBalancerPool) {
+        if (loadBalancerPool == null) {
+            LOGGER.error("LoadBalancerPool object can't be null..");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        apiConnector = Activator.apiConnector;
+        if (loadBalancerPool.getLoadBalancerPoolTenantID() == null) {
+            LOGGER.error("LoadBalancerPool tenant Id can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (loadBalancerPool.getLoadBalancerPoolLbAlgorithm() == null) {
+            LOGGER.error("LoadBalancerPool Algorithm can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (!(loadBalancerPool.getLoadBalancerPoolLbAlgorithm().equals("ROUND_ROBIN")
+                || loadBalancerPool.getLoadBalancerPoolLbAlgorithm().equals("LEAST_CONNECTIONS") || loadBalancerPool
+                .getLoadBalancerPoolLbAlgorithm().equals("Source IP"))) {
+            LOGGER.error("LoadBalancerPool Algorithm can not be anything other than ROUND_ROBIN and LEAST_CONNECTIONS and Source IP");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (loadBalancerPool.getLoadBalancerPoolProtocol() == null) {
+            LOGGER.error("LoadBalancerPool protocol can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (!(loadBalancerPool.getLoadBalancerPoolProtocol().equals("TCP")
+                || loadBalancerPool.getLoadBalancerPoolProtocol().equals("HTTP") || loadBalancerPool
+                .getLoadBalancerPoolProtocol().equals("HTTPS"))) {
+            LOGGER.error("LoadBalancerPool Protocol can not be other than TCP/HTTP/HTTPS");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (loadBalancerPool.getLoadBalancerPoolMembers() != null) {
+            List<NeutronLoadBalancerPoolMember> i = loadBalancerPool.getLoadBalancerPoolMembers();
+            for (NeutronLoadBalancerPoolMember ref : i) {
+                String poolmemberID = ref.getPoolMemberID();
+                String tenantID = ref.getPoolMemberTenantID();
+                if (!(tenantID.equals(loadBalancerPool.getLoadBalancerPoolTenantID()))) {
+                    LOGGER.error("Member and pool does not belong to same tenant");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                try {
+                    LoadbalancerMember lbpm = (LoadbalancerMember) apiConnector.findById(LoadbalancerMember.class,
+                            poolmemberID);
+                    if (lbpm != null) {
+                        LOGGER.error("Member already exist with UUID: " + poolmemberID);
+                        return HttpURLConnection.HTTP_BAD_REQUEST;
+                    }
+                } catch (IOException e) {
+                    LOGGER.error("IOException :   " + e);
+                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
+                }
+            }
+        }
+        try {
+            String loadBalancerPoolUUID = loadBalancerPool.getLoadBalancerPoolID();
+            String projectUUID = loadBalancerPool.getLoadBalancerPoolTenantID();
+            try {
+                if (!(loadBalancerPoolUUID.contains("-"))) {
+                    loadBalancerPoolUUID = Utils.uuidFormater(loadBalancerPoolUUID);
+                }
+                if (!(projectUUID.contains("-"))) {
+                    projectUUID = Utils.uuidFormater(projectUUID);
+                }
+                boolean isValidLoadBalancerPoolUUID = Utils.isValidHexNumber(loadBalancerPoolUUID);
+                boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);
+                if (!isValidLoadBalancerPoolUUID || !isValidprojectUUID) {
+                    LOGGER.info("Badly formed Hexadecimal UUID...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                projectUUID = UUID.fromString(projectUUID).toString();
+                loadBalancerPoolUUID = UUID.fromString(loadBalancerPoolUUID).toString();
+            } catch (Exception ex) {
+                LOGGER.error("UUID input incorrect", ex);
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            if (project == null) {
+                try {
+                    Thread.currentThread();
+                    Thread.sleep(3000);
+                } catch (InterruptedException e) {
+                    LOGGER.error("InterruptedException :    ", e);
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                project = (Project) apiConnector.findById(Project.class, projectUUID);
+                if (project == null) {
+                    LOGGER.error("Could not find projectUUID...");
+                    return HttpURLConnection.HTTP_NOT_FOUND;
+                }
+            }
+            String virtualLoadbalancerPoolByName = apiConnector.findByName(LoadbalancerPool.class, project,
+                    loadBalancerPool.getLoadBalancerPoolName());
+            if (virtualLoadbalancerPoolByName != null) {
+                LOGGER.warn("POOL already exists with name : " + virtualLoadbalancerPoolByName);
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            LoadbalancerPool virtualLoadbalancerPoolById = (LoadbalancerPool) apiConnector.findById(
+                    LoadbalancerPool.class, loadBalancerPoolUUID);
+            if (virtualLoadbalancerPoolById != null) {
+                LOGGER.warn("LoadbalancerPool already exists with UUID" + loadBalancerPoolUUID);
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            return HttpURLConnection.HTTP_OK;
+        } catch (IOException ie) {
+            LOGGER.error("IOException :   " + ie);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        } catch (Exception e) {
+            LOGGER.error("Exception :   " + e);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+    }
+
+    /**
+     * Invoked to take action after a pool has been created.
+     *
+     * @param loadBalancerPool
+     *            An instance of new Neutron Pool object.
+     */
+    @Override
+    public void neutronLoadBalancerPoolCreated(NeutronLoadBalancerPool loadBalancerPool) {
+        try {
+            createLoadBalancerPool(loadBalancerPool);
+        } catch (IOException ex) {
+            LOGGER.warn("Exception  :    " + ex);
+        }
+        LoadbalancerPool virtualLoadBalancerPool = null;
+        try {
+            String loadBalancerPoolUUID = loadBalancerPool.getLoadBalancerPoolID();
+            if (!(loadBalancerPoolUUID.contains("-"))) {
+                loadBalancerPoolUUID = Utils.uuidFormater(loadBalancerPoolUUID);
+            }
+            loadBalancerPoolUUID = UUID.fromString(loadBalancerPoolUUID).toString();
+            virtualLoadBalancerPool = (LoadbalancerPool) apiConnector.findById(LoadbalancerPool.class,
+                    loadBalancerPoolUUID);
+            if (virtualLoadBalancerPool != null) {
+                LOGGER.info("LoadbalancerPool creation verified....");
+            } else {
+                LOGGER.info("LoadbalancerPool creation failed...");
+            }
+        } catch (Exception e) {
+            LOGGER.error("Exception :     " + e);
+        }
+    }
+
+    /**
+     * Invoked to create the specified Neutron Pool.
+     *
+     * @param loadBalancerPool
+     *            An instance of new Neutron Pool object.
+     */
+    private void createLoadBalancerPool(NeutronLoadBalancerPool loadBalancerPool) throws IOException {
+        LoadbalancerPool virtualLoadBalancerPool = new LoadbalancerPool();
+        virtualLoadBalancerPool = mapLoadBalancerPoolProperties(loadBalancerPool, virtualLoadBalancerPool);
+        boolean loadBalancerPoolCreated;
+        try {
+            loadBalancerPoolCreated = apiConnector.create(virtualLoadBalancerPool);
+            LOGGER.debug("loadBalancerPool:   " + loadBalancerPoolCreated);
+            if (!loadBalancerPoolCreated) {
+                LOGGER.info("loadBalancerPool creation failed..");
+            }
+        } catch (Exception Ex) {
+            LOGGER.error("Exception : " + Ex);
+        }
+        LOGGER.info("loadBalancerPool:" + loadBalancerPool.getLoadBalancerPoolName() + "having ID"
+                + loadBalancerPool.getLoadBalancerPoolID() + "succesfully created.");
+        if (loadBalancerPool.getLoadBalancerPoolMembers() != null) {
+            List<NeutronLoadBalancerPoolMember> i = loadBalancerPool.getLoadBalancerPoolMembers();
+            for (NeutronLoadBalancerPoolMember ref : i) {
+                LoadBalancerPoolMemberHandler lbmh = new LoadBalancerPoolMemberHandler();
+                int value = lbmh.canCreateNeutronLoadBalancerPoolMember(ref);
+                if (value == 200) {
+                    lbmh.neutronLoadBalancerPoolMemberCreated(ref);
+                } else {
+                    LOGGER.error("NeutronLoadBalancerPool Member creation failed");
+                }
+            }
+        }
+    }
+
+    /**
+     * Invoked when a pool update is requested to indicate if the specified
+     * pool can be changed using the specified delta.
+     *
+     * @param delta
+     *            Updates to the pool object using patch semantics.
+     * @param original
+     *            An instance of the Neutron pool object to be updated.
+     * @return A HTTP status code to the update request.
+     */
+    @Override
+    public int canUpdateNeutronLoadBalancerPool(NeutronLoadBalancerPool delta, NeutronLoadBalancerPool original) {
+        apiConnector = Activator.apiConnector;
+        LoadbalancerPool virtualLoadBalancerPool;
+        if (delta == null || original == null) {
+            LOGGER.error("NeutronLoadBalancerPool objects cant be empty or null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        String loadBalancerPoolUUID = original.getLoadBalancerPoolID();
+        try {
+            if (!(loadBalancerPoolUUID.contains("-"))) {
+                loadBalancerPoolUUID = Utils.uuidFormater(loadBalancerPoolUUID);
+            }
+            loadBalancerPoolUUID = UUID.fromString(loadBalancerPoolUUID).toString();
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            virtualLoadBalancerPool = (LoadbalancerPool) apiConnector.findById(LoadbalancerPool.class,
+                    loadBalancerPoolUUID);
+            if (virtualLoadBalancerPool == null) {
+                LOGGER.error("No LoadbalancerPool exists for the specified ID...");
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+        } catch (IOException e) {
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronLoadBalancerPoolUpdated(NeutronLoadBalancerPool loadBalancerPool) {
+        // TODO Auto-generated method stub
+    }
+
+    /**
+     * Invoked when a pool deletion is requested to indicate if the specified
+     * pool can be deleted.
+     *
+     * @param loadBalancerPool
+     *            An instance of the NeutronLoadBalancerPool object to be deleted.
+     * @return A HTTP status code to the deletion request.
+     */
+    @Override
+    public int canDeleteNeutronLoadBalancerPool(NeutronLoadBalancerPool loadBalancerPool) {
+        apiConnector = Activator.apiConnector;
+        LoadbalancerPool virtualLoadBalancerPool = null;
+        String loadBalancerPoolUUID = loadBalancerPool.getLoadBalancerPoolID();
+        try {
+            if (!(loadBalancerPoolUUID.contains("-"))) {
+                loadBalancerPoolUUID = Utils.uuidFormater(loadBalancerPoolUUID);
+            }
+            loadBalancerPoolUUID = UUID.fromString(loadBalancerPoolUUID).toString();
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            virtualLoadBalancerPool = (LoadbalancerPool) apiConnector.findById(LoadbalancerPool.class,
+                    loadBalancerPoolUUID);
+            if (virtualLoadBalancerPool == null) {
+                LOGGER.info("No LoadbalancerPool exists with ID :  " + loadBalancerPoolUUID);
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            return HttpURLConnection.HTTP_OK;
+        } catch (Exception e) {
+            LOGGER.error("Exception : " + e);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+    }
+
+    /**
+     * Invoked to take action after a pool has been deleted.
+     *
+     * @param loadBalancerPool
+     *            An instance of deleted NeutronLoadBalancerPool object.
+     */
+    @Override
+    public void neutronLoadBalancerPoolDeleted(NeutronLoadBalancerPool loadBalancerPool) {
+        LoadbalancerPool virtualLoadBalancerPool = null;
+        try {
+            String loadBalancerPoolUUID = loadBalancerPool.getLoadBalancerPoolID();
+            if (!(loadBalancerPoolUUID.contains("-"))) {
+                loadBalancerPoolUUID = Utils.uuidFormater(loadBalancerPoolUUID);
+            }
+            loadBalancerPoolUUID = UUID.fromString(loadBalancerPoolUUID).toString();
+            virtualLoadBalancerPool = (LoadbalancerPool) apiConnector.findById(LoadbalancerPool.class,
+                    loadBalancerPoolUUID);
+            apiConnector.delete(virtualLoadBalancerPool);
+            if (virtualLoadBalancerPool == null) {
+                LOGGER.info("LoadbalancerPool deletion verified....");
+            } else {
+                LOGGER.info("LoadbalancerPool with ID :  " + loadBalancerPoolUUID + "deletion failed");
+            }
+        } catch (Exception ex) {
+            LOGGER.error("Exception :   " + ex);
+        }
+    }
+
+    /**
+     * Invoked to map the NeutronLoadBalancerPool object properties to the LoadbalancerPool
+     * object.
+     *
+     * @param loadBalancerPool
+     *            An instance of new NeutronLoadBalancerPool object.
+     * @param virtualLoadBalancerPool
+     *            An instance of new LoadbalancerPool object.
+     * @return {@link LoadbalancerPool}
+     */
+    private LoadbalancerPool mapLoadBalancerPoolProperties(NeutronLoadBalancerPool loadBalancerPool,
+            LoadbalancerPool virtualLoadBalancerPool) {
+        String loadBalancerPoolUUID = loadBalancerPool.getLoadBalancerPoolID();
+        String loadBalancerPoolName = loadBalancerPool.getLoadBalancerPoolName();
+        String projectUUID = loadBalancerPool.getLoadBalancerPoolTenantID();
+        try {
+            if (!(loadBalancerPoolUUID.contains("-"))) {
+                loadBalancerPoolUUID = Utils.uuidFormater(loadBalancerPoolUUID);
+            }
+            loadBalancerPoolUUID = UUID.fromString(loadBalancerPoolUUID).toString();
+            if (!(projectUUID.contains("-"))) {
+                projectUUID = Utils.uuidFormater(projectUUID);
+            }
+            projectUUID = UUID.fromString(projectUUID).toString();
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            virtualLoadBalancerPool.setParent(project);
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+        }
+        LoadbalancerPoolType loadbalancer_pool_properties = new LoadbalancerPoolType();
+        loadbalancer_pool_properties.setLoadbalancerMethod(loadBalancerPool.getLoadBalancerPoolLbAlgorithm());
+        loadbalancer_pool_properties.setProtocol(loadBalancerPool.getLoadBalancerPoolProtocol());
+        if (loadBalancerPool.getLoadBalancerPoolAdminIsStateIsUp() != null) {
+            loadbalancer_pool_properties.setAdminState(loadBalancerPool.getLoadBalancerPoolAdminIsStateIsUp());
+        } else {
+            loadbalancer_pool_properties.setAdminState(true);
+        }
+        if (loadBalancerPool.getLoadBalancerPoolStatus() != null) {
+            loadbalancer_pool_properties.setStatus(loadBalancerPool.getLoadBalancerPoolStatus());
+        }
+        if (loadBalancerPool.getLoadBalancerPoolDescription() != null) {
+            loadbalancer_pool_properties.setStatusDescription(loadBalancerPool.getLoadBalancerPoolDescription());
+        }
+        virtualLoadBalancerPool.setUuid(loadBalancerPoolUUID);
+        virtualLoadBalancerPool.setName(loadBalancerPoolName);
+        virtualLoadBalancerPool.setDisplayName(loadBalancerPoolName);
+        virtualLoadBalancerPool.setProperties(loadbalancer_pool_properties);
+        /* haproxy is the provider for loadbalancer pool in OpenContrail */
+        virtualLoadBalancerPool.setProvider("haproxy");
+        return virtualLoadBalancerPool;
+    }
+
+}
diff --git a/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolMemberHandler.java b/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolMemberHandler.java
new file mode 100644 (file)
index 0000000..e8a7e30
--- /dev/null
@@ -0,0 +1,321 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import java.util.List;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.util.UUID;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.ApiPropertyBase;
+import net.juniper.contrail.api.ObjectReference;
+import net.juniper.contrail.api.types.InstanceIp;
+import net.juniper.contrail.api.types.LoadbalancerMember;
+import net.juniper.contrail.api.types.LoadbalancerMemberType;
+import net.juniper.contrail.api.types.LoadbalancerPool;
+import net.juniper.contrail.api.types.Project;
+import net.juniper.contrail.api.types.VirtualMachineInterface;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolMemberAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPoolMember;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Handle requests for Neutron LoadbalancerPoolMember.
+ */
+
+public class LoadBalancerPoolMemberHandler implements INeutronLoadBalancerPoolMemberAware {
+    /**
+     * Logger instance.
+     */
+    static final Logger LOGGER = LoggerFactory.getLogger(LoadBalancerPoolMemberHandler.class);
+    static ApiConnector apiConnector;
+
+    /**
+     * Invoked when a member creation is requested to check if the specified
+     * member can be created and then creates the member
+     *
+     * @param loadBalancerPoolMember
+     *            An instance of proposed new NeutronLoadBalancerPoolMember object.
+     *
+     * @return A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronLoadBalancerPoolMember(NeutronLoadBalancerPoolMember loadBalancerPoolMember) {
+        if (loadBalancerPoolMember == null) {
+            LOGGER.error("LoadBalancerPool Member object can't be null..");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        apiConnector = Activator.apiConnector;
+        if (loadBalancerPoolMember.getPoolMemberTenantID() == null
+                || loadBalancerPoolMember.getPoolMemberSubnetID() == null) {
+            LOGGER.error("LoadBalancerPool Member TenanID/SubnetID can not be null");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            String loadBalancerPoolID = loadBalancerPoolMember.getPoolID();
+            String loadBalancerPoolMemberUUID = loadBalancerPoolMember.getPoolMemberID();
+            String projectUUID = loadBalancerPoolMember.getPoolMemberTenantID();
+            try {
+                if (!(loadBalancerPoolMemberUUID.contains("-"))) {
+                    loadBalancerPoolMemberUUID = Utils.uuidFormater(loadBalancerPoolMemberUUID);
+                }
+                if (!(projectUUID.contains("-"))) {
+                    projectUUID = Utils.uuidFormater(projectUUID);
+                }
+                boolean isValidLoadBalancerPoolMemberUUID = Utils.isValidHexNumber(loadBalancerPoolMemberUUID);
+                boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);
+                if (!isValidLoadBalancerPoolMemberUUID || !isValidprojectUUID) {
+                    LOGGER.info("Badly formed Hexadecimal UUID...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                projectUUID = UUID.fromString(projectUUID).toString();
+                loadBalancerPoolMemberUUID = UUID.fromString(loadBalancerPoolMemberUUID).toString();
+                if (!(loadBalancerPoolID.contains("-"))) {
+                    loadBalancerPoolID = Utils.uuidFormater(loadBalancerPoolID);
+                }
+                loadBalancerPoolID = UUID.fromString(loadBalancerPoolID).toString();
+            } catch (Exception ex) {
+                LOGGER.error("UUID input incorrect", ex);
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            if (project == null) {
+                try {
+                    Thread.currentThread();
+                    Thread.sleep(3000);
+                } catch (InterruptedException e) {
+                    LOGGER.error("InterruptedException :    ", e);
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                project = (Project) apiConnector.findById(Project.class, projectUUID);
+                if (project == null) {
+                    LOGGER.error("Could not find projectUUID...");
+                    return HttpURLConnection.HTTP_NOT_FOUND;
+                }
+            }
+            if (project.getVirtualMachineInterfaces() != null) {
+                List<ObjectReference<ApiPropertyBase>> vmiList = project.getVirtualMachineInterfaces();
+                for (ObjectReference<ApiPropertyBase> ref : vmiList) {
+                    String vmiUUID = ref.getUuid();
+                    VirtualMachineInterface vmi = (VirtualMachineInterface) apiConnector.findById(
+                            VirtualMachineInterface.class, vmiUUID);
+                    List<ObjectReference<ApiPropertyBase>> iip = vmi.getInstanceIpBackRefs();
+                    for (ObjectReference<ApiPropertyBase> iipRef : iip) {
+                        String iipUUID = iipRef.getUuid();
+                        InstanceIp instanceIP = (InstanceIp) apiConnector.findById(InstanceIp.class, iipUUID);
+                        if (!(loadBalancerPoolMember.getPoolMemberAddress().equals(instanceIP.getAddress()))) {
+                            LOGGER.warn("LoadbalancerPool Member address does not exists...");
+                            return HttpURLConnection.HTTP_FORBIDDEN;
+                        }
+                    }
+                }
+            } else {
+                LOGGER.warn("No Servers available to create a member...");
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            LoadbalancerMember virtualLoadbalancerPoolMemberById = (LoadbalancerMember) apiConnector.findById(
+                    LoadbalancerMember.class, loadBalancerPoolMemberUUID);
+            if (virtualLoadbalancerPoolMemberById != null) {
+                LOGGER.warn("LoadbalancerPool Member already exists with UUID" + loadBalancerPoolMemberUUID);
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            LoadbalancerPool virtualLoadbalancerPool = (LoadbalancerPool) apiConnector.findById(LoadbalancerPool.class,
+                    loadBalancerPoolID);
+            if (virtualLoadbalancerPool == null) {
+                LOGGER.warn("LoadbalancerPool does not exist" + loadBalancerPoolID);
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            if (!(loadBalancerPoolMember.getPoolMemberTenantID().equals(virtualLoadbalancerPool.getParentUuid()))) {
+                LOGGER.warn("Member with UUID: " + loadBalancerPoolID + "and Pool with UUID: " + loadBalancerPoolID
+                        + " does not belong to same tenant");
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            return HttpURLConnection.HTTP_OK;
+        } catch (IOException ie) {
+            LOGGER.error("IOException :   " + ie);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        } catch (Exception e) {
+            LOGGER.error("Exception :   " + e);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+
+    }
+
+    /**
+     * Invoked to take action after a member has been created.
+     *
+     * @param loadBalancerPoolMember
+     *            An instance of new NeutronLoadBalancerPoolMember object.
+     */
+    @Override
+    public void neutronLoadBalancerPoolMemberCreated(NeutronLoadBalancerPoolMember loadBalancerPoolMember) {
+        try {
+            createLoadBalancerMember(loadBalancerPoolMember);
+        } catch (IOException ex) {
+            LOGGER.warn("Exception  :    " + ex);
+        }
+        LoadbalancerMember loadbalancerMember = null;
+        try {
+            String loadBalancerPoolMemberUUID = loadBalancerPoolMember.getPoolMemberID();
+            if (!(loadBalancerPoolMemberUUID.contains("-"))) {
+                loadBalancerPoolMemberUUID = Utils.uuidFormater(loadBalancerPoolMemberUUID);
+            }
+            loadBalancerPoolMemberUUID = UUID.fromString(loadBalancerPoolMemberUUID).toString();
+            loadbalancerMember = (LoadbalancerMember) apiConnector.findById(LoadbalancerMember.class,
+                    loadBalancerPoolMemberUUID);
+            if (loadbalancerMember != null) {
+                LOGGER.info("LoadbalancerPool Member creation verified for Member with UUID--"
+                        + loadBalancerPoolMemberUUID);
+            }
+        } catch (Exception e) {
+            LOGGER.error("Exception :     " + e);
+        }
+
+    }
+
+    /**
+     * Invoked to create the specified Neutron Member.
+     *
+     * @param loadBalancerPoolMember
+     *            An instance of new NeutronLoadBalancerPoolMember object.
+     */
+    private void createLoadBalancerMember(NeutronLoadBalancerPoolMember loadBalancerPoolMember) throws IOException {
+        LoadbalancerMember virtualLoadBalancerMember = new LoadbalancerMember();
+        virtualLoadBalancerMember = mapLoadBalancerMemberProperties(loadBalancerPoolMember, virtualLoadBalancerMember);
+        boolean loadBalancerMemberCreated;
+        try {
+            loadBalancerMemberCreated = apiConnector.create(virtualLoadBalancerMember);
+            LOGGER.debug("loadBalancerPool member:   " + loadBalancerMemberCreated);
+            if (!loadBalancerMemberCreated) {
+                LOGGER.info("loadBalancerPool member creation failed..");
+            }
+        } catch (Exception Ex) {
+            LOGGER.error("Exception : " + Ex);
+        }
+        LOGGER.info("Member having UUID " + loadBalancerPoolMember.getPoolMemberID() + " sucessfully created");
+    }
+
+    @Override
+    public int canUpdateNeutronLoadBalancerPoolMember(NeutronLoadBalancerPoolMember delta,
+            NeutronLoadBalancerPoolMember original) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public void neutronLoadBalancerPoolMemberUpdated(NeutronLoadBalancerPoolMember loadBalancerPoolMember) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * Invoked when a member deletion is requested to indicate if the specified
+     * member can be deleted.
+     *
+     * @param loadBalancerPoolMember
+     *            An instance of the NeutronLoadBalancerPoolMember object to be deleted.
+     * @return A HTTP status code to the deletion request.
+     */
+    @Override
+    public int canDeleteNeutronLoadBalancerPoolMember(NeutronLoadBalancerPoolMember loadBalancerPoolMember) {
+        apiConnector = Activator.apiConnector;
+        LoadbalancerMember virtualLoadBalancerMember = null;
+        String loadBalancerMemberUUID = loadBalancerPoolMember.getPoolMemberID();
+        try {
+            if (!(loadBalancerMemberUUID.contains("-"))) {
+                loadBalancerMemberUUID = Utils.uuidFormater(loadBalancerMemberUUID);
+            }
+            loadBalancerMemberUUID = UUID.fromString(loadBalancerMemberUUID).toString();
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            virtualLoadBalancerMember = (LoadbalancerMember) apiConnector.findById(LoadbalancerMember.class,
+                    loadBalancerMemberUUID);
+            if (virtualLoadBalancerMember == null) {
+                LOGGER.info("No LoadbalancerPoolMember exists with ID :  " + loadBalancerMemberUUID);
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            return HttpURLConnection.HTTP_OK;
+        } catch (Exception e) {
+            LOGGER.error("Exception : " + e);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+    }
+
+    /**
+     * Invoked to take action after a member has been deleted.
+     *
+     * @param loadBalancerPoolMember
+     *            An instance of deleted NeutronLoadBalancerPoolMember object.
+     */
+    @Override
+    public void neutronLoadBalancerPoolMemberDeleted(NeutronLoadBalancerPoolMember loadBalancerPoolMember) {
+        LoadbalancerMember virtualLoadBalancerMember = null;
+        try {
+            String loadBalancerMemberUUID = loadBalancerPoolMember.getPoolMemberID();
+            if (!(loadBalancerMemberUUID.contains("-"))) {
+                loadBalancerMemberUUID = Utils.uuidFormater(loadBalancerMemberUUID);
+            }
+            loadBalancerMemberUUID = UUID.fromString(loadBalancerMemberUUID).toString();
+            virtualLoadBalancerMember = (LoadbalancerMember) apiConnector.findById(LoadbalancerMember.class,
+                    loadBalancerMemberUUID);
+            apiConnector.delete(virtualLoadBalancerMember);
+            if (virtualLoadBalancerMember == null) {
+                LOGGER.info("LoadbalancerPoolMember deletion verified....");
+            } else {
+                LOGGER.info("LoadbalancerPoolMember with ID :  " + loadBalancerMemberUUID + "deletion failed");
+            }
+        } catch (Exception ex) {
+            LOGGER.error("Exception :   " + ex);
+        }
+    }
+
+    /**
+     * Invoked to map the NeutronLoadBalancerPoolMember object properties to the loadBalancerPoolMember
+     * object.
+     *
+     * @param loadBalancerPoolMember
+     *            An instance of new NeutronLoadBalancerPoolMember object.
+     * @param virtualLoadBalancerMember
+     *            An instance of new LoadbalancerMember object.
+     * @return {@link LoadbalancerMember}
+     */
+    private LoadbalancerMember mapLoadBalancerMemberProperties(NeutronLoadBalancerPoolMember loadBalancerPoolMember,
+            LoadbalancerMember virtualLoadBalancerMember) {
+        String loadBalancerMemberUUID = loadBalancerPoolMember.getPoolMemberID();
+        try {
+            if (!(loadBalancerMemberUUID.contains("-"))) {
+                loadBalancerMemberUUID = Utils.uuidFormater(loadBalancerMemberUUID);
+            }
+            loadBalancerMemberUUID = UUID.fromString(loadBalancerMemberUUID).toString();
+            LoadbalancerPool lbp = (LoadbalancerPool) apiConnector.findById(LoadbalancerPool.class,
+                    loadBalancerPoolMember.getPoolID());
+            virtualLoadBalancerMember.setParent(lbp);
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+        }
+        LoadbalancerMemberType lbmType = new LoadbalancerMemberType();
+        lbmType.setAddress(loadBalancerPoolMember.getPoolMemberAddress());
+        lbmType.setProtocolPort(loadBalancerPoolMember.getPoolMemberProtoPort());
+        if (loadBalancerPoolMember.getPoolMemberStatus() != null) {
+            lbmType.setStatus(loadBalancerPoolMember.getPoolMemberStatus());
+        }
+        if (loadBalancerPoolMember.getPoolMemberWeight() != null) {
+            lbmType.setWeight(loadBalancerPoolMember.getPoolMemberWeight());
+        }
+        if (loadBalancerPoolMember.getPoolMemberAdminStateIsUp() != null) {
+            lbmType.setAdminState(loadBalancerPoolMember.getPoolMemberAdminStateIsUp());
+        } else {
+            lbmType.setAdminState(true);
+        }
+        virtualLoadBalancerMember.setProperties(lbmType);
+        virtualLoadBalancerMember.setUuid(loadBalancerMemberUUID);
+        virtualLoadBalancerMember.setName(loadBalancerMemberUUID);
+        virtualLoadBalancerMember.setDisplayName(loadBalancerMemberUUID);
+        return virtualLoadBalancerMember;
+    }
+
+}
diff --git a/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHandlerTest.java b/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHandlerTest.java
new file mode 100644 (file)
index 0000000..2deffde
--- /dev/null
@@ -0,0 +1,98 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.types.Project;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancer;
+
+/**
+ * Test Class for LoadBalancerHandler.
+ */
+public class LoadBalancerHandlerTest {
+
+    LoadBalancerHandler loadBalancerHandler;
+    LoadBalancerHandler mockLoadBalancerHandler = mock(LoadBalancerHandler.class);
+    ApiConnector mockApiConnector = mock(ApiConnector.class);
+    Project mockProject = mock(Project.class);
+    NeutronLoadBalancer mockNeutronLoadBalancer = mock(NeutronLoadBalancer.class);
+
+    @Before
+    public void beforeTest() {
+        loadBalancerHandler = new LoadBalancerHandler();
+        assertNotNull(mockLoadBalancerHandler);
+        assertNotNull(mockApiConnector);
+        assertNotNull(mockProject);
+        assertNotNull(mockNeutronLoadBalancer);
+    }
+
+    @After
+    public void AfterTest() {
+        loadBalancerHandler = null;
+        Activator.apiConnector = null;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancer object */
+    public NeutronLoadBalancer defaultNeutronLoadBalancerObject() {
+        NeutronLoadBalancer neutronObject = new NeutronLoadBalancer();
+        neutronObject.setLoadBalancerDescription("loadBalancerDescription");
+        neutronObject.setLoadBalancerID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setLoadBalancerName("loadBalancerName");
+        neutronObject.setLoadBalancerStatus(null);
+        neutronObject.setLoadBalancerTenantID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setLoadBalancerVipAddress("10.10.10.10");
+        neutronObject.setLoadBalancerVipSubnetID("889570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        return neutronObject;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancer update */
+    public NeutronLoadBalancer defaultUpdateNeutronLoadBalancerObject() {
+        NeutronLoadBalancer neutronUpdateObject = new NeutronLoadBalancer();
+        neutronUpdateObject.setLoadBalancerDescription("loadBalancerDescription");
+        neutronUpdateObject.setLoadBalancerID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronUpdateObject.setLoadBalancerName("loadBalancerName");
+        neutronUpdateObject.setLoadBalancerStatus(null);
+        neutronUpdateObject.setLoadBalancerTenantID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronUpdateObject.setLoadBalancerVipAddress("10.10.10.10");
+        neutronUpdateObject.setLoadBalancerVipSubnetID("889570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        return neutronUpdateObject;
+    }
+    /* Test method to check if neutron LoadBalancer is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerNull() {
+        Activator.apiConnector = mockApiConnector;
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, loadBalancerHandler.canCreateNeutronLoadBalancer(null));
+    }
+
+    /* Test method to check if neutron LoadBalancer tenant ID is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerTenantIDNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancer neutronObject = new NeutronLoadBalancer();
+        neutronObject.setLoadBalancerTenantID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerHandler.canCreateNeutronLoadBalancer(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancer project exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolProjectNull() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancer neutronLoadBalancer = defaultNeutronLoadBalancerObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancer.getLoadBalancerTenantID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND,
+                loadBalancerHandler.canCreateNeutronLoadBalancer(neutronLoadBalancer));
+        }
+
+}
diff --git a/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHealthMonitorHandlerTest.java b/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerHealthMonitorHandlerTest.java
new file mode 100644 (file)
index 0000000..4f3c1e3
--- /dev/null
@@ -0,0 +1,139 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.types.LoadbalancerHealthmonitor;
+import net.juniper.contrail.api.types.Project;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerHealthMonitor;
+
+/**
+ * Test Class for LoadBalancerHealthMonitorHandler.
+ */
+public class LoadBalancerHealthMonitorHandlerTest {
+
+    LoadBalancerHealthMonitorHandler loadBalancerHealthMonitorHandler;
+    LoadBalancerHealthMonitorHandler mockLoadBalancerHealthMonitorHandler = mock(LoadBalancerHealthMonitorHandler.class);
+    NeutronLoadBalancerHealthMonitor mockNeutronLoadBalancerHealthMonitor = mock(NeutronLoadBalancerHealthMonitor.class);
+    LoadbalancerHealthmonitor mockLoadbalancerHealthmonitor = mock(LoadbalancerHealthmonitor.class);
+    ApiConnector mockApiConnector = mock(ApiConnector.class);
+    Project mockProject = mock(Project.class);
+
+    @Before
+    public void beforeTest() {
+        loadBalancerHealthMonitorHandler = new LoadBalancerHealthMonitorHandler();
+        assertNotNull(mockLoadBalancerHealthMonitorHandler);
+        assertNotNull(mockNeutronLoadBalancerHealthMonitor);
+        assertNotNull(mockApiConnector);
+        assertNotNull(mockProject);
+        assertNotNull(mockLoadbalancerHealthmonitor);
+    }
+
+    @After
+    public void AfterTest() {
+        loadBalancerHealthMonitorHandler = null;
+        Activator.apiConnector = null;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancer HealthMonitor object */
+    public NeutronLoadBalancerHealthMonitor defaultNeutronLoadBalancerHealthMonitorObject() {
+        NeutronLoadBalancerHealthMonitor neutronObject = new NeutronLoadBalancerHealthMonitor();
+        neutronObject.setLoadBalancerHealthMonitorAdminStateIsUp(null);
+        neutronObject.setLoadBalancerHealthMonitorDelay(30);
+        neutronObject.setLoadBalancerHealthMonitorExpectedCodes("loadBalancerHealthMonitorExpectedCodes");
+        neutronObject.setLoadBalancerHealthMonitorHttpMethod("HTTP");
+        neutronObject.setLoadBalancerHealthMonitorID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setLoadBalancerHealthMonitorMaxRetries(10);
+        neutronObject.setLoadBalancerHealthMonitorStatus("loadBalancerHealthMonitorStatus");
+        neutronObject.setLoadBalancerHealthMonitorTenantID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setLoadBalancerHealthMonitorTimeout(5);
+        neutronObject.setLoadBalancerHealthMonitorType("loadBalancerHealthMonitorType");
+        neutronObject.setLoadBalancerHealthMonitorUrlPath("/check");
+        return neutronObject;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancer update */
+    public NeutronLoadBalancerHealthMonitor defaultUpdateNeutronLoadBalancerHealthMonitorObject() {
+        NeutronLoadBalancerHealthMonitor neutronUpdateObject = new NeutronLoadBalancerHealthMonitor();
+        neutronUpdateObject.setLoadBalancerHealthMonitorAdminStateIsUp(null);
+        neutronUpdateObject.setLoadBalancerHealthMonitorDelay(30);
+        neutronUpdateObject.setLoadBalancerHealthMonitorExpectedCodes("loadBalancerHealthMonitorExpectedCodes");
+        neutronUpdateObject.setLoadBalancerHealthMonitorHttpMethod("HTTP");
+        neutronUpdateObject.setLoadBalancerHealthMonitorID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronUpdateObject.setLoadBalancerHealthMonitorMaxRetries(10);
+        neutronUpdateObject.setLoadBalancerHealthMonitorStatus("loadBalancerHealthMonitorStatus");
+        neutronUpdateObject.setLoadBalancerHealthMonitorTenantID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronUpdateObject.setLoadBalancerHealthMonitorTimeout(5);
+        neutronUpdateObject.setLoadBalancerHealthMonitorType("loadBalancerHealthMonitorType");
+        neutronUpdateObject.setLoadBalancerHealthMonitorUrlPath("/check");
+        return neutronUpdateObject;
+    }
+
+    /* Test method to check if neutron LoadBalancerHealthMonitor is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerNull() {
+        Activator.apiConnector = mockApiConnector;
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerHealthMonitorHandler.canCreateNeutronLoadBalancerHealthMonitor(null));
+    }
+
+    /*
+     * Test method to check if neutron LoadBalancer health monitor tenant ID is
+     * null
+     */
+    @Test
+    public void testCanCreateNeutronLoadBalancerHMTenantIDNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerHealthMonitor neutronObject = new NeutronLoadBalancerHealthMonitor();
+        neutronObject.setLoadBalancerHealthMonitorTenantID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerHealthMonitorHandler.canCreateNeutronLoadBalancerHealthMonitor(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancer health monitor project exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerProjectNull() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerHealthMonitor neutronObject = defaultNeutronLoadBalancerHealthMonitorObject();
+        when(mockApiConnector.findById(Project.class, neutronObject.getLoadBalancerHealthMonitorTenantID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND,
+                loadBalancerHealthMonitorHandler.canCreateNeutronLoadBalancerHealthMonitor(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancer health monitor exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerHMExist() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerHealthMonitor neutronObject = defaultNeutronLoadBalancerHealthMonitorObject();
+        when(mockApiConnector.findById(Project.class, neutronObject.getLoadBalancerHealthMonitorTenantID()))
+                .thenReturn(mockProject);
+        when(mockApiConnector.findById(LoadbalancerHealthmonitor.class, neutronObject.getLoadBalancerHealthMonitorID()))
+                .thenReturn(mockLoadbalancerHealthmonitor);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN,
+                loadBalancerHealthMonitorHandler.canCreateNeutronLoadBalancerHealthMonitor(neutronObject));
+        }
+
+    /* Test method to check if neutron LoadBalancer health monitor returns Ok */
+    @Test
+    public void testCanCreateNeutronLoadBalancerHMOk() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerHealthMonitor neutronObject = defaultNeutronLoadBalancerHealthMonitorObject();
+        when(mockApiConnector.findById(Project.class, neutronObject.getLoadBalancerHealthMonitorTenantID()))
+                .thenReturn(mockProject);
+        when(mockApiConnector.findById(LoadbalancerHealthmonitor.class, neutronObject.getLoadBalancerHealthMonitorID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_OK,
+                loadBalancerHealthMonitorHandler.canCreateNeutronLoadBalancerHealthMonitor(neutronObject));
+    }
+}
diff --git a/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerListenerHandlerTest.java b/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerListenerHandlerTest.java
new file mode 100644 (file)
index 0000000..62c3af9
--- /dev/null
@@ -0,0 +1,167 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.types.LoadbalancerPool;
+import net.juniper.contrail.api.types.Project;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerListener;
+
+/**
+ * Test Class for LoadBalancerListenerHandler.
+ */
+
+public class LoadBalancerListenerHandlerTest {
+
+    LoadBalancerListenerHandler loadBalancerListenerHandler;
+    LoadBalancerListenerHandler mockLoadBalancerListenerHandler = mock(LoadBalancerListenerHandler.class);
+    ApiConnector mockApiConnector = mock(ApiConnector.class);
+    Project mockProject = mock(Project.class);
+    NeutronLoadBalancerListener mockNeutronLoadBalancerListener = mock(NeutronLoadBalancerListener.class);
+    LoadbalancerPool mockLoadbalancerPool = mock(LoadbalancerPool.class);
+    // LoadbalancerListener mockLoadbalancerListener = mock(LoadbalancerPool.class);
+
+    @Before
+    public void beforeTest() {
+        loadBalancerListenerHandler = new LoadBalancerListenerHandler();
+        assertNotNull(mockLoadBalancerListenerHandler);
+        assertNotNull(mockApiConnector);
+        assertNotNull(mockProject);
+        assertNotNull(mockNeutronLoadBalancerListener);
+        // assertNotNull(mockLoadbalancerListener);
+    }
+
+    @After
+    public void AfterTest() {
+        loadBalancerListenerHandler = null;
+        Activator.apiConnector = null;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancerListener */
+    public NeutronLoadBalancerListener defaultNeutronLoadBalancerListenerObject() {
+        NeutronLoadBalancerListener neutronObject = new NeutronLoadBalancerListener();
+        neutronObject.setLoadBalancerListenerAdminStateIsUp(true);
+        neutronObject.setLoadBalancerListenerDescription("loadBalancerListenerDescription");
+        neutronObject.setLoadBalancerListenerID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setLoadBalancerListenerIsShared(true);
+        neutronObject.setLoadBalancerListenerName("loadBalancerListenerName");
+        neutronObject.setLoadBalancerListenerStatus("status");
+        neutronObject.setLoadBalancerListenerTenantID("000570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setNeutronLoadBalancerListenerDefaultPoolID("001570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setNeutronLoadBalancerListenerLoadBalancerID("002570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setNeutronLoadBalancerListenerProtocol("HTTP");
+        neutronObject.setNeutronLoadBalancerListenerProtocolPort("8282");
+        return neutronObject;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancerListener update */
+    public NeutronLoadBalancerListener defaultNeutronLoadBalancerListenerUpdateObject() {
+        NeutronLoadBalancerListener neutronObject = new NeutronLoadBalancerListener();
+        neutronObject.setLoadBalancerListenerAdminStateIsUp(true);
+        neutronObject.setLoadBalancerListenerDescription("loadBalancerListenerDescription");
+        neutronObject.setLoadBalancerListenerID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setLoadBalancerListenerIsShared(true);
+        neutronObject.setLoadBalancerListenerName("loadBalancerListenerName");
+        neutronObject.setLoadBalancerListenerStatus("status");
+        neutronObject.setLoadBalancerListenerTenantID("000570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setNeutronLoadBalancerListenerDefaultPoolID("001570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setNeutronLoadBalancerListenerLoadBalancerID("002570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setNeutronLoadBalancerListenerProtocol("HTTP");
+        neutronObject.setNeutronLoadBalancerListenerProtocolPort("8282");
+        return neutronObject;
+    }
+
+    /* Test method to check if neutron LoadBalancerListener is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolNull() {
+        Activator.apiConnector = mockApiConnector;
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerListenerHandler.canCreateNeutronLoadBalancerListener(null));
+    }
+
+    /* Test method to check if neutron LoadBalancerListener tenant ID is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolTenantIDNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerListener neutronObject = defaultNeutronLoadBalancerListenerObject();
+        neutronObject.setLoadBalancerListenerTenantID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerListenerHandler.canCreateNeutronLoadBalancerListener(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerListener pool ID is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolIDNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerListener neutronObject = defaultNeutronLoadBalancerListenerObject();
+        neutronObject.setNeutronLoadBalancerListenerDefaultPoolID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerListenerHandler.canCreateNeutronLoadBalancerListener(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalance ID is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerListenerLBIDNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerListener neutronObject = defaultNeutronLoadBalancerListenerObject();
+        neutronObject.setNeutronLoadBalancerListenerLoadBalancerID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerListenerHandler.canCreateNeutronLoadBalancerListener(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalanceListener protocol is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerListenerProtocolNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerListener neutronObject = defaultNeutronLoadBalancerListenerObject();
+        neutronObject.setNeutronLoadBalancerListenerProtocol(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerListenerHandler.canCreateNeutronLoadBalancerListener(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool protocol is invalid */
+    @Test
+    public void testCanCreateNeutronLoadBalancerListenerProtocolInvalid() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerListener neutronObject = defaultNeutronLoadBalancerListenerObject();
+        neutronObject.setNeutronLoadBalancerListenerProtocol("xyz");
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerListenerHandler.canCreateNeutronLoadBalancerListener(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool project exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerListenerProjectNull() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerListener neutronLoadBalancerListener = defaultNeutronLoadBalancerListenerObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerListener.getLoadBalancerListenerTenantID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND,
+                loadBalancerListenerHandler.canCreateNeutronLoadBalancerListener(neutronLoadBalancerListener));
+    }
+
+    /* Test method to check if neutron default Pool already exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerListenerDefaultPoolExists() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerListener neutronLoadBalancerListener = defaultNeutronLoadBalancerListenerObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerListener.getLoadBalancerListenerTenantID()))
+                .thenReturn(mockProject);
+        when(
+                mockApiConnector.findById(LoadbalancerPool.class,
+                        neutronLoadBalancerListener.getNeutronLoadBalancerListenerDefaultPoolID())).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN,
+                loadBalancerListenerHandler.canCreateNeutronLoadBalancerListener(neutronLoadBalancerListener));
+    }
+
+}
diff --git a/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolHandlerTest.java b/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolHandlerTest.java
new file mode 100644 (file)
index 0000000..d88972e
--- /dev/null
@@ -0,0 +1,294 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.types.LoadbalancerMember;
+import net.juniper.contrail.api.types.LoadbalancerPool;
+import net.juniper.contrail.api.types.Project;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPool;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPoolMember;
+
+/**
+ * Test Class for LoadBalancerPoolHandler.
+ */
+public class LoadBalancerPoolHandlerTest {
+
+    LoadBalancerPoolHandler loadBalancerPoolHandler;
+    LoadBalancerPoolHandler mockLoadBalancerPoolHandler = mock(LoadBalancerPoolHandler.class);
+    ApiConnector mockApiConnector = mock(ApiConnector.class);
+    Project mockProject = mock(Project.class);
+    NeutronLoadBalancerPool mockNeutronLoadBalancerPool = mock(NeutronLoadBalancerPool.class);
+    LoadbalancerPool mockLoadbalancerPool = mock(LoadbalancerPool.class);
+    LoadbalancerMember mockLoadbalancerMember = mock(LoadbalancerMember.class);
+
+    @Before
+    public void beforeTest() {
+        loadBalancerPoolHandler = new LoadBalancerPoolHandler();
+        assertNotNull(mockLoadBalancerPoolHandler);
+        assertNotNull(mockApiConnector);
+        assertNotNull(mockProject);
+        assertNotNull(mockNeutronLoadBalancerPool);
+        assertNotNull(mockLoadbalancerPool);
+    }
+
+    @After
+    public void AfterTest() {
+        loadBalancerPoolHandler = null;
+        Activator.apiConnector = null;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancerPool */
+    public NeutronLoadBalancerPool defaultNeutronLoadBalancerPoolObject() {
+        NeutronLoadBalancerPool neutronObject = new NeutronLoadBalancerPool();
+        neutronObject.setLoadBalancerPoolAdminStateIsUp(false);
+        neutronObject.setLoadBalancerPoolDescription("loadBalancerPoolDescription");
+        neutronObject.setLoadBalancerPoolID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setLoadBalancerPoolLbAlgorithm("ROUND_ROBIN");
+        neutronObject.setLoadBalancerPoolName("loadBalancerPoolName");
+        neutronObject.setLoadBalancerPoolProtocol("HTTP");
+        neutronObject.setLoadBalancerPoolStatus("PENDING_CREATE");
+        neutronObject.setLoadBalancerPoolTenantID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        List<NeutronLoadBalancerPoolMember> loadBalancerPoolMembers = new ArrayList<NeutronLoadBalancerPoolMember>();
+        neutronObject.setLoadBalancerPoolMembers(loadBalancerPoolMembers);
+        neutronObject.setNeutronLoadBalancerPoolHealthMonitorID("889570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        return neutronObject;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancerPool update */
+    public NeutronLoadBalancerPool defaultUpdateNeutronLoadBalancerPoolObject() {
+        NeutronLoadBalancerPool neutronUpdateObject = new NeutronLoadBalancerPool();
+        neutronUpdateObject.setLoadBalancerPoolAdminStateIsUp(false);
+        neutronUpdateObject.setLoadBalancerPoolDescription("loadBalancerPoolDescription");
+        neutronUpdateObject.setLoadBalancerPoolID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronUpdateObject.setLoadBalancerPoolLbAlgorithm("ROUND_ROBIN");
+        neutronUpdateObject.setLoadBalancerPoolName("loadBalancerPoolName");
+        neutronUpdateObject.setLoadBalancerPoolProtocol("HTTP");
+        neutronUpdateObject.setLoadBalancerPoolStatus("PENDING_CREATE");
+        neutronUpdateObject.setLoadBalancerPoolTenantID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronUpdateObject.setNeutronLoadBalancerPoolHealthMonitorID("889570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        return neutronUpdateObject;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancerPoolMember */
+    public NeutronLoadBalancerPoolMember defaultNeutronLoadBalancerMemberObject() {
+        NeutronLoadBalancerPoolMember neutronObject = new NeutronLoadBalancerPoolMember();
+        neutronObject.setPoolID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setPoolMemberAdminStateIsUp(true);
+        neutronObject.setPoolMemberID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setPoolMemberProtoPort(80);
+        neutronObject.setPoolMemberStatus("poolMemberStatus");
+        neutronObject.setPoolMemberSubnetID("000570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setPoolMemberTenantID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setPoolMemberWeight(20);
+        return neutronObject;
+    }
+
+    /* Test method to check if neutron LoadBalancerPool is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolNull() {
+        Activator.apiConnector = mockApiConnector;
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(null));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool tenant ID is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolTenantIDNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronObject = new NeutronLoadBalancerPool();
+        neutronObject.setLoadBalancerPoolTenantID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool alogorithm is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolAlgorithmNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronObject = defaultNeutronLoadBalancerPoolObject();
+        neutronObject.setLoadBalancerPoolLbAlgorithm(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool algorithm is invalid */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolAlgorithmInvalid() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronObject = defaultNeutronLoadBalancerPoolObject();
+        neutronObject.setLoadBalancerPoolLbAlgorithm("xyz");
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool protocol is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolProtocolNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronObject = defaultNeutronLoadBalancerPoolObject();
+        neutronObject.setLoadBalancerPoolProtocol(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool protocol is invalid */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolProtocolInvalid() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronObject = defaultNeutronLoadBalancerPoolObject();
+        neutronObject.setLoadBalancerPoolProtocol("xyz");
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronObject));
+    }
+
+    /*
+     * Test method to check if neutron LoadBalancerPool and Member belong to
+     * same tenant
+     */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolMemberTenantIdCheck() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronPoolObject = defaultNeutronLoadBalancerPoolObject();
+        NeutronLoadBalancerPoolMember neutronMemberObject = defaultNeutronLoadBalancerMemberObject();
+        neutronPoolObject.addLoadBalancerPoolMember(neutronMemberObject);
+        neutronPoolObject.setLoadBalancerPoolTenantID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronMemberObject.setPoolMemberTenantID("009570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronPoolObject));
+    }
+
+    /*
+     * Test method to check if neutron LoadBalancerPool Member does not already
+     * exist
+     */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolMemberExist() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronPoolObject = defaultNeutronLoadBalancerPoolObject();
+        NeutronLoadBalancerPoolMember neutronMemberObject = defaultNeutronLoadBalancerMemberObject();
+        neutronPoolObject.addLoadBalancerPoolMember(neutronMemberObject);
+        when(mockApiConnector.findById(LoadbalancerMember.class, neutronMemberObject.getPoolMemberID())).thenReturn(
+                mockLoadbalancerMember);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronPoolObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool project exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolProjectNull() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronLoadBalancerPool = defaultNeutronLoadBalancerPoolObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerPool.getLoadBalancerPoolTenantID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronLoadBalancerPool));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool already exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolExistsByID() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronLoadBalancerPool = defaultNeutronLoadBalancerPoolObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerPool.getLoadBalancerPoolTenantID()))
+                .thenReturn(mockProject);
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerPool.getLoadBalancerPoolID()))
+                .thenReturn(mockLoadbalancerPool);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronLoadBalancerPool));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool already with same name */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolExistsByName() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronLoadBalancerPool = defaultNeutronLoadBalancerPoolObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerPool.getLoadBalancerPoolTenantID()))
+                .thenReturn(mockProject);
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerPool.getLoadBalancerPoolID()))
+                .thenReturn(null);
+        when(
+                mockApiConnector.findByName(LoadbalancerPool.class, mockProject,
+                        neutronLoadBalancerPool.getLoadBalancerPoolName())).thenReturn("name");
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronLoadBalancerPool));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool returns status OK */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolOK() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronLoadBalancerPool = defaultNeutronLoadBalancerPoolObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerPool.getLoadBalancerPoolTenantID()))
+                .thenReturn(mockProject);
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerPool.getLoadBalancerPoolID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_OK,
+                loadBalancerPoolHandler.canCreateNeutronLoadBalancerPool(neutronLoadBalancerPool));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool is null */
+    @Test
+    public void testCanUpdateNeutronLoadBalancerPoolNull() {
+        Activator.apiConnector = mockApiConnector;
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canUpdateNeutronLoadBalancerPool(null, null));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool does not exist */
+    @Test
+    public void testCanUpdateNeutronLoadBalancerPoolNotFound() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronLoadBalancerPool = defaultNeutronLoadBalancerPoolObject();
+        NeutronLoadBalancerPool neutronUpdateLoadBalancerPool = defaultUpdateNeutronLoadBalancerPoolObject();
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerPool.getLoadBalancerPoolID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, loadBalancerPoolHandler.canUpdateNeutronLoadBalancerPool(
+                neutronUpdateLoadBalancerPool, neutronLoadBalancerPool));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool returns status ok */
+    @Test
+    public void testCanUpdateNeutronLoadBalancerPoolOK() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronLoadBalancerPool = defaultNeutronLoadBalancerPoolObject();
+        NeutronLoadBalancerPool neutronUpdateLoadBalancerPool = defaultUpdateNeutronLoadBalancerPoolObject();
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerPool.getLoadBalancerPoolID()))
+                .thenReturn(mockLoadbalancerPool);
+        assertEquals(HttpURLConnection.HTTP_OK, loadBalancerPoolHandler.canUpdateNeutronLoadBalancerPool(
+                neutronUpdateLoadBalancerPool, neutronLoadBalancerPool));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool does not exists */
+    @Test
+    public void testCanDeleteNeutronLoadBalancerPoolNotFound() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronLoadBalancerPool = defaultNeutronLoadBalancerPoolObject();
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerPool.getLoadBalancerPoolID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolHandler.canDeleteNeutronLoadBalancerPool(neutronLoadBalancerPool));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool returns status OK */
+    @Test
+    public void testCanDeleteNeutronLoadBalancerPoolOK() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPool neutronLoadBalancerPool = defaultNeutronLoadBalancerPoolObject();
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerPool.getLoadBalancerPoolID()))
+                .thenReturn(mockLoadbalancerPool);
+        assertEquals(HttpURLConnection.HTTP_OK,
+                loadBalancerPoolHandler.canDeleteNeutronLoadBalancerPool(neutronLoadBalancerPool));
+    }
+}
diff --git a/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolMemberHandlerTest.java b/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/LoadBalancerPoolMemberHandlerTest.java
new file mode 100644 (file)
index 0000000..9e10bda
--- /dev/null
@@ -0,0 +1,216 @@
+package org.opendaylight.plugin2oc.neutron;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.types.LoadbalancerMember;
+import net.juniper.contrail.api.types.LoadbalancerPool;
+import net.juniper.contrail.api.types.Project;
+import net.juniper.contrail.api.types.VirtualMachineInterface;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPool;
+import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPoolMember;
+import org.opendaylight.controller.networkconfig.neutron.NeutronPort;
+import org.opendaylight.controller.networkconfig.neutron.Neutron_IPs;
+
+/**
+ * Test Class for LoadBalancerPoolMember.
+ */
+public class LoadBalancerPoolMemberHandlerTest {
+
+    LoadBalancerPoolMemberHandler loadBalancerPoolMemberHandler;
+    LoadBalancerPoolMemberHandler mockLoadBalancerPoolMemberHandler = mock(LoadBalancerPoolMemberHandler.class);
+    ApiConnector mockApiConnector = mock(ApiConnector.class);
+    Project mockProject = mock(Project.class);
+    NeutronLoadBalancerPool mockNeutronLoadBalancerPool = mock(NeutronLoadBalancerPool.class);
+    NeutronLoadBalancerPoolMember mockNeutronLoadBalancerPoolMember = mock(NeutronLoadBalancerPoolMember.class);
+    LoadbalancerPool mockLoadbalancerPool = mock(LoadbalancerPool.class);
+    LoadbalancerMember mockLoadbalancerMember = mock(LoadbalancerMember.class);
+    VirtualMachineInterface mockedVirtualMachineInterface = mock(VirtualMachineInterface.class);
+    Neutron_IPs mockNeutron_IPs = mock(Neutron_IPs.class);
+
+    @Before
+    public void beforeTest() {
+        loadBalancerPoolMemberHandler = new LoadBalancerPoolMemberHandler();
+        assertNotNull(mockLoadBalancerPoolMemberHandler);
+        assertNotNull(mockNeutronLoadBalancerPool);
+        assertNotNull(mockNeutronLoadBalancerPoolMember);
+        assertNotNull(mockLoadbalancerPool);
+        assertNotNull(mockLoadbalancerMember);
+        assertNotNull(mockApiConnector);
+        assertNotNull(mockProject);
+    }
+
+    @After
+    public void AfterTest() {
+        loadBalancerPoolMemberHandler = null;
+        Activator.apiConnector = null;
+    }
+
+    /* Dummy parameters for Neutron LoadBalancerPoolMember */
+    public NeutronLoadBalancerPoolMember defaultNeutronLoadBalancerMemberObject() {
+        NeutronLoadBalancerPoolMember neutronObject = new NeutronLoadBalancerPoolMember();
+        neutronObject.setPoolID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setPoolMemberAdminStateIsUp(true);
+        neutronObject.setPoolMemberID("779570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setPoolMemberProtoPort(80);
+        neutronObject.setPoolMemberStatus("poolMemberStatus");
+        neutronObject.setPoolMemberSubnetID("000570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setPoolMemberTenantID("001570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutronObject.setPoolMemberWeight(20);
+        return neutronObject;
+    }
+
+    /* dummy params for Neutron Port */
+    public NeutronPort defaultNeutronPortObject() {
+        NeutronPort neutronPort = new NeutronPort();
+        neutronPort.setPortUUID("64a271fe-0216-46bc-a3e6-1ff582fbd324");
+        neutronPort.setNetworkUUID("54a271fe-0216-46bc-a3e6-1ff582fbd324");
+        neutronPort.setMacAddress("02:70:72:93:4d:d6");
+        neutronPort.setName("port12");
+        neutronPort.setDeviceID("100071fe-0216-46bc-a3e6-1ff582fbd324");
+        neutronPort.setTenantID("001570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        List<Neutron_IPs> ips = new ArrayList<Neutron_IPs>();
+        ips.add(mockNeutron_IPs);
+        neutronPort.setFixedIPs(ips);
+        return neutronPort;
+    }
+
+    /* Test method to check if neutron LoadBalancerPoolMember is null */
+    @Test
+    public void testCanCreateNeutronLoadBalancerMemberNull() {
+        Activator.apiConnector = mockApiConnector;
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(null));
+    }
+
+    /*
+     * Test method to check if neutron LoadBalancerPoolMember tenant ID/SUbnetID
+     * is null
+     */
+    @Test
+    public void testCanCreateNeutronLoadBalancerMemberTenantIDNull() {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronObject = new NeutronLoadBalancerPoolMember();
+        neutronObject.setPoolMemberTenantID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronObject));
+    }
+
+    /* Test method to check if neutron LoadBalancerPoolMember project exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerMemberProjectNull() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronLoadBalancerMember = defaultNeutronLoadBalancerMemberObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerMember.getPoolMemberTenantID())).thenReturn(
+                null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND,
+                loadBalancerPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLoadBalancerMember));
+    }
+
+    /*
+     * Test method to check if neutron LoadBalancerPoolMember has no VM
+     * available
+     */
+    @Test
+    public void testCanCreateNeutronLoadBalancerMemberNoVMAvailable() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronLoadBalancerMember = defaultNeutronLoadBalancerMemberObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerMember.getPoolMemberTenantID())).thenReturn(
+                mockProject);
+        when(mockProject.getVirtualMachineInterfaces()).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN,
+                loadBalancerPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLoadBalancerMember));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool already exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerMemberExists() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronLoadBalancerMember = defaultNeutronLoadBalancerMemberObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerMember.getPoolMemberTenantID())).thenReturn(
+                mockProject);
+        when(mockApiConnector.findById(LoadbalancerMember.class, neutronLoadBalancerMember.getPoolMemberID()))
+                .thenReturn(mockLoadbalancerMember);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN,
+                loadBalancerPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLoadBalancerMember));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool already exist */
+    @Test
+    public void testCanCreateNeutronLoadBalancerPoolExists() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronLoadBalancerMember = defaultNeutronLoadBalancerMemberObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerMember.getPoolMemberTenantID())).thenReturn(
+                mockProject);
+        when(mockApiConnector.findById(LoadbalancerMember.class, neutronLoadBalancerMember.getPoolMemberID()))
+                .thenReturn(null);
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerMember.getPoolID())).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN,
+                loadBalancerPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLoadBalancerMember));
+    }
+
+    /* Test method to check if neutron Member and Pool have same TenantID */
+    @Test
+    public void testCanCreateNeutronLoadBalancerMemberTenantIDConflict() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronLoadBalancerMember = defaultNeutronLoadBalancerMemberObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerMember.getPoolMemberTenantID())).thenReturn(
+                mockProject);
+        when(mockApiConnector.findById(LoadbalancerMember.class, neutronLoadBalancerMember.getPoolMemberID()))
+                .thenReturn(null);
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerMember.getPoolID())).thenReturn(
+                mockLoadbalancerPool);
+        when(mockLoadbalancerPool.getParentUuid()).thenReturn("111570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN,
+                loadBalancerPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLoadBalancerMember));
+    }
+
+    /* Test method to check if neutron Member and Pool have same TenantID */
+    @Test
+    public void testCanCreateNeutronLoadBalancerMemberOk() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronLoadBalancerMember = defaultNeutronLoadBalancerMemberObject();
+        when(mockApiConnector.findById(Project.class, neutronLoadBalancerMember.getPoolMemberTenantID())).thenReturn(
+                mockProject);
+        when(mockApiConnector.findById(LoadbalancerMember.class, neutronLoadBalancerMember.getPoolMemberID()))
+                .thenReturn(null);
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerMember.getPoolID())).thenReturn(
+                mockLoadbalancerPool);
+        when(mockLoadbalancerPool.getParentUuid()).thenReturn("001570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        assertEquals(HttpURLConnection.HTTP_OK,
+                loadBalancerPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLoadBalancerMember));
+    }
+    /* Test method to check if neutron LoadBalancerPool member not found */
+    @Test
+    public void testCanDeleteNeutronLoadBalancerMemberNotFound() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronLoadBalancerMember = defaultNeutronLoadBalancerMemberObject();
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerMember.getPoolMemberID()))
+                .thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolMemberHandler.canDeleteNeutronLoadBalancerPoolMember(neutronLoadBalancerMember));
+    }
+
+    /* Test method to check if neutron LoadBalancerPool returns status OK */
+    @Test
+    public void testCanDeleteNeutronLoadBalancerPoolOK() throws IOException {
+        Activator.apiConnector = mockApiConnector;
+        NeutronLoadBalancerPoolMember neutronLoadBalancerMember = defaultNeutronLoadBalancerMemberObject();
+        when(mockApiConnector.findById(LoadbalancerPool.class, neutronLoadBalancerMember.getPoolMemberID()))
+                .thenReturn(mockLoadbalancerPool);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,
+                loadBalancerPoolMemberHandler.canDeleteNeutronLoadBalancerPoolMember(neutronLoadBalancerMember));
+    }
+}
diff --git a/pom.xml b/pom.xml
index cd8ac58b672895875d56087f31673ba2281ca5c8..e017cd2cc169aace6d25cac9a19056280471af5b 100755 (executable)
--- a/pom.xml
+++ b/pom.xml
@@ -7,12 +7,12 @@
   <parent>
     <groupId>org.opendaylight.plugin2oc</groupId>
     <artifactId>commons.plugin2oc</artifactId>
-    <version>0.1-SNAPSHOT</version>
+    <version>0.2.0-SNAPSHOT</version>
     <relativePath>commons/parent</relativePath>
   </parent>
   <groupId>org.opendaylight.plugin2oc</groupId>
   <artifactId>plugin2oc.project</artifactId>
-  <version>0.1-SNAPSHOT</version>
+  <version>0.2.0-SNAPSHOT</version>
   <packaging>pom</packaging>
   <properties>
   <sonar.host.url> http://localhost:9000/ </sonar.host.url>