code submission - M5 release 74/10574/1
authorpchopra <pchopra@juniper.net>
Mon, 1 Sep 2014 11:42:54 +0000 (17:12 +0530)
committerpchopra <pchopra@juniper.net>
Mon, 1 Sep 2014 11:53:19 +0000 (17:23 +0530)
Change-Id: I4c2e5f966841e037205a11d51523ee1da5f70a44
Signed-off-by: pchopra <pchopra@juniper.net>
14 files changed:
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/Activator.java
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/FloatingIpHandler.java
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/NetworkHandler.java
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/PortHandler.java
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/RouterHandler.java
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/SecurityGroupHandler.java [new file with mode: 0644]
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/SubnetHandler.java
neutron/src/main/java/org/opendaylight/plugin2oc/neutron/Utils.java [new file with mode: 0644]
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/FloatingIpHandlerTest.java
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/NetworkHandlerTest.java
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/PortHandlerTest.java
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/RouterHandlerTest.java
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/SecurityGroupHandlerTest.java [new file with mode: 0644]
neutron/src/test/java/org/opendaylight/plugin2oc/neutron/SubnetHandlerTest.java

index f59c3b5889c6eb236901cc4a399b25b5efecbd56..3185956b195b88e034047a4c38b13870c36e1443 100755 (executable)
@@ -16,6 +16,8 @@ import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPAware
 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronRouterAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
+//import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
@@ -41,7 +43,8 @@ public class Activator extends ComponentActivatorAbstractBase {
 
     /**
      * Function called to get APIConnector object. porperties must be defined in
-     * opendaylight configuration folder inside config.ini at opendaylight/distribution
+     * opendaylight configuration folder inside config.ini at
+     * opendaylight/distribution
      * /opendaylight/src/main/resources/configuration/config.ini
      *
      */
@@ -77,7 +80,10 @@ public class Activator extends ComponentActivatorAbstractBase {
      */
     @Override
     public Object[] getImplementations() {
-        Object[] res = { NetworkHandler.class, SubnetHandler.class, PortHandler.class, RouterHandler.class, FloatingIpHandler.class };
+        Object[] res = { NetworkHandler.class, SubnetHandler.class, PortHandler.class, RouterHandler.class, FloatingIpHandler.class,
+                SecurityGroupHandler.class,
+//                SecurityGroupRulesHandler.class
+                };
         return res;
     }
 
@@ -113,6 +119,12 @@ public class Activator extends ComponentActivatorAbstractBase {
         if (imp.equals(FloatingIpHandler.class)) {
             c.setInterface(INeutronFloatingIPAware.class.getName(), null);
         }
+        if (imp.equals(SecurityGroupHandler.class)) {
+            c.setInterface(INeutronSecurityGroupAware.class.getName(), null);
+        }
+//        if (imp.equals(SecurityGroupRulesHandler.class)) {
+//            c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
+//        }
         // Create service dependencies.
         c.add(createServiceDependency().setService(BindingAwareBroker.class).setCallbacks("setBindingAwareBroker", "unsetBindingAwareBroker")
                 .setRequired(true));
index 1b7454322022107082c9cc5d077188fb01e75244..a02cbb861dd436d94ee8f4f99d80a83442ba45f7 100755 (executable)
@@ -31,15 +31,15 @@ public class FloatingIpHandler implements INeutronFloatingIPAware {
     /**
      * Logger instance.
      */
-    static final Logger LOGGER = LoggerFactory.getLogger(PortHandler.class);
+    static final Logger LOGGER = LoggerFactory.getLogger(FloatingIpHandler.class);
     static ApiConnector apiConnector;
 
     /**
-     * Invoked when a floating ip creation is requested to check if the
-     * specified floating ip can be created.
+     * Invoked when a floating IP creation is requested to check if the
+     * specified floating IP can be created.
      *
      * @param floatingip
-     *            An instance of proposed new Neutron Floating ip object.
+     *            An instance of proposed new Neutron Floating IP object.
      *
      * @return A HTTP status code to the creation request.
      */
@@ -62,50 +62,47 @@ public class FloatingIpHandler implements INeutronFloatingIPAware {
             LOGGER.error(" Floating Ip address can not be null");
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
+        String fipUUID = fip.getFloatingIPUUID();
+        String projectUUID = fip.getTenantUUID();
+        String floatingNetworkUUID = fip.getFloatingNetworkUUID();
         try {
-            return createfloatingIp(fip);
-        } catch (Exception e) {
-            e.printStackTrace();
-            LOGGER.error("Exception :   " + e);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked when a floating ip creation is requested to create the floating
-     * ip
-     *
-     * @param floatingip
-     *            An instance of proposed new Neutron Floating ip object.
-     *
-     * @return A HTTP status code to the creation request.
-     */
-    private int createfloatingIp(NeutronFloatingIP neutronFloatingIp) throws IOException {
-        String projectUUID = null;
-        String floatingPoolNetworkId = null;
-        String fipId = neutronFloatingIp.getID();
-        String floatingIpaddress = neutronFloatingIp.getFloatingIPAddress();
-        try {
-            floatingPoolNetworkId = neutronFloatingIp.getFloatingNetworkUUID();
-            projectUUID = neutronFloatingIp.getTenantUUID().toString();
+            if (!(fipUUID.contains("-"))) {
+                fipUUID = Utils.uuidFormater(fipUUID);
+            }
             if (!(projectUUID.contains("-"))) {
-                projectUUID = uuidFormater(projectUUID);
+                projectUUID = Utils.uuidFormater(projectUUID);
+            }
+            if (!(floatingNetworkUUID.contains("-"))) {
+                floatingNetworkUUID = Utils.uuidFormater(floatingNetworkUUID);
             }
+            boolean isValidFloatingIPUUID = Utils.isValidHexNumber(fipUUID);
+            boolean isValidFloatingNetworkUUID = Utils.isValidHexNumber(floatingNetworkUUID);
+            boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);
+            if (!isValidFloatingIPUUID || !isValidFloatingNetworkUUID || !isValidprojectUUID) {
+                LOGGER.info("Badly formed Hexadecimal UUID...");
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            fipUUID = UUID.fromString(fipUUID).toString();
             projectUUID = UUID.fromString(projectUUID).toString();
+            floatingNetworkUUID = UUID.fromString(floatingNetworkUUID).toString();
         } catch (Exception ex) {
             LOGGER.error("UUID input incorrect", ex);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+            return HttpURLConnection.HTTP_BAD_REQUEST;
         }
-        Project project;
         try {
-            project = (Project) apiConnector.findById(Project.class, projectUUID);
+            FloatingIp floatingIpByID = (FloatingIp) apiConnector.findById(FloatingIp.class, fipUUID);
+            if (floatingIpByID != null) {
+                LOGGER.error("Floating IP already exists...");
+                return HttpURLConnection.HTTP_NOT_FOUND;
+            }
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
             if (project == null) {
                 try {
                     Thread.currentThread();
                     Thread.sleep(3000);
-                } catch (InterruptedException interruptedException) {
-                    LOGGER.error("InterruptedException :    ", interruptedException);
-                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
+                } catch (InterruptedException e) {
+                    LOGGER.error("InterruptedException :    ", e);
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
                 }
                 project = (Project) apiConnector.findById(Project.class, projectUUID);
                 if (project == null) {
@@ -113,7 +110,7 @@ public class FloatingIpHandler implements INeutronFloatingIPAware {
                     return HttpURLConnection.HTTP_NOT_FOUND;
                 }
             }
-            VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, floatingPoolNetworkId);
+            VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, floatingNetworkUUID);
             if (virtualNetwork == null) {
                 LOGGER.error("Could not find Virtual network...");
                 return HttpURLConnection.HTTP_NOT_FOUND;
@@ -122,18 +119,68 @@ public class FloatingIpHandler implements INeutronFloatingIPAware {
             FloatingIpPool floatingIpPool = (FloatingIpPool) apiConnector.findById(FloatingIpPool.class, floatingPoolId);
             if (floatingIpPool == null) {
                 LOGGER.error("Could not find Floating ip pool...");
+
                 return HttpURLConnection.HTTP_NOT_FOUND;
             }
+        } catch (IOException ie) {
+            LOGGER.error("IOException :   " + ie);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        } catch (Exception e) {
+            LOGGER.error("Exception :   " + e);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    /**
+     * Invoked when a floating IP creation is requested to create the floating
+     * IP
+     *
+     * @param floatingip
+     *            An instance of proposed new Neutron Floating IP object.
+     */
+    private void createfloatingIp(NeutronFloatingIP neutronFloatingIp) throws IOException {
+        String fipUUID = neutronFloatingIp.getFloatingIPUUID();
+        String projectUUID = neutronFloatingIp.getTenantUUID();
+        String floatingNetworkUUID = neutronFloatingIp.getFloatingNetworkUUID();
+        String floatingIpaddress = neutronFloatingIp.getFloatingIPAddress();
+        String fipPortUUID = neutronFloatingIp.getPortUUID();
+        try {
+            if (!(fipUUID.contains("-"))) {
+                fipUUID = Utils.uuidFormater(fipUUID);
+            }
+            fipUUID = UUID.fromString(fipUUID).toString();
+            if (!(projectUUID.contains("-"))) {
+                projectUUID = Utils.uuidFormater(projectUUID);
+            }
+            projectUUID = UUID.fromString(projectUUID).toString();
+            if (!(floatingNetworkUUID.contains("-"))) {
+                floatingNetworkUUID = Utils.uuidFormater(floatingNetworkUUID);
+            }
+            floatingNetworkUUID = UUID.fromString(floatingNetworkUUID).toString();
+            if (neutronFloatingIp.getPortUUID() != null) {
+                if (!(fipPortUUID.contains("-"))) {
+                    fipPortUUID = Utils.uuidFormater(fipPortUUID);
+                }
+                fipPortUUID = UUID.fromString(fipPortUUID).toString();
+            }
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+        }
+        try {
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, floatingNetworkUUID);
+            String floatingPoolId = virtualNetwork.getFloatingIpPools().get(0).getUuid();
+            FloatingIpPool floatingIpPool = (FloatingIpPool) apiConnector.findById(FloatingIpPool.class, floatingPoolId);
             FloatingIp floatingIp = new FloatingIp();
-            floatingIp.setUuid(fipId);
-            floatingIp.setName(fipId);
-            floatingIp.setDisplayName(fipId);
+            floatingIp.setUuid(fipUUID);
+            floatingIp.setName(fipUUID);
+            floatingIp.setDisplayName(fipUUID);
             floatingIp.setAddress(floatingIpaddress);
             floatingIp.setParent(floatingIpPool);
             floatingIp.setProject(project);
-            if (neutronFloatingIp.getPortUUID() != null) {
-                VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class,
-                        neutronFloatingIp.getPortUUID());
+            if (fipPortUUID != null) {
+                VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, fipPortUUID);
                 if (virtualMachineInterface != null) {
                     floatingIp.addVirtualMachineInterface(virtualMachineInterface);
                 }
@@ -141,127 +188,161 @@ public class FloatingIpHandler implements INeutronFloatingIPAware {
             boolean floatingIpCreaterd = apiConnector.create(floatingIp);
             if (!floatingIpCreaterd) {
                 LOGGER.warn("Floating Ip creation failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
             }
             LOGGER.info("Floating Ip : " + floatingIp.getName() + "  having UUID : " + floatingIp.getUuid() + "  sucessfully created...");
-            return HttpURLConnection.HTTP_OK;
         } catch (IOException ioEx) {
             LOGGER.error("Exception : " + ioEx);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
     }
 
     /**
-     * Invoked to take action after a floating ip has been created.
+     * Invoked to create a Floating IP and take action after the floating IP has
+     * been created.
      *
-     * @param floatingip
-     *            An instance of proposed new Neutron Floating ip object.
+     * @param floatingIP
+     *            An instance of proposed new Neutron Floating IP object.
      *
-     * @return A HTTP status code to the creation request.
      */
     @Override
     public void neutronFloatingIPCreated(NeutronFloatingIP neutronFloatingIp) {
-        FloatingIp floatingIp = null;
         try {
-            floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, neutronFloatingIp.getFloatingIPUUID());
+            createfloatingIp(neutronFloatingIp);
+        } catch (Exception ex) {
+            LOGGER.error("Exception :   " + ex);
+        }
+        try {
+            String fipUUID = neutronFloatingIp.getFloatingIPUUID();
+            if (!(fipUUID.contains("-"))) {
+                fipUUID = Utils.uuidFormater(fipUUID);
+            }
+            fipUUID = UUID.fromString(fipUUID).toString();
+            FloatingIp floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, fipUUID);
             if (floatingIp != null) {
                 LOGGER.info("Floating Ip creation verified....");
+            } else {
+                LOGGER.error("Floating Ip creation failed....");
             }
         } catch (Exception ex) {
             LOGGER.error("Exception :    " + ex);
         }
-
     }
 
     /**
-     * Invoked when a floating ip update is requested to indicate if the
-     * specified floating ip can be changed using the specified delta.
+     * Invoked when a floating IP update is requested to indicate if the
+     * specified floating IP can be changed using the specified delta.
      *
      * @param delta
-     *            Updates to the floating ip object using patch semantics.
+     *            Updates to the floating IP object using patch semantics.
      * @param original
-     *            An instance of the Neutron floating ip object to be updated.
+     *            An instance of the Neutron floating IP object to be updated.
      * @return A HTTP status code to the update request.
      */
     @Override
     public int canUpdateFloatingIP(NeutronFloatingIP deltaFloatingIp, NeutronFloatingIP originalFloatingIp) {
-        apiConnector = Activator.apiConnector;
-        FloatingIp floatingIP = null;
         apiConnector = Activator.apiConnector;
         if (deltaFloatingIp == null || originalFloatingIp == null) {
             LOGGER.error("Neutron Floating Ip can't be null..");
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
+        FloatingIp floatingIp = null;
+        String fipUUID = originalFloatingIp.getFloatingIPUUID();
+
         try {
-            floatingIP = (FloatingIp) apiConnector.findById(FloatingIp.class, originalFloatingIp.getFloatingIPUUID());
-        } catch (IOException e) {
-            LOGGER.error("Exception :     " + e);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-        if (floatingIP == null) {
-            LOGGER.error("No network exists for the specified UUID...");
-            return HttpURLConnection.HTTP_FORBIDDEN;
+            if (!(fipUUID.contains("-"))) {
+                fipUUID = Utils.uuidFormater(fipUUID);
+            }
+            fipUUID = UUID.fromString(fipUUID).toString();
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+            return HttpURLConnection.HTTP_BAD_REQUEST;
         }
         try {
-            return updateFloatingIP(originalFloatingIp.getFloatingIPUUID(), deltaFloatingIp);
+            floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, fipUUID);
+            if (floatingIp == null) {
+                LOGGER.error("No floating IP exists for the specified UUID...");
+                return HttpURLConnection.HTTP_NOT_FOUND;
+            }
         } catch (IOException ex) {
             LOGGER.error("Exception : " + ex);
             return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
-
+        return HttpURLConnection.HTTP_OK;
     }
 
     /**
-     * Invoked to update the floating ip
+     * Invoked to update the floating IP
      *
-     * @param string
-     *            An instance of floating ip UUID.
      * @param delta_floatingip
-     *            An instance of delta floating ip.
+     *            An instance of delta floating IP.
      *
-     * @return A boolean to the update request.
      * @throws IOException
      */
-    private int updateFloatingIP(String floatingIpUUID, NeutronFloatingIP deltaFloatingIp) throws IOException {
-        FloatingIp floatingIP = (FloatingIp) apiConnector.findById(FloatingIp.class, floatingIpUUID);
-        String virtualMachineInterfaceUUID = deltaFloatingIp.getPortUUID();
-        if (deltaFloatingIp.getPortUUID() != null) {
+    private void updateFloatingIP(NeutronFloatingIP neutronFloatingIp) throws IOException {
+        String fipUUID = neutronFloatingIp.getFloatingIPUUID();
+        String fipPortUUID = neutronFloatingIp.getPortUUID();
+        try {
+            if (!(fipUUID.contains("-"))) {
+                fipUUID = Utils.uuidFormater(fipUUID);
+            }
+            fipUUID = UUID.fromString(fipUUID).toString();
+            if (neutronFloatingIp.getPortUUID() != null) {
+                if (!(fipPortUUID.contains("-"))) {
+                    fipPortUUID = Utils.uuidFormater(fipPortUUID);
+                }
+                fipPortUUID = UUID.fromString(fipPortUUID).toString();
+            }
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+        }
+        FloatingIp floatingIP = (FloatingIp) apiConnector.findById(FloatingIp.class, fipUUID);
+        if (fipPortUUID != null) {
             VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class,
-                    virtualMachineInterfaceUUID);
+                    fipPortUUID);
             if (virtualMachineInterface != null) {
                 floatingIP.setVirtualMachineInterface(virtualMachineInterface);
             }
         }
-        if (virtualMachineInterfaceUUID == null) {
+        if (fipPortUUID == null) {
             floatingIP.clearVirtualMachineInterface();
         }
         boolean floatingIpUpdate = apiConnector.update(floatingIP);
         if (!floatingIpUpdate) {
             LOGGER.warn("Floating Ip Updation failed..");
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
         LOGGER.info("Floating Ip  having UUID : " + floatingIP.getUuid() + "  has been sucessfully updated...");
-        return HttpURLConnection.HTTP_OK;
     }
 
     /**
-     * Invoked to take action after a floating ip has been updated.
+     * Invoked to take action after a floating IP has been updated.
      *
      * @param floatingIp
-     *            An instance of modified Neutron floating ip object.
+     *            An instance of modified Neutron floating IP object.
      */
     @Override
-    public void neutronFloatingIPUpdated(NeutronFloatingIP neutronFloatingIp) {
+    public void neutronFloatingIPUpdated(NeutronFloatingIP updatedFloatingIp) {
         try {
-            FloatingIp floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, neutronFloatingIp.getFloatingIPUUID());
-            if (neutronFloatingIp.getPortUUID() != null) {
-                if (floatingIp.getVirtualMachineInterface().get(0).getUuid().matches(neutronFloatingIp.getPortUUID())) {
-                    LOGGER.info("Floating Ip with floating UUID " + neutronFloatingIp.getFloatingIPUUID() + " is Updated successfully.");
+            updateFloatingIP(updatedFloatingIp);
+            String fipUUID = updatedFloatingIp.getFloatingIPUUID();
+            String fipPortUUID = updatedFloatingIp.getPortUUID();
+            if (!(fipUUID.contains("-"))) {
+                fipUUID = Utils.uuidFormater(fipUUID);
+            }
+            fipUUID = UUID.fromString(fipUUID).toString();
+            if (fipPortUUID != null) {
+                if (!(fipPortUUID.contains("-"))) {
+                    fipPortUUID = Utils.uuidFormater(fipPortUUID);
+                }
+                fipPortUUID = UUID.fromString(fipPortUUID).toString();
+            }
+            FloatingIp floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, fipUUID);
+            if (fipPortUUID != null) {
+                if (floatingIp.getVirtualMachineInterface().get(0).getUuid().matches(fipPortUUID)) {
+                    LOGGER.info("Floating Ip with floating UUID " + fipUUID + " is Updated successfully.");
                 } else {
                     LOGGER.info("Floating Ip Updation failed..");
                 }
-            } else if (neutronFloatingIp.getPortUUID() == null && floatingIp.getVirtualMachineInterface() == null) {
-                LOGGER.info("Floating Ip with floating UUID " + neutronFloatingIp.getFloatingIPUUID() + " is Updated successfully.");
+            } else if (fipPortUUID == null && floatingIp.getVirtualMachineInterface() == null) {
+                LOGGER.info("Floating Ip with floating UUID " + fipUUID + " is Updated successfully.");
             } else {
                 LOGGER.info("Floating Ip Updation failed..");
             }
@@ -282,12 +363,18 @@ public class FloatingIpHandler implements INeutronFloatingIPAware {
     @Override
     public int canDeleteFloatingIP(NeutronFloatingIP neutronFloatingIp) {
         apiConnector = Activator.apiConnector;
-        if (neutronFloatingIp == null) {
-            LOGGER.error("Neutron Floating Ip can not be null.. ");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
+        String fipUUID = neutronFloatingIp.getFloatingIPUUID();
         try {
-            return deleteFloatingIP(neutronFloatingIp.getFloatingIPUUID());
+            if (!(fipUUID.contains("-"))) {
+                fipUUID = Utils.uuidFormater(fipUUID);
+            }
+            fipUUID = UUID.fromString(fipUUID).toString();
+            FloatingIp floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, fipUUID);
+            if (floatingIp == null) {
+                LOGGER.info("No Floating Ip exists with UUID :  " + fipUUID);
+                return HttpURLConnection.HTTP_NOT_FOUND;
+            }
+            return HttpURLConnection.HTTP_OK;
         } catch (IOException ioEx) {
             LOGGER.error("Exception : " + ioEx);
             return HttpURLConnection.HTTP_INTERNAL_ERROR;
@@ -297,64 +384,34 @@ public class FloatingIpHandler implements INeutronFloatingIPAware {
         }
     }
 
-    /**
-     * Invoked to delete the specified Neutron floating ip.
-     *
-     * @param String
-     *            An instance of floating ip UUID.
-     *
-     * @return A boolean to the delete request.
-     * @throws IOException
-     */
-    private int deleteFloatingIP(String neutronFloatingIp) throws IOException {
-        FloatingIp floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, neutronFloatingIp);
-        if (floatingIp != null) {
-            apiConnector.delete(floatingIp);
-            LOGGER.info("Floating Ip with UUID :  " + floatingIp.getUuid() + "  has been deleted successfully....");
-            return HttpURLConnection.HTTP_OK;
-        } else {
-            LOGGER.info("No Floating Ip exists with UUID :  " + neutronFloatingIp);
-            return HttpURLConnection.HTTP_NOT_FOUND;
-        }
-    }
-
     /**
      * Invoked to take action after a floatingIP has been deleted.
      *
      * @param NeutronfloatingIP
-     *            An instance of deleted floatingIP Network object.
+     *            An instance of deleted floatingIP object.
      */
     @Override
     public void neutronFloatingIPDeleted(NeutronFloatingIP neutronFloatingIp) {
-        FloatingIp fip = null;
+        String fipUUID = neutronFloatingIp.getFloatingIPUUID();
+        FloatingIp floatingIp = null;
         try {
-            fip = (FloatingIp) apiConnector.findById(FloatingIp.class, neutronFloatingIp.getFloatingIPUUID());
-            if (fip == null) {
+            if (!(fipUUID.contains("-"))) {
+                fipUUID = Utils.uuidFormater(fipUUID);
+            }
+            fipUUID = UUID.fromString(fipUUID).toString();
+            floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, fipUUID);
+            apiConnector.delete(floatingIp);
+            floatingIp = (FloatingIp) apiConnector.findById(FloatingIp.class, fipUUID);
+            if (floatingIp == null) {
                 LOGGER.info("Floating ip deletion verified....");
+            } else {
+                LOGGER.info("Floating ip deletion failed....");
             }
-        } catch (Exception e) {
-            LOGGER.error("Exception :   " + e);
+        } catch (IOException ioEx) {
+            LOGGER.error("Exception : " + ioEx);
+        } catch (Exception ex) {
+            LOGGER.error("Exception :   " + ex);
         }
-
-    }
-
-    /**
-     * Invoked to format the UUID if UUID is not in correct format.
-     *
-     * @param String
-     *            An instance of UUID string.
-     *
-     * @return Correctly formated UUID string.
-     */
-    private String uuidFormater(String uuid) {
-        String uuidPattern = null;
-        String id1 = uuid.substring(0, 8);
-        String id2 = uuid.substring(8, 12);
-        String id3 = uuid.substring(12, 16);
-        String id4 = uuid.substring(16, 20);
-        String id5 = uuid.substring(20, 32);
-        uuidPattern = (id1 + "-" + id2 + "-" + id3 + "-" + id4 + "-" + id5);
-        return uuidPattern;
     }
 
-}
+}
\ No newline at end of file
index 4908653f73b8cb4e111763e8e6db0ba424b53323..784d2f7792305134452b3b7622ab9b49018cb485 100755 (executable)
-/*
- * Copyright (C) 2014 Juniper Networks, Inc.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- */
-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.FloatingIpPool;
-import net.juniper.contrail.api.types.Project;
-import net.juniper.contrail.api.types.VirtualNetwork;
-
-import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
-import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Handle requests for Neutron Network.
- */
-public class NetworkHandler implements INeutronNetworkAware {
-    /**
-     * Logger instance.
-     */
-    static final Logger LOGGER = LoggerFactory.getLogger(NetworkHandler.class);
-    static ApiConnector apiConnector;
-
-    /**
-     * Invoked when a network creation is requested to check if the specified
-     * network can be created and then creates the network
-     *
-     * @param network
-     *            An instance of proposed new Neutron Network object.
-     *
-     * @return A HTTP status code to the creation request.
-     */
-    @Override
-    public int canCreateNetwork(NeutronNetwork network) {
-        if (network == null) {
-            LOGGER.error("Network object can't be null..");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        LOGGER.debug("Network object " + network);
-        apiConnector = Activator.apiConnector;
-        if (network.getNetworkUUID() == null || network.getNetworkName() == null || network.getNetworkUUID().equals("")
-                || network.getNetworkName().equals("")) {
-            LOGGER.error("Network UUID and Network Name can't be null/empty...");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        if (network.getTenantID() == null) {
-            LOGGER.error("Network tenant Id can not be null");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        try {
-            VirtualNetwork virtualNetwork = null;
-            String networkUUID = null;
-            String projectUUID = null;
-            try {
-                networkUUID = UUID.fromString(network.getNetworkUUID()).toString();
-                projectUUID = network.getTenantID().toString();
-                if (!(projectUUID.contains("-"))) {
-                    projectUUID = uuidFormater(projectUUID);
-                }
-                projectUUID = UUID.fromString(projectUUID).toString();
-            } catch (Exception ex) {
-                LOGGER.error("UUID input incorrect", ex);
-                return HttpURLConnection.HTTP_BAD_REQUEST;
-            }
-            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
-            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 (virtualNetwork != null) {
-                LOGGER.warn("Network already exists..");
-                return HttpURLConnection.HTTP_FORBIDDEN;
-            }
-            return createNetwork(network);
-        } 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 network has been created.
-     *
-     * @param network
-     *            An instance of new Neutron Network object.
-     */
-    @Override
-    public void neutronNetworkCreated(NeutronNetwork network) {
-        VirtualNetwork virtualNetwork = null;
-        try {
-            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, network.getNetworkUUID());
-            if (virtualNetwork != null) {
-                LOGGER.info("Network creation verified....");
-            }
-        } catch (Exception e) {
-            LOGGER.error("Exception :     " + e);
-        }
-    }
-
-    /**
-     * Invoked to create the specified Neutron Network.
-     *
-     * @param network
-     *            An instance of new Neutron Network object.
-     *
-     * @return A HTTP status code to the creation request.
-     */
-    private int createNetwork(NeutronNetwork network) throws IOException {
-        VirtualNetwork virtualNetwork = null;
-        Project project;
-        virtualNetwork = new VirtualNetwork();
-        try {
-            project = (Project) apiConnector.findById(Project.class, network.getTenantID());
-            virtualNetwork.setParent(project);
-        } catch (IOException ioEx) {
-            LOGGER.error("Exception : " + ioEx);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-        // map neutronNetwork to virtualNetwork
-        virtualNetwork = mapNetworkProperties(network, virtualNetwork);
-        boolean networkCreated;
-        try {
-            networkCreated = apiConnector.create(virtualNetwork);
-            LOGGER.debug("networkCreated:   " + networkCreated);
-            if (!networkCreated) {
-                LOGGER.warn("Network creation failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-        } catch (IOException ioEx) {
-            LOGGER.error("Exception : " + ioEx);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-        LOGGER.info("Network : " + virtualNetwork.getName() + "  having UUID : " + virtualNetwork.getUuid() + "  sucessfully created...");
-        if (virtualNetwork.getRouterExternal()) {
-            FloatingIpPool floatingIpPool = null;
-            String fipId = UUID.randomUUID().toString();
-            floatingIpPool = new FloatingIpPool();
-            floatingIpPool.setName(fipId);
-            floatingIpPool.setDisplayName(fipId);
-            floatingIpPool.setUuid(fipId);
-            floatingIpPool.setParent(virtualNetwork);
-            boolean createFloatingIpPool;
-            try {
-                createFloatingIpPool = apiConnector.create(floatingIpPool);
-                if (!createFloatingIpPool) {
-                    LOGGER.info("Floating Ip pool creation failed..");
-                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
-                } else {
-                    LOGGER.info("Floating Ip pool created with UUID  : " + floatingIpPool.getUuid());
-                }
-            } catch (IOException ioEx) {
-                LOGGER.error("IOException : " + ioEx);
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-        }
-        return HttpURLConnection.HTTP_OK;
-        }
-
-
-    /**
-     * Invoked to map the NeutronNetwork object properties to the virtualNetwork
-     * object.
-     *
-     * @param neutronNetwork
-     *            An instance of new Neutron Network object.
-     * @param virtualNetwork
-     *            An instance of new virtualNetwork object.
-     * @return {@link VirtualNetwork}
-     */
-    private VirtualNetwork mapNetworkProperties(NeutronNetwork neutronNetwork, VirtualNetwork virtualNetwork) {
-        boolean routerExternal = false;
-        boolean ishared = false;
-        String networkUUID = neutronNetwork.getNetworkUUID();
-        String networkName = neutronNetwork.getNetworkName();
-        if (neutronNetwork.getRouterExternal() != null) {
-            routerExternal = neutronNetwork.getRouterExternal();
-        }
-        if (neutronNetwork.getShared() != null) {
-            ishared = neutronNetwork.getShared();
-        }
-        virtualNetwork.setName(networkName);
-        virtualNetwork.setUuid(networkUUID);
-        virtualNetwork.setDisplayName(networkName);
-        virtualNetwork.setRouterExternal(routerExternal);
-        virtualNetwork.setIsShared(ishared);
-        return virtualNetwork;
-    }
-
-    /**
-     * Invoked when a network update is requested to indicate if the specified
-     * network can be changed using the specified delta.
-     *
-     * @param delta
-     *            Updates to the network object using patch semantics.
-     * @param original
-     *            An instance of the Neutron Network object to be updated.
-     * @return A HTTP status code to the update request.
-     */
-    @Override
-    public int canUpdateNetwork(NeutronNetwork deltaNetwork, NeutronNetwork originalNetwork) {
-        VirtualNetwork virtualnetwork;
-        apiConnector = Activator.apiConnector;
-        if (deltaNetwork == null || originalNetwork == null) {
-            LOGGER.error("Neutron Networks can't be null..");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        if (("").equals(deltaNetwork.getNetworkName())) {
-            LOGGER.error("Neutron Networks name to be update can't be empty..");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        try {
-            virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, originalNetwork.getNetworkUUID());
-        } catch (IOException e) {
-            LOGGER.error("Exception :     " + e);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-        if (virtualnetwork == null) {
-            LOGGER.error("No network exists for the specified UUID...");
-            return HttpURLConnection.HTTP_FORBIDDEN;
-        } else {
-            try {
-                return updateNetwork(originalNetwork.getNetworkUUID(),deltaNetwork);
-            } 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 update the network
-     *
-     * @param delta_network
-     *            An instance of Network.
-     * @param virtualNetwork
-     *            An instance of new virtualNetwork object.
-     *
-     * @return A HTTP status code to the creation request.
-     */
-    private int updateNetwork(String networkUUID, NeutronNetwork deltaNetwork) throws IOException {
-        VirtualNetwork originalNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
-        VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
-
-        String networkName = deltaNetwork.getNetworkName();
-        if (deltaNetwork.getShared() != null) {
-            virtualNetwork.setIsShared(deltaNetwork.getShared());
-        }
-        if (deltaNetwork.getRouterExternal() != null) {
-            virtualNetwork.setRouterExternal(deltaNetwork.getRouterExternal());
-        }
-        virtualNetwork.setName(networkName);
-        virtualNetwork.setDisplayName(networkName);
-        boolean networkUpdate;
-        try {
-            networkUpdate = apiConnector.update(virtualNetwork);
-            if (!networkUpdate) {
-                LOGGER.warn("Network Updation failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-        } catch (IOException e) {
-            LOGGER.warn("Network Updation failed..");
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-        LOGGER.info("Network having UUID : " + virtualNetwork.getUuid() + "  has been sucessfully updated...");
-        if (deltaNetwork.getRouterExternal() != null) {
-            if (!(originalNetwork.getRouterExternal()) && deltaNetwork.getRouterExternal()) {
-            VirtualNetwork updatedVirtualnetwork;
-            try {
-                updatedVirtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, originalNetwork.getUuid());
-                FloatingIpPool floatingIpPool = null;
-                String fipId = UUID.randomUUID().toString();
-                floatingIpPool = new FloatingIpPool();
-                floatingIpPool.setName(fipId);
-                floatingIpPool.setDisplayName(fipId);
-                floatingIpPool.setUuid(fipId);
-                floatingIpPool.setParent(updatedVirtualnetwork);
-                boolean createFloatingIpPool = apiConnector.create(floatingIpPool);
-                if (!createFloatingIpPool) {
-                    LOGGER.info("Floating Ip pool creation failed..");
-                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
-                } else {
-                    LOGGER.info("Floating Ip pool created with UUID  : " + floatingIpPool.getUuid());
-                }
-            } catch (IOException e) {
-                LOGGER.info("Floating Ip pool creation failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-        } else if (originalNetwork.getRouterExternal() && !(deltaNetwork.getRouterExternal())) {
-            String floatingPoolId = virtualNetwork.getFloatingIpPools().get(0).getUuid();
-            FloatingIpPool floatingIpPool;
-            try {
-                floatingIpPool = (FloatingIpPool) apiConnector.findById(FloatingIpPool.class, floatingPoolId);
-                if (floatingIpPool != null) {
-                    apiConnector.delete(floatingIpPool);
-                }
-                floatingIpPool = (FloatingIpPool) apiConnector.findById(FloatingIpPool.class, floatingPoolId);
-                if (floatingIpPool == null) {
-                    LOGGER.info("Floating Ip pool removed after update network..");
-                } else {
-                    LOGGER.info("Floating Ip pool removal failed after update network..");
-                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
-                }
-            } catch (IOException e) {
-                LOGGER.info("Floating Ip pool is failed to removed after update network..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-        }
-    }
-    return HttpURLConnection.HTTP_OK;
-}
-
-
-    /**
-     * Invoked to take action after a network has been updated.
-     *
-     * @param network
-     *            An instance of modified Neutron Network object.
-     */
-    @Override
-    public void neutronNetworkUpdated(NeutronNetwork network) {
-        try {
-            VirtualNetwork virtualnetwork = new VirtualNetwork();
-            virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, network.getNetworkUUID());
-            if (network.getNetworkName().equalsIgnoreCase(virtualnetwork.getDisplayName()) && network.getRouterExternal().equals(virtualnetwork.getRouterExternal())) {
-                LOGGER.info("Network updatation verified....");
-            } else {
-                LOGGER.info("Network updatation failed....");
-            }
-        } catch (Exception e) {
-            LOGGER.error("Exception :" + e);
-        }
-    }
-
-
-    /**
-     * Invoked when a network deletion is requested to indicate if the specified
-     * network can be deleted.
-     *
-     * @param network
-     *            An instance of the Neutron Network object to be deleted.
-     * @return A HTTP status code to the deletion request.
-     */
-    @Override
-    public int canDeleteNetwork(NeutronNetwork network) {
-        apiConnector = Activator.apiConnector;
-        VirtualNetwork virtualNetwork = null;
-        try {
-            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, network.getNetworkUUID());
-            if (virtualNetwork != null) {
-                if (virtualNetwork.getVirtualMachineInterfaceBackRefs() != null) {
-                    LOGGER.info("Network with UUID :  " + network.getNetworkUUID() + " cannot be deleted as it has port(s) associated with it....");
-                    return HttpURLConnection.HTTP_FORBIDDEN;
-                } else {
-                    apiConnector.delete(virtualNetwork);
-                    LOGGER.info("Network with UUID :  " + network.getNetworkUUID() + "  has been deleted successfully....");
-                    return HttpURLConnection.HTTP_OK;
-                }
-            } else {
-                LOGGER.info("No Network exists with UUID :  " + network.getNetworkUUID());
-                return HttpURLConnection.HTTP_BAD_REQUEST;
-            }
-        } catch (Exception e) {
-            LOGGER.error("Exception : " + e);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-
-    /**
-     * Invoked to take action after a network has been deleted.
-     *
-     * @param network
-     *            An instance of deleted Neutron Network object.
-     */
-    @Override
-    public void neutronNetworkDeleted(NeutronNetwork network) {
-        VirtualNetwork virtualNetwork = null;
-        try {
-            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, network.getNetworkUUID());
-            if (virtualNetwork == null) {
-                LOGGER.info("Network deletion verified....");
-            }
-            else {
-                LOGGER.info("Network deletion failed....");
-            }
-        } catch (Exception e) {
-            LOGGER.error("Exception :   " + e);
-        }
-    }
-
-    /**
-     * Invoked to format the UUID if UUID is not in correct format.
-     *
-     * @param String
-     *            An instance of UUID string.
-     *
-     * @return Correctly formated UUID string.
-     */
-    private String uuidFormater(String uuid) {
-        String uuidPattern = null;
-        String id1 = uuid.substring(0, 8);
-        String id2 = uuid.substring(8, 12);
-        String id3 = uuid.substring(12, 16);
-        String id4 = uuid.substring(16, 20);
-        String id5 = uuid.substring(20, 32);
-        uuidPattern = (id1 + "-" + id2 + "-" + id3 + "-" + id4 + "-" + id5);
-        return uuidPattern;
-    }
-
+/*\r
+ * Copyright (C) 2014 Juniper Networks, Inc.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ */\r
+package org.opendaylight.plugin2oc.neutron;\r
+\r
+import java.io.IOException;\r
+import java.net.HttpURLConnection;\r
+import java.util.UUID;\r
+\r
+import net.juniper.contrail.api.ApiConnector;\r
+import net.juniper.contrail.api.types.FloatingIpPool;\r
+import net.juniper.contrail.api.types.Project;\r
+import net.juniper.contrail.api.types.VirtualNetwork;\r
+\r
+import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;\r
+import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+/**\r
+ * Handle requests for Neutron Network.\r
+ */\r
+public class NetworkHandler implements INeutronNetworkAware {\r
+    /**\r
+     * Logger instance.\r
+     */\r
+    static final Logger LOGGER = LoggerFactory.getLogger(NetworkHandler.class);\r
+    static ApiConnector apiConnector;\r
+\r
+    /**\r
+     * Invoked when a network creation is requested to check if the specified\r
+     * network can be created and then creates the network\r
+     *\r
+     * @param network\r
+     *            An instance of proposed new Neutron Network object.\r
+     *\r
+     * @return A HTTP status code to the creation request.\r
+     */\r
+    @Override\r
+    public int canCreateNetwork(NeutronNetwork network) {\r
+        if (network == null) {\r
+            LOGGER.error("Network object can't be null..");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        LOGGER.debug("Network object " + network);\r
+        apiConnector = Activator.apiConnector;\r
+        if (network.getNetworkUUID() == null || network.getNetworkName() == null || network.getNetworkUUID().equals("")\r
+                || network.getNetworkName().equals("")) {\r
+            LOGGER.error("Network UUID and Network Name can't be null/empty...");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        if (network.getTenantID() == null) {\r
+            LOGGER.error("Network tenant Id can not be null");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        try {\r
+            String networkUUID = network.getNetworkUUID();\r
+            String projectUUID = network.getTenantID();\r
+            try {\r
+                if (!(networkUUID.contains("-"))) {\r
+                    networkUUID = Utils.uuidFormater(networkUUID);\r
+                }\r
+                if (!(projectUUID.contains("-"))) {\r
+                    projectUUID = Utils.uuidFormater(projectUUID);\r
+                }\r
+                boolean isValidNetworkUUID = Utils.isValidHexNumber(networkUUID);\r
+                boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);\r
+                if (!isValidNetworkUUID || !isValidprojectUUID) {\r
+                    LOGGER.info("Badly formed Hexadecimal UUID...");\r
+                    return HttpURLConnection.HTTP_BAD_REQUEST;\r
+                }\r
+                projectUUID = UUID.fromString(projectUUID).toString();\r
+                networkUUID = UUID.fromString(networkUUID).toString();\r
+            } catch (Exception ex) {\r
+                LOGGER.error("UUID input incorrect", ex);\r
+                return HttpURLConnection.HTTP_BAD_REQUEST;\r
+            }\r
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);\r
+            if (project == null) {\r
+                try {\r
+                    Thread.currentThread();\r
+                    Thread.sleep(3000);\r
+                } catch (InterruptedException e) {\r
+                    LOGGER.error("InterruptedException :    ", e);\r
+                    return HttpURLConnection.HTTP_BAD_REQUEST;\r
+                }\r
+                project = (Project) apiConnector.findById(Project.class, projectUUID);\r
+                if (project == null) {\r
+                    LOGGER.error("Could not find projectUUID...");\r
+                    return HttpURLConnection.HTTP_NOT_FOUND;\r
+                }\r
+            }\r
+            VirtualNetwork virtualNetworkById = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+            if (virtualNetworkById != null) {\r
+                LOGGER.warn("Network already exists with UUID" + networkUUID);\r
+                return HttpURLConnection.HTTP_FORBIDDEN;\r
+            }\r
+            String virtualNetworkByName = apiConnector.findByName(VirtualNetwork.class, project, network.getNetworkName());\r
+            if (virtualNetworkByName != null) {\r
+                LOGGER.warn("Network already exists with name : " + virtualNetworkByName);\r
+                return HttpURLConnection.HTTP_FORBIDDEN;\r
+            }\r
+            return HttpURLConnection.HTTP_OK;\r
+        } catch (IOException ie) {\r
+            LOGGER.error("IOException :   " + ie);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        } catch (Exception e) {\r
+            LOGGER.error("Exception :   " + e);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to take action after a network has been created.\r
+     *\r
+     * @param network\r
+     *            An instance of new Neutron Network object.\r
+     */\r
+    @Override\r
+    public void neutronNetworkCreated(NeutronNetwork network) {\r
+        try {\r
+            createNetwork(network);\r
+        } catch (IOException ex) {\r
+            LOGGER.warn("Exception  :    " + ex);\r
+        }\r
+        VirtualNetwork virtualNetwork = null;\r
+        try {\r
+            String networkUUID = network.getNetworkUUID();\r
+            if (!(networkUUID.contains("-"))) {\r
+                networkUUID = Utils.uuidFormater(networkUUID);\r
+            }\r
+            networkUUID = UUID.fromString(networkUUID).toString();\r
+            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+            if (virtualNetwork != null) {\r
+                LOGGER.info("Network creation verified....");\r
+            }\r
+        } catch (Exception e) {\r
+            LOGGER.error("Exception :     " + e);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to create the specified Neutron Network.\r
+     *\r
+     * @param network\r
+     *            An instance of new Neutron Network object.\r
+     */\r
+    private void createNetwork(NeutronNetwork network) throws IOException {\r
+        VirtualNetwork virtualNetwork = new VirtualNetwork();\r
+        // map neutronNetwork to virtualNetwork\r
+        virtualNetwork = mapNetworkProperties(network, virtualNetwork);\r
+        boolean networkCreated;\r
+        try {\r
+            networkCreated = apiConnector.create(virtualNetwork);\r
+            LOGGER.debug("networkCreated:   " + networkCreated);\r
+            if (!networkCreated) {\r
+                LOGGER.warn("Network creation failed..");\r
+            }\r
+        } catch (IOException ioEx) {\r
+            LOGGER.error("Exception : " + ioEx);\r
+        }\r
+        LOGGER.info("Network : " + virtualNetwork.getName() + "  having UUID : " + virtualNetwork.getUuid() + "  sucessfully created...");\r
+        if (virtualNetwork.getRouterExternal()) {\r
+            FloatingIpPool floatingIpPool = null;\r
+            String fipId = UUID.randomUUID().toString();\r
+            floatingIpPool = new FloatingIpPool();\r
+            floatingIpPool.setName(fipId);\r
+            floatingIpPool.setDisplayName(fipId);\r
+            floatingIpPool.setUuid(fipId);\r
+            floatingIpPool.setParent(virtualNetwork);\r
+            boolean createFloatingIpPool;\r
+            try {\r
+                createFloatingIpPool = apiConnector.create(floatingIpPool);\r
+                if (!createFloatingIpPool) {\r
+                    LOGGER.info("Floating Ip pool creation failed..");\r
+                } else {\r
+                    LOGGER.info("Floating Ip pool created with UUID  : " + floatingIpPool.getUuid());\r
+                }\r
+            } catch (IOException ioEx) {\r
+                LOGGER.error("IOException : " + ioEx);\r
+            }\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to map the NeutronNetwork object properties to the virtualNetwork\r
+     * object.\r
+     *\r
+     * @param neutronNetwork\r
+     *            An instance of new Neutron Network object.\r
+     * @param virtualNetwork\r
+     *            An instance of new virtualNetwork object.\r
+     * @return {@link VirtualNetwork}\r
+     */\r
+    private VirtualNetwork mapNetworkProperties(NeutronNetwork neutronNetwork, VirtualNetwork virtualNetwork) {\r
+        boolean routerExternal = false;\r
+        boolean ishared = false;\r
+        String networkUUID = neutronNetwork.getNetworkUUID();\r
+        String projectUUID = neutronNetwork.getTenantID();\r
+        String networkName = neutronNetwork.getNetworkName();\r
+        try {\r
+            if (!(networkUUID.contains("-"))) {\r
+                networkUUID = Utils.uuidFormater(networkUUID);\r
+            }\r
+            networkUUID = UUID.fromString(networkUUID).toString();\r
+            if (!(projectUUID.contains("-"))) {\r
+                projectUUID = Utils.uuidFormater(projectUUID);\r
+            }\r
+            projectUUID = UUID.fromString(projectUUID).toString();\r
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);\r
+            virtualNetwork.setParent(project);\r
+        } catch (Exception ex) {\r
+            LOGGER.error("UUID input incorrect", ex);\r
+        }\r
+        if (neutronNetwork.getRouterExternal() != null) {\r
+            routerExternal = neutronNetwork.getRouterExternal();\r
+        }\r
+        if (neutronNetwork.getShared() != null) {\r
+            ishared = neutronNetwork.getShared();\r
+        }\r
+        virtualNetwork.setName(networkName);\r
+        virtualNetwork.setUuid(networkUUID);\r
+        virtualNetwork.setDisplayName(networkName);\r
+        virtualNetwork.setRouterExternal(routerExternal);\r
+        virtualNetwork.setIsShared(ishared);\r
+        return virtualNetwork;\r
+    }\r
+\r
+    /**\r
+     * Invoked when a network update is requested to indicate if the specified\r
+     * network can be changed using the specified delta.\r
+     *\r
+     * @param delta\r
+     *            Updates to the network object using patch semantics.\r
+     * @param original\r
+     *            An instance of the Neutron Network object to be updated.\r
+     * @return A HTTP status code to the update request.\r
+     */\r
+    @Override\r
+    public int canUpdateNetwork(NeutronNetwork deltaNetwork, NeutronNetwork originalNetwork) {\r
+        VirtualNetwork virtualnetwork;\r
+        apiConnector = Activator.apiConnector;\r
+        if (deltaNetwork == null || originalNetwork == null) {\r
+            LOGGER.error("Neutron Networks can't be null..");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        String networkUUID = originalNetwork.getNetworkUUID();\r
+        String projectUUID = originalNetwork.getTenantID();\r
+        try {\r
+            if (!(networkUUID.contains("-"))) {\r
+                networkUUID = Utils.uuidFormater(networkUUID);\r
+                networkUUID = UUID.fromString(networkUUID).toString();\r
+            }\r
+            if (!(projectUUID.contains("-"))) {\r
+                projectUUID = Utils.uuidFormater(projectUUID);\r
+                projectUUID = UUID.fromString(projectUUID).toString();\r
+            }\r
+        } catch (Exception ex) {\r
+            LOGGER.error("UUID input incorrect", ex);\r
+        }\r
+        if (("").equals(deltaNetwork.getNetworkName())) {\r
+            LOGGER.error("Neutron Networks name to be update can't be empty..");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        try {\r
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);\r
+            String virtualNetworkByName = apiConnector.findByName(VirtualNetwork.class, project, deltaNetwork.getNetworkName());\r
+            if (virtualNetworkByName != null) {\r
+                LOGGER.warn("Network with name  " + deltaNetwork.getNetworkName() + "  already exists with UUID : " + virtualNetworkByName);\r
+                return HttpURLConnection.HTTP_FORBIDDEN;\r
+            }\r
+        } catch (IOException ioEx) {\r
+            LOGGER.error("IOException :     " + ioEx);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        }\r
+        try {\r
+            virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+        } catch (IOException ex) {\r
+            LOGGER.error("Exception :     " + ex);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        }\r
+        if (virtualnetwork == null) {\r
+            LOGGER.error("No network exists for the specified UUID...");\r
+            return HttpURLConnection.HTTP_FORBIDDEN;\r
+        }\r
+        return HttpURLConnection.HTTP_OK;\r
+    }\r
+\r
+    /**\r
+     * Invoked to update the network\r
+     *\r
+     * @param delta_network\r
+     *            An instance of Network.\r
+     */\r
+    private void updateNetwork(NeutronNetwork updatedNetwork) throws IOException {\r
+        String networkUUID = updatedNetwork.getNetworkUUID();\r
+        try {\r
+            if (!(networkUUID.contains("-"))) {\r
+                networkUUID = Utils.uuidFormater(networkUUID);\r
+            }\r
+            networkUUID = UUID.fromString(networkUUID).toString();\r
+        } catch (Exception ex) {\r
+            LOGGER.error("UUID input incorrect", ex);\r
+        }\r
+        VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+        if (updatedNetwork.getShared() != null) {\r
+            virtualNetwork.setIsShared(updatedNetwork.getShared());\r
+        }\r
+        if (updatedNetwork.getRouterExternal() != null) {\r
+            virtualNetwork.setRouterExternal(updatedNetwork.getRouterExternal());\r
+        }\r
+        virtualNetwork.setDisplayName(updatedNetwork.getNetworkName());\r
+        boolean networkUpdate;\r
+        try {\r
+            networkUpdate = apiConnector.update(virtualNetwork);\r
+            if (!networkUpdate) {\r
+                LOGGER.warn("Network Updation failed..");\r
+            }\r
+        } catch (IOException e) {\r
+            LOGGER.warn("Network Updation failed..");\r
+        }\r
+        LOGGER.info("Network having UUID : " + virtualNetwork.getUuid() + "  has been sucessfully updated...");\r
+        if (updatedNetwork.getRouterExternal()) {\r
+            if (virtualNetwork.getFloatingIpPools() == null) {\r
+                try {\r
+                    FloatingIpPool floatingIpPool = null;\r
+                    String fipId = UUID.randomUUID().toString();\r
+                    floatingIpPool = new FloatingIpPool();\r
+                    floatingIpPool.setName(fipId);\r
+                    floatingIpPool.setDisplayName(fipId);\r
+                    floatingIpPool.setUuid(fipId);\r
+                    floatingIpPool.setParent(virtualNetwork);\r
+                    boolean createFloatingIpPool = apiConnector.create(floatingIpPool);\r
+                    if (!createFloatingIpPool) {\r
+                        LOGGER.info("Floating Ip pool creation failed..");\r
+                    } else {\r
+                        LOGGER.info("Floating Ip pool created with UUID  : " + floatingIpPool.getUuid());\r
+                    }\r
+                } catch (IOException e) {\r
+                    LOGGER.info("Floating Ip pool creation failed..");\r
+                }\r
+            }\r
+        } else {\r
+            if (virtualNetwork.getFloatingIpPools() != null) {\r
+                String floatingPoolId = virtualNetwork.getFloatingIpPools().get(0).getUuid();\r
+                FloatingIpPool floatingIpPool;\r
+                try {\r
+                    floatingIpPool = (FloatingIpPool) apiConnector.findById(FloatingIpPool.class, floatingPoolId);\r
+                    if (floatingIpPool != null) {\r
+                        apiConnector.delete(floatingIpPool);\r
+                    }\r
+                    floatingIpPool = (FloatingIpPool) apiConnector.findById(FloatingIpPool.class, floatingPoolId);\r
+                    if (floatingIpPool == null) {\r
+                        LOGGER.info("Floating Ip pool removed after update network..");\r
+                    } else {\r
+                        LOGGER.info("Floating Ip pool removal failed after update network..");\r
+                    }\r
+                } catch (IOException e) {\r
+                    LOGGER.info("Floating Ip pool is failed to removed after update network..");\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to take action after a network has been updated.\r
+     *\r
+     * @param network\r
+     *            An instance of modified Neutron Network object.\r
+     */\r
+    @Override\r
+    public void neutronNetworkUpdated(NeutronNetwork network) {\r
+        try {\r
+            String networkUUID = network.getNetworkUUID();\r
+            try {\r
+                if (!(networkUUID.contains("-"))) {\r
+                    networkUUID = Utils.uuidFormater(networkUUID);\r
+                }\r
+                networkUUID = UUID.fromString(networkUUID).toString();\r
+            } catch (Exception ex) {\r
+                LOGGER.error("UUID input incorrect", ex);\r
+            }\r
+            updateNetwork(network);\r
+            VirtualNetwork virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+            if (network.getNetworkName().equalsIgnoreCase(virtualnetwork.getDisplayName())\r
+                    && network.getRouterExternal().equals(virtualnetwork.getRouterExternal())) {\r
+                LOGGER.info("Network updatation verified....");\r
+            } else {\r
+                LOGGER.info("Network updatation failed....");\r
+            }\r
+        } catch (Exception e) {\r
+            LOGGER.error("Exception :" + e);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked when a network deletion is requested to indicate if the specified\r
+     * network can be deleted.\r
+     *\r
+     * @param network\r
+     *            An instance of the Neutron Network object to be deleted.\r
+     * @return A HTTP status code to the deletion request.\r
+     */\r
+    @Override\r
+    public int canDeleteNetwork(NeutronNetwork network) {\r
+        apiConnector = Activator.apiConnector;\r
+        VirtualNetwork virtualNetwork = null;\r
+        String networkUUID = network.getNetworkUUID();\r
+        try {\r
+            try {\r
+                if (!(networkUUID.contains("-"))) {\r
+                    networkUUID = Utils.uuidFormater(networkUUID);\r
+                }\r
+                networkUUID = UUID.fromString(networkUUID).toString();\r
+            } catch (Exception ex) {\r
+                LOGGER.error("UUID input incorrect", ex);\r
+                return HttpURLConnection.HTTP_BAD_REQUEST;\r
+            }\r
+            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+            if (virtualNetwork != null) {\r
+                if (virtualNetwork.getVirtualMachineInterfaceBackRefs() != null || virtualNetwork.getFloatingIpPools() != null\r
+                        || virtualNetwork.getNetworkIpam() != null) {\r
+                    LOGGER.info("Network with UUID :  " + networkUUID\r
+                            + " cannot be deleted as it has subnet(s)/port(s)/FloatingIp Pool(s) associated with it....");\r
+                    return HttpURLConnection.HTTP_FORBIDDEN;\r
+                } else {\r
+                    return HttpURLConnection.HTTP_OK;\r
+                }\r
+            } else {\r
+                LOGGER.info("No Network exists with UUID :  " + networkUUID);\r
+                return HttpURLConnection.HTTP_BAD_REQUEST;\r
+            }\r
+        } catch (Exception e) {\r
+            LOGGER.error("Exception : " + e);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to take action after a network has been deleted.\r
+     *\r
+     * @param network\r
+     *            An instance of deleted Neutron Network object.\r
+     */\r
+    @Override\r
+    public void neutronNetworkDeleted(NeutronNetwork network) {\r
+        VirtualNetwork virtualNetwork = null;\r
+        try {\r
+            String networkUUID = network.getNetworkUUID();\r
+            if (!(networkUUID.contains("-"))) {\r
+                networkUUID = Utils.uuidFormater(networkUUID);\r
+            }\r
+            networkUUID = UUID.fromString(networkUUID).toString();\r
+            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+            apiConnector.delete(virtualNetwork);\r
+            LOGGER.info("Network with UUID :  " + network.getNetworkUUID() + "  has been deleted successfully....");\r
+            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+            if (virtualNetwork == null) {\r
+                LOGGER.info("Network deletion verified....");\r
+            } else {\r
+                LOGGER.info("Network deletion failed....");\r
+            }\r
+        } catch (Exception e) {\r
+            LOGGER.error("Exception :   " + e);\r
+        }\r
+    }\r
+\r
 }
\ No newline at end of file
index 8f1aa670b108f6b568d0121b02428031d3230e14..34ec26b875b5d75c1ed4884975f3470649805b6b 100755 (executable)
@@ -10,6 +10,7 @@ package org.opendaylight.plugin2oc.neutron;
 
 import java.io.IOException;
 import java.net.HttpURLConnection;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
@@ -58,42 +59,110 @@ public class PortHandler implements INeutronPortAware {
             LOGGER.error("NeutronPort object can't be null..");
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
-        if (neutronPort.getID().equals("")) {
-            LOGGER.error("Port Device Id or Port Uuid can't be empty/null...");
+        if (neutronPort.getPortUUID() == null || neutronPort.getPortUUID().equals("")) {
+            LOGGER.error("Port Uuid can't be empty/null...");
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
         if (neutronPort.getTenantID() == null) {
             LOGGER.error("Tenant ID can't be null...");
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
-
-        List<Neutron_IPs> ips = neutronPort.getFixedIPs();
-        if (ips == null) {
-            LOGGER.warn("Neutron Fixed Ips can't be null..");
-            return HttpURLConnection.HTTP_FORBIDDEN;
+        if (neutronPort.getName() == null || neutronPort.getName().equals("")) {
+            LOGGER.error("Port Name can't be empty/null...");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
         }
         try {
-            return createPort(neutronPort);
+            String portUUID = neutronPort.getPortUUID();
+            String projectUUID = neutronPort.getTenantID();
+            String deviceUUID = neutronPort.getDeviceID();
+            String networkUUID = neutronPort.getNetworkUUID();
+            try {
+                if (!(portUUID.contains("-"))) {
+                    portUUID = Utils.uuidFormater(portUUID);
+                }
+                if (!(projectUUID.contains("-"))) {
+                    projectUUID = Utils.uuidFormater(projectUUID);
+                }
+                if (!(networkUUID.contains("-"))) {
+                    networkUUID = Utils.uuidFormater(networkUUID);
+                }
+                if (deviceUUID != null && !(("").equals(deviceUUID))) {
+                    if (!(deviceUUID.contains("-"))) {
+                        deviceUUID = Utils.uuidFormater(deviceUUID);
+                    }
+                    boolean isValidDeviceUUID = Utils.isValidHexNumber(deviceUUID);
+                    if (!isValidDeviceUUID) {
+                        LOGGER.info("Badly formed Hexadecimal UUID...");
+                        return HttpURLConnection.HTTP_BAD_REQUEST;
+                    }
+                    deviceUUID = UUID.fromString(deviceUUID).toString();
+                }
+                boolean isValidNetworkUUID = Utils.isValidHexNumber(networkUUID);
+                boolean isValidProjectUUID = Utils.isValidHexNumber(projectUUID);
+                boolean isValidPortUUID = Utils.isValidHexNumber(portUUID);
+                if (!isValidPortUUID || !isValidProjectUUID || !isValidNetworkUUID) {
+                    LOGGER.info("Badly formed Hexadecimal UUID...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                portUUID = UUID.fromString(portUUID).toString();
+                projectUUID = UUID.fromString(projectUUID).toString();
+                networkUUID = UUID.fromString(networkUUID).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;
+                }
+            }
+            VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+            if (!virtualNetwork.getParentUuid().matches(projectUUID)) {
+                LOGGER.info("Port and Network should belong to same tenant...");
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            VirtualMachineInterface virtualMAchineInterfaceByID = (VirtualMachineInterface)apiConnector.findById(VirtualMachineInterface.class, portUUID);
+            if (virtualMAchineInterfaceByID != null) {
+                LOGGER.warn("Port already exists with UUID : " + virtualMAchineInterfaceByID);
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            String virtualMAchineInterfaceByName = apiConnector.findByName(VirtualMachineInterface.class, project, neutronPort.getName());
+            if (virtualMAchineInterfaceByName != null) {
+                LOGGER.warn("Port already exists with Name : " + virtualMAchineInterfaceByName);
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+        } catch (IOException ie) {
+            LOGGER.error("IOException :   " + ie);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
         } catch (Exception e) {
-            LOGGER.error("exception :   ", e);
+            LOGGER.error("Exception :   " + e);
             return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
+        return HttpURLConnection.HTTP_OK;
     }
 
     /**
      * Invoked to create the specified Neutron port.
      *
-     * @param network
+     * @param neutronPort
      *            An instance of new Neutron Port object.
-     *
-     * @return A HTTP status code to the creation request.
      */
-    private int createPort(NeutronPort neutronPort) {
-        String networkID = neutronPort.getNetworkUUID();
-        String portID = neutronPort.getID();
-//        String portDesc = neutronPort.getID();
-        String deviceID = neutronPort.getDeviceID();
-        String projectID = neutronPort.getTenantID();
+    private void createPort(NeutronPort neutronPort) {
+        String networkUUID = neutronPort.getNetworkUUID();
+        String portUUID = neutronPort.getPortUUID();
+        String deviceUUID = neutronPort.getDeviceID();
+        String projectUUID = neutronPort.getTenantID();
         String portMACAddress = neutronPort.getMacAddress();
         String portName = neutronPort.getName();
         VirtualMachineInterface virtualMachineInterface = null;
@@ -102,141 +171,124 @@ public class PortHandler implements INeutronPortAware {
         Project project = null;
         MacAddressesType macAddressesType = new MacAddressesType();
         try {
-            networkID = UUID.fromString(neutronPort.getNetworkUUID()).toString();
-            portID = UUID.fromString(neutronPort.getID()).toString();
-            if (neutronPort.getDeviceID() != null && !(("").equals(neutronPort.getDeviceID()))) {
-                if (!(deviceID.contains("-"))) {
-                    deviceID = uuidFormater(deviceID);
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
+            }
+            networkUUID = UUID.fromString(networkUUID).toString();
+            if (deviceUUID != null && !(("").equals(deviceUUID))) {
+                if (!(deviceUUID.contains("-"))) {
+                    deviceUUID = Utils.uuidFormater(deviceUUID);
                 }
-                deviceID = UUID.fromString(deviceID).toString();
+                deviceUUID = UUID.fromString(deviceUUID).toString();
+            }
+            if (!(projectUUID.contains("-"))) {
+                projectUUID = Utils.uuidFormater(projectUUID);
             }
-            if (!(projectID.contains("-"))) {
-                projectID = uuidFormater(projectID);
+            projectUUID = UUID.fromString(projectUUID).toString();
+            if (!(portUUID.contains("-"))) {
+                portUUID = Utils.uuidFormater(portUUID);
             }
-            projectID = UUID.fromString(projectID).toString();
+            portUUID = UUID.fromString(portUUID).toString();
         } catch (Exception ex) {
-            LOGGER.error("exception :   ", ex);
-            return HttpURLConnection.HTTP_BAD_REQUEST;
+            LOGGER.error("UUID input incorrect", ex);
         }
         try {
-            LOGGER.debug("portId:    " + portID);
-            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portID);
-            if (virtualMachineInterface != null) {
-                LOGGER.warn("Port already exist.");
-                return HttpURLConnection.HTTP_FORBIDDEN;
-            } else {
-                if (deviceID != null && !(("").equals(deviceID))) {
-                    virtualMachine = (VirtualMachine) apiConnector.findById(VirtualMachine.class, deviceID);
-                    LOGGER.debug("virtualMachine:   " + virtualMachine);
-                    if (virtualMachine == null) {
-                        virtualMachine = new VirtualMachine();
-                        virtualMachine.setName(deviceID+"--"+portName);
-                        virtualMachine.setUuid(deviceID);
-                        boolean virtualMachineCreated = apiConnector.create(virtualMachine);
-                        LOGGER.debug("virtualMachineCreated: " + virtualMachineCreated);
-                        if (!virtualMachineCreated) {
-                            LOGGER.warn("virtualMachine creation failed..");
-                            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-                        }
-                        LOGGER.info("virtualMachine : " + virtualMachine.getName() + "  having UUID : " + virtualMachine.getUuid()
-                                + "  sucessfully created...");
-                    }
-                }
-                project = (Project) apiConnector.findById(Project.class, projectID);
-                if (project == null) {
-                    try {
-                        Thread.currentThread();
-                        Thread.sleep(3000);
-                    } catch (InterruptedException e) {
-                        LOGGER.error("InterruptedException :      ", e);
-                    }
-                    project = (Project) apiConnector.findById(Project.class, projectID);
-                    if (project == null) {
-                        LOGGER.error("Could not find projectUUID...");
-                        return HttpURLConnection.HTTP_NOT_FOUND;
-                    }
-                }
-                virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkID);
-                LOGGER.info("virtualNetwork: " + virtualNetwork);
-                if (virtualNetwork == null) {
-                    LOGGER.warn("virtualNetwork does not exist..");
-                    return HttpURLConnection.HTTP_BAD_REQUEST;
-                } else {
-                    virtualMachineInterface = new VirtualMachineInterface();
-                    virtualMachineInterface.setUuid(portID);
-                    virtualMachineInterface.setName(portName);
-                    virtualMachineInterface.setParent(project);
-                    virtualMachineInterface.setVirtualNetwork(virtualNetwork);
-                    macAddressesType.addMacAddress(portMACAddress);
-                    virtualMachineInterface.setMacAddresses(macAddressesType);
-                    if (deviceID != null && !(("").equals(deviceID))) {
-                        virtualMachineInterface.setVirtualMachine(virtualMachine);
-                    }
-                    boolean virtualMachineInterfaceCreated = apiConnector.create(virtualMachineInterface);
-                    if (!virtualMachineInterfaceCreated) {
-                        LOGGER.warn("actual virtualMachineInterface creation failed..");
-                        return HttpURLConnection.HTTP_INTERNAL_ERROR;
+            LOGGER.info("portId:    " + portUUID);
+            if (deviceUUID != null && !(("").equals(deviceUUID))) {
+                virtualMachine = (VirtualMachine) apiConnector.findById(VirtualMachine.class, deviceUUID);
+                LOGGER.debug("virtualMachine:   " + virtualMachine);
+                if (virtualMachine == null) {
+                    virtualMachine = new VirtualMachine();
+                    virtualMachine.setName(deviceUUID);
+                    virtualMachine.setUuid(deviceUUID);
+                    boolean virtualMachineCreated = apiConnector.create(virtualMachine);
+                    LOGGER.debug("virtualMachineCreated: " + virtualMachineCreated);
+                    if (!virtualMachineCreated) {
+                        LOGGER.warn("virtualMachine creation failed..");
                     }
-                    LOGGER.info("virtualMachineInterface : " + virtualMachineInterface.getName() + "  having UUID : "
-                            + virtualMachineInterface.getUuid() + "  sucessfully created...");
+                    LOGGER.info("virtualMachine : " + virtualMachine.getName() + "  having UUID : " + virtualMachine.getUuid()
+                            + "  sucessfully created...");
                 }
-
             }
-            INeutronSubnetCRUD systemCRUD = NeutronCRUDInterfaces.getINeutronSubnetCRUD(this);
-            NeutronSubnet subnet = null;
-            List<Neutron_IPs> ips = neutronPort.getFixedIPs();
-            InstanceIp instanceIp = new InstanceIp();
-            String instaneIpUuid = UUID.randomUUID().toString();
-            for (Neutron_IPs ipValues : ips) {
-                if (ipValues.getIpAddress() == null) {
-                    subnet = systemCRUD.getSubnet(ipValues.getSubnetUUID());
-                    instanceIp.setAddress(subnet.getLowAddr());
-                } else {
-                    instanceIp.setAddress(ipValues.getIpAddress());
-                }
+            project = (Project) apiConnector.findById(Project.class, projectUUID);
+            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+            LOGGER.debug("virtualNetwork: " + virtualNetwork);
+            virtualMachineInterface = new VirtualMachineInterface();
+            virtualMachineInterface.setUuid(portUUID);
+            virtualMachineInterface.setName(portName);
+            virtualMachineInterface.setDisplayName(portName);
+            virtualMachineInterface.setParent(project);
+            virtualMachineInterface.setVirtualNetwork(virtualNetwork);
+            macAddressesType.addMacAddress(portMACAddress);
+            virtualMachineInterface.setMacAddresses(macAddressesType);
+            if (deviceUUID != null && !(("").equals(deviceUUID))) {
+                virtualMachineInterface.setVirtualMachine(virtualMachine);
             }
+            boolean virtualMachineInterfaceCreated = apiConnector.create(virtualMachineInterface);
+            if (!virtualMachineInterfaceCreated) {
+                LOGGER.warn("actual virtualMachineInterface creation failed..");
+            }
+            LOGGER.info("virtualMachineInterface : " + virtualMachineInterface.getName() + "  having UUID : " + virtualMachineInterface.getUuid()
+                    + "  sucessfully created...");
+            List<Neutron_IPs> ips = neutronPort.getFixedIPs();
+            if (ips != null) {
+                for (Neutron_IPs ipValues : ips) {
+                    INeutronSubnetCRUD systemCRUD = NeutronCRUDInterfaces.getINeutronSubnetCRUD(this);
+                    NeutronSubnet subnet = null;
+                    InstanceIp instanceIp = new InstanceIp();
+                    String instaneIpUuid = UUID.randomUUID().toString();
+                    if (ipValues.getIpAddress() == null) {
+                        subnet = systemCRUD.getSubnet(ipValues.getSubnetUUID());
+                        instanceIp.setAddress(subnet.getLowAddr());
+                    } else {
+                        instanceIp.setAddress(ipValues.getIpAddress());
+                    }
+                    instanceIp.setName(instaneIpUuid);
+                    instanceIp.setUuid(instaneIpUuid);
+                    instanceIp.setParent(virtualMachineInterface);
+                    instanceIp.setVirtualMachineInterface(virtualMachineInterface);
+                    instanceIp.setVirtualNetwork(virtualNetwork);
 
-            instanceIp.setName(instaneIpUuid);
-            instanceIp.setUuid(instaneIpUuid);
-            instanceIp.setParent(virtualMachineInterface);
-            instanceIp.setVirtualMachineInterface(virtualMachineInterface);
-            instanceIp.setVirtualNetwork(virtualNetwork);
-
-            boolean instanceIpCreated = apiConnector.create(instanceIp);
-            if (!instanceIpCreated) {
-                LOGGER.warn("instanceIp addition failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
+                    boolean instanceIpCreated = apiConnector.create(instanceIp);
+                    if (!instanceIpCreated) {
+                        LOGGER.warn("instanceIp addition failed..");
+                    }
+                    LOGGER.info("Instance IP " + instanceIp.getAddress() + " added sucessfully...");
+                }
             }
-            LOGGER.info("Instance IP added sucessfully...");
-            return HttpURLConnection.HTTP_OK;
         } catch (IOException ie) {
             LOGGER.error("IOException :    ", ie);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
     }
 
     /**
-     * Invoked to take action after a port has been created.
+     * Invoked to create a port and take action after the port has been created.
      *
      * @param network
      *            An instance of new Neutron port object.
      */
     @Override
     public void neutronPortCreated(NeutronPort neutronPort) {
-        VirtualMachineInterface virtualMachineInterface = null;
         try {
-            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID());
+            createPort(neutronPort);
+            String portUUID = neutronPort.getPortUUID();
+            if (!(portUUID.contains("-"))) {
+                portUUID = Utils.uuidFormater(portUUID);
+            }
+            portUUID = UUID.fromString(portUUID).toString();
+            VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector
+                    .findById(VirtualMachineInterface.class, portUUID);
             if (virtualMachineInterface != null) {
                 LOGGER.info("Port creation verified....");
             }
-        } catch (Exception e) {
-            LOGGER.error("Exception :    " + e);
+        } catch (Exception ex) {
+            LOGGER.error("Exception :    " + ex);
         }
     }
 
     /**
      * Invoked when a port deletion is requested to check if the specified Port
-     * can be deleted and then delete the port
+     * can be deleted
      *
      * @param NeutronPort
      *            An instance of proposed Neutron Port object.
@@ -249,10 +301,29 @@ public class PortHandler implements INeutronPortAware {
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
         apiConnector = Activator.apiConnector;
+        String portUUID = neutronPort.getPortUUID();
+        if (!(portUUID.contains("-"))) {
+            portUUID = Utils.uuidFormater(portUUID);
+        }
+        portUUID = UUID.fromString(portUUID).toString();
         try {
-            return deletePort(neutronPort);
-        } catch (Exception e) {
-            LOGGER.error("exception :   ", e);
+            VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector
+                    .findById(VirtualMachineInterface.class, portUUID);
+
+            if (virtualMachineInterface == null) {
+                LOGGER.error("No port exists for specified UUID...");
+                return HttpURLConnection.HTTP_NOT_FOUND;
+            } else {
+                List<ObjectReference<ApiPropertyBase>> vmi = new ArrayList<ObjectReference<ApiPropertyBase>>();
+                vmi = virtualMachineInterface.getFloatingIpBackRefs();
+                if (vmi != null) {
+                    LOGGER.info("Port has floating Ip associated with it...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                return HttpURLConnection.HTTP_OK;
+            }
+        } catch (Exception ioEx) {
+            LOGGER.error("IOException :   ", ioEx);
             return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
     }
@@ -260,68 +331,80 @@ public class PortHandler implements INeutronPortAware {
     /**
      * Invoked to delete the specified Neutron port.
      *
-     * @param network
+     * @param neutronPort
      *            An instance of new Neutron Port object.
-     *
-     * @return A HTTP status code to the deletion request.
      */
-    private int deletePort(NeutronPort neutronPort) {
-        String portID = neutronPort.getID();
-        String deviceID = neutronPort.getDeviceID();
+    private void deletePort(NeutronPort neutronPort) {
+        String portUUID = neutronPort.getPortUUID();
+        String deviceUUID = neutronPort.getDeviceID();
         VirtualMachineInterface virtualMachineInterface = null;
         VirtualMachine virtualMachine = null;
         InstanceIp instanceIP = null;
         List<ObjectReference<ApiPropertyBase>> virtualMachineInterfaceBackRefs = null;
         try {
-            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portID);
-            if (virtualMachineInterface == null) {
-                LOGGER.info("Specified port does not exist...");
-                return HttpURLConnection.HTTP_BAD_REQUEST;
-            } else {
-                List<ObjectReference<ApiPropertyBase>> instanceIPs = virtualMachineInterface.getInstanceIpBackRefs();
-                if (instanceIPs != null) {
-                    for (ObjectReference<ApiPropertyBase> ref : instanceIPs) {
-                        String instanceIPUUID = ref.getUuid();
-                        if (instanceIPUUID != null) {
-                            instanceIP = (InstanceIp) apiConnector.findById(InstanceIp.class, instanceIPUUID);
-                            apiConnector.delete(instanceIP);
-                        }
+            try {
+                if (deviceUUID != null && !(("").equals(deviceUUID))) {
+                    if (!(deviceUUID.contains("-"))) {
+                        deviceUUID = Utils.uuidFormater(deviceUUID);
                     }
+                    deviceUUID = UUID.fromString(deviceUUID).toString();
+                }
+                if (!(portUUID.contains("-"))) {
+                    portUUID = Utils.uuidFormater(portUUID);
                 }
-                apiConnector.delete(virtualMachineInterface);
-                virtualMachine = (VirtualMachine) apiConnector.findById(VirtualMachine.class, deviceID);
-                if (virtualMachine != null) {
-                    virtualMachineInterfaceBackRefs = virtualMachine.getVirtualMachineInterfaceBackRefs();
-                    if (virtualMachineInterfaceBackRefs == null) {
-                        apiConnector.delete(virtualMachine);
+                portUUID = UUID.fromString(portUUID).toString();
+            } catch (Exception ex) {
+                LOGGER.error("UUID input incorrect", ex);
+            }
+            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portUUID);
+            List<ObjectReference<ApiPropertyBase>> instanceIPs = virtualMachineInterface.getInstanceIpBackRefs();
+            if (instanceIPs != null) {
+                for (ObjectReference<ApiPropertyBase> ref : instanceIPs) {
+                    String instanceIPUUID = ref.getUuid();
+                    if (instanceIPUUID != null) {
+                        instanceIP = (InstanceIp) apiConnector.findById(InstanceIp.class, instanceIPUUID);
+                        apiConnector.delete(instanceIP);
                     }
                 }
-                LOGGER.info("Specified port deleted sucessfully...");
-                return HttpURLConnection.HTTP_OK;
             }
+            apiConnector.delete(virtualMachineInterface);
+            virtualMachine = (VirtualMachine) apiConnector.findById(VirtualMachine.class, deviceUUID);
+            if (virtualMachine != null) {
+                virtualMachineInterfaceBackRefs = virtualMachine.getVirtualMachineInterfaceBackRefs();
+                if (virtualMachineInterfaceBackRefs == null) {
+                    apiConnector.delete(virtualMachine);
+                }
+            }
+            LOGGER.info("Specified port deleted sucessfully...");
         } catch (IOException io) {
             LOGGER.error("Exception  :   " + io);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
         } catch (Exception e) {
             LOGGER.error("Exception  :   " + e);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
     }
 
     /**
      * Invoked to take action after a port has been deleted.
      *
-     * @param network
+     * @param neutronPort
      *            An instance of new Neutron port object.
      */
     @Override
     public void neutronPortDeleted(NeutronPort neutronPort) {
-        VirtualMachineInterface virtualMachineInterface = new VirtualMachineInterface();
         try {
-            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID());
+            deletePort(neutronPort);
+            String portUUID = neutronPort.getPortUUID();
+            if (!(portUUID.contains("-"))) {
+                portUUID = Utils.uuidFormater(portUUID);
+            }
+            portUUID = UUID.fromString(portUUID).toString();
+            VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector
+                    .findById(VirtualMachineInterface.class, portUUID);
             if (virtualMachineInterface == null) {
                 LOGGER.info("Port deletion verified....");
             }
+        } catch (IOException ioEx) {
+            LOGGER.error("Exception :    " + ioEx);
         } catch (Exception e) {
             LOGGER.error("Exception :    " + e);
         }
@@ -329,7 +412,7 @@ public class PortHandler implements INeutronPortAware {
 
     /**
      * Invoked when a port update is requested to indicate if the specified port
-     * can be updated using the specified delta and update the port
+     * can be updated using the specified delta
      *
      * @param delta
      *            Updates to the port object using patch semantics.
@@ -341,7 +424,6 @@ public class PortHandler implements INeutronPortAware {
     @Override
     public int canUpdatePort(NeutronPort deltaPort, NeutronPort originalPort) {
         apiConnector = Activator.apiConnector;
-        VirtualMachineInterface virtualMachineInterface = null;
         if (deltaPort == null || originalPort == null) {
             LOGGER.error("Neutron Port objects can't be null..");
             return HttpURLConnection.HTTP_BAD_REQUEST;
@@ -351,8 +433,68 @@ public class PortHandler implements INeutronPortAware {
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
         try {
-            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, originalPort.getPortUUID());
-            return updatePort(deltaPort, virtualMachineInterface, originalPort);
+            String portUUID = originalPort.getPortUUID();
+            String networkUUID = deltaPort.getNetworkUUID();
+            String projectUUID = originalPort.getTenantID();
+            List<Neutron_IPs> fixedIPs = deltaPort.getFixedIPs();
+            if (!(portUUID.contains("-"))) {
+                portUUID = Utils.uuidFormater(portUUID);
+            }
+            portUUID = UUID.fromString(portUUID).toString();
+            if (!(projectUUID.contains("-"))) {
+                projectUUID = Utils.uuidFormater(projectUUID);
+            }
+            projectUUID = UUID.fromString(projectUUID).toString();
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector
+                    .findById(VirtualMachineInterface.class, portUUID);
+            if (virtualMachineInterface == null) {
+                LOGGER.error("No port exists for specified UUID...");
+                return HttpURLConnection.HTTP_NOT_FOUND;
+            }
+            String virtualMachineInterfaceByName = apiConnector.findByName(VirtualMachineInterface.class, project, deltaPort.getName());
+            if (virtualMachineInterfaceByName != null) {
+                LOGGER.warn("Port already exists with UUID : " + virtualMachineInterfaceByName);
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            if (networkUUID != null && !(("").equals(networkUUID))) {
+                if (!(networkUUID.contains("-"))) {
+                    networkUUID = Utils.uuidFormater(networkUUID);
+                }
+                networkUUID = UUID.fromString(networkUUID).toString();
+            }
+            VirtualNetwork virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+            if (networkUUID != null && fixedIPs == null) {
+                LOGGER.error("Subnet UUID must exist in the network..");
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            if (fixedIPs != null) {
+                if (virtualnetwork.getNetworkIpam() != null) {
+                    for (Neutron_IPs fixedIp : fixedIPs) {
+                        for (ObjectReference<VnSubnetsType> ref : virtualnetwork.getNetworkIpam()) {
+                            VnSubnetsType vnSubnetsType = ref.getAttr();
+                            if (vnSubnetsType != null) {
+                                List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetsType.getIpamSubnets();
+                                if (subnets != null) {
+                                    for (VnSubnetsType.IpamSubnetType subnetValue : subnets) {
+                                        String subnetUUID = fixedIp.getSubnetUUID();
+                                        if (!(subnetUUID.contains("-"))) {
+                                            subnetUUID = Utils.uuidFormater(subnetUUID);
+                                        }
+                                        subnetUUID = UUID.fromString(subnetUUID).toString();
+                                        Boolean doesSubnetExist = subnetValue.getSubnetUuid().matches(subnetUUID);
+                                        if (!doesSubnetExist) {
+                                            LOGGER.error("Subnet UUID must exist in the network..");
+                                            return HttpURLConnection.HTTP_BAD_REQUEST;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            return HttpURLConnection.HTTP_OK;
         } catch (IOException ie) {
             LOGGER.error("IOException:     " + ie);
             return HttpURLConnection.HTTP_INTERNAL_ERROR;
@@ -365,61 +507,73 @@ public class PortHandler implements INeutronPortAware {
     /**
      * Invoked to update the port
      *
-     * @param delta_network
+     * @param delta_neutronPort
      *            An instance of Neutron Port.
-     * @param An
-     *            instance of new {@link VirtualMachineInterface} object.
-     *
-     * @return A HTTP status code to the updation request.
      */
-    private int updatePort(NeutronPort deltaPort, VirtualMachineInterface virtualMachineInterface, NeutronPort originalPort) throws IOException {
-        VirtualMachine virtualMachine = null;
-        String deviceID = deltaPort.getDeviceID();
-        String portName = deltaPort.getName();
-        List<Neutron_IPs> fixedIPs = deltaPort.getFixedIPs();
+    private void updatePort(NeutronPort neutronPort) throws IOException {
+        String deviceUUID = neutronPort.getDeviceID();
+        String portName = neutronPort.getName();
+        String portUUID = neutronPort.getPortUUID();
+        String networkUUID = neutronPort.getNetworkUUID();
+        List<Neutron_IPs> fixedIPs = neutronPort.getFixedIPs();
         boolean instanceIpUpdate = false;
-        String networkUUID = deltaPort.getNetworkUUID();
+        VirtualMachineInterface virtualMachineInterface = null;
+        VirtualMachine virtualMachine = null;
         VirtualNetwork virtualnetwork = null;
-        if (fixedIPs != null) {
-            if (networkUUID == null) {
-                for (ObjectReference<ApiPropertyBase> networks : virtualMachineInterface.getVirtualNetwork()) {
-                    networkUUID = networks.getUuid();
-                }
+        try {
+            if (!(portUUID.contains("-"))) {
+                portUUID = Utils.uuidFormater(portUUID);
             }
-            boolean subnetExist = false;
-            virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
-            if (virtualnetwork == null) {
-                LOGGER.error(" Virtual network does not exist");
-                return HttpURLConnection.HTTP_FORBIDDEN;
+            portUUID = UUID.fromString(portUUID).toString();
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
             }
-            if (virtualnetwork != null && virtualnetwork.getNetworkIpam() != null) {
-                for (Neutron_IPs fixedIp : fixedIPs) {
-                    for (ObjectReference<VnSubnetsType> ref : virtualnetwork.getNetworkIpam()) {
-                        VnSubnetsType vnSubnetsType = ref.getAttr();
-                        if (vnSubnetsType != null) {
-                            List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetsType.getIpamSubnets();
-                            if (subnets != null) {
-                                for (VnSubnetsType.IpamSubnetType subnetValue : subnets) {
-                                    Boolean doesSubnetExist = subnetValue.getSubnetUuid().matches(fixedIp.getSubnetUUID());
-                                    if (doesSubnetExist) {
-                                        subnetExist = true;
-                                        for (ObjectReference<ApiPropertyBase> instanceIp : virtualMachineInterface.getInstanceIpBackRefs()) {
-                                            InstanceIp instanceIpLocal = (InstanceIp) apiConnector.findById(InstanceIp.class, instanceIp.getUuid());
-                                            instanceIpLocal.setVirtualNetwork(virtualnetwork);
-                                            INeutronSubnetCRUD systemCRUD = NeutronCRUDInterfaces.getINeutronSubnetCRUD(this);
-                                            NeutronSubnet subnet = null;
-                                            for (Neutron_IPs ip : originalPort.getFixedIPs()) {
-                                                subnet = systemCRUD.getSubnet(ip.getSubnetUUID());
-                                                subnet.releaseIP(ip.getIpAddress());
-                                            }
-                                            if (fixedIp.getIpAddress() == null) {
-                                                subnet = systemCRUD.getSubnet(fixedIp.getSubnetUUID());
-                                                instanceIpLocal.setAddress(subnet.getLowAddr());
-                                            } else {
-                                                instanceIpLocal.setAddress(fixedIp.getIpAddress());
+            networkUUID = UUID.fromString(networkUUID).toString();
+            if (deviceUUID != null) {
+                if (!(deviceUUID.contains("-"))) {
+                    deviceUUID = Utils.uuidFormater(deviceUUID);
+                }
+                deviceUUID = UUID.fromString(deviceUUID).toString();
+            }
+            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portUUID);
+
+            if (fixedIPs != null) {
+                virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+                if (virtualnetwork.getNetworkIpam() != null) {
+                    for (Neutron_IPs fixedIp : fixedIPs) {
+                        for (ObjectReference<VnSubnetsType> ref : virtualnetwork.getNetworkIpam()) {
+                            VnSubnetsType vnSubnetsType = ref.getAttr();
+                            if (vnSubnetsType != null) {
+                                List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetsType.getIpamSubnets();
+                                if (subnets != null) {
+                                    for (VnSubnetsType.IpamSubnetType subnetValue : subnets) {
+                                        String subnetUUID = fixedIp.getSubnetUUID();
+                                        if (!(subnetUUID.contains("-"))) {
+                                            subnetUUID = Utils.uuidFormater(subnetUUID);
+                                        }
+                                        subnetUUID = UUID.fromString(subnetUUID).toString();
+                                        Boolean doesSubnetExist = subnetValue.getSubnetUuid().matches(subnetUUID);
+                                        if (doesSubnetExist) {
+                                            // subnetExist = true;
+                                            for (ObjectReference<ApiPropertyBase> instanceIp : virtualMachineInterface.getInstanceIpBackRefs()) {
+                                                InstanceIp instanceIpLocal = (InstanceIp) apiConnector.findById(InstanceIp.class,
+                                                        instanceIp.getUuid());
+                                                instanceIpLocal.setVirtualNetwork(virtualnetwork);
+                                                INeutronSubnetCRUD systemCRUD = NeutronCRUDInterfaces.getINeutronSubnetCRUD(this);
+                                                NeutronSubnet subnet = null;
+                                                for (Neutron_IPs ip : neutronPort.getFixedIPs()) {
+                                                    subnet = systemCRUD.getSubnet(ip.getSubnetUUID());
+                                                    subnet.releaseIP(ip.getIpAddress());
+                                                }
+                                                if (fixedIp.getIpAddress() == null) {
+                                                    subnet = systemCRUD.getSubnet(fixedIp.getSubnetUUID());
+                                                    instanceIpLocal.setAddress(subnet.getLowAddr());
+                                                } else {
+                                                    instanceIpLocal.setAddress(fixedIp.getIpAddress());
+                                                }
+                                                instanceIpUpdate = apiConnector.update(instanceIpLocal);
+                                                virtualMachineInterface.setVirtualNetwork(virtualnetwork);
                                             }
-                                            instanceIpUpdate = apiConnector.update(instanceIpLocal);
-                                            virtualMachineInterface.setVirtualNetwork(virtualnetwork);
                                         }
                                     }
                                 }
@@ -428,110 +582,97 @@ public class PortHandler implements INeutronPortAware {
                     }
                 }
             }
-            if (!subnetExist) {
-                LOGGER.error("Subnet UUID must exist in the network..");
-                return HttpURLConnection.HTTP_BAD_REQUEST;
-            }
-        } else if (networkUUID != null && fixedIPs == null) {
-            LOGGER.error("Subnet UUID must exist in the network..");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        if (deviceID != null) {
-            if (("").equals(deviceID)) {
-                virtualMachineInterface.clearVirtualMachine();
-            } else {
-                deviceID = UUID.fromString(deltaPort.getDeviceID()).toString();
-                try {
-                    virtualMachine = (VirtualMachine) apiConnector.findById(VirtualMachine.class, deviceID);
-                } catch (Exception e) {
-                    LOGGER.error("Exception:     " + e);
-                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
-                }
-                if (virtualMachine == null) {
-                    virtualMachine = new VirtualMachine();
-                    virtualMachine.setName(deviceID);
-                    virtualMachine.setUuid(deviceID);
-                    boolean virtualMachineCreated = apiConnector.create(virtualMachine);
-                    LOGGER.debug("virtualMachineCreated: " + virtualMachineCreated);
-                    if (!virtualMachineCreated) {
-                        LOGGER.warn("virtualMachine creation failed..");
-                        return HttpURLConnection.HTTP_INTERNAL_ERROR;
+            if (deviceUUID != null) {
+                if (("").equals(deviceUUID)) {
+                    virtualMachineInterface.clearVirtualMachine();
+                } else {
+                    try {
+                        virtualMachine = (VirtualMachine) apiConnector.findById(VirtualMachine.class, deviceUUID);
+                    } catch (IOException ioEx) {
+                        LOGGER.error("Exception:     " + ioEx);
+                    } catch (Exception ex) {
+                        LOGGER.error("Exception:     " + ex);
                     }
-                    LOGGER.info("virtualMachine : " + virtualMachine.getName() + "  having UUID : " + virtualMachine.getUuid()
-                            + "  sucessfully created...");
+                    if (virtualMachine == null) {
+                        virtualMachine = new VirtualMachine();
+                        virtualMachine.setName(deviceUUID);
+                        virtualMachine.setUuid(deviceUUID);
+                        boolean virtualMachineCreated = apiConnector.create(virtualMachine);
+                        LOGGER.debug("virtualMachineCreated: " + virtualMachineCreated);
+                        if (!virtualMachineCreated) {
+                            LOGGER.warn("virtualMachine creation failed..");
+                        }
+                        LOGGER.info("virtualMachine : " + virtualMachine.getName() + "  having UUID : " + virtualMachine.getUuid()
+                                + "  sucessfully created...");
+                    }
+                    virtualMachineInterface.setVirtualMachine(virtualMachine);
                 }
-                virtualMachineInterface.setVirtualMachine(virtualMachine);
             }
-        }
-        if(deviceID == null){
-            virtualMachineInterface.clearVirtualMachine();
-        }
-        if (portName != null) {
-            virtualMachineInterface.setDisplayName(portName);
-        }
-        if ((deviceID != null && !(("").equals(deviceID))) || portName != null || instanceIpUpdate ) {
-            if ((deviceID != null && !(("").equals(deviceID))) || portName != null) {
-                boolean portUpdate = apiConnector.update(virtualMachineInterface);
-                if (!portUpdate) {
-                    LOGGER.warn("Port Updation failed..");
-                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
+            if (deviceUUID == null) {
+                virtualMachineInterface.clearVirtualMachine();
+            }
+            if (portName != null) {
+                virtualMachineInterface.setDisplayName(portName);
+            }
+            if ((deviceUUID != null && !(("").equals(deviceUUID))) || portName != null || instanceIpUpdate) {
+                if ((deviceUUID != null && !(("").equals(deviceUUID))) || portName != null) {
+                    boolean portUpdate = apiConnector.update(virtualMachineInterface);
+                    if (!portUpdate) {
+                        LOGGER.warn("Port Updation failed..");
+                    }
                 }
+                LOGGER.info("Port having UUID : " + virtualMachineInterface.getUuid() + "  has been sucessfully updated...");
+            } else {
+                LOGGER.info("Nothing to update...");
             }
-            LOGGER.info("Port having UUID : " + virtualMachineInterface.getUuid() + "  has been sucessfully updated...");
-            return HttpURLConnection.HTTP_OK;
-        } else {
-            LOGGER.info("Nothing to update...");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
+        } catch (Exception ex) {
+            LOGGER.error("Exception  :    " + ex);
         }
     }
 
     /**
      * Invoked to take action after a port has been updated.
      *
-     * @param network
+     * @param updatedPort
      *            An instance of modified Neutron Port object.
      */
     @Override
-    public void neutronPortUpdated(NeutronPort neutronPort) {
+    public void neutronPortUpdated(NeutronPort updatedPort) {
+        String deviceUUID = updatedPort.getDeviceID();
+        String portUUID = updatedPort.getPortUUID();
         try {
-            VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID());
-            if (neutronPort.getDeviceID() == null) { // TODO : VM Refs not getting cleared correctly - to be fixed
-                if (neutronPort.getName().matches(virtualMachineInterface.getDisplayName()) && virtualMachineInterface.getVirtualMachine() == null) {
-                    LOGGER.info("Port updatation verified....");
+            updatePort(updatedPort);
+            try {
+                if (!(portUUID.contains("-"))) {
+                    portUUID = Utils.uuidFormater(portUUID);
                 }
-            } else if (neutronPort.getDeviceID() != null && neutronPort.getName().matches(virtualMachineInterface.getDisplayName())
-                    && neutronPort.getDeviceID().matches(virtualMachineInterface.getVirtualMachine().get(0).getUuid())) {
-                LOGGER.info("Port updatation verified....");
-            } else {
-                LOGGER.info("Port updatation failed....");
+                portUUID = UUID.fromString(portUUID).toString();
+                if (deviceUUID != null) {
+                    if (!(deviceUUID.contains("-"))) {
+                        deviceUUID = Utils.uuidFormater(deviceUUID);
+                    }
+                    deviceUUID = UUID.fromString(deviceUUID).toString();
+                }
+                VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class,
+                        portUUID);
+                if (deviceUUID == null || ("").equals(deviceUUID)) {
+                    if (updatedPort.getName().matches(virtualMachineInterface.getDisplayName())
+                            && virtualMachineInterface.getVirtualMachine() == null) {
+                        LOGGER.info("Port updation verified....");
+                    }
+                } else {
+                    if (updatedPort.getName().matches(virtualMachineInterface.getDisplayName())
+                            && deviceUUID.matches(virtualMachineInterface.getVirtualMachine().get(0).getUuid())) {
+                        LOGGER.info("Port updatation verified....");
+                    }
+                }
+            } catch (Exception e) {
+                LOGGER.error("Exception :" + e);
             }
-        } catch (Exception e) {
-            LOGGER.error("Exception :" + e);
-        }
-    }
-
-    /**
-     * Invoked to format the UUID if UUID is not in correct format.
-     *
-     * @param String
-     *            An instance of UUID string.
-     *
-     * @return Correctly formated UUID string.
-     */
-    private String uuidFormater(String uuid) {
-        String uuidPattern = null;
-        try {
-            String id1 = uuid.substring(0, 8);
-            String id2 = uuid.substring(8, 12);
-            String id3 = uuid.substring(12, 16);
-            String id4 = uuid.substring(16, 20);
-            String id5 = uuid.substring(20, 32);
-            uuidPattern = (id1 + "-" + id2 + "-" + id3 + "-" + id4 + "-" + id5);
-
-        } catch (Exception e) {
-            LOGGER.error("UUID is not in correct format ");
-            LOGGER.error("Exception :" + e);
+        } catch (IOException ioEx) {
+            LOGGER.error("Exception :" + ioEx);
+        } catch (Exception ex) {
+            LOGGER.error("Exception :" + ex);
         }
-        return uuidPattern;
     }
-}
+}
\ No newline at end of file
index 108c24fa3b89752c1f03017bc73e4e40dc5948ca..58a0803a3295b084cddd654187122b44d027c234 100644 (file)
-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.ApiPropertyBase;
-import net.juniper.contrail.api.ObjectReference;
-import net.juniper.contrail.api.types.LogicalRouter;
-import net.juniper.contrail.api.types.Project;
-import net.juniper.contrail.api.types.VirtualMachineInterface;
-import net.juniper.contrail.api.types.VirtualNetwork;
-
-import org.opendaylight.controller.networkconfig.neutron.INeutronRouterAware;
-import org.opendaylight.controller.networkconfig.neutron.NeutronRouter;
-import org.opendaylight.controller.networkconfig.neutron.NeutronRouter_Interface;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Handle requests for Neutron Router.
- */
-public class RouterHandler implements INeutronRouterAware {
-
-    /**
-     * Logger instance.
-     */
-
-    static final Logger LOGGER = LoggerFactory.getLogger(RouterHandler.class);
-    static ApiConnector apiConnector;
-
-    /**
-     * Invoked when a router creation is requested to check if the specified
-     * router can be created and then creates the router
-     *
-     * @param router
-     *            An instance of proposed new Neutron Router object.
-     *
-     * @return A HTTP status code to the creation request.
-     */
-    @Override
-    public int canCreateRouter(NeutronRouter router) {
-        apiConnector = Activator.apiConnector;
-        if (router == null) {
-            LOGGER.error("Router object can't be null/empty.");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        if (router.getRouterUUID() == null || ("").equals(router.getRouterUUID())) {
-            LOGGER.error("Router UUID can't be null/empty.");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        if (router.getTenantID() == null || ("").equals(router.getTenantID())) {
-            LOGGER.error("Tenant can't be null/empty.");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        if (router.getName() == null || ("").equals(router.getName())) {
-            LOGGER.error("Router name can't be null/empty.");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        String projectUUID = router.getTenantID();
-        if (!(projectUUID.contains("-"))) {
-            projectUUID = uuidFormater(projectUUID);
-        }
-        projectUUID = UUID.fromString(projectUUID).toString();
-        Project project;
-        try {
-            project = (Project) apiConnector.findById(Project.class, projectUUID);
-
-            if (project == null) {
-                Thread.currentThread();
-                Thread.sleep(3000);
-                project = (Project) apiConnector.findById(Project.class, projectUUID);
-                if (project == null) {
-                    LOGGER.error("Could not find projectUUID...");
-                    return HttpURLConnection.HTTP_NOT_FOUND;
-                }
-            }
-            return createRouter(router);
-        } catch (InterruptedException interruptedException) {
-            LOGGER.error("InterruptedException :    ", interruptedException);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        } catch (IOException ie) {
-            LOGGER.error("IOException :   " + ie);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked to create the specified Neutron Router.
-     *
-     * @param router
-     *            An instance of new Neutron Router object.
-     *
-     * @return A HTTP status code to the creation request.
-     */
-    private int createRouter(NeutronRouter router) throws IOException {
-        LogicalRouter logicalRouter = new LogicalRouter();
-        logicalRouter = mapRouterProperties(router, logicalRouter);
-        String projectUUID = router.getTenantID();
-        if (!(projectUUID.contains("-"))) {
-            projectUUID = uuidFormater(projectUUID);
-        }
-        projectUUID = UUID.fromString(projectUUID).toString();
-        try {
-            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
-            logicalRouter.setParent(project);
-            if (router.getExternalGatewayInfo() != null) {
-                try {
-                    VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, router.getExternalGatewayInfo().getNetworkID());
-                    logicalRouter.setVirtualNetwork(virtualNetwork);
-                } catch (IOException ex) {
-                    LOGGER.error("IOException  :    " + ex);
-                }
-            }
-            boolean routerCreated = apiConnector.create(logicalRouter);
-            if (!routerCreated) {
-                LOGGER.warn("Router creation failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-            LOGGER.info("Router : " + logicalRouter.getName() + "  having UUID : " + logicalRouter.getUuid() + "  sucessfully created...");
-            return HttpURLConnection.HTTP_OK;
-        } catch (IOException ex) {
-            LOGGER.error("IOException :   " + ex);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked to take action after a router has been created.
-     *
-     * @param router
-     *            An instance of new Neutron Router object.
-     */
-    @Override
-    public void neutronRouterCreated(NeutronRouter router) {
-        LogicalRouter logicalRouter = null;
-        try {
-            logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, router.getRouterUUID());
-            if (logicalRouter != null) {
-                LOGGER.info("Router creation verified....");
-            }
-        } catch (Exception e) {
-            LOGGER.error("Exception :    " + e);
-        }
-    }
-
-    /**
-     * Invoked when a router deletion is requested to indicate if the specified
-     * router can be deleted.
-     *
-     * @param router
-     *            An instance of the Neutron Router object to be deleted.
-     *
-     * @return A HTTP status code to the deletion request.
-     */
-    @Override
-    public int canDeleteRouter(NeutronRouter router) {
-        apiConnector = Activator.apiConnector;
-        if (router == null) {
-            LOGGER.info("Router object can't be null...");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        try {
-            return deleteRouter(router.getRouterUUID());
-        } catch (Exception ex) {
-            LOGGER.error("Exception :   ", ex);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked to delete the specified Neutron router.
-     *
-     * @param router
-     *            An instance of new Neutron router object.
-     *
-     * @return A HTTP status code to the deletion request.
-     */
-    private int deleteRouter(String routerUUID) {
-        LogicalRouter logicalRouter = null;
-        try {
-            logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);
-            if (logicalRouter != null) {
-                apiConnector.delete(logicalRouter);
-                LOGGER.info("Router with UUID :  " + routerUUID + "  has been deleted successfully....");
-                return HttpURLConnection.HTTP_OK;
-            } else {
-                LOGGER.info("No Router exists with UUID :  " + routerUUID);
-                return HttpURLConnection.HTTP_BAD_REQUEST;
-            }
-        } catch (IOException ex) {
-            LOGGER.error("Exception :    " + ex);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked to take action after a Router has been deleted.
-     *
-     * @param router
-     *            An instance of deleted Neutron Router object.
-     */
-    @Override
-    public void neutronRouterDeleted(NeutronRouter router) {
-        LogicalRouter logicalRouter = null;
-        try {
-            logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, router.getRouterUUID());
-            if (logicalRouter != null) {
-                LOGGER.info("Router deletion verified....");
-            }
-        } catch (IOException ex) {
-            LOGGER.error("Exception :    " + ex);
-        }
-
-    }
-
-    /**
-     * Invoked when a router update is requested to indicate if the specified
-     * router can be changed using the specified delta.
-     *
-     * @param delta
-     *            Updates to the router object using patch semantics.
-     * @param router
-     *            An instance of the Neutron router object to be updated.
-     * @return A HTTP status code to the update request.
-     */
-    @Override
-    public int canUpdateRouter(NeutronRouter deltaRouter, NeutronRouter router) {
-        apiConnector = Activator.apiConnector;
-        if (deltaRouter == null || router == null) {
-            LOGGER.error("Neutron Router object can't be null..");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }
-        try {
-            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, router.getRouterUUID());
-            if (logicalRouter == null) {
-                LOGGER.warn("Router object not found..");
-                return HttpURLConnection.HTTP_NOT_FOUND;
-            }
-            return updateRouter(logicalRouter, deltaRouter);
-        } catch (IOException ioEx) {
-            LOGGER.error("Exception :    " + ioEx);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked to update the router
-     *
-     * @param deltaRouter
-     *            An instance of Router.
-     * @param originalRouter
-     *            An instance of new logicalRouter object.
-     *
-     * @return A HTTP status code to the creation request.
-     */
-    private int updateRouter(LogicalRouter logicalRouter, NeutronRouter deltaRouter) throws IOException {
-        try {
-            String routerName = deltaRouter.getName();
-            logicalRouter.setName(routerName);
-            logicalRouter.setDisplayName(routerName);
-            VirtualNetwork virtualNetwork = null;
-            if (deltaRouter.getExternalGatewayInfo() != null) {
-                try {
-                    virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, deltaRouter.getExternalGatewayInfo().getNetworkID());
-                    logicalRouter.setVirtualNetwork(virtualNetwork);
-                } catch (IOException ex) {
-                    LOGGER.error("IOException  :    " + ex);
-                }
-            } else{
-            logicalRouter.clearVirtualNetwork();
-            }
-            boolean routerUpdate = apiConnector.update(logicalRouter);
-            if (!routerUpdate) {
-                LOGGER.warn("Router Updation failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-            LOGGER.info("Router having UUID : " + logicalRouter.getUuid() + "  has been sucessfully updated...");
-            return HttpURLConnection.HTTP_OK;
-        } catch (Exception e) {
-            LOGGER.error("Exception :    " + e);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked to take action after a router has been updated.
-     *
-     * @param router
-     *            An instance of modified Neutron router object.
-     */
-    @Override
-    public void neutronRouterUpdated(NeutronRouter router) {
-        try {
-            LogicalRouter logicalRouter = new LogicalRouter();
-            logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, router.getRouterUUID());
-
-            if (router.getName().equalsIgnoreCase(logicalRouter.getName())) {
-                LOGGER.info("Router updatation verified....");
-            } else {
-                LOGGER.info("Router updatation failed....");
-            }
-
-        } catch (Exception ex) {
-            LOGGER.error("Exception :    " + ex);
-        }
-
-    }
-
-    /**
-     * Invoked to attach interface to the specified Neutron Router.
-     *
-     * @param router
-     *            An instance of new Neutron Router object.
-     *
-     * @param routerInterface
-     *            An instance of NeutronRouter_Interface object to be attached.
-     *
-     * @return A HTTP status code to the attach request.
-     */
-    @Override
-    public int canAttachInterface(NeutronRouter router, NeutronRouter_Interface routerInterface) {
-        apiConnector = Activator.apiConnector;
-        String portId = routerInterface.getPortUUID();
-        String routerId = router.getRouterUUID();
-        VirtualMachineInterface virtualMachineInterface = null;
-        LogicalRouter logicalRouter = null;
-        try {
-            logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerId);
-            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portId);
-            if (virtualMachineInterface != null) {
-                logicalRouter.addVirtualMachineInterface(virtualMachineInterface);
-            }
-//            logicalRouter.setDeviceOwner();  // TODO : Support needs to be added
-            boolean updateVMI = apiConnector.update(virtualMachineInterface);
-            if (!updateVMI) {
-                LOGGER.warn("virtualMachineInterface updation failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-            boolean interfaceAttached = apiConnector.update(logicalRouter);
-            if (!interfaceAttached) {
-                LOGGER.warn("Interface attachment failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-            LOGGER.info("Interface : " + logicalRouter.getName() + "  having UUID : " + logicalRouter.getUuid() + "  sucessfully attached with..."
-                    + logicalRouter.getVirtualMachineInterface());
-            return HttpURLConnection.HTTP_OK;
-        } catch (IOException ioEx) {
-            LOGGER.error("IOException :   " + ioEx);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked to take action after a router interface has been attached.
-     *
-     * @param router
-     *            An instance of new Neutron Router object.
-     *
-     * @param routerInterface
-     *            An instance of NeutronRouter_Interface object to be attached.
-     */
-    @Override
-    public void neutronRouterInterfaceAttached(NeutronRouter router, NeutronRouter_Interface routerInterface) {
-        String portId = routerInterface.getPortUUID();
-        String routerId = router.getRouterUUID();
-        VirtualMachineInterface virtualMachineInterface = null;
-        try {
-            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portId);
-            List<ObjectReference<ApiPropertyBase>> virtualMachineList = virtualMachineInterface.getVirtualMachine();
-            if (virtualMachineList != null) {
-                for (ObjectReference<ApiPropertyBase> ref : virtualMachineList) {
-                    String deviceId = ref.getUuid();
-                    if (deviceId.equals(routerId)) {
-                        LOGGER.info("Interface attachment verified to router...");
-                    }
-                }
-            }
-            // if(virtualMachineInterface.getVirtualMachine()!=null &&
-            // something.getDeviceOwner.equals("network:router_interface")){
-            // LOGGER.info("Interface attachment verified to router..." );
-            // }
-        } catch (Exception ex) {
-            LOGGER.error("Exception :    " + ex);
-        }
-
-    }
-
-    /**
-     * Invoked to detach interface to the specified Neutron Router.
-     *
-     * @param router
-     *            An instance of new Neutron Router object.
-     *
-     * @param routerInterface
-     *            An instance of NeutronRouter_Interface object to be detached.
-     *
-     * @return A HTTP status code to the detach request.
-     */
-    @Override
-    public int canDetachInterface(NeutronRouter router, NeutronRouter_Interface routerInterface) {
-        apiConnector = Activator.apiConnector;
-        String portId = routerInterface.getPortUUID();
-        String routerId = router.getRouterUUID();
-        VirtualMachineInterface virtualMachineInterface = null;
-        LogicalRouter logicalRouter = null;
-        try {
-            logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerId);
-            List<ObjectReference<ApiPropertyBase>> vmiList = logicalRouter.getVirtualMachineInterface();
-            for (ObjectReference<ApiPropertyBase> vmiRef : vmiList) {
-                if(vmiRef.getUuid().matches(portId)){
-                    vmiList.remove(vmiRef);
-                    break;
-                }
-            }
-            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portId);
-//            virtualMachineInterface.clearDeviceId(); //TODO - support to be added in OpenContrail
-            // virtualMachineInterface.clearDeviceId(); //TODO - support to be added in OpenContrail
-            boolean updateVMI = apiConnector.update(virtualMachineInterface);
-            if (!updateVMI) {
-                LOGGER.warn("virtualMachineInterface updation failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-            boolean interfaceDetached = apiConnector.update(logicalRouter);
-            if (!interfaceDetached) {
-                LOGGER.warn("Interface detachment failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
-            LOGGER.info("Interface : " + logicalRouter.getName() + "  having UUID : " + logicalRouter.getUuid() + "  sucessfully detached from..."
-                    + logicalRouter.getVirtualMachineInterface());
-            return HttpURLConnection.HTTP_OK;
-        } catch (IOException e) {
-            LOGGER.error("IOException :   " + e);
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    /**
-     * Invoked to take action after a router interface has been detached.
-     *
-     * @param router
-     *            An instance of new Neutron Router object.
-     *
-     * @param routerInterface
-     *            An instance of NeutronRouter_Interface object to be attached.
-     */
-    @Override
-    public void neutronRouterInterfaceDetached(NeutronRouter router, NeutronRouter_Interface routerInterface) {
-        String routerId = router.getRouterUUID();
-        String portId = routerInterface.getPortUUID();
-        try {
-            VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portId);
-            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerId);
-            // if(virtualMachineInterface.getVirtualMachine()==null &&
-            // virtualMachineInterface.getDeviceOwner==null){
-            // LOGGER.info("Interface detachment verified from router..." );
-            // }
-        } catch (Exception e) {
-            LOGGER.error("Exception :    " + e);
-        }
-    }
-
-    /**
-     * Invoked to map the NeutronRouter object properties to the logicalRouter
-     * object.
-     *
-     * @param neutronRouter
-     *            An instance of new Neutron Router object.
-     * @param logicalRouter
-     *            An instance of new logicalRouter object.
-     * @return {@link logicalRouter}
-     */
-    private LogicalRouter mapRouterProperties(NeutronRouter neutronRouter, LogicalRouter logicalRouter) {
-        String routerUUID = neutronRouter.getRouterUUID();
-        String routerName = neutronRouter.getName();
-        logicalRouter.setUuid(routerUUID);
-        logicalRouter.setName(routerName);
-        logicalRouter.setDisplayName(routerName);
-        VirtualNetwork virtualNetwork = null;
-        if (neutronRouter.getExternalGatewayInfo() != null) {
-            try {
-                virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, neutronRouter.getExternalGatewayInfo().getNetworkID());
-                logicalRouter.setVirtualNetwork(virtualNetwork);
-            } catch (IOException ex) {
-                LOGGER.error("IOException  :    " + ex);
-            }
-        }
-        return logicalRouter;
-    }
-
-    /**
-     * Invoked to format the UUID if UUID is not in correct format.
-     *
-     * @param String
-     *            An instance of UUID string.
-     *
-     * @return Correctly formated UUID string.
-     */
-    private String uuidFormater(String uuid) {
-        String uuidPattern = null;
-        String id1 = uuid.substring(0, 8);
-        String id2 = uuid.substring(8, 12);
-        String id3 = uuid.substring(12, 16);
-        String id4 = uuid.substring(16, 20);
-        String id5 = uuid.substring(20, 32);
-        uuidPattern = (id1 + "-" + id2 + "-" + id3 + "-" + id4 + "-" + id5);
-        return uuidPattern;
-    }
-
-}
+/*\r
+ * Copyright (C) 2014 Juniper Networks, Inc.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ */\r
+package org.opendaylight.plugin2oc.neutron;\r
+\r
+import java.io.IOException;\r
+import java.net.HttpURLConnection;\r
+import java.util.List;\r
+import java.util.UUID;\r
+\r
+import net.juniper.contrail.api.ApiConnector;\r
+import net.juniper.contrail.api.ApiPropertyBase;\r
+import net.juniper.contrail.api.ObjectReference;\r
+import net.juniper.contrail.api.types.LogicalRouter;\r
+import net.juniper.contrail.api.types.Project;\r
+import net.juniper.contrail.api.types.VirtualMachineInterface;\r
+import net.juniper.contrail.api.types.VirtualNetwork;\r
+\r
+import org.opendaylight.controller.networkconfig.neutron.INeutronRouterAware;\r
+import org.opendaylight.controller.networkconfig.neutron.NeutronRouter;\r
+import org.opendaylight.controller.networkconfig.neutron.NeutronRouter_Interface;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+/**\r
+ * Handle requests for Neutron Router.\r
+ */\r
+public class RouterHandler implements INeutronRouterAware {\r
+\r
+    /**\r
+     * Logger instance.\r
+     */\r
+\r
+    static final Logger LOGGER = LoggerFactory.getLogger(RouterHandler.class);\r
+    static ApiConnector apiConnector;\r
+\r
+    /**\r
+     * Invoked when a router creation is requested to check if the specified\r
+     * router can be created and then creates the router\r
+     *\r
+     * @param router\r
+     *            An instance of proposed new Neutron Router object.\r
+     *\r
+     * @return A HTTP status code to the creation request.\r
+     */\r
+    @Override\r
+    public int canCreateRouter(NeutronRouter router) {\r
+        apiConnector = Activator.apiConnector;\r
+        if (router == null) {\r
+            LOGGER.error("Router object can't be null/empty.");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        if (router.getRouterUUID() == null || ("").equals(router.getRouterUUID())) {\r
+            LOGGER.error("Router UUID can't be null/empty.");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        if (router.getTenantID() == null || ("").equals(router.getTenantID())) {\r
+            LOGGER.error("Tenant can't be null/empty.");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        if (router.getName() == null || ("").equals(router.getName())) {\r
+            LOGGER.error("Router name can't be null/empty.");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        try {\r
+            String projectUUID = router.getTenantID();\r
+            String routerUUID = router.getRouterUUID();\r
+            try {\r
+                if (!(projectUUID.contains("-"))) {\r
+                    projectUUID = Utils.uuidFormater(projectUUID);\r
+                }\r
+\r
+                if (!(routerUUID.contains("-"))) {\r
+                    routerUUID = Utils.uuidFormater(routerUUID);\r
+                }\r
+                boolean isValidRouterUUID = Utils.isValidHexNumber(routerUUID);\r
+                boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);\r
+                if (!isValidRouterUUID || !isValidprojectUUID) {\r
+                    LOGGER.info("Badly formed Hexadecimal UUID...");\r
+                    return HttpURLConnection.HTTP_BAD_REQUEST;\r
+                }\r
+                projectUUID = UUID.fromString(projectUUID).toString();\r
+                routerUUID = UUID.fromString(routerUUID).toString();\r
+            } catch (Exception ex) {\r
+                LOGGER.error("UUID input incorrect", ex);\r
+                return HttpURLConnection.HTTP_BAD_REQUEST;\r
+            }\r
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);\r
+            if (project == null) {\r
+                Thread.currentThread();\r
+                Thread.sleep(3000);\r
+                project = (Project) apiConnector.findById(Project.class, projectUUID);\r
+                if (project == null) {\r
+                    LOGGER.error("Could not find projectUUID...");\r
+                    return HttpURLConnection.HTTP_NOT_FOUND;\r
+                }\r
+            }\r
+            String routerByName = apiConnector.findByName(LogicalRouter.class, project, router.getName());\r
+            if (routerByName != null) {\r
+                LOGGER.warn("Router already exists with UUID : " + routerByName);\r
+                return HttpURLConnection.HTTP_FORBIDDEN;\r
+            }\r
+            return HttpURLConnection.HTTP_OK;\r
+        } catch (InterruptedException interruptedException) {\r
+            LOGGER.error("InterruptedException :    ", interruptedException);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        } catch (IOException ie) {\r
+            LOGGER.error("IOException :   " + ie);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to create the specified Neutron Router.\r
+     *\r
+     * @param router\r
+     *            An instance of new Neutron Router object.\r
+     */\r
+    private void createRouter(NeutronRouter router) throws IOException {\r
+        LogicalRouter logicalRouter = new LogicalRouter();\r
+        try {\r
+            logicalRouter = mapRouterProperties(router, logicalRouter);\r
+            boolean routerCreated = apiConnector.create(logicalRouter);\r
+            if (!routerCreated) {\r
+                LOGGER.warn("Router creation failed..");\r
+            }\r
+            LOGGER.info("Router : " + logicalRouter.getName() + "  having UUID : " + logicalRouter.getUuid() + "  sucessfully created...");\r
+        } catch (IOException ex) {\r
+            LOGGER.error("IOException :   " + ex);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to take action after a router has been created.\r
+     *\r
+     * @param router\r
+     *            An instance of new Neutron Router object.\r
+     */\r
+    @Override\r
+    public void neutronRouterCreated(NeutronRouter router) {\r
+        try {\r
+            createRouter(router);\r
+            String routerUUID = router.getRouterUUID();\r
+            if (!(routerUUID.contains("-"))) {\r
+                routerUUID = Utils.uuidFormater(routerUUID);\r
+            }\r
+            routerUUID = UUID.fromString(routerUUID).toString();\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            if (logicalRouter != null) {\r
+                LOGGER.info("Router creation verified....");\r
+            } else {\r
+                LOGGER.error("Router creation failed....");\r
+            }\r
+        } catch (IOException ioEx) {\r
+            LOGGER.error("IOException :   " + ioEx);\r
+        } catch (Exception e) {\r
+            LOGGER.error("Exception :    " + e);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked when a router deletion is requested to indicate if the specified\r
+     * router can be deleted.\r
+     *\r
+     * @param router\r
+     *            An instance of the Neutron Router object to be deleted.\r
+     *\r
+     * @return A HTTP status code to the deletion request.\r
+     */\r
+    @Override\r
+    public int canDeleteRouter(NeutronRouter router) {\r
+        apiConnector = Activator.apiConnector;\r
+        if (router == null) {\r
+            LOGGER.info("Router object can't be null...");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        String routerUUID = router.getRouterUUID();\r
+        try {\r
+            if (!(routerUUID.contains("-"))) {\r
+                routerUUID = Utils.uuidFormater(routerUUID);\r
+            }\r
+            routerUUID = UUID.fromString(routerUUID).toString();\r
+        } catch (Exception ex) {\r
+            LOGGER.error("UUID input incorrect", ex);\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        return HttpURLConnection.HTTP_OK;\r
+    }\r
+\r
+    /**\r
+     * Invoked to delete the specified Neutron router.\r
+     *\r
+     * @param router\r
+     *            An instance of new Neutron router object.\r
+     */\r
+    private void deleteRouter(String routerUUID) {\r
+        try {\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            if (logicalRouter != null) {\r
+                apiConnector.delete(logicalRouter);\r
+                LOGGER.info("Router with UUID :  " + routerUUID + "  has been deleted successfully....");\r
+            } else {\r
+                LOGGER.info("No Router exists with UUID :  " + routerUUID);\r
+            }\r
+        } catch (IOException ex) {\r
+            LOGGER.error("Exception :    " + ex);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to take action after a Router has been deleted.\r
+     *\r
+     * @param router\r
+     *            An instance of deleted Neutron Router object.\r
+     */\r
+    @Override\r
+    public void neutronRouterDeleted(NeutronRouter router) {\r
+        try {\r
+            String routerUUID = router.getRouterUUID();\r
+            if (!(routerUUID.contains("-"))) {\r
+                routerUUID = Utils.uuidFormater(routerUUID);\r
+            }\r
+            routerUUID = UUID.fromString(routerUUID).toString();\r
+            deleteRouter(routerUUID);\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            if (logicalRouter == null) {\r
+                LOGGER.info("Router deletion verified....");\r
+            } else {\r
+                LOGGER.error("Router deletion failed....");\r
+            }\r
+        } catch (IOException ex) {\r
+            LOGGER.error("Exception :    " + ex);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked when a router update is requested to indicate if the specified\r
+     * router can be changed using the specified delta.\r
+     *\r
+     * @param delta\r
+     *            Updates to the router object using patch semantics.\r
+     * @param router\r
+     *            An instance of the Neutron router object to be updated.\r
+     * @return A HTTP status code to the update request.\r
+     */\r
+    @Override\r
+    public int canUpdateRouter(NeutronRouter deltaRouter, NeutronRouter router) {\r
+        apiConnector = Activator.apiConnector;\r
+        if (deltaRouter == null || router == null) {\r
+            LOGGER.error("Neutron Router object can't be null..");\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        String networkUUID = null;\r
+        String routerUUID = router.getRouterUUID();\r
+        try {\r
+            if (deltaRouter.getExternalGatewayInfo() != null) {\r
+                networkUUID = deltaRouter.getExternalGatewayInfo().getNetworkID();\r
+                if (!(networkUUID.contains("-"))) {\r
+                    networkUUID = Utils.uuidFormater(networkUUID);\r
+                }\r
+                networkUUID = UUID.fromString(networkUUID).toString();\r
+            }\r
+        } catch (Exception ex) {\r
+            LOGGER.error("UUID input incorrect", ex);\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        try {\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            if (logicalRouter == null) {\r
+                LOGGER.warn("Router object not found..");\r
+                return HttpURLConnection.HTTP_NOT_FOUND;\r
+            }\r
+            return HttpURLConnection.HTTP_OK;\r
+        } catch (IOException ioEx) {\r
+            LOGGER.error("Exception :    " + ioEx);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to update the router\r
+     *\r
+     * @param deltaRouter\r
+     *            An instance of Router.\r
+     */\r
+    private int updateRouter(NeutronRouter neutronRouter) throws IOException {\r
+        try {\r
+            String routerUUID = neutronRouter.getRouterUUID();\r
+            String networkUUID = null;\r
+            if (!(routerUUID.contains("-"))) {\r
+                routerUUID = Utils.uuidFormater(routerUUID);\r
+            }\r
+            routerUUID = UUID.fromString(routerUUID).toString();\r
+            if (neutronRouter.getExternalGatewayInfo() != null) {\r
+                networkUUID = neutronRouter.getExternalGatewayInfo().getNetworkID();\r
+                if (!(networkUUID.contains("-"))) {\r
+                    networkUUID = Utils.uuidFormater(networkUUID);\r
+                }\r
+                networkUUID = UUID.fromString(networkUUID).toString();\r
+            }\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            String routerName = neutronRouter.getName();\r
+            logicalRouter.setDisplayName(routerName);\r
+            if (neutronRouter.getExternalGatewayInfo() != null) {\r
+                try {\r
+                    VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+                    logicalRouter.setVirtualNetwork(virtualNetwork);\r
+                } catch (IOException ex) {\r
+                    LOGGER.error("IOException  :    " + ex);\r
+                }\r
+            } else {\r
+                logicalRouter.clearVirtualNetwork();\r
+            }\r
+            boolean routerUpdate = apiConnector.update(logicalRouter);\r
+            if (!routerUpdate) {\r
+                LOGGER.warn("Router Updation failed..");\r
+                return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+            }\r
+            LOGGER.info("Router having UUID : " + logicalRouter.getUuid() + "  has been sucessfully updated...");\r
+            return HttpURLConnection.HTTP_OK;\r
+        } catch (Exception e) {\r
+            LOGGER.error("Exception :    " + e);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to take action after a router has been updated.\r
+     *\r
+     * @param router\r
+     *            An instance of modified Neutron router object.\r
+     */\r
+    @Override\r
+    public void neutronRouterUpdated(NeutronRouter updatedRouter) {\r
+        try {\r
+            String routerUUID = updatedRouter.getRouterUUID();\r
+            String networkUUID = null;\r
+            if (!(routerUUID.contains("-"))) {\r
+                routerUUID = Utils.uuidFormater(routerUUID);\r
+            }\r
+            routerUUID = UUID.fromString(routerUUID).toString();\r
+            if (updatedRouter.getExternalGatewayInfo() != null) {\r
+                networkUUID = updatedRouter.getExternalGatewayInfo().getNetworkID();\r
+                if (!(networkUUID.contains("-"))) {\r
+                    networkUUID = Utils.uuidFormater(networkUUID);\r
+                }\r
+                networkUUID = UUID.fromString(networkUUID).toString();\r
+            }\r
+            updateRouter(updatedRouter);\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            if (updatedRouter.getExternalGatewayInfo() != null) {\r
+                if (updatedRouter.getName().matches(logicalRouter.getDisplayName())\r
+                        && networkUUID.matches(logicalRouter.getVirtualNetwork().get(0).getUuid())) {\r
+                    LOGGER.info("Router updatation verified....");\r
+                } else {\r
+                    LOGGER.info("Router updatation failed....");\r
+                }\r
+            } else if (updatedRouter.getName().matches(logicalRouter.getDisplayName())) {\r
+                LOGGER.info("Router updatation verified....");\r
+            } else {\r
+                LOGGER.info("Router updatation failed....");\r
+            }\r
+        } catch (Exception ex) {\r
+            LOGGER.error("Exception :    " + ex);\r
+        }\r
+\r
+    }\r
+\r
+    /**\r
+     * Invoked to attach interface to the specified Neutron Router.\r
+     *\r
+     * @param router\r
+     *            An instance of new Neutron Router object.\r
+     *\r
+     * @param routerInterface\r
+     *            An instance of NeutronRouter_Interface object to be attached.\r
+     *\r
+     * @return A HTTP status code to the attach request.\r
+     */\r
+    @Override\r
+    public int canAttachInterface(NeutronRouter router, NeutronRouter_Interface routerInterface) {\r
+        apiConnector = Activator.apiConnector;\r
+        String portUUId = routerInterface.getPortUUID();\r
+        String routerUUId = router.getRouterUUID();\r
+        try {\r
+            if (!(portUUId.contains("-"))) {\r
+                portUUId = Utils.uuidFormater(portUUId);\r
+            }\r
+            if (!(routerUUId.contains("-"))) {\r
+                routerUUId = Utils.uuidFormater(routerUUId);\r
+            }\r
+            portUUId = UUID.fromString(portUUId).toString();\r
+            routerUUId = UUID.fromString(routerUUId).toString();\r
+        } catch (Exception ex) {\r
+            LOGGER.error("UUID input incorrect", ex);\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        return HttpURLConnection.HTTP_OK;\r
+    }\r
+\r
+    /**\r
+     * Invoked to take action after a router interface has been attached.\r
+     *\r
+     * @param router\r
+     *            An instance of new Neutron Router object.\r
+     *\r
+     * @param routerInterface\r
+     *            An instance of NeutronRouter_Interface object to be attached.\r
+     */\r
+    @Override\r
+    public void neutronRouterInterfaceAttached(NeutronRouter router, NeutronRouter_Interface routerInterface) {\r
+        String portUUId = routerInterface.getPortUUID();\r
+        String routerUUId = router.getRouterUUID();\r
+        VirtualMachineInterface virtualMachineInterface = null;\r
+        LogicalRouter logicalRouter = null;\r
+        try {\r
+            if (!(portUUId.contains("-"))) {\r
+                portUUId = Utils.uuidFormater(portUUId);\r
+            }\r
+            portUUId = UUID.fromString(portUUId).toString();\r
+            if (!(routerUUId.contains("-"))) {\r
+                routerUUId = Utils.uuidFormater(routerUUId);\r
+            }\r
+            routerUUId = UUID.fromString(routerUUId).toString();\r
+            logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUId);\r
+            virtualMachineInterface = (VirtualMachineInterface) apiConnector.findById(VirtualMachineInterface.class, portUUId);\r
+            if (virtualMachineInterface != null) {\r
+                logicalRouter.addVirtualMachineInterface(virtualMachineInterface);\r
+            }\r
+            // virtualMachineInterface.setDeviceOwner(); // TODO : Support needs\r
+            // to be added\r
+            // virtualMachineInterface.setDeviceId();\r
+            boolean updateVMI = apiConnector.update(virtualMachineInterface);\r
+            if (!updateVMI) {\r
+                LOGGER.warn("virtualMachineInterface updation failed..");\r
+            }\r
+            boolean interfaceAttached = apiConnector.update(logicalRouter);\r
+            if (!interfaceAttached) {\r
+                LOGGER.warn("Interface attachment failed..");\r
+            }\r
+            LOGGER.info("Interface : " + logicalRouter.getName() + "  having UUID : " + logicalRouter.getUuid() + "  sucessfully attached with "\r
+                    + logicalRouter.getVirtualMachineInterface());\r
+        } catch (IOException ioEx) {\r
+            LOGGER.error("IOException :   " + ioEx);\r
+        }\r
+\r
+        try {\r
+            if (logicalRouter.getVirtualMachineInterface() == null) {\r
+                List<ObjectReference<ApiPropertyBase>> virtualMachineInterfaceList = logicalRouter.getVirtualMachineInterface();\r
+                for (ObjectReference<ApiPropertyBase> vmiRef : virtualMachineInterfaceList) {\r
+                    String vmiUUID = vmiRef.getUuid();\r
+                    if (vmiUUID.equals(portUUId)) {\r
+                        LOGGER.info("Interface attachment verified to router...");\r
+                        break;\r
+                    } else {\r
+                        LOGGER.info("Interface attachment failed to router...");\r
+                    }\r
+                }\r
+            }\r
+        } catch (Exception ex) {\r
+            LOGGER.error("Exception :    " + ex);\r
+        }\r
+\r
+    }\r
+\r
+    /**\r
+     * Invoked to detach interface to the specified Neutron Router.\r
+     *\r
+     * @param router\r
+     *            An instance of new Neutron Router object.\r
+     *\r
+     * @param routerInterface\r
+     *            An instance of NeutronRouter_Interface object to be detached.\r
+     *\r
+     * @return A HTTP status code to the detach request.\r
+     */\r
+    @Override\r
+    public int canDetachInterface(NeutronRouter router, NeutronRouter_Interface routerInterface) {\r
+        apiConnector = Activator.apiConnector;\r
+        String portUUID = routerInterface.getPortUUID();\r
+        String routerUUID = router.getRouterUUID();\r
+        try {\r
+            if (!(portUUID.contains("-"))) {\r
+                portUUID = Utils.uuidFormater(portUUID);\r
+            }\r
+            portUUID = UUID.fromString(portUUID).toString();\r
+            if (!(routerUUID.contains("-"))) {\r
+                routerUUID = Utils.uuidFormater(routerUUID);\r
+            }\r
+            routerUUID = UUID.fromString(routerUUID).toString();\r
+        } catch (Exception ex) {\r
+            LOGGER.error("UUID input incorrect", ex);\r
+            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+        }\r
+        try {\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            if (logicalRouter != null) {\r
+                List<ObjectReference<ApiPropertyBase>> vmiList = logicalRouter.getVirtualMachineInterface();\r
+                if (vmiList != null) {\r
+                    for (ObjectReference<ApiPropertyBase> vmiRef : vmiList) {\r
+                        if (vmiRef.getUuid().matches(portUUID)) {\r
+                            return HttpURLConnection.HTTP_OK;\r
+                        } else {\r
+                            LOGGER.error("No interface attached with port ID " + portUUID);\r
+                            return HttpURLConnection.HTTP_BAD_REQUEST;\r
+                        }\r
+                    }\r
+                }\r
+            } else {\r
+                LOGGER.error("No router exists with specified UUID");\r
+                return HttpURLConnection.HTTP_NOT_FOUND;\r
+            }\r
+        } catch (IOException ioEx) {\r
+            LOGGER.error("IOException   : ", ioEx);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        } catch (Exception  ex) {\r
+            LOGGER.error("IOException   : ", ex);\r
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;\r
+        }\r
+        return HttpURLConnection.HTTP_OK;\r
+    }\r
+\r
+    /**\r
+     * Invoked to take action after a router interface has been detached.\r
+     *\r
+     * @param router\r
+     *            An instance of new Neutron Router object.\r
+     *\r
+     * @param routerInterface\r
+     *            An instance of NeutronRouter_Interface object to be attached.\r
+     */\r
+    @Override\r
+    public void neutronRouterInterfaceDetached(NeutronRouter router, NeutronRouter_Interface routerInterface) {\r
+        String portUUID = routerInterface.getPortUUID();\r
+        String routerUUID = router.getRouterUUID();\r
+        try {\r
+            if (!(portUUID.contains("-"))) {\r
+                portUUID = Utils.uuidFormater(portUUID);\r
+            }\r
+            portUUID = UUID.fromString(portUUID).toString();\r
+            if (!(routerUUID.contains("-"))) {\r
+                routerUUID = Utils.uuidFormater(routerUUID);\r
+            }\r
+            routerUUID = UUID.fromString(routerUUID).toString();\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            if (logicalRouter != null) {\r
+                List<ObjectReference<ApiPropertyBase>> vmiList = logicalRouter.getVirtualMachineInterface();\r
+                if (vmiList != null) {\r
+                    for (ObjectReference<ApiPropertyBase> vmiRef : vmiList) {\r
+                        if (vmiRef.getUuid().matches(portUUID)) {\r
+                            vmiList.remove(vmiRef);\r
+                            break;\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) apiConnector\r
+                    .findById(VirtualMachineInterface.class, portUUID);\r
+            // virtualMachineInterface.clearDeviceId(); //TODO - support to be\r
+            // added in OpenContrail\r
+            // virtualMachineInterface.clearDeviceId(); //TODO - support to be\r
+            // added in OpenContrail\r
+            boolean updateVMI = apiConnector.update(virtualMachineInterface);\r
+            if (!updateVMI) {\r
+                LOGGER.warn("virtualMachineInterface updation failed..");\r
+            }\r
+            boolean interfaceDetached = apiConnector.update(logicalRouter);\r
+            if (!interfaceDetached) {\r
+                LOGGER.warn("Interface detachment failed..");\r
+            }\r
+            LOGGER.info("Interface : " + logicalRouter.getName() + "  having UUID : " + logicalRouter.getUuid() + "  sucessfully detached from "\r
+                    + logicalRouter.getVirtualMachineInterface());\r
+        } catch (IOException e) {\r
+            LOGGER.error("IOException  :   " + e);\r
+        }\r
+        try {\r
+            // VirtualMachineInterface virtualMachineInterface =\r
+            // (VirtualMachineInterface)\r
+            // apiConnector.findById(VirtualMachineInterface.class, portUUID);\r
+            LogicalRouter logicalRouter = (LogicalRouter) apiConnector.findById(LogicalRouter.class, routerUUID);\r
+            if (logicalRouter.getVirtualMachineInterface() == null) {\r
+                List<ObjectReference<ApiPropertyBase>> virtualMachineInterfaceList = logicalRouter.getVirtualMachineInterface();\r
+                for (ObjectReference<ApiPropertyBase> vmiRef : virtualMachineInterfaceList) {\r
+                    String vmiUUID = vmiRef.getUuid();\r
+                    if (vmiUUID.equals(portUUID)) {\r
+                        LOGGER.info("Interface detachment failed...");\r
+                        break;\r
+                    } else {\r
+                        LOGGER.info("Interface detachment verified...");\r
+                    }\r
+                }\r
+            } else {\r
+                LOGGER.info("Interface detachment verified...");\r
+            }\r
+            // if(virtualMachineInterface.getVirtualMachine()==null &&\r
+            // virtualMachineInterface.getDeviceOwner==null){\r
+            // LOGGER.info("Interface detachment verified from router..." );\r
+            // }\r
+        } catch (Exception e) {\r
+            LOGGER.error("Exception   :    " + e);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Invoked to map the NeutronRouter object properties to the logicalRouter\r
+     * object.\r
+     * @param neutronRouter\r
+     *            An instance of new Neutron Router object.\r
+     * @param logicalRouter\r
+     *            An instance of new logicalRouter object.\r
+     * @return {@link logicalRouter}\r
+     */\r
+    private LogicalRouter mapRouterProperties(NeutronRouter neutronRouter, LogicalRouter logicalRouter) {\r
+        String routerUUID = neutronRouter.getRouterUUID();\r
+        String routerName = neutronRouter.getName();\r
+        String projectUUID = neutronRouter.getTenantID();\r
+        String networkUUID = null;\r
+        try {\r
+            if (!(projectUUID.contains("-"))) {\r
+                projectUUID = Utils.uuidFormater(projectUUID);\r
+            }\r
+            projectUUID = UUID.fromString(projectUUID).toString();\r
+\r
+            if (neutronRouter.getExternalGatewayInfo() != null) {\r
+                networkUUID = neutronRouter.getExternalGatewayInfo().getNetworkID();\r
+                if (!(networkUUID.contains("-"))) {\r
+                    networkUUID = Utils.uuidFormater(networkUUID);\r
+                }\r
+                networkUUID = UUID.fromString(networkUUID).toString();\r
+            }\r
+\r
+            if (!(routerUUID.contains("-"))) {\r
+                routerUUID = Utils.uuidFormater(routerUUID);\r
+            }\r
+            routerUUID = UUID.fromString(routerUUID).toString();\r
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);\r
+            logicalRouter.setParent(project);\r
+            logicalRouter.setUuid(routerUUID);\r
+            logicalRouter.setName(routerName);\r
+            logicalRouter.setDisplayName(routerName);\r
+            VirtualNetwork virtualNetwork = null;\r
+            if (networkUUID != null) {\r
+                try {\r
+                    virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);\r
+                    logicalRouter.setVirtualNetwork(virtualNetwork);\r
+                } catch (IOException ex) {\r
+                    LOGGER.error("IOException:    " + ex);\r
+                }\r
+            }\r
+        } catch (Exception ex) {\r
+            LOGGER.error("IOException      :    " + ex);\r
+        }\r
+        return logicalRouter;\r
+    }\r
+\r
+}
\ No newline at end of file
diff --git a/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/SecurityGroupHandler.java b/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/SecurityGroupHandler.java
new file mode 100644 (file)
index 0000000..aec37b0
--- /dev/null
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2014 Juniper Networks, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ */
+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.Project;
+import net.juniper.contrail.api.types.SecurityGroup;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityGroup;
+
+/**
+ * Handle requests for Security Group.
+ */
+public class SecurityGroupHandler implements INeutronSecurityGroupAware {
+    /**
+     * Logger instance.
+     */
+    static final Logger LOGGER = LoggerFactory.getLogger(SecurityGroupHandler.class);
+    static ApiConnector apiConnector;
+
+    /**
+     * Invoked when a security group creation is requested to check if the
+     * specified security group can be created
+     *
+     * @param securityGroup
+     *            An instance of proposed new Neutron SecurityGroup object.
+     *
+     * @return A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) {
+        apiConnector = Activator.apiConnector;
+        if (neutronSecurityGroup == null) {
+            LOGGER.error("SecurityGroup object can't be null..");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (neutronSecurityGroup.getSecurityGroupName() == null || neutronSecurityGroup.getSecurityGroupName().equals("")) {
+            LOGGER.error("SecurityGroup Name can't be null/empty...");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (neutronSecurityGroup.getSecurityGroupDescription() == null || neutronSecurityGroup.getSecurityGroupDescription().equals("")) {
+            LOGGER.error("SecurityGroup Description can't be null/empty...");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        if (neutronSecurityGroup.getSecurityGroupTenantID() == null) {
+            LOGGER.error("SecurityGroup TenantID can't be null...");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        LOGGER.debug("SecurityGroup object " + neutronSecurityGroup);
+        try {
+            String secGroupUUID = neutronSecurityGroup.getSecurityGroupUUID();
+            String projectID = neutronSecurityGroup.getSecurityGroupTenantID();
+            try {
+                if (!(secGroupUUID.contains("-"))) {
+                    secGroupUUID = Utils.uuidFormater(secGroupUUID);
+                }
+                if (!(projectID.contains("-"))) {
+                    projectID = Utils.uuidFormater(projectID);
+                }
+                boolean isValidSecurityGroupUUID = Utils.isValidHexNumber(secGroupUUID);
+                boolean isValidprojectUUID = Utils.isValidHexNumber(projectID);
+                if (!isValidSecurityGroupUUID || !isValidprojectUUID) {
+                    LOGGER.info("Badly formed Hexadecimal UUID...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
+                }
+                secGroupUUID = UUID.fromString(secGroupUUID).toString();
+                projectID = UUID.fromString(projectID).toString();
+            } catch (Exception ex) {
+                LOGGER.error("UUID input incorrect", ex);
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            SecurityGroup securityGroup = (SecurityGroup) apiConnector.findById(SecurityGroup.class, secGroupUUID);
+            if (securityGroup != null) {
+                LOGGER.warn("SecurityGroup already exists..");
+                return HttpURLConnection.HTTP_FORBIDDEN;
+            }
+            Project project = (Project) apiConnector.findById(Project.class, projectID);
+            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, projectID);
+                if (project == null) {
+                    LOGGER.error("Could not find projectUUID...");
+                    return HttpURLConnection.HTTP_NOT_FOUND;
+                }
+            }
+            String securityGroupByName = apiConnector.findByName(SecurityGroup.class, project, neutronSecurityGroup.getSecurityGroupName());
+            if (securityGroupByName != null) {
+                LOGGER.warn("SecurityGroup already exists with UUID : " + securityGroupByName);
+                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 create a Security Group and take action after the Security
+     * Group has been created.
+     *
+     * @param neutronSecurityGroup
+     *            An instance of new {@link NeutronSecurityGroup} object.
+     */
+    @Override
+    public void neutronSecurityGroupCreated(NeutronSecurityGroup neutronSecurityGroup) {
+        try {
+            String secGroupUUID = neutronSecurityGroup.getSecurityGroupUUID();
+            if (!(secGroupUUID.contains("-"))) {
+                secGroupUUID = Utils.uuidFormater(secGroupUUID);
+            }
+            createSecurityGroup(neutronSecurityGroup);
+            SecurityGroup securityGroup = (SecurityGroup) apiConnector.findById(SecurityGroup.class, secGroupUUID);
+            if (securityGroup != null) {
+                LOGGER.info("SecurityGroup creation verified....");
+            } else {
+                LOGGER.info("SecurityGroup creation failed....");
+            }
+        } catch (Exception e) {
+            LOGGER.error("Exception :     " + e);
+        }
+    }
+
+    /**
+     * Invoked to create the specified Neutron Security Group.
+     *
+     * @param security
+     *            Group An instance of new NeutronSecurityGroup object.
+     */
+    private void createSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) throws IOException {
+        // map neutronSecurityGroup to securityGroup
+        SecurityGroup securityGroup = mapSecurityGroupProperties(neutronSecurityGroup);
+        boolean securityGroupCreated;
+        try {
+            securityGroupCreated = apiConnector.create(securityGroup);
+            LOGGER.debug("SecurityGroupCreated:   " + securityGroupCreated);
+            if (!securityGroupCreated) {
+                LOGGER.warn("SecurityGroup creation failed..");
+            }
+        } catch (IOException ioEx) {
+            LOGGER.error("Exception : " + ioEx);
+        }
+        LOGGER.info("SecurityGroup : " + securityGroup.getName() + "  having UUID : " + securityGroup.getUuid() + "  sucessfully created...");
+    }
+
+    /**
+     * Invoked to map the NeutronSecurityGroup object properties to the neutron
+     * security Group object.
+     *
+     * @param neutronSecurityGroup
+     *            An instance of new Neutron SecurityGroup object.
+     * @param securityGroup
+     *            An instance of new securityGroup object.
+     * @return {@link securityGroup}
+     */
+    private SecurityGroup mapSecurityGroupProperties(NeutronSecurityGroup neutronSecurityGroup) {
+        SecurityGroup securityGroup = new SecurityGroup();
+        try {
+            String secGroupUUID = neutronSecurityGroup.getSecurityGroupUUID();
+            String projectUUID = neutronSecurityGroup.getSecurityGroupTenantID();
+            if (!(secGroupUUID.contains("-"))) {
+                secGroupUUID = Utils.uuidFormater(secGroupUUID);
+            }
+            secGroupUUID = UUID.fromString(secGroupUUID).toString();
+            if (!(projectUUID.contains("-"))) {
+                projectUUID = Utils.uuidFormater(projectUUID);
+            }
+            projectUUID = UUID.fromString(projectUUID).toString();
+            Project project = (Project) apiConnector.findById(Project.class, projectUUID);
+            securityGroup.setParent(project);
+            securityGroup.setName(neutronSecurityGroup.getSecurityGroupName());
+            securityGroup.setDisplayName(neutronSecurityGroup.getSecurityGroupName());
+            securityGroup.setUuid(secGroupUUID);
+        } catch (Exception ex) {
+            LOGGER.error("Exception  :  ", ex);
+        }
+        return securityGroup;
+    }
+
+    /**
+     * Invoked when a security group update is requested to indicate if the
+     * specified Security Group can be changed using the specified delta.
+     *
+     * @param deltaSecurityGroup
+     *            Updates to the {@link NeutronSecurityGroup} object using patch
+     *            semantics.
+     * @param originalSecurityGroup
+     *            An instance of the {@link NeutronSecurityGroup} object to be
+     *            updated.
+     * @return A HTTP status code to the update request.
+     */
+    @Override
+    public int canUpdateNeutronSecurityGroup(NeutronSecurityGroup deltaSecurityGroup, NeutronSecurityGroup originalSecurityGroup) {
+        apiConnector = Activator.apiConnector;
+        if (deltaSecurityGroup == null || originalSecurityGroup == null) {
+            LOGGER.error("Neutron SecurityGroup can't be null..");
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        String secGroupUUID = originalSecurityGroup.getSecurityGroupUUID();
+        try {
+            if (!(secGroupUUID.contains("-"))) {
+                secGroupUUID = Utils.uuidFormater(secGroupUUID);
+            }
+            secGroupUUID = UUID.fromString(secGroupUUID).toString();
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            SecurityGroup securityGroup = (SecurityGroup) apiConnector.findById(SecurityGroup.class, secGroupUUID);
+            if (securityGroup == null) {
+                LOGGER.warn("SecurityGroup does not exist for the specified UUID..");
+                return HttpURLConnection.HTTP_NOT_FOUND;
+            }
+            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 update a Security Group and take action after the Security
+     * group has been updated.
+     *
+     * @param updatedSecurityGroup
+     *            An instance of modified {@link NeutronSecurityGroup} object.
+     */
+    @Override
+    public void neutronSecurityGroupUpdated(NeutronSecurityGroup updatedSecurityGroup) {
+        try {
+            String secGroupUUID = updatedSecurityGroup.getSecurityGroupUUID();
+            if (!(secGroupUUID.contains("-"))) {
+                secGroupUUID = Utils.uuidFormater(secGroupUUID);
+            }
+            secGroupUUID = UUID.fromString(secGroupUUID).toString();
+            updateSecurityGroup(updatedSecurityGroup);
+            SecurityGroup securityGroup = (SecurityGroup) apiConnector.findById(SecurityGroup.class, secGroupUUID);
+            if (securityGroup.getDisplayName().matches(updatedSecurityGroup.getSecurityGroupName())) {
+                LOGGER.info("SecurityGroup updatation verified....");
+            } else {
+                LOGGER.info("SecurityGroup updatation failed....");
+            }
+        } catch (Exception ex) {
+            LOGGER.error("Exception :" + ex);
+        }
+    }
+
+    /**
+     * Invoked to update the securityGroup
+     *
+     * @param neutronSecurityGroup
+     *            An instance of securityGroup.
+     */
+    private void updateSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) throws IOException {
+        String secGroupUUID = neutronSecurityGroup.getSecurityGroupUUID();
+        try {
+            if (!(secGroupUUID.contains("-"))) {
+                secGroupUUID = Utils.uuidFormater(secGroupUUID);
+            }
+            secGroupUUID = UUID.fromString(secGroupUUID).toString();
+            SecurityGroup securityGroup = (SecurityGroup) apiConnector.findById(SecurityGroup.class, secGroupUUID);
+            securityGroup.setDisplayName(neutronSecurityGroup.getSecurityGroupName());
+            boolean securityGroupUpdate;
+            securityGroupUpdate = apiConnector.update(securityGroup);
+            if (!securityGroupUpdate) {
+                LOGGER.warn("SecurityGroup Updation failed..");
+            } else {
+                LOGGER.info("SecurityGroup having UUID : " + securityGroup.getUuid() + "  has been sucessfully updated...");
+            }
+        } catch (IOException ioEx) {
+            LOGGER.error("Exception  :  " + ioEx);
+        } catch (Exception ex) {
+            LOGGER.warn("Exception  :  " + ex);
+        }
+    }
+
+    /**
+     * Invoked when a security group deletion is requested to indicate if the
+     * specified neutron security group can be deleted.
+     *
+     * @param neutronSecurityGroup
+     *            An instance of the {@link NeutronSecurityGroup} object to be
+     *            deleted.
+     *
+     * @return A HTTP status code to the deletion request.
+     */
+    @Override
+    public int canDeleteNeutronSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) {
+        apiConnector = Activator.apiConnector;
+        String secGroupUUID = neutronSecurityGroup.getSecurityGroupUUID();
+        try {
+            if (!(secGroupUUID.contains("-"))) {
+                secGroupUUID = Utils.uuidFormater(secGroupUUID);
+            }
+            secGroupUUID = UUID.fromString(secGroupUUID).toString();
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            SecurityGroup securityGroup = (SecurityGroup) apiConnector.findById(SecurityGroup.class, secGroupUUID);
+            if (securityGroup == null) {
+                LOGGER.warn("SecurityGroup does not exist for the specified UUID..");
+                return HttpURLConnection.HTTP_NOT_FOUND;
+            } else {
+                if (securityGroup.getVirtualMachineInterfaceBackRefs() != null) {
+                    LOGGER.info("SecurityGroup with UUID :  " + secGroupUUID + " cannot be deleted as it has port(s) associated with it....");
+                    return HttpURLConnection.HTTP_FORBIDDEN;
+                }
+                return HttpURLConnection.HTTP_OK;
+            }
+        } catch (Exception e) {
+            LOGGER.error("Exception : " + e);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
+        }
+    }
+
+    /**
+     * Invoked to delete a {@link NeutronSecurityGroup} and take action after
+     * the {@link NeutronSecurityGroup} has been deleted.
+     *
+     * @param neutronSecurityGroup
+     *            An instance of deleted {@link NeutronSecurityGroup} object.
+     */
+    @Override
+    public void neutronSecurityGroupDeleted(NeutronSecurityGroup neutronSecurityGroup) {
+        String secGroupUUID = neutronSecurityGroup.getSecurityGroupUUID();
+        try {
+            if (!(secGroupUUID.contains("-"))) {
+                secGroupUUID = Utils.uuidFormater(secGroupUUID);
+            }
+            secGroupUUID = UUID.fromString(secGroupUUID).toString();
+            SecurityGroup securityGroup = (SecurityGroup) apiConnector.findById(SecurityGroup.class, secGroupUUID);
+            apiConnector.delete(securityGroup);
+            LOGGER.info("SecurityGroup with UUID :  " + secGroupUUID + "  has been deleted successfully....");
+            securityGroup = (SecurityGroup) apiConnector.findById(SecurityGroup.class, secGroupUUID);
+            if (securityGroup == null) {
+                LOGGER.info("SecurityGroup deletion verified....");
+            } else {
+                LOGGER.info("SecurityGroup deletion failed....");
+            }
+        } catch (Exception e) {
+            LOGGER.error("Exception :   " + e);
+        }
+    }
+
+}
index d43b28480579d4015aa55e1e51d5de35083973b8..706c7fb42affe0cb0aefb93dc7f6a91a430bdd27 100755 (executable)
@@ -12,6 +12,7 @@ import java.io.IOException;
 import java.net.HttpURLConnection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.UUID;
 
 import net.juniper.contrail.api.ApiConnector;
 import net.juniper.contrail.api.ObjectReference;
@@ -20,7 +21,6 @@ import net.juniper.contrail.api.types.SubnetType;
 import net.juniper.contrail.api.types.VirtualNetwork;
 import net.juniper.contrail.api.types.VnSubnetsType;
 import net.juniper.contrail.api.types.VnSubnetsType.IpamSubnetType;
-//import net.juniper.contrail.api.types.VnSubnetsType.IpamSubnetType.AllocationPoolType;
 
 import org.apache.commons.net.util.SubnetUtils;
 import org.apache.commons.net.util.SubnetUtils.SubnetInfo;
@@ -66,8 +66,29 @@ public class SubnetHandler implements INeutronSubnetAware {
             LOGGER.error("Incorrect gateway IP....");
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
+        String networkUUID = subnet.getNetworkUUID();
+        String subnetUUID = subnet.getSubnetUUID();
         try {
-            virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, subnet.getNetworkUUID());
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
+            }
+            if (!(subnetUUID.contains("-"))) {
+                subnetUUID = Utils.uuidFormater(subnetUUID);
+            }
+            boolean isValidNetworkUUID = Utils.isValidHexNumber(networkUUID);
+            boolean isValidSubnetUUID = Utils.isValidHexNumber(subnetUUID);
+            if (!isValidNetworkUUID || !isValidSubnetUUID) {
+                LOGGER.info("Badly formed Hexadecimal UUID...");
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+            networkUUID = UUID.fromString(networkUUID).toString();
+            subnetUUID = UUID.fromString(subnetUUID).toString();
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+            return HttpURLConnection.HTTP_BAD_REQUEST;
+        }
+        try {
+            virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
         } catch (IOException e) {
             LOGGER.error("Exception : " + e);
             return HttpURLConnection.HTTP_INTERNAL_ERROR;
@@ -82,14 +103,11 @@ public class SubnetHandler implements INeutronSubnetAware {
                     LOGGER.error("The subnet already exists..");
                     return HttpURLConnection.HTTP_FORBIDDEN;
                 }
-                return createSubnet(subnet, virtualnetwork);
-            } catch (IOException ie) {
-                LOGGER.error("IOException:     " + ie);
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
             } catch (Exception e) {
                 LOGGER.error("Exception:  " + e);
                 return HttpURLConnection.HTTP_INTERNAL_ERROR;
             }
+            return HttpURLConnection.HTTP_OK;
         }
     }
 
@@ -122,15 +140,27 @@ public class SubnetHandler implements INeutronSubnetAware {
      */
     @Override
     public void neutronSubnetCreated(NeutronSubnet subnet) {
-        VirtualNetwork virtualNetwork = null;
+        String networkUUID = subnet.getNetworkUUID();
+        String subnetUUID = subnet.getSubnetUUID();
         try {
-            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, subnet.getNetworkUUID());
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
+            }
+            networkUUID = UUID.fromString(networkUUID).toString();
+            if (!(subnetUUID.contains("-"))) {
+                subnetUUID = Utils.uuidFormater(subnetUUID);
+            }
+            subnetUUID = UUID.fromString(subnetUUID).toString();
+            createSubnet(subnet);
+            VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
             boolean ifSubnetExists = subnetExists(virtualNetwork.getNetworkIpam(), subnet);
             if (ifSubnetExists) {
                 LOGGER.info("Subnet creation verified...");
             }
-        } catch (Exception e) {
-            LOGGER.error("Exception :    " + e);
+        } catch (IOException ie) {
+            LOGGER.error("IOException :   " + ie);
+        } catch (Exception ex) {
+            LOGGER.error("Exception :   ", ex);
         }
     }
 
@@ -144,20 +174,33 @@ public class SubnetHandler implements INeutronSubnetAware {
      *
      * @return A HTTP status code to the creation request.
      */
-    private int createSubnet(NeutronSubnet subnet, VirtualNetwork virtualNetwork) throws IOException {
+    private void createSubnet(NeutronSubnet subnet) throws IOException {
         // add subnet properties to the virtual-network object
-        VirtualNetwork virtualnetwork = mapSubnetProperties(subnet, virtualNetwork);
-        boolean subnetCreate = apiConnector.update(virtualnetwork);
-        if (!subnetCreate) {
-            LOGGER.warn("Subnet creation failed..");
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        } else {
-            LOGGER.info("Subnet " + subnet.getCidr() + " sucessfully added to the network having UUID : " + virtualnetwork.getUuid());
-            return HttpURLConnection.HTTP_OK;
+        String networkUUID = subnet.getNetworkUUID();
+        try {
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
+            }
+            networkUUID = UUID.fromString(networkUUID).toString();
+        } catch (Exception ex) {
+            LOGGER.error("UUID input incorrect", ex);
+        }
+        try {
+            VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+            virtualNetwork = mapSubnetProperties(subnet, virtualNetwork);
+            boolean subnetCreate = apiConnector.update(virtualNetwork);
+            if (!subnetCreate) {
+                LOGGER.warn("Subnet creation failed..");
+            } else {
+                LOGGER.info("Subnet " + subnet.getCidr() + " sucessfully added to the network having UUID : " + virtualNetwork.getUuid());
+            }
+        } catch (IOException ioEx) {
+            LOGGER.error("IOException   : ", ioEx);
+        } catch (Exception ex) {
+            LOGGER.error("IOException   : ", ex);
         }
     }
 
-
     /**
      * Invoked to add the NeutronSubnet properties to the virtualNetwork object.
      *
@@ -169,11 +212,20 @@ public class SubnetHandler implements INeutronSubnetAware {
      * @return {@link VirtualNetwork}
      */
     private VirtualNetwork mapSubnetProperties(NeutronSubnet subnet, VirtualNetwork vn) {
+        String subnetUUID = subnet.getSubnetUUID();
         String[] ipPrefix = null;
         NetworkIpam ipam = null;
         VnSubnetsType vnSubnetsType = new VnSubnetsType();
         SubnetType subnetType = new SubnetType();
         try {
+            try {
+                if (!(subnetUUID.contains("-"))) {
+                    subnetUUID = Utils.uuidFormater(subnetUUID);
+                }
+                subnetUUID = UUID.fromString(subnetUUID).toString();
+            } catch (Exception ex) {
+                LOGGER.error("UUID input incorrect", ex);
+            }
             if (subnet.getCidr().contains("/")) {
                 ipPrefix = subnet.getCidr().split("/");
             } else {
@@ -190,14 +242,12 @@ public class SubnetHandler implements INeutronSubnetAware {
         if (ipPrefix != null) {
             subnetType.setIpPrefix(ipPrefix[0]);
             subnetType.setIpPrefixLen(Integer.valueOf(ipPrefix[1]));
-//            AllocationPoolType allocationPoolType = (AllocationPoolType) subnet.getAllocationPools();
             IpamSubnetType ipamSubnetType = new IpamSubnetType();
             ipamSubnetType.setSubnet(subnetType);
             ipamSubnetType.setDefaultGateway(subnet.getGatewayIP());
-            ipamSubnetType.setSubnetUuid(subnet.getSubnetUUID());
+            ipamSubnetType.setSubnetUuid(subnetUUID);
             ipamSubnetType.setSubnetName(subnet.getName());
             ipamSubnetType.setEnableDhcp(subnet.isEnableDHCP());
-//            ipamSubnetType.addAllocationPools(allocationPoolType);
             if (vn.getNetworkIpam() != null) {
                 for (ObjectReference<VnSubnetsType> ref : vn.getNetworkIpam()) {
                     vnSubnetsType = ref.getAttr();
@@ -247,20 +297,35 @@ public class SubnetHandler implements INeutronSubnetAware {
             LOGGER.error("Neutron Subnets can't be null..");
             return HttpURLConnection.HTTP_BAD_REQUEST;
         }
-//        if (deltaSubnet.getGatewayIP() == null || ("").equals(deltaSubnet.getGatewayIP().toString())) {
-//            LOGGER.error("Gateway IP can't be empty/null`..");
-//            return HttpURLConnection.HTTP_BAD_REQUEST;
-//        }
-        if (deltaSubnet.getGatewayIP() != null){
-        boolean isvalidGateway = validGatewayIP(originalSubnet, deltaSubnet.getGatewayIP());
-        if (!isvalidGateway) {
-            LOGGER.error("Incorrect gateway IP....");
-            return HttpURLConnection.HTTP_BAD_REQUEST;
-        }}
+        // if (deltaSubnet.getGatewayIP() == null ||
+        // ("").equals(deltaSubnet.getGatewayIP().toString())) {
+        // LOGGER.error("Gateway IP can't be empty/null`..");
+        // return HttpURLConnection.HTTP_BAD_REQUEST;
+        // }
+        if (deltaSubnet.getGatewayIP() != null) { // cant update gateway IP in
+                                                  // OpenContrail
+            if (!originalSubnet.getGatewayIP().matches(deltaSubnet.getGatewayIP())) {
+                // boolean isvalidGateway = validGatewayIP(originalSubnet,
+                // deltaSubnet.getGatewayIP());
+                // if (!isvalidGateway) {
+                LOGGER.error(" Cannot update gateway IP..");
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            }
+        }
         apiConnector = Activator.apiConnector;
+        VirtualNetwork virtualnetwork;
         try {
-            boolean ifSubnetExist = false;
-            VirtualNetwork virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, originalSubnet.getNetworkUUID());
+            String networkUUID = originalSubnet.getNetworkUUID();
+            String subnetUUID = originalSubnet.getSubnetUUID();
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
+            }
+            networkUUID = UUID.fromString(networkUUID).toString();
+            if (!(subnetUUID.contains("-"))) {
+                subnetUUID = Utils.uuidFormater(subnetUUID);
+            }
+            subnetUUID = UUID.fromString(subnetUUID).toString();
+            virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
             List<ObjectReference<VnSubnetsType>> ipamRefs = virtualnetwork.getNetworkIpam();
             if (ipamRefs != null) {
                 for (ObjectReference<VnSubnetsType> ref : ipamRefs) {
@@ -268,40 +333,23 @@ public class SubnetHandler implements INeutronSubnetAware {
                     if (vnSubnetsType != null) {
                         List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetsType.getIpamSubnets();
                         for (VnSubnetsType.IpamSubnetType subnetValue : subnets) {
-                            boolean doesSubnetExist = subnetValue.getSubnetUuid().matches(originalSubnet.getSubnetUUID());
+                            boolean doesSubnetExist = subnetValue.getSubnetUuid().matches(subnetUUID);
                             if (doesSubnetExist) {
-                                if(deltaSubnet.getGatewayIP() != null){
-                                subnetValue.setDefaultGateway(deltaSubnet.getGatewayIP());
-                                }
-                                if(deltaSubnet.getEnableDHCP() != null){
-                                    subnetValue.setEnableDhcp(deltaSubnet.isEnableDHCP());
-                                }
-                                if(deltaSubnet.getName() != null){
-                                    subnetValue.setSubnetName(deltaSubnet.getName());
-                                }
-                                ifSubnetExist = true;
+                                return HttpURLConnection.HTTP_OK;
+                            } else {
+                                LOGGER.warn(" No subnet exists for specified UUID..");
+                                return HttpURLConnection.HTTP_BAD_REQUEST;
                             }
                         }
                     }
                 }
             }
-            if (ifSubnetExist) {
-                boolean subnetUpdate = apiConnector.update(virtualnetwork);
-                if (!subnetUpdate) {
-                    LOGGER.warn("Subnet upadtion failed..");
-                    return HttpURLConnection.HTTP_INTERNAL_ERROR;
-                } else {
-                    LOGGER.info(" Subnet " + originalSubnet.getCidr() + " sucessfully updated. ");
-                    return HttpURLConnection.HTTP_OK;
-                }
-            } else {
-                LOGGER.warn("Subnet upadtion failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            }
         } catch (IOException e) {
             LOGGER.error("Exception :     " + e);
             return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
+        LOGGER.warn("Subnet updation failed..");
+        return HttpURLConnection.HTTP_BAD_REQUEST;
     }
 
     /**
@@ -314,7 +362,17 @@ public class SubnetHandler implements INeutronSubnetAware {
     public void neutronSubnetUpdated(NeutronSubnet subnet) {
         try {
             boolean ifSubnetExist = false;
-            VirtualNetwork virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, subnet.getNetworkUUID());
+            String networkUUID = subnet.getNetworkUUID();
+            String subnetUUID = subnet.getSubnetUUID();
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
+            }
+            networkUUID = UUID.fromString(networkUUID).toString();
+            if (!(subnetUUID.contains("-"))) {
+                subnetUUID = Utils.uuidFormater(subnetUUID);
+            }
+            subnetUUID = UUID.fromString(subnetUUID).toString();
+            VirtualNetwork virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
             List<ObjectReference<VnSubnetsType>> ipamRefs = virtualnetwork.getNetworkIpam();
             if (ipamRefs != null) {
                 for (ObjectReference<VnSubnetsType> ref : ipamRefs) {
@@ -322,8 +380,19 @@ public class SubnetHandler implements INeutronSubnetAware {
                     if (vnSubnetsType != null) {
                         List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetsType.getIpamSubnets();
                         for (VnSubnetsType.IpamSubnetType subnetValue : subnets) {
-                            boolean doesSubnetExist = subnetValue.getDefaultGateway().matches(subnet.getGatewayIP());
+                            boolean doesSubnetExist = subnetValue.getSubnetUuid().matches(subnetUUID);
                             if (doesSubnetExist) {
+                                // if(deltaSubnet.getGatewayIP() != null){
+                                // //Cannot update default gateway, enableDHCP
+                                // and cidr
+                                // subnetValue.setDefaultGateway(deltaSubnet.getGatewayIP());
+                                // }
+                                // if(deltaSubnet.getEnableDHCP() != null){
+                                // subnetValue.setEnableDhcp(deltaSubnet.isEnableDHCP());
+                                // }
+                                if (subnet.getName() != null) {
+                                    subnetValue.setSubnetName(subnet.getName());
+                                }
                                 ifSubnetExist = true;
                             }
                         }
@@ -331,10 +400,33 @@ public class SubnetHandler implements INeutronSubnetAware {
                 }
             }
             if (ifSubnetExist) {
-                LOGGER.info("Subnet upadtion verified..");
+                boolean subnetUpdate = apiConnector.update(virtualnetwork);
+                if (!subnetUpdate) {
+                    LOGGER.warn("Subnet upadtion failed..");
+                } else {
+                    LOGGER.info(" Subnet " + subnet.getCidr() + " has been sucessfully updated. ");
+                }
             } else {
                 LOGGER.warn("Subnet upadtion failed..");
             }
+            virtualnetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+            List<ObjectReference<VnSubnetsType>> ipamRef = virtualnetwork.getNetworkIpam();
+            if (ipamRef != null) {
+                for (ObjectReference<VnSubnetsType> ref : ipamRef) {
+                    VnSubnetsType vnSubnetsType = ref.getAttr();
+                    if (vnSubnetsType != null) {
+                        List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetsType.getIpamSubnets();
+                        for (VnSubnetsType.IpamSubnetType subnetValue : subnets) {
+                            boolean isSubnetUpdated = subnetValue.getSubnetName().matches(subnet.getName());
+                            if (isSubnetUpdated) {
+                                LOGGER.info("Subnet upadtion verified..");
+                            } else {
+                                LOGGER.warn("Subnet upadtion failed..");
+                            }
+                        }
+                    }
+                }
+            }
         } catch (Exception ex) {
             LOGGER.error("Exception :     " + ex);
         }
@@ -353,44 +445,34 @@ public class SubnetHandler implements INeutronSubnetAware {
     public int canDeleteSubnet(NeutronSubnet subnet) {
         apiConnector = Activator.apiConnector;
         VirtualNetwork virtualNetwork = null;
+        String networkUUID = subnet.getNetworkUUID();
+        String subnetUUID = subnet.getSubnetUUID();
         try {
-            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, subnet.getNetworkUUID());
-            boolean subnetDelete = deleteSubnet(subnet, virtualNetwork);
-            if (!subnetDelete) {
-                LOGGER.error("Subnet deletion failed..");
-                return HttpURLConnection.HTTP_INTERNAL_ERROR;
-            } else {
-                LOGGER.info("Subnet " + subnet.getCidr() + " sucessfully deleted from network  : " + virtualNetwork.getUuid());
-                return HttpURLConnection.HTTP_NO_CONTENT;
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
             }
-        } catch (Exception e) {
-            LOGGER.error("Exception :     ", e.getMessage());
-            return HttpURLConnection.HTTP_INTERNAL_ERROR;
-        }
-    }
-
-    boolean validGatewayIP(NeutronSubnet subnet, String ipAddress) {
-        try {
-
-            SubnetUtils util = new SubnetUtils(subnet.getCidr());
-            SubnetInfo info = util.getInfo();
-            boolean inRange = info.isInRange(ipAddress);
-            if (!inRange) {
-                return false;
-            } else {
-                // ip available in allocation pool
-                Iterator<NeutronSubnet_IPAllocationPool> i = subnet.getAllocationPools().iterator();
-                while (i.hasNext()) {
-                    NeutronSubnet_IPAllocationPool pool = i.next();
-                    if (pool.contains(ipAddress)) {
-                        return true;
-                    }
+            networkUUID = UUID.fromString(networkUUID).toString();
+            if (!(subnetUUID.contains("-"))) {
+                subnetUUID = Utils.uuidFormater(subnetUUID);
+            }
+            subnetUUID = UUID.fromString(subnetUUID).toString();
+            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+            boolean doesSubnetExist = subnetExists(virtualNetwork.getNetworkIpam(), subnet);
+            if(virtualNetwork.getNetworkIpam()!=null){
+                if (virtualNetwork.getNetworkIpam().get(0).getAttr().getIpamSubnets().size() == 1 && virtualNetwork.getFloatingIpPools() != null) {
+                    LOGGER.error("Cannot Delete subnet / IP Block, Floating Pool(s) in use...");
+                    return HttpURLConnection.HTTP_BAD_REQUEST;
                 }
-                return true;
+                }
+            if (!doesSubnetExist) {
+                LOGGER.error("No subnet exists with specified UUID...");
+                return HttpURLConnection.HTTP_BAD_REQUEST;
+            } else {
+                return HttpURLConnection.HTTP_OK;
             }
-        } catch (Exception e) {
-            LOGGER.error("Exception  :  " + e);
-            return false;
+        } catch (Exception ex) {
+            LOGGER.error("Exception :     " + ex);
+            return HttpURLConnection.HTTP_INTERNAL_ERROR;
         }
     }
 
@@ -461,8 +543,27 @@ public class SubnetHandler implements INeutronSubnetAware {
      */
     @Override
     public void neutronSubnetDeleted(NeutronSubnet subnet) {
+        String networkUUID = subnet.getNetworkUUID();
+        String subnetUUID = subnet.getSubnetUUID();
+        VirtualNetwork virtualNetwork;
         try {
-            VirtualNetwork virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, subnet.getNetworkUUID());
+            if (!(networkUUID.contains("-"))) {
+                networkUUID = Utils.uuidFormater(networkUUID);
+            }
+            networkUUID = UUID.fromString(networkUUID).toString();
+            if (!(subnetUUID.contains("-"))) {
+                subnetUUID = Utils.uuidFormater(subnetUUID);
+            }
+            subnetUUID = UUID.fromString(subnetUUID).toString();
+            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
+            boolean subnetDelete = deleteSubnet(subnet, virtualNetwork);
+            if (!subnetDelete) {
+                LOGGER.error("Subnet deletion failed..");
+            } else {
+                LOGGER.info("Subnet " + subnet.getCidr() + " sucessfully deleted from network  : " + virtualNetwork.getUuid());
+            }
+
+            virtualNetwork = (VirtualNetwork) apiConnector.findById(VirtualNetwork.class, networkUUID);
             boolean ifSubnetExist = subnetExists(virtualNetwork.getNetworkIpam(), subnet);
             if (!ifSubnetExist) {
                 LOGGER.info("Subnet deletion verified..");
@@ -473,4 +574,29 @@ public class SubnetHandler implements INeutronSubnetAware {
             LOGGER.error("Exception :    " + ex);
         }
     }
-}
+
+    boolean validGatewayIP(NeutronSubnet subnet, String ipAddress) {
+        try {
+
+            SubnetUtils util = new SubnetUtils(subnet.getCidr());
+            SubnetInfo info = util.getInfo();
+            boolean inRange = info.isInRange(ipAddress);
+            if (!inRange) {
+                return false;
+            } else {
+                // ip available in allocation pool
+                Iterator<NeutronSubnet_IPAllocationPool> i = subnet.getAllocationPools().iterator();
+                while (i.hasNext()) {
+                    NeutronSubnet_IPAllocationPool pool = i.next();
+                    if (pool.contains(ipAddress)) {
+                        return true;
+                    }
+                }
+                return true;
+            }
+        } catch (Exception e) {
+            LOGGER.error("Exception  :  " + e);
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/Utils.java b/neutron/src/main/java/org/opendaylight/plugin2oc/neutron/Utils.java
new file mode 100644 (file)
index 0000000..8662087
--- /dev/null
@@ -0,0 +1,64 @@
+/*\r
+ * Copyright (C) 2014 Juniper Networks, Inc.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ */\r
+package org.opendaylight.plugin2oc.neutron;\r
+\r
+import java.util.regex.Pattern;\r
+\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+public class Utils {\r
+\r
+    static final Logger LOGGER = LoggerFactory.getLogger(Utils.class);\r
+\r
+    /**\r
+     * Invoked to format the UUID if UUID is not in correct format.\r
+     *\r
+     * @param String\r
+     *            An instance of UUID string.\r
+     *\r
+     * @return Correctly formated UUID string.\r
+     */\r
+    public static String uuidFormater(String uuid) {\r
+        String uuidPattern = null;\r
+        String id1 = uuid.substring(0, 8);\r
+        String id2 = uuid.substring(8, 12);\r
+        String id3 = uuid.substring(12, 16);\r
+        String id4 = uuid.substring(16, 20);\r
+        String id5 = uuid.substring(20, 32);\r
+        uuidPattern = (id1 + "-" + id2 + "-" + id3 + "-" + id4 + "-" + id5);\r
+        return uuidPattern;\r
+    }\r
+    /**\r
+     * Invoked to check the UUID if UUID is not a valid hexa-decimal number.\r
+     *\r
+     * @param String\r
+     *            An instance of UUID string.\r
+     *\r
+     * @return boolean value.\r
+     */\r
+    public static boolean isValidHexNumber(String uuid) {\r
+        try {\r
+            Pattern hex = Pattern.compile("^[0-9a-f]+$");\r
+            uuid = uuid.replaceAll("-", "");\r
+            boolean valid = hex.matcher(uuid).matches();\r
+            if (uuid.length() != 32) {\r
+                return false;\r
+            }\r
+            if (valid) {\r
+                return true;\r
+            } else {\r
+                return false;\r
+            }\r
+        } catch (NumberFormatException ex) {\r
+            LOGGER.error("Exception :  " + ex);\r
+            return false;\r
+        }\r
+    }\r
+}\r
index 3cce802cb715eedce8ff3dc743d8a9c498d0699c..b7d9130a739ee471e14a76aa0f5ec1165eed5569 100755 (executable)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (C) 2014 Juniper Networks, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ */
 package org.opendaylight.plugin2oc.neutron;
 
 import static org.junit.Assert.assertEquals;
@@ -6,8 +14,12 @@ import static org.mockito.Mockito.mock;
 
 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.ApiPropertyBase;
+import net.juniper.contrail.api.ObjectReference;
 import net.juniper.contrail.api.types.FloatingIp;
 import net.juniper.contrail.api.types.FloatingIpPool;
 import net.juniper.contrail.api.types.Project;
@@ -20,7 +32,9 @@ import org.junit.Test;
 import static org.mockito.Mockito.when;
 
 import org.opendaylight.controller.networkconfig.neutron.NeutronFloatingIP;
-
+/**
+ * Test Class for Neutron FloatingIp.
+ */
 public class FloatingIpHandlerTest {
 
     FloatingIpHandler floatingIphandler;
@@ -91,25 +105,36 @@ public class FloatingIpHandlerTest {
     @Test
     public void testCanCreateFloatingIPUuidNull() {
         Activator.apiConnector = mockedApiConnector;
-        when(mockedNeutronFloatingIP.getFloatingIPUUID()).thenReturn("");
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, floatingIphandler.canCreateFloatingIP(mockedNeutronFloatingIP));
+        NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+        neutronFloatingIP.setFloatingIPUUID("");
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
     }
 
     /* Test method to check if neutron Tenant UUID is null */
     @Test
     public void testCanCreateTenantUUIDNull() {
         Activator.apiConnector = mockedApiConnector;
-        when(mockedNeutronFloatingIP.getTenantUUID()).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, floatingIphandler.canCreateFloatingIP(mockedNeutronFloatingIP));
+        NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+        neutronFloatingIP.setTenantUUID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
     }
 
     /* Test method to check if neutron Floating IP Address is null */
     @Test
     public void testCanCreateFloatingIPAddressNull() {
         Activator.apiConnector = mockedApiConnector;
-        when(mockedNeutronFloatingIP.getTenantUUID()).thenReturn("100071fe-0216-46bc-a3e6-1ff582fbd329");
-        when(mockedNeutronFloatingIP.getFloatingIPAddress()).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, floatingIphandler.canCreateFloatingIP(mockedNeutronFloatingIP));
+        NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+        neutronFloatingIP.setFloatingIPAddress(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
+    }
+
+    /* Test method to check if neutron Floating IP canCreate FIP already exist */
+    @Test
+    public void testCanCreateFloatingIPExist() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+        when(mockedApiConnector.findById(FloatingIp.class, neutronFloatingIP.getFloatingNetworkUUID())).thenReturn(mockedFloatingIp);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND, floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
     }
 
     /* Test method to check if neutron Floating IP canCreate project is null */
@@ -117,35 +142,54 @@ public class FloatingIpHandlerTest {
     public void testCanCreateFloatingProjectNull() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+        when(mockedApiConnector.findById(FloatingIp.class, neutronFloatingIP.getFloatingNetworkUUID())).thenReturn(null);
         when(mockedApiConnector.findById(Project.class, neutronFloatingIP.getTenantUUID())).thenReturn(null);
         assertEquals(HttpURLConnection.HTTP_NOT_FOUND, floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
     }
 
-    /* Test method to check if neutron Floating IP canCreate project is null */
+    /*Test method to check if neutron Floating IP canCreate Virtual network not found*/
     @Test
-    public void testCanCreateFloatingVirtualNetworkNull() throws IOException {
+    public void testCanCreateFloatingVirtualNetNotFound() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+        when(mockedApiConnector.findById(FloatingIp.class, neutronFloatingIP.getFloatingNetworkUUID())).thenReturn(mockedFloatingIp);
         when(mockedApiConnector.findById(Project.class, neutronFloatingIP.getTenantUUID())).thenReturn(mockProject);
         when(mockedApiConnector.findById(VirtualNetwork.class, neutronFloatingIP.getFloatingNetworkUUID())).thenReturn(null);
         assertEquals(HttpURLConnection.HTTP_NOT_FOUND, floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
     }
 
-    // /* Test method to check if neutron Floating IP canCreate project is
-    // null*/
-    // @Test
-    // public void testCanCreateFloatingIpNull() throws IOException {
-    // Activator.apiConnector = mockedApiConnector;
-    // NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
-    // when(mockedApiConnector.findById(Project.class,
-    // neutronFloatingIP.getTenantUUID())).thenReturn(mockProject);
-    // when(mockedApiConnector.findById(VirtualNetwork.class,
-    // neutronFloatingIP.getFloatingNetworkUUID())).thenReturn(mockedVirtualNetwork);
-    // when(mockedApiConnector.findById(FloatingIpPool.class,
-    // mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid())).thenReturn(null);
-    // assertEquals(HttpURLConnection.HTTP_NOT_FOUND,
-    // floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
-    // }
+    /* Test method to check if canCreate neutron Floating ip pool cannot not find */
+    @Test
+       public void testCanCreateFloatingIpPoolNull() throws IOException {
+               Activator.apiConnector = mockedApiConnector;
+               NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+               when(mockedApiConnector.findById(FloatingIp.class,neutronFloatingIP.getFloatingIPUUID())).thenReturn(null);
+               when(mockedApiConnector.findById(Project.class,neutronFloatingIP.getTenantUUID())).thenReturn(mockProject);
+               when(mockedApiConnector.findById(VirtualNetwork.class,neutronFloatingIP.getFloatingNetworkUUID())).thenReturn(mockedVirtualNetwork);
+               List<ObjectReference<ApiPropertyBase>> fipPoolList = new ArrayList<ObjectReference<ApiPropertyBase>>();
+               fipPoolList.add(new ObjectReference<ApiPropertyBase>(mockFloatingIpPool.getQualifiedName(), null));
+               fipPoolList.get(0).setReference(mockFloatingIpPool.getQualifiedName(), null, "", "119570f2-17b1-4fc3-99ec-1b7f7778a29a");
+               when(mockedVirtualNetwork.getFloatingIpPools()).thenReturn(fipPoolList);
+               when(mockedApiConnector.findById(FloatingIpPool.class,mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid())).thenReturn(null);
+               assertEquals(HttpURLConnection.HTTP_NOT_FOUND,floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
+       }
+
+    /* Test method to check if canCreate neutron Floating ip pool return 200 ok */
+    @Test
+       public void testCanCreateFloatingIpOk() throws IOException {
+               Activator.apiConnector = mockedApiConnector;
+               NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+               when(mockedApiConnector.findById(FloatingIp.class,neutronFloatingIP.getFloatingIPUUID())).thenReturn(null);
+               when(mockedApiConnector.findById(Project.class,neutronFloatingIP.getTenantUUID())).thenReturn(mockProject);
+               when(mockedApiConnector.findById(VirtualNetwork.class,neutronFloatingIP.getFloatingNetworkUUID())).thenReturn(mockedVirtualNetwork);
+               List<ObjectReference<ApiPropertyBase>> fipPoolList = new ArrayList<ObjectReference<ApiPropertyBase>>();
+               fipPoolList.add(new ObjectReference<ApiPropertyBase>(mockFloatingIpPool.getQualifiedName(), null));
+               fipPoolList.get(0).setReference(mockFloatingIpPool.getQualifiedName(), null, "", "119570f2-17b1-4fc3-99ec-1b7f7778a29a");
+               when(mockedVirtualNetwork.getFloatingIpPools()).thenReturn(fipPoolList);
+               when(mockedApiConnector.findById(FloatingIpPool.class,mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid())).thenReturn(mockFloatingIpPool);
+               assertEquals(HttpURLConnection.HTTP_OK,floatingIphandler.canCreateFloatingIP(neutronFloatingIP));
+       }
+
     /* Test method to check if can update FloatingIP Null object */
     @Test
     public void testcanUpdateFloatingIPObjNull() throws IOException {
@@ -153,47 +197,26 @@ public class FloatingIpHandlerTest {
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, floatingIphandler.canUpdateFloatingIP(null, null));
     }
 
-    /* Test method to check if can update FloatingIP Null */
+    /* Test method to check if can update FloatingIP obj not found */
     @Test
     public void testcanUpdateFloatingIPNull() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
         NeutronFloatingIP deltaNeutronFloatingIP = deltaNeutronObjectUpdate();
         when(mockedApiConnector.findById(FloatingIp.class, neutronFloatingIP.getFloatingIPUUID())).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, floatingIphandler.canUpdateFloatingIP(deltaNeutronFloatingIP, neutronFloatingIP));
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND, floatingIphandler.canUpdateFloatingIP(deltaNeutronFloatingIP, neutronFloatingIP));
     }
 
-    /* Test method to check if can update FloatingIP failed */
+    /* Test method to check if can update FloatingIP return status OK */
     @Test
-    public void testcanUpdateFloatingIPFailed() throws IOException {
+    public void testcanUpdateFloatingIPOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
         NeutronFloatingIP deltaNeutronFloatingIP = deltaNeutronObjectUpdate();
-        deltaNeutronFloatingIP.setPortUUID(null);
         when(mockedApiConnector.findById(FloatingIp.class, neutronFloatingIP.getFloatingIPUUID())).thenReturn(mockedFloatingIp);
-        when(mockedApiConnector.update(mockedFloatingIp)).thenReturn(false);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, floatingIphandler.canUpdateFloatingIP(deltaNeutronFloatingIP, neutronFloatingIP));
-    }
-
-    /* Test method to check if can update FloatingIP updated */
-    @Test
-    public void testcanUpdateFloatingIPTrue() throws IOException {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
-        NeutronFloatingIP deltaNeutronFloatingIP = deltaNeutronObjectUpdate();
-        deltaNeutronFloatingIP.setPortUUID(null);
-        when(mockedApiConnector.findById(FloatingIp.class, neutronFloatingIP.getFloatingIPUUID())).thenReturn(mockedFloatingIp);
-        when(mockedApiConnector.update(mockedFloatingIp)).thenReturn(true);
         assertEquals(HttpURLConnection.HTTP_OK, floatingIphandler.canUpdateFloatingIP(deltaNeutronFloatingIP, neutronFloatingIP));
     }
 
-    /* Test method to check if can delete FloatingIP Null object */
-    @Test
-    public void testcanDeleteFloatingIPObjNull() throws IOException {
-        Activator.apiConnector = mockedApiConnector;
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, floatingIphandler.canDeleteFloatingIP(null));
-    }
-
     /* Test method to check if can delete FloatingIP not found */
     @Test
     public void testcanDeleteFloatingIPNotFound() throws IOException {
@@ -202,4 +225,13 @@ public class FloatingIpHandlerTest {
         when(mockedApiConnector.findById(FloatingIp.class, neutronFloatingIP.getFloatingIPUUID())).thenReturn(null);
         assertEquals(HttpURLConnection.HTTP_NOT_FOUND, floatingIphandler.canDeleteFloatingIP(neutronFloatingIP));
     }
+
+    /* Test method to check if can delete FloatingIP returns status 200 ok */
+    @Test
+    public void testcanDeleteFloatingIPOK() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronFloatingIP neutronFloatingIP = defaultNeutronObject();
+        when(mockedApiConnector.findById(FloatingIp.class, neutronFloatingIP.getFloatingIPUUID())).thenReturn(mockedFloatingIp);
+        assertEquals(HttpURLConnection.HTTP_OK, floatingIphandler.canDeleteFloatingIP(neutronFloatingIP));
+    }
 }
index 40c17ab5c56e26d5b5c12088639f65f194cbfb82..00a84d2b090d659244175b74444922d327e178bf 100755 (executable)
@@ -12,7 +12,6 @@ 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 static org.powermock.api.easymock.PowerMock.expectNew;
 
 import java.io.IOException;
 import java.net.HttpURLConnection;
@@ -30,24 +29,18 @@ import net.juniper.contrail.api.types.VirtualNetwork;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
+
 import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
 /**
  * Test Class for Neutron Network.
  */
-@PrepareForTest({ NetworkHandler.class, VirtualNetwork.class })
-@RunWith(PowerMockRunner.class)
+
 public class NetworkHandlerTest {
     NetworkHandler networkHandler;
     NetworkHandler mockednetworkHandler = mock(NetworkHandler.class);
     NeutronNetwork mockedNeutronNetwork = mock(NeutronNetwork.class);
     ApiConnector mockedApiConnector = mock(ApiConnector.class);
-    ApiConnector mockedApiConnector1 = Mockito.mock(ApiConnector.class);
     VirtualNetwork mockedVirtualNetwork = mock(VirtualNetwork.class);
     Project mockedProject = mock(Project.class);
     FloatingIpPool mockedFloatingIpPool = mock(FloatingIpPool.class);
@@ -100,7 +93,7 @@ public class NetworkHandlerTest {
         return deltaNetwork;
     }
 
-    /* dummy params for Nfloating IP */
+    /* dummy params for floating IP */
     public FloatingIpPool defaultFloatingIpPoolObject() {
         FloatingIpPool floatingIpPoolObj = new FloatingIpPool();
         String fipId = UUID.randomUUID().toString();
@@ -161,194 +154,88 @@ public class NetworkHandlerTest {
         assertEquals(HttpURLConnection.HTTP_NOT_FOUND, networkHandler.canCreateNetwork(neutronNetwork));
     }
 
-    /* Test method to check neutron network with virtual network Existence */
+    /*
+     * Test method to check neutron network create with same name
+     */
     @Test
-    public void testCanCreateNetworkVirtualNetworkExists() throws IOException {
+    public void testcanCreateNetworkByNameExist() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronNetwork neutronNetwork = defaultNeutronObject();
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
         when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
+        when(mockedApiConnector.findByName(VirtualNetwork.class, mockedProject, neutronNetwork.getNetworkName())).thenReturn("network-001");
         assertEquals(HttpURLConnection.HTTP_FORBIDDEN, networkHandler.canCreateNetwork(neutronNetwork));
     }
 
-    /* Test method to check neutron network create Failed */
-    @Test
-    public void testCanCreateNetworkFailed() throws Exception {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronNetwork neutronNetwork = defaultNeutronObject();
-        when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(null);
-        VirtualNetwork mockedVirtualNet = PowerMock.createNiceMock(VirtualNetwork.class);
-        expectNew(VirtualNetwork.class).andReturn(mockedVirtualNet);
-        when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
-        when(mockedApiConnector.create(mockedVirtualNet)).thenReturn(false);
-        PowerMock.replay(mockedVirtualNet, VirtualNetwork.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, networkHandler.canCreateNetwork(neutronNetwork));
-    }
-
-    /* Test method to check neutron network create with HTTP OK */
+    /*
+     * Test method to check neutron can create network OK
+     */
     @Test
-    public void testCanCreateNetworkOK() throws Exception {
+    public void testcanCreateNetworkOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronNetwork neutronNetwork = defaultNeutronObject();
         when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(null);
-        VirtualNetwork mockedVirtualNet = PowerMock.createNiceMock(VirtualNetwork.class);
-        expectNew(VirtualNetwork.class).andReturn(mockedVirtualNet);
-        when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
-        when(mockedApiConnector.create(mockedVirtualNet)).thenReturn(true);
-        PowerMock.replay(mockedVirtualNet, VirtualNetwork.class);
+        when(mockedApiConnector.findByName(VirtualNetwork.class, mockedProject, neutronNetwork.getNetworkName())).thenReturn(null);
         assertEquals(HttpURLConnection.HTTP_OK, networkHandler.canCreateNetwork(neutronNetwork));
     }
 
-    /* Test method to check if neutron network is null */
+    /* Test method to check if neutron network object is null */
     @Test
     public void testCanUpdateNetworkNull() {
         Activator.apiConnector = mockedApiConnector;
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, networkHandler.canUpdateNetwork(null, null));
     }
 
-    /*
-     * Test method to check if neutron network update with null virtual network
-     */
+    /* Test method to check if neutron network name is empty string */
     @Test
-    public void testCanUpdateNetworkVirtualNetworkNull() throws IOException {
+    public void testCanUpdateNetworkNameEmpty() {
         Activator.apiConnector = mockedApiConnector;
         NeutronNetwork neutronNetwork = defaultNeutronObject();
         NeutronNetwork deltaNeutronNetwork = defaultNeutronObjectUpdate();
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, networkHandler.canUpdateNetwork(deltaNeutronNetwork, neutronNetwork));
+        deltaNeutronNetwork.setNetworkName("");
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, networkHandler.canUpdateNetwork(deltaNeutronNetwork, neutronNetwork));
     }
 
-    /* Test method to check if neutron network update OK */
+    /*
+     * Test method to check neutron network update with same name
+     */
     @Test
-    public void testCanUpdateNetworkFailed() throws Exception {
+    public void testcanUpdateNetworkByNameExist() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronNetwork neutronNetwork = defaultNeutronObject();
         NeutronNetwork deltaNeutronNetwork = defaultNeutronObjectUpdate();
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(false);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, networkHandler.canUpdateNetwork(deltaNeutronNetwork, neutronNetwork));
+        when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
+        when(mockedApiConnector.findByName(VirtualNetwork.class, mockedProject, neutronNetwork.getNetworkName())).thenReturn("network-001");
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, networkHandler.canUpdateNetwork(deltaNeutronNetwork, neutronNetwork));
     }
 
-    /* Test method to check if neutron network update create Foating IP failed */
+    /*
+     * Test method to check if neutron network update with null virtual network
+     */
     @Test
-    public void testCanUpdateNetworkCreateFloatingIpFailed() throws Exception {
+    public void testCanUpdateNetworkVirtualNetworkNull() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronNetwork neutronNetwork = defaultNeutronObject();
         NeutronNetwork deltaNeutronNetwork = defaultNeutronObjectUpdate();
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
-        neutronNetwork.setRouterExternal(false);
-        deltaNeutronNetwork.setRouterExternal(true);
-        when(mockedApiConnector.findById(VirtualNetwork.class, mockedVirtualNetwork.getUuid())).thenReturn(mockedVirtualNetwork);
-        FloatingIpPool floatingIpPool = PowerMock.createNiceMock(FloatingIpPool.class);
-        expectNew(FloatingIpPool.class).andReturn(floatingIpPool);
-        floatingIpPool.setParent(mockedVirtualNetwork);
-        when(mockedApiConnector.create(floatingIpPool)).thenReturn(false);
-        PowerMock.replay(floatingIpPool, FloatingIpPool.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, networkHandler.canUpdateNetwork(deltaNeutronNetwork, neutronNetwork));
-
+        when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
+        when(mockedApiConnector.findByName(VirtualNetwork.class, mockedProject, neutronNetwork.getNetworkName())).thenReturn(null);
+        when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, networkHandler.canUpdateNetwork(deltaNeutronNetwork, neutronNetwork));
     }
 
     /*
-     * Test method to check neutron network updated successfully after
-     * floatingIP created
+     * Test method to check if neutron network update with OK
      */
     @Test
-    public void testCanUpdateNetworkOKif() throws Exception {
+    public void testCanUpdateNetworkVirtualNetworkOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronNetwork neutronNetwork = defaultNeutronObject();
-        NeutronNetwork deltaNetwork = defaultNeutronObjectUpdate();
+        NeutronNetwork deltaNeutronNetwork = defaultNeutronObjectUpdate();
+        when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
+        when(mockedApiConnector.findByName(VirtualNetwork.class, mockedProject, neutronNetwork.getNetworkName())).thenReturn(null);
         when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        mockedVirtualNetwork.setName(deltaNetwork.getNetworkName());
-        mockedVirtualNetwork.setDisplayName(deltaNetwork.getNetworkName());
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
-        neutronNetwork.setRouterExternal(false);
-        deltaNetwork.setRouterExternal(true);
-        when(mockedApiConnector.findById(VirtualNetwork.class, mockedVirtualNetwork.getUuid())).thenReturn(mockedVirtualNetwork);
-        FloatingIpPool floatingIpPool = PowerMock.createNiceMock(FloatingIpPool.class);
-        expectNew(FloatingIpPool.class).andReturn(floatingIpPool);
-        String fipId = UUID.randomUUID().toString();
-        floatingIpPool.setName(fipId);
-        floatingIpPool.setDisplayName(fipId);
-        floatingIpPool.setUuid(fipId);
-        floatingIpPool.setParent(mockedVirtualNetwork);
-        when(mockedApiConnector.create(floatingIpPool)).thenReturn(true);
-        PowerMock.replay(floatingIpPool, FloatingIpPool.class);
-        assertEquals(HttpURLConnection.HTTP_OK, networkHandler.canUpdateNetwork(deltaNetwork, neutronNetwork));
+        assertEquals(HttpURLConnection.HTTP_OK, networkHandler.canUpdateNetwork(deltaNeutronNetwork, neutronNetwork));
     }
 
-    // /* Test method to check neutron network updated failed due to Floating Ip
-    // pool is failed to removed after update network..*/
-    // @Test
-    // public void testupdateNetworkFloatingIPremoveFailed() throws Exception {
-    // Activator.apiConnector = mockedApiConnector;
-    // NeutronNetwork neutronNetwork = defaultNeutronObject();
-    // NeutronNetwork deltaNetwork =defaultNeutronObjectUpdate();
-    // when(mockedApiConnector.findById(VirtualNetwork.class,neutronNetwork.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-    // mockedVirtualNetwork.setName(deltaNetwork.getNetworkName());
-    // mockedVirtualNetwork.setDisplayName(deltaNetwork.getNetworkName());
-    // when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
-    // neutronNetwork.setRouterExternal(true);
-    // deltaNetwork.setRouterExternal(false);
-    // ObjectReference<ApiPropertyBase> ref = new ObjectReference<>();
-    // List<ObjectReference<ApiPropertyBase>> pool = new
-    // ArrayList<ObjectReference<ApiPropertyBase>>();
-    // FloatingIpPool fp = new FloatingIpPool();
-    // List<String> temp = new ArrayList<String>();
-    // for (int i = 0; i < 1; i++) {
-    // String fipId = UUID.randomUUID().toString();
-    // fp.setDisplayName(fipId);
-    // fp.setName(fipId);
-    // fp.setUuid(fipId);
-    // ref.setReference(temp,"", "",""); //To do do not have api property base
-    // reference
-    // pool.add(i, ref);
-    // }
-    // when(mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid()).thenReturn("000570f2-17b1-4fc3-99ec-1b7f7778a29a");
-    // when(mockedApiConnector.findById(FloatingIpPool.class,mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid())).thenReturn(mockedFloatingIpPool);
-    // when(mockedApiConnector.findById(FloatingIpPool.class,mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid())).thenReturn(mockedFloatingIpPool);
-    // PowerMock.replay(floatingIpPool, FloatingIpPool.class);
-    // assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR,networkHandler.canUpdateNetwork(deltaNetwork,
-    // neutronNetwork));
-    // }
-
-    // /* Test method to check neutron network updated successfully after
-    // floatingIP removal..*/
-    // @Test
-    // public void testupdateNetworkOKelse() throws Exception {
-    // Activator.apiConnector = mockedApiConnector;
-    // NeutronNetwork neutronNetwork = defaultNeutronObject();
-    // NeutronNetwork deltaNetwork =defaultNeutronObjectUpdate();
-    // when(mockedApiConnector.findById(VirtualNetwork.class,neutronNetwork.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-    // mockedVirtualNetwork.setName(deltaNetwork.getNetworkName());
-    // mockedVirtualNetwork.setDisplayName(deltaNetwork.getNetworkName());
-    // when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
-    // neutronNetwork.setRouterExternal(true);
-    // deltaNetwork.setRouterExternal(false);
-    // ObjectReference<ApiPropertyBase> ref = new ObjectReference<>();
-    // List<ObjectReference<ApiPropertyBase>> pool = new
-    // ArrayList<ObjectReference<ApiPropertyBase>>();
-    // FloatingIpPool fp = new FloatingIpPool();
-    // List<String> temp = new ArrayList<String>();
-    // for (int i = 0; i < 1; i++) {
-    // String fipId = UUID.randomUUID().toString();
-    // fp.setDisplayName(fipId);
-    // fp.setName(fipId);
-    // fp.setUuid(fipId);
-    // ref.setReference(temp,"", "","");//To do do not have api property base
-    // reference
-    // pool.add(i, ref);
-    // }
-    // when(mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid()).thenReturn("000570f2-17b1-4fc3-99ec-1b7f7778a29a");
-    // when(mockedApiConnector.findById(FloatingIpPool.class,mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid())).thenReturn(mockedFloatingIpPool);
-    // when(mockedApiConnector.findById(FloatingIpPool.class,mockedVirtualNetwork.getFloatingIpPools().get(0).getUuid())).thenReturn(null);
-    //
-    // assertEquals(HttpURLConnection.HTTP_OK,
-    // networkHandler.canUpdateNetwork(deltaNetwork, neutronNetwork));
-    // }
-
     /* Test method to check delete network with when Port exist */
     @Test
     public void testcanDeleteNetworkPortExists() throws IOException {
@@ -373,18 +260,16 @@ public class NetworkHandlerTest {
     }
 
     /*
-     * Test method to check neutron network creation of virtual network failed
+     * Test method to check neutron network deletion with Ok
      */
     @Test
-    public void testcreateNetworkVirtualNetworkFalse() throws Exception {
+    public void testcanDeleteNetworkOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronNetwork neutronNetwork = defaultNeutronObject();
-        VirtualNetwork mockedVirtualNet = PowerMock.createNiceMock(VirtualNetwork.class);
-        expectNew(VirtualNetwork.class).andReturn(mockedVirtualNet);
-        when(mockedApiConnector.findById(Project.class, neutronNetwork.getTenantID())).thenReturn(mockedProject);
-        when(mockedApiConnector.create(mockedVirtualNet)).thenReturn(false);
-        PowerMock.replay(mockedVirtualNet, VirtualNetwork.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, networkHandler.canCreateNetwork(neutronNetwork));
+        when(mockedApiConnector.findById(VirtualNetwork.class, neutronNetwork.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
+        List<ObjectReference<ApiPropertyBase>> test = new ArrayList<ObjectReference<ApiPropertyBase>>();
+        when(mockedVirtualNetwork.getVirtualMachineInterfaceBackRefs()).thenReturn(test);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, networkHandler.canDeleteNetwork(neutronNetwork));
     }
 
 }
index b140e2939f966332608bcd9aaf30b820123db82a..47d39ca73d4d424c22630196d328e05fa83dfe0f 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-d * Copyright (C) 2014 Juniper Networks, Inc.
+ * Copyright (C) 2014 Juniper Networks, Inc.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
@@ -14,11 +14,14 @@ import java.util.ArrayList;
 import java.util.List;
 
 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.SubnetType;
 import net.juniper.contrail.api.types.VirtualMachine;
 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.NeutronPort;
 import org.opendaylight.controller.networkconfig.neutron.Neutron_IPs;
@@ -27,22 +30,16 @@ 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 static org.powermock.api.easymock.PowerMock.expectNew;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
 /**
- * Test Class for Neutron Network.
+ * Test Class for Neutron Port.
  */
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ PortHandler.class, VirtualMachineInterface.class, InstanceIp.class })
+
 public class PortHandlerTest {
     PortHandler porthandler;
     PortHandler mockedporthandler = mock(PortHandler.class);
@@ -113,137 +110,88 @@ public class PortHandlerTest {
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canCreatePort(null));
     }
 
-    /* Test method to check if neutron port device ID is empty */
+    /* Test method to check if neutron port PortUUID is empty */
     @Test
-    public void testCanCreateIdEmtpy() {
+    public void testCanCreatePortIdEmtpy() {
         Activator.apiConnector = mockedApiConnector;
-        NeutronPort neutronPort = new NeutronPort();
+        NeutronPort neutronPort = defaultNeutronPortObject();
         neutronPort.setPortUUID("");
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canCreatePort(neutronPort));
     }
 
     /* Test method to check if neutron port tenant id is null */
     @Test
-    public void testCanCreateTenantIdNull() {
+    public void testCanCreatePortTenantIdNull() {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
         neutronPort.setTenantID(null);
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canCreatePort(neutronPort));
     }
 
-    /* Test method to check if neutron port fixed IP is null */
-    @Test
-    public void testCanCreateFixedIPNull() {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronPort neutronPort = defaultNeutronPortObject();
-        neutronPort.setFixedIPs(null);
-        when(mockedNeutronPort.getFixedIPs()).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, porthandler.canCreatePort(neutronPort));
-    }
-
-    /* Test method to check if neutron port is already exist */
+    /* Test method to check if neutron port name is null */
     @Test
-    public void testCanCreatePortExist() throws IOException {
+    public void testCanCreatePortNameNull() {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getID())).thenReturn(mockedVirtualMachineInterface);
-        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, porthandler.canCreatePort(neutronPort));
+        neutronPort.setName("");
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canCreatePort(neutronPort));
     }
 
-    /* Test method to check if Virtual Machine Is Not Created */
+    /* Test method to check if neutron port and network belongs to same tenant */
     @Test
-    public void testCanCreatePortVirtualMachineNotCreated() throws Exception {
+    public void testCanCreatePortSameTenant() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
-        VirtualMachine mockedvirtualMachine = PowerMock.createNiceMock(VirtualMachine.class);
-        expectNew(VirtualMachine.class).andReturn(mockedvirtualMachine);
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(null);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(null);
-        when(mockedApiConnector.create(mockedvirtualMachine)).thenReturn(false);
-        PowerMock.replay(mockedvirtualMachine, VirtualMachine.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, porthandler.canCreatePort(neutronPort));
+        when(mockedVirtualNetwork.getParentUuid()).thenReturn("f00071fe-0216-46bc-a3e6-1ff582fbd324");
+        when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
+        when(mockedApiConnector.findById(VirtualNetwork.class, neutronPort.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canCreatePort(neutronPort));
     }
 
     /* Test method to check if Project is not available */
     @Test
-    public void testCanCreatePortProjectSearch() throws Exception {
+    public void testCanCreatePortProjectNotFound() throws Exception {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(null);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(mockedvirtualMachine);
-        when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(null);
         when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(null);
         assertEquals(HttpURLConnection.HTTP_NOT_FOUND, porthandler.canCreatePort(neutronPort));
     }
 
-    /* Test method to check if Virtual Network does not exist */
+    /* Test method to check if neutron port create exist */
     @Test
-    public void testCanCreatePortVirtualNetworkNotExist() throws IOException {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronPort neutronPort = defaultNeutronPortObject();
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getID())).thenReturn(null);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(mockedvirtualMachine);
-        when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronPort.getNetworkUUID())).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canCreatePort(neutronPort));
-    }
-
-    /* Test method to check if virtual machine interface creation failed */
-    @Test
-    public void testCanCreateVirtualMachineInterface() throws Exception {
+    public void testCanCreatePortExist() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
-        VirtualMachineInterface mockedVirtualMachineInterface = PowerMock.createNiceMock(VirtualMachineInterface.class);
-        expectNew(VirtualMachineInterface.class).andReturn(mockedVirtualMachineInterface);
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getID())).thenReturn(null);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(mockedvirtualMachine);
+        when(mockedVirtualNetwork.getParentUuid()).thenReturn(neutronPort.getTenantID());
         when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
         when(mockedApiConnector.findById(VirtualNetwork.class, neutronPort.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        when(mockedApiConnector.create(mockedVirtualMachineInterface)).thenReturn(false);
-        PowerMock.replay(mockedVirtualMachineInterface, VirtualMachineInterface.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, porthandler.canCreatePort(neutronPort));
+        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(mockedVirtualMachineInterface);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, porthandler.canCreatePort(neutronPort));
     }
 
-    /* Test method to check port is not created */
+    /* Test method to check if neutron port create exist with same name */
     @Test
-    public void testCanCreatePortFails() throws Exception {
+    public void testCanCreatePortExistSameName() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
-        VirtualMachineInterface mockedVirtualMachineInterface = PowerMock.createNiceMock(VirtualMachineInterface.class);
-        expectNew(VirtualMachineInterface.class).andReturn(mockedVirtualMachineInterface);
-        InstanceIp mockedInstanceIp = PowerMock.createNiceMock(InstanceIp.class);
-        expectNew(InstanceIp.class).andReturn(mockedInstanceIp);
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(null);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(mockedvirtualMachine);
+        when(mockedVirtualNetwork.getParentUuid()).thenReturn(neutronPort.getTenantID());
         when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
         when(mockedApiConnector.findById(VirtualNetwork.class, neutronPort.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        when(mockedApiConnector.create(mockedVirtualMachineInterface)).thenReturn(true);
-        PowerMock.replay(mockedVirtualMachineInterface, VirtualMachineInterface.class);
-        when(neutronPort.getFixedIPs().get(0).getIpAddress()).thenReturn("10.0.0.1");
-        when(mockedApiConnector.create(mockedInstanceIp)).thenReturn(false);
-        PowerMock.replay(mockedInstanceIp, InstanceIp.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, porthandler.canCreatePort(neutronPort));
+        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(null);
+        when(mockedApiConnector.findByName(VirtualMachineInterface.class, mockedProject, neutronPort.getName())).thenReturn("PORT-001");
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, porthandler.canCreatePort(neutronPort));
     }
 
-    /* Test method to check port is created */
-
+    /* Test method to check if neutron port create ok */
     @Test
-    public void testCanCreatePortOk() throws Exception {
+    public void testCanCreatePortOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
-        VirtualMachineInterface mockedVirtualMachineInterface = PowerMock.createNiceMock(VirtualMachineInterface.class);
-        expectNew(VirtualMachineInterface.class).andReturn(mockedVirtualMachineInterface);
-        InstanceIp mockedInstanceIp = PowerMock.createNiceMock(InstanceIp.class);
-        expectNew(InstanceIp.class).andReturn(mockedInstanceIp);
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(null);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(mockedvirtualMachine);
+        when(mockedVirtualNetwork.getParentUuid()).thenReturn(neutronPort.getTenantID());
         when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
         when(mockedApiConnector.findById(VirtualNetwork.class, neutronPort.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        when(mockedApiConnector.create(mockedVirtualMachineInterface)).thenReturn(true);
-        PowerMock.replay(mockedVirtualMachineInterface, VirtualMachineInterface.class);
-        when(neutronPort.getFixedIPs().get(0).getIpAddress()).thenReturn("10.0.0.1");
-        when(mockedApiConnector.create(mockedInstanceIp)).thenReturn(true);
-        PowerMock.replay(mockedInstanceIp, InstanceIp.class);
+        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(null);
+        when(mockedApiConnector.findByName(VirtualMachineInterface.class, mockedProject, neutronPort.getName())).thenReturn(null);
         assertEquals(HttpURLConnection.HTTP_OK, porthandler.canCreatePort(neutronPort));
     }
 
@@ -254,23 +202,33 @@ public class PortHandlerTest {
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canDeletePort(null));
     }
 
-    /* Test method to check if virtual machine interface is null */
+    /* Test method to check if virtual machine interface is null for delete */
     @Test
     public void testcanDeletePortVirtualMachineInterfaceNull() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
         when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getID())).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canDeletePort(neutronPort));
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND, porthandler.canDeletePort(neutronPort));
+    }
+
+    /* Test method to check if can delete return status 200 OK */
+    @Test
+    public void testcanDeletePortOk() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronPort neutronPort = defaultNeutronPortObject();
+        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getID())).thenReturn(mockedVirtualMachineInterface);
+        when(mockedVirtualMachineInterface.getFloatingIpBackRefs()).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_OK, porthandler.canDeletePort(neutronPort));
     }
 
-    /* Test method to update port with null neutron port and delta port */
+    /* Test method to update port with null neutron port and delta port obj*/
     @Test
     public void testcanUpdatePortNull() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canUpdatePort(null, null));
     }
 
-    /* Test method to update port with mac address */
+    /* Test method to update port with Mac address */
     @Test
     public void testcanUpdatePortMacAddress() throws IOException {
         Activator.apiConnector = mockedApiConnector;
@@ -280,80 +238,94 @@ public class PortHandlerTest {
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
     }
 
-    /* Test method to update port when IpPrefix is null and network Uuid exist */
+    /* Test method to update port when port not found */
     @Test
-    public void testcanUpdatePortIpPrefixNull() throws IOException {
+    public void testcanUpdatePortVMInotFound() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
         NeutronPort dummyNeutronPort = detaNeutronPort();
-        dummyNeutronPort.setFixedIPs(null);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
+        when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
+        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
     }
 
-    /* Test method to update port when virtual machine create fails */
+    /* Test method to update port when another port already exist with same name */
     @Test
-    public void testcanUpdatePortVirtualMachineCreateFail() throws Exception {
+    public void testcanUpdatePortVMIbyName() throws IOException {
         Activator.apiConnector = mockedApiConnector;
-        VirtualMachine mockedVirtualMachine = PowerMock.createNiceMock(VirtualMachine.class);
-        expectNew(VirtualMachine.class).andReturn(mockedVirtualMachine);
         NeutronPort neutronPort = defaultNeutronPortObject();
         NeutronPort dummyNeutronPort = detaNeutronPort();
-        dummyNeutronPort.setFixedIPs(null);
-        dummyNeutronPort.setNetworkUUID(null);
+        when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
         when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(mockedVirtualMachineInterface);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(null);
-        when(mockedApiConnector.create(mockedVirtualMachine)).thenReturn(false);
-        PowerMock.replay(mockedVirtualMachine, VirtualMachine.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
+        when(mockedApiConnector.findByName(VirtualMachineInterface.class, mockedProject, dummyNeutronPort.getName())).thenReturn("network-001");
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
     }
 
-    /* Test method to update port when update fails */
+    /*
+     * Test method to update port when check for Subnet UUID must exist in the
+     * network
+     */
     @Test
-    public void testcanUpdatePortVirtualMachineInterfaceUpdateFail() throws Exception {
+    public void testcanUpdatePortCheck() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
         NeutronPort dummyNeutronPort = detaNeutronPort();
         dummyNeutronPort.setFixedIPs(null);
-        dummyNeutronPort.setNetworkUUID(null);
+        when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
         when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(mockedVirtualMachineInterface);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(mockedvirtualMachine);
-        when(mockedApiConnector.update(mockedVirtualMachineInterface)).thenReturn(false);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
+        when(mockedApiConnector.findByName(VirtualMachineInterface.class, mockedProject, dummyNeutronPort.getName())).thenReturn(null);
+        when(mockedApiConnector.findById(VirtualNetwork.class, neutronPort.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
     }
 
-    /* Test method to update port */
+    /* Test method to update port when check for FixedIPs Not Null */
     @Test
-    public void testcanUpdatePortVirtualMachineInterfaceUpdateOk() throws Exception {
+    public void testcanUpdatePortFixedIPsNotNull() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
         NeutronPort dummyNeutronPort = detaNeutronPort();
-        dummyNeutronPort.setFixedIPs(null);
-        dummyNeutronPort.setNetworkUUID(null);
+        when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
         when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(mockedVirtualMachineInterface);
-        when(mockedApiConnector.findById(VirtualMachine.class, neutronPort.getDeviceID())).thenReturn(mockedvirtualMachine);
-        when(mockedApiConnector.update(mockedVirtualMachineInterface)).thenReturn(true);
-        assertEquals(HttpURLConnection.HTTP_OK, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
+        when(mockedApiConnector.findByName(VirtualMachineInterface.class, mockedProject, dummyNeutronPort.getName())).thenReturn(null);
+        List<Neutron_IPs> ips = new ArrayList<Neutron_IPs>();
+        Neutron_IPs fixedIP = new Neutron_IPs();
+        fixedIP.setSubnetUUID("9b9570f2-17b1-4fc3-99ec-1b7f7778a29b");
+        ips.add(fixedIP);
+        dummyNeutronPort.setFixedIPs(ips);
+        when(mockedApiConnector.findById(VirtualNetwork.class, neutronPort.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
+        VnSubnetsType vnSubnetType = new VnSubnetsType();
+        ObjectReference<VnSubnetsType> ref = new ObjectReference<>();
+        List<ObjectReference<VnSubnetsType>> ipamRefs = new ArrayList<ObjectReference<VnSubnetsType>>();
+        List<VnSubnetsType.IpamSubnetType> subnets = new ArrayList<VnSubnetsType.IpamSubnetType>();
+        VnSubnetsType.IpamSubnetType subnetType = new VnSubnetsType.IpamSubnetType();
+        SubnetType type = new SubnetType();
+        List<String> temp = new ArrayList<String>();
+        for (int i = 0; i < 1; i++) {
+            subnetType.setSubnet(type);
+            subnetType.setSubnetUuid("0b9570f2-17b1-4fc3-99ec-1b7f7778a29b");
+            subnetType.getSubnet().setIpPrefix("10.0.0.0");
+            subnetType.getSubnet().setIpPrefixLen(24);
+            subnets.add(subnetType);
+            vnSubnetType.addIpamSubnets(subnetType);
+            ref.setReference(temp, vnSubnetType, "", "");
+            ipamRefs.add(ref);
+        }
+        when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(ipamRefs);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
     }
 
-    /* Test method to update port when virtual network does not exist */
+    /* Test method to update port when check for FixedIPs Not Null */
     @Test
-    public void testcanUpdatePortVirtualNetworkNotExist() throws Exception {
+    public void testcanUpdatePortok() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronPort neutronPort = defaultNeutronPortObject();
         NeutronPort dummyNeutronPort = detaNeutronPort();
+        when(mockedApiConnector.findById(Project.class, neutronPort.getTenantID())).thenReturn(mockedProject);
         when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(mockedVirtualMachineInterface);
+        when(mockedApiConnector.findByName(VirtualMachineInterface.class, mockedProject, dummyNeutronPort.getName())).thenReturn(null);
         when(mockedApiConnector.findById(VirtualNetwork.class, dummyNeutronPort.getNetworkUUID())).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
-    }
-
-    /* Test method to update port when virtual network does not exist */
-    @Test
-    public void testcanUpdatePortSubnetNotExistInNetwork() throws Exception {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronPort neutronPort = defaultNeutronPortObject();
-        NeutronPort dummyNeutronPort = detaNeutronPort();
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronPort.getPortUUID())).thenReturn(mockedVirtualMachineInterface);
-        when(mockedApiConnector.findById(VirtualNetwork.class, dummyNeutronPort.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
+        dummyNeutronPort.setNetworkUUID(null);
+        dummyNeutronPort.setFixedIPs(null);
+        assertEquals(HttpURLConnection.HTTP_OK, porthandler.canUpdatePort(dummyNeutronPort, neutronPort));
     }
 }
\ No newline at end of file
index edad7380e84b5a9aad08a3600c0129cd82557840..586d035586b89f43dd0ee6ffcf10d958cd188985 100755 (executable)
@@ -1,33 +1,39 @@
+/*
+ * Copyright (C) 2014 Juniper Networks, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ */
 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 static org.powermock.api.easymock.PowerMock.expectNew;
 
 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.ApiPropertyBase;
+import net.juniper.contrail.api.ObjectReference;
 import net.juniper.contrail.api.types.LogicalRouter;
 import net.juniper.contrail.api.types.Project;
-import net.juniper.contrail.api.types.VirtualMachine;
 import net.juniper.contrail.api.types.VirtualMachineInterface;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 import org.opendaylight.controller.networkconfig.neutron.NeutronRouter;
 import org.opendaylight.controller.networkconfig.neutron.NeutronRouter_Interface;
 import org.opendaylight.controller.networkconfig.neutron.NeutronRouter_NetworkReference;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ RouterHandler.class, LogicalRouter.class })
+/**
+ * Test Class for Neutron Router.
+ */
 public class RouterHandlerTest {
 
     RouterHandler routerHandler;
@@ -111,15 +117,6 @@ public class RouterHandlerTest {
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, routerHandler.canCreateRouter(mockedNeutronRouter));
     }
 
-    /* Test method to check if neutron router name is null */
-    @Test
-    public void testCanCreateRouterNullName() {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronRouter neutronRouter = defaultNeutronObject();
-        neutronRouter.setName(null);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, routerHandler.canCreateRouter(neutronRouter));
-    }
-
     /* Test method to check if tenant ID is null */
     @Test
     public void testCanCreateRouterNullTenantID() {
@@ -129,57 +126,53 @@ public class RouterHandlerTest {
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, routerHandler.canCreateRouter(neutronRouter));
     }
 
-    /* Test method to check if router Project UUID not found */
+    /* Test method to check if neutron router name is null */
     @Test
-    public void testCanCreateRouterProjectUUIDnull() throws IOException {
+    public void testCanCreateRouterNullName() {
         Activator.apiConnector = mockedApiConnector;
         NeutronRouter neutronRouter = defaultNeutronObject();
-        when(mockedApiConnector.findById(Project.class, neutronRouter.getTenantID())).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_NOT_FOUND, routerHandler.canCreateRouter(neutronRouter));
+        neutronRouter.setName(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, routerHandler.canCreateRouter(neutronRouter));
     }
 
-    /* Test method to check if router creation fails */
+    /*
+     * Test method to check neutron network create with same name
+     */
     @Test
-    public void testCanCreateRouterFails() throws Exception {
+    public void testcanCreateRouterByNameExist() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronRouter neutronRouter = defaultNeutronObject();
-        LogicalRouter lr = PowerMock.createNiceMock(LogicalRouter.class);
-        expectNew(LogicalRouter.class).andReturn(lr);
         when(mockedApiConnector.findById(Project.class, neutronRouter.getTenantID())).thenReturn(mockedProject);
-        lr.setParent(mockedProject);
-        when(mockedApiConnector.create(lr)).thenReturn(false);
-        PowerMock.replay(lr, LogicalRouter.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, routerHandler.canCreateRouter(neutronRouter));
+        when(mockedApiConnector.findByName(LogicalRouter.class, mockedProject, neutronRouter.getName())).thenReturn("Router-01");
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, routerHandler.canCreateRouter(neutronRouter));
     }
 
-    /* Test method to check if router created */
+    /*
+     * Test method to check neutron network create return status 200 Ok
+     */
     @Test
-    public void testCanCreateRouterOK() throws Exception {
+    public void testcanCreateRouterOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronRouter neutronRouter = defaultNeutronObject();
-        LogicalRouter lr = PowerMock.createNiceMock(LogicalRouter.class);
-        expectNew(LogicalRouter.class).andReturn(lr);
         when(mockedApiConnector.findById(Project.class, neutronRouter.getTenantID())).thenReturn(mockedProject);
-        lr.setParent(mockedProject);
-        when(mockedApiConnector.create(lr)).thenReturn(true);
-        PowerMock.replay(lr, LogicalRouter.class);
+        when(mockedApiConnector.findByName(LogicalRouter.class, mockedProject, neutronRouter.getName())).thenReturn(null);
         assertEquals(HttpURLConnection.HTTP_OK, routerHandler.canCreateRouter(neutronRouter));
     }
 
-    /* Test method to check if neutron router is null for delete */
+    /* Test method to check if neutron router object is null for delete */
     @Test
     public void testcanDeleteRouterNull() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, routerHandler.canDeleteRouter(null));
     }
 
-    /* Test method to check if delete router that does not exist */
+    /* Test method to check if delete router with status 200 ok */
     @Test
-    public void testcanDeleteRouterBadRequest() throws IOException {
+    public void testcanDeleteRouterOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronRouter neutronRouter = defaultNeutronObject();
-        when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, routerHandler.canDeleteRouter(neutronRouter));
+        when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
+        assertEquals(HttpURLConnection.HTTP_OK, routerHandler.canDeleteRouter(neutronRouter));
     }
 
     /* Test method to check if can update router Null object */
@@ -199,107 +192,39 @@ public class RouterHandlerTest {
         assertEquals(HttpURLConnection.HTTP_NOT_FOUND, routerHandler.canUpdateRouter(neutronRouter, deltaRouter));
     }
 
-    /* Test method to check if can update router object not found */
-    @Test
-    public void testcanUpdateRouterFailed() throws IOException {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronRouter neutronRouter = defaultNeutronObject();
-        NeutronRouter deltaRouter = deltaNeutronObject();
-        when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
-        when(mockedApiConnector.update(mockedLogicalRouter)).thenReturn(false);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, routerHandler.canUpdateRouter(neutronRouter, deltaRouter));
-    }
-
-    /* Test method to check if can update router object not founf=d */
+    /* Test method to check if can update router returns status 200 ok */
     @Test
     public void testcanUpdateRouterOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronRouter neutronRouter = defaultNeutronObject();
         NeutronRouter deltaRouter = deltaNeutronObject();
         when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
-        when(mockedApiConnector.update(mockedLogicalRouter)).thenReturn(true);
         assertEquals(HttpURLConnection.HTTP_OK, routerHandler.canUpdateRouter(neutronRouter, deltaRouter));
     }
 
-    /* Test method to check if canAttachInterface update vmi failed */
-    @Test
-    public void testcanAttachInterfaceVMIfailed() throws Exception {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronRouter neutronRouter = defaultNeutronObject();
-        NeutronRouter_Interface neutronRouterInterface = deltaNeutronRouter_Interface();
-        when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronRouterInterface.getPortUUID()))
-                .thenReturn(mockVirtualMachineInterface);
-        mockedLogicalRouter.setVirtualMachineInterface(mockVirtualMachineInterface);
-        VirtualMachine vm = PowerMock.createNiceMock(VirtualMachine.class);
-        expectNew(VirtualMachine.class).andReturn(vm);
-        vm.setName(neutronRouter.getRouterUUID());
-        vm.setUuid(neutronRouter.getRouterUUID());
-        mockVirtualMachineInterface.setVirtualMachine(vm);
-        when(mockedApiConnector.update(mockVirtualMachineInterface)).thenReturn(false);
-        PowerMock.replay(vm, VirtualMachine.class);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, routerHandler.canAttachInterface(neutronRouter, neutronRouterInterface));
-    }
-
     /*
      * Test method to check if canAttachInterface update vmi successfully but
      * attach interface failed
      */
     @Test
-    public void testcanAttachInterfaceVMIOk() throws Exception {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronRouter neutronRouter = defaultNeutronObject();
-        NeutronRouter_Interface neutronRouterInterface = deltaNeutronRouter_Interface();
-        when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronRouterInterface.getPortUUID()))
-                .thenReturn(mockVirtualMachineInterface);
-        mockedLogicalRouter.setVirtualMachineInterface(mockVirtualMachineInterface);
-        VirtualMachine vm = PowerMock.createNiceMock(VirtualMachine.class);
-        expectNew(VirtualMachine.class).andReturn(vm);
-        vm.setName(neutronRouter.getRouterUUID());
-        vm.setUuid(neutronRouter.getRouterUUID());
-        mockVirtualMachineInterface.setVirtualMachine(vm);
-        when(mockedApiConnector.update(mockVirtualMachineInterface)).thenReturn(true);
-        PowerMock.replay(vm, VirtualMachine.class);
-        when(mockedApiConnector.update(mockedLogicalRouter)).thenReturn(false);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, routerHandler.canAttachInterface(neutronRouter, neutronRouterInterface));
-    }
-
-    /* Test method to check if interface is attached successfully */
-    @Test
-    public void testcanAttachInterfaceOK() throws Exception {
+    public void testcanAttachInterfaceOk() throws Exception {
         Activator.apiConnector = mockedApiConnector;
         NeutronRouter neutronRouter = defaultNeutronObject();
         NeutronRouter_Interface neutronRouterInterface = deltaNeutronRouter_Interface();
-        when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronRouterInterface.getPortUUID()))
-                .thenReturn(mockVirtualMachineInterface);
-        mockedLogicalRouter.setVirtualMachineInterface(mockVirtualMachineInterface);
-        VirtualMachine vm = PowerMock.createNiceMock(VirtualMachine.class);
-        expectNew(VirtualMachine.class).andReturn(vm);
-        vm.setName(neutronRouter.getRouterUUID());
-        vm.setUuid(neutronRouter.getRouterUUID());
-        mockVirtualMachineInterface.setVirtualMachine(vm);
-        when(mockedApiConnector.update(mockVirtualMachineInterface)).thenReturn(true);
-        PowerMock.replay(vm, VirtualMachine.class);
-        when(mockedApiConnector.update(mockedLogicalRouter)).thenReturn(true);
         assertEquals(HttpURLConnection.HTTP_OK, routerHandler.canAttachInterface(neutronRouter, neutronRouterInterface));
     }
 
-    /* Test method to check if canDetachInterface update vmi failed */
+    /* Test method to check if canDetachInterface when no such Router exist */
     @Test
-    public void testcanDetachInterfaceVMIfailed() throws Exception {
+    public void testcanDetachInterfaceRouterNotFound() throws Exception {
         Activator.apiConnector = mockedApiConnector;
         NeutronRouter neutronRouter = defaultNeutronObject();
         NeutronRouter_Interface neutronRouterInterface = deltaNeutronRouter_Interface();
-        when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
-        when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronRouterInterface.getPortUUID()))
-                .thenReturn(mockVirtualMachineInterface);
-        when(mockedApiConnector.update(mockVirtualMachineInterface)).thenReturn(false);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, routerHandler.canDetachInterface(neutronRouter, neutronRouterInterface));
+        when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND, routerHandler.canDetachInterface(neutronRouter, neutronRouterInterface));
     }
 
-    /* Test method to check if interface is detached succesfully */
+    /* Test method to check if canDetachInterface return status 200 OK */
     @Test
     public void testcanDetachInterfaceOK() throws Exception {
         Activator.apiConnector = mockedApiConnector;
@@ -308,8 +233,36 @@ public class RouterHandlerTest {
         when(mockedApiConnector.findById(LogicalRouter.class, neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
         when(mockedApiConnector.findById(VirtualMachineInterface.class, neutronRouterInterface.getPortUUID()))
                 .thenReturn(mockVirtualMachineInterface);
-        when(mockedApiConnector.update(mockVirtualMachineInterface)).thenReturn(true);
-        when(mockedApiConnector.update(mockedLogicalRouter)).thenReturn(true);
         assertEquals(HttpURLConnection.HTTP_OK, routerHandler.canDetachInterface(neutronRouter, neutronRouterInterface));
     }
-}
\ No newline at end of file
+
+    /* Test method to check if interface is attached with port ID*/
+    @Test
+    public void testcanDetachInterfacePortExist() throws Exception {
+            Activator.apiConnector = mockedApiConnector;
+            NeutronRouter neutronRouter = defaultNeutronObject();
+            NeutronRouter_Interface neutronRouterInterface = deltaNeutronRouter_Interface();
+            when(mockedApiConnector.findById(LogicalRouter.class,neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
+            when(mockedApiConnector.findById(VirtualMachineInterface.class,neutronRouterInterface.getPortUUID())).thenReturn(mockVirtualMachineInterface);
+            List<ObjectReference<ApiPropertyBase>> vmiList = new ArrayList<ObjectReference<ApiPropertyBase>>();
+            vmiList.add(new ObjectReference<ApiPropertyBase>(mockVirtualMachineInterface.getQualifiedName(), null));
+            vmiList.get(0).setReference(mockVirtualMachineInterface.getQualifiedName(), null, "", "119570f2-17b1-4fc3-99ec-1b7f7778a29a");
+            when(mockedLogicalRouter.getVirtualMachineInterface()).thenReturn(vmiList);
+            assertEquals(HttpURLConnection.HTTP_OK,routerHandler.canDetachInterface(neutronRouter,neutronRouterInterface));
+    }
+
+    /* Test method to check if No interface is attached with port ID */
+     @Test
+     public void testcanDetachInterfacePortDoesNotExist() throws Exception {
+         Activator.apiConnector = mockedApiConnector;
+         NeutronRouter neutronRouter = defaultNeutronObject();
+         NeutronRouter_Interface neutronRouterInterface = deltaNeutronRouter_Interface();
+         when(mockedApiConnector.findById(LogicalRouter.class,neutronRouter.getRouterUUID())).thenReturn(mockedLogicalRouter);
+         when(mockedApiConnector.findById(VirtualMachineInterface.class,neutronRouterInterface.getPortUUID())).thenReturn(mockVirtualMachineInterface);
+         List<ObjectReference<ApiPropertyBase>> vmiList = new ArrayList<ObjectReference<ApiPropertyBase>>();
+         vmiList.add(new ObjectReference<ApiPropertyBase>(mockVirtualMachineInterface.getQualifiedName(), null));
+         vmiList.get(0).setReference(mockVirtualMachineInterface.getQualifiedName(), null, "", "ff9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+         when(mockedLogicalRouter.getVirtualMachineInterface()).thenReturn(vmiList);
+         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,routerHandler.canDetachInterface(neutronRouter,neutronRouterInterface));
+     }
+}
diff --git a/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/SecurityGroupHandlerTest.java b/neutron/src/test/java/org/opendaylight/plugin2oc/neutron/SecurityGroupHandlerTest.java
new file mode 100644 (file)
index 0000000..5bb129f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2014 Juniper Networks, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ */
+package org.opendaylight.plugin2oc.neutron;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
+
+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.ApiPropertyBase;
+import net.juniper.contrail.api.ObjectReference;
+import net.juniper.contrail.api.types.Project;
+import net.juniper.contrail.api.types.SecurityGroup;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityGroup;
+
+import static org.mockito.Mockito.when;
+
+/**
+ * Test Class for SecurityGroupHandler.
+ */
+
+public class SecurityGroupHandlerTest {
+
+    SecurityGroupHandler securityGroupHandler;
+    SecurityGroupHandler mockSecurityGroupHandler = mock(SecurityGroupHandler.class);
+    NeutronSecurityGroup mockNeutronSecurityGroup = mock(NeutronSecurityGroup.class);
+    SecurityGroup mockSecurityGroup = mock(SecurityGroup.class);
+    ApiConnector mockedApiConnector = mock(ApiConnector.class);
+    Project mockedProject = mock(Project.class);
+
+    @Before
+    public void beforeTest() {
+        securityGroupHandler = new SecurityGroupHandler();
+        assertNotNull(mockSecurityGroupHandler);
+        assertNotNull(mockNeutronSecurityGroup);
+        assertNotNull(mockSecurityGroup);
+        assertNotNull(mockedApiConnector);
+        assertNotNull(mockedProject);
+    }
+
+    @After
+    public void AfterTest() {
+        securityGroupHandler = null;
+        Activator.apiConnector = null;
+    }
+
+    /* dummy params for SecurityGroupHandler */
+    public NeutronSecurityGroup defaultSecurityGroupObject() {
+        NeutronSecurityGroup neutron = new NeutronSecurityGroup();
+        neutron.setSecurityGroupDescription("new security froup description");
+        neutron.setSecurityGroupName("securityGroupName");
+        neutron.setSecurityGroupTenantID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29a");
+        neutron.setSecurityGroupUUID("900070f2-17b1-4fc3-99ec-1b7f7778a29a");
+        return neutron;
+    }
+
+    /* Test method to check if neutron SecurityGroup object is null */
+    @Test
+    public void testCanCreateSecurityGroupNull() {
+        Activator.apiConnector = mockedApiConnector;
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, securityGroupHandler.canCreateNeutronSecurityGroup(null));
+    }
+
+    /* Test method to check if neutron SecurityGroup name is null */
+    @Test
+    public void testCanCreateSecurityGroupNameNull() {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        neutron.setSecurityGroupName(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, securityGroupHandler.canCreateNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron SecurityGroup Description is null */
+    @Test
+    public void testCanCreateSecurityGroupDescriptionNull() {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        neutron.setSecurityGroupDescription(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, securityGroupHandler.canCreateNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron SecurityGroup TenantId is null */
+    @Test
+    public void testCanCreateSecurityGroupTenantId() {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        neutron.setSecurityGroupTenantID(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, securityGroupHandler.canCreateNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron SecurityGroup already exist */
+    @Test
+    public void testCanCreateSecurityGroupExist() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        when(mockedApiConnector.findById(SecurityGroup.class, neutron.getSecurityGroupUUID())).thenReturn(mockSecurityGroup);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, securityGroupHandler.canCreateNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron SecurityGroup project null */
+    @Test
+    public void testCanCreateSecurityGroupProjectNull() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        when(mockedApiConnector.findById(SecurityGroup.class, neutron.getSecurityGroupUUID())).thenReturn(null);
+        when(mockedApiConnector.findById(Project.class, neutron.getSecurityGroupTenantID())).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND, securityGroupHandler.canCreateNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron SecurityGroup by same name exist */
+    @Test
+    public void testCanCreateSecurityGroupByName() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        when(mockedApiConnector.findById(SecurityGroup.class, neutron.getSecurityGroupUUID())).thenReturn(null);
+        when(mockedApiConnector.findById(Project.class, neutron.getSecurityGroupTenantID())).thenReturn(mockedProject);
+        when(mockedApiConnector.findByName(SecurityGroup.class, mockedProject, neutron.getSecurityGroupName())).thenReturn("name");
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, securityGroupHandler.canCreateNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron SecurityGroup returns status 200 ok */
+    @Test
+    public void testCanCreateSecurityGroupOK() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        when(mockedApiConnector.findById(SecurityGroup.class, neutron.getSecurityGroupUUID())).thenReturn(null);
+        when(mockedApiConnector.findById(Project.class, neutron.getSecurityGroupTenantID())).thenReturn(mockedProject);
+        when(mockedApiConnector.findByName(SecurityGroup.class, mockedProject, neutron.getSecurityGroupName())).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_OK, securityGroupHandler.canCreateNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron can delete SecurityGroup not found */
+    @Test
+    public void testCanDeleteSecurityGroupNotFound() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        when(mockedApiConnector.findById(SecurityGroup.class, neutron.getSecurityGroupUUID())).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_NOT_FOUND, securityGroupHandler.canDeleteNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron can delete SecurityGroup has port associated with it */
+    @Test
+    public void testCanDeleteSecurityGroupPortExist() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        when(mockedApiConnector.findById(SecurityGroup.class, neutron.getSecurityGroupUUID())).thenReturn(mockSecurityGroup);
+        List<ObjectReference<ApiPropertyBase>> vmiList = new ArrayList<ObjectReference<ApiPropertyBase>>();
+        when(mockSecurityGroup.getVirtualMachineInterfaceBackRefs()).thenReturn(vmiList);
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, securityGroupHandler.canDeleteNeutronSecurityGroup(neutron));
+    }
+
+    /* Test method to check if neutron can delete SecurityGroup returns status ok */
+    @Test
+    public void testCanDeleteSecurityGroupOK() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSecurityGroup neutron = defaultSecurityGroupObject();
+        when(mockedApiConnector.findById(SecurityGroup.class, neutron.getSecurityGroupUUID())).thenReturn(mockSecurityGroup);
+        when(mockSecurityGroup.getVirtualMachineInterfaceBackRefs()).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_OK, securityGroupHandler.canDeleteNeutronSecurityGroup(neutron));
+    }
+}
index f5964b7d5896ea2158dfab501d33125b21cde5f7..35aeb655124be6323583efb4b4373eb735f609b2 100755 (executable)
@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.ApiPropertyBase;
 import net.juniper.contrail.api.ObjectReference;
 import net.juniper.contrail.api.types.SubnetType;
 import net.juniper.contrail.api.types.VirtualNetwork;
@@ -51,8 +52,8 @@ public class SubnetHandlerTest {
         NeutronSubnet subnet = new NeutronSubnet();
         List<NeutronSubnet_IPAllocationPool> allocationPools = new ArrayList<NeutronSubnet_IPAllocationPool>();
         NeutronSubnet_IPAllocationPool neutronSubnet_IPAllocationPool = new NeutronSubnet_IPAllocationPool();
-        subnet.setNetworkUUID("6b9570f2-17b1-4fc399ec-1b7f7778a29b");
-        subnet.setSubnetUUID("7b9570f2-17b1-4fc399ec-1b7f7778a29b");
+        subnet.setNetworkUUID("6b9570f2-17b1-4fc3-99ec-1b7f7778a29b");
+        subnet.setSubnetUUID("7b9570f2-17b1-4fc3-99ec-1b7f7778a29b");
         subnet.setCidr("10.0.0.0/24");
         subnet.setGatewayIP("10.0.0.254");
         neutronSubnet_IPAllocationPool.setPoolStart("10.0.0.1");
@@ -84,9 +85,9 @@ public class SubnetHandlerTest {
     @Test
     public void testCanCreateSubnetCidrNull() {
         Activator.apiConnector = mockedApiConnector;
-        NeutronSubnet subnet = new NeutronSubnet();
-        subnet.setCidr(null);
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canCreateSubnet(subnet));
+        NeutronSubnet neutronSubnet = defaultSubnetObject();
+        neutronSubnet.setCidr(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canCreateSubnet(neutronSubnet));
     }
 
     /* Test method to check if Gateway Ip is invalid */
@@ -98,36 +99,22 @@ public class SubnetHandlerTest {
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canCreateSubnet(neutronSubnet));
     }
 
-    /* Test method to check if virtual network is null */
-
-    @Test
-    public void testCanCreateSubnetVirtualNetworkNull() throws IOException {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronSubnet neutronSubnet = defaultSubnetObject();
-        when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, subnetHandler.canCreateSubnet(neutronSubnet));
-    }
-
-    /* Test method to check if subnet can be created with IpamRefs null */
+    /* Test method to check if gateway ip is valide for create */
     @Test
-    public void testCanCreateSubnet() throws IOException {
+    public void testcancreateSubnetInvalidGateway() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronSubnet neutronSubnet = defaultSubnetObject();
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronSubnet.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(null);
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
-        assertEquals(HttpURLConnection.HTTP_OK, subnetHandler.canCreateSubnet(neutronSubnet));
+        neutronSubnet.setGatewayIP("20.0.0.200");
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canCreateSubnet(neutronSubnet));
     }
 
-    /* Test method to check if subnet creation returns Internal Server Error */
+    /* Test method to check if virtual network is null */
     @Test
-    public void testCanCreateSubnetException() throws IOException {
+    public void testCanCreateSubnetVirtualNetworkNull() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronSubnet neutronSubnet = defaultSubnetObject();
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronSubnet.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
         when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(null);
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(false);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, subnetHandler.canCreateSubnet(neutronSubnet));
+        assertEquals(HttpURLConnection.HTTP_FORBIDDEN, subnetHandler.canCreateSubnet(neutronSubnet));
     }
 
     /* Test method to check if subnet already exists */
@@ -156,6 +143,17 @@ public class SubnetHandlerTest {
         assertEquals(HttpURLConnection.HTTP_FORBIDDEN, subnetHandler.canCreateSubnet(neutronSubnet));
     }
 
+    /* Test method to check if subnet can be created with return status OK */
+    @Test
+    public void testCanCreateSubnetOK() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSubnet neutronSubnet = defaultSubnetObject();
+        when(mockedApiConnector.findById(VirtualNetwork.class, neutronSubnet.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
+        when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(null);
+        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
+        assertEquals(HttpURLConnection.HTTP_OK, subnetHandler.canCreateSubnet(neutronSubnet));
+    }
+
     /* Test method to check ipPrefix */
     @Test
     public void testGetIpPrefix() {
@@ -184,16 +182,6 @@ public class SubnetHandlerTest {
         assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canUpdateSubnet(null, null));
     }
 
-    /* Test method to check if updated subnet gateway ip is empty */
-    @Test
-    public void testcanUpdateSubnetGatewayEmpty() {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronSubnet neutronSubnet = defaultSubnetObject();
-        NeutronSubnet deltaSubnet = new NeutronSubnet();
-        deltaSubnet.setGatewayIP("");
-        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canUpdateSubnet(deltaSubnet, neutronSubnet));
-    }
-
     /* Test method to check if gateway ip is valide for update */
     @Test
     public void testcanUpdateSubnetInvalidGateway() throws IOException {
@@ -207,20 +195,6 @@ public class SubnetHandlerTest {
     /* Test method to check if subnets do not exist */
     @Test
     public void testcanUpdateSubnetNotFound() throws IOException {
-        Activator.apiConnector = mockedApiConnector;
-        NeutronSubnet neutronSubnet = defaultSubnetObject();
-        NeutronSubnet deltaSubnet = defaultDeltaSubnet();
-        when(mockedApiConnector.findById(VirtualNetwork.class, neutronSubnet.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, subnetHandler.canUpdateSubnet(deltaSubnet, neutronSubnet));
-    }
-
-    /*
-     * Test method to check if subnet already exists and update subnet
-     * successfully
-     */
-    @Test
-    public void testcanUpdateSubnetOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronSubnet neutronSubnet = defaultSubnetObject();
         NeutronSubnet deltaSubnet = defaultDeltaSubnet();
@@ -234,7 +208,7 @@ public class SubnetHandlerTest {
         List<String> temp = new ArrayList<String>();
         for (int i = 0; i < 1; i++) {
             subnetType.setSubnet(type);
-            subnetType.setSubnetUuid("7b9570f2-17b1-4fc399ec-1b7f7778a29b");
+            subnetType.setSubnetUuid("9b9570f2-17b1-4fc3-99ec-1b7f7778a29b");
             subnetType.getSubnet().setIpPrefix("10.0.0.0");
             subnetType.getSubnet().setIpPrefixLen(24);
             subnets.add(subnetType);
@@ -243,13 +217,15 @@ public class SubnetHandlerTest {
             ipamRefs.add(ref);
         }
         when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(ipamRefs);
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
-        assertEquals(HttpURLConnection.HTTP_OK, subnetHandler.canUpdateSubnet(deltaSubnet, neutronSubnet));
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canUpdateSubnet(deltaSubnet, neutronSubnet));
     }
 
-    /* Test method to check if subnet already exists and update subnet fails */
+    /*
+     * Test method to check if subnet already exists and update subnet
+     * successfully
+     */
     @Test
-    public void testcanUpdateSubnetFail() throws IOException {
+    public void testcanUpdateSubnetOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronSubnet neutronSubnet = defaultSubnetObject();
         NeutronSubnet deltaSubnet = defaultDeltaSubnet();
@@ -263,7 +239,7 @@ public class SubnetHandlerTest {
         List<String> temp = new ArrayList<String>();
         for (int i = 0; i < 1; i++) {
             subnetType.setSubnet(type);
-            subnetType.setSubnetUuid("7b9570f2-17b1-4fc399ec-1b7f7778a29b");
+            subnetType.setSubnetUuid("7b9570f2-17b1-4fc3-99ec-1b7f7778a29b");
             subnetType.getSubnet().setIpPrefix("10.0.0.0");
             subnetType.getSubnet().setIpPrefixLen(24);
             subnets.add(subnetType);
@@ -272,39 +248,35 @@ public class SubnetHandlerTest {
             ipamRefs.add(ref);
         }
         when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(ipamRefs);
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(false);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, subnetHandler.canUpdateSubnet(deltaSubnet, neutronSubnet));
+        assertEquals(HttpURLConnection.HTTP_OK, subnetHandler.canUpdateSubnet(deltaSubnet, neutronSubnet));
     }
 
-    /* Tets method to check if a subnet deletion terminate with Internal_Error */
+    /* Test method to check if subnets do not exist */
     @Test
-    public void testCanDeleteSubnet() throws IOException {
+    public void testcanUpdateSubnetFailed() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronSubnet neutronSubnet = defaultSubnetObject();
+        NeutronSubnet deltaSubnet = defaultDeltaSubnet();
         when(mockedApiConnector.findById(VirtualNetwork.class, neutronSubnet.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
         when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(null);
-        assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, subnetHandler.canDeleteSubnet(neutronSubnet));
-
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canUpdateSubnet(deltaSubnet, neutronSubnet));
     }
-
-    /*
-     * Tets method to check if a subnet is deleted from the network when
-     * vnSubnetsType.getIpamSubnets() is not null
-     */
+    /* Test method to check if last subnet delete with floating Ip poool existing  */
     @Test
-    public void testCanDeleteSubnetTrue() throws IOException {
+    public void testCanDeleteSubnetFPinUse() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronSubnet neutronSubnet = defaultSubnetObject();
         when(mockedApiConnector.findById(VirtualNetwork.class, neutronSubnet.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        List<ObjectReference<VnSubnetsType>> ipamRefs = mockedVirtualNetwork.getNetworkIpam();
         VnSubnetsType vnSubnetType = new VnSubnetsType();
         ObjectReference<VnSubnetsType> ref = new ObjectReference<>();
+        List<ObjectReference<VnSubnetsType>> ipamRefs = new ArrayList<ObjectReference<VnSubnetsType>>();
         List<VnSubnetsType.IpamSubnetType> subnets = new ArrayList<VnSubnetsType.IpamSubnetType>();
         VnSubnetsType.IpamSubnetType subnetType = new VnSubnetsType.IpamSubnetType();
         SubnetType type = new SubnetType();
         List<String> temp = new ArrayList<String>();
         for (int i = 0; i < 1; i++) {
             subnetType.setSubnet(type);
+            subnetType.setSubnetUuid("7b9570f2-17b1-4fc3-99ec-1b7f7778a29b");
             subnetType.getSubnet().setIpPrefix("10.0.0.0");
             subnetType.getSubnet().setIpPrefixLen(24);
             subnets.add(subnetType);
@@ -312,40 +284,28 @@ public class SubnetHandlerTest {
             ref.setReference(temp, vnSubnetType, "", "");
             ipamRefs.add(ref);
         }
-        VnSubnetsType.IpamSubnetType subnetType1 = new VnSubnetsType.IpamSubnetType();
-        SubnetType type1 = new SubnetType();
-        for (int i = 0; i < 1; i++) {
-            subnetType1.setSubnet(type1);
-            subnetType1.getSubnet().setIpPrefix("10.0.1.0");
-            subnetType1.getSubnet().setIpPrefixLen(24);
-            subnets.add(subnetType1);
-            vnSubnetType.addIpamSubnets(subnetType1);
-            ref.setReference(temp, vnSubnetType, "", "");
-            ipamRefs.add(ref);
-        }
         when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(ipamRefs);
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
-        assertEquals(HttpURLConnection.HTTP_NO_CONTENT, subnetHandler.canDeleteSubnet(neutronSubnet));
+        List<ObjectReference<ApiPropertyBase>> fpPoolList = new ArrayList<ObjectReference<ApiPropertyBase>>();
+        when(mockedVirtualNetwork.getFloatingIpPools()).thenReturn(fpPoolList);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canDeleteSubnet(neutronSubnet));
     }
 
-    /*
-     * Test method to check if a subnet is deleted from the network when
-     * vnSubnetsType.getIpamSubnets() is null
-     */
+    /* Test method to check if subnets delete return status OK(200) */
     @Test
-    public void testCanDeleteSubnetNullGetIpamSubnets() throws IOException {
+    public void testCanDeleteSubnetOK() throws IOException {
         Activator.apiConnector = mockedApiConnector;
         NeutronSubnet neutronSubnet = defaultSubnetObject();
         when(mockedApiConnector.findById(VirtualNetwork.class, neutronSubnet.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
-        List<ObjectReference<VnSubnetsType>> ipamRefs = mockedVirtualNetwork.getNetworkIpam();
         VnSubnetsType vnSubnetType = new VnSubnetsType();
         ObjectReference<VnSubnetsType> ref = new ObjectReference<>();
+        List<ObjectReference<VnSubnetsType>> ipamRefs = new ArrayList<ObjectReference<VnSubnetsType>>();
         List<VnSubnetsType.IpamSubnetType> subnets = new ArrayList<VnSubnetsType.IpamSubnetType>();
         VnSubnetsType.IpamSubnetType subnetType = new VnSubnetsType.IpamSubnetType();
         SubnetType type = new SubnetType();
         List<String> temp = new ArrayList<String>();
         for (int i = 0; i < 1; i++) {
             subnetType.setSubnet(type);
+            subnetType.setSubnetUuid("7b9570f2-17b1-4fc3-99ec-1b7f7778a29b");
             subnetType.getSubnet().setIpPrefix("10.0.0.0");
             subnetType.getSubnet().setIpPrefixLen(24);
             subnets.add(subnetType);
@@ -354,7 +314,17 @@ public class SubnetHandlerTest {
             ipamRefs.add(ref);
         }
         when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(ipamRefs);
-        when(mockedApiConnector.update(mockedVirtualNetwork)).thenReturn(true);
-        assertEquals(HttpURLConnection.HTTP_NO_CONTENT, subnetHandler.canDeleteSubnet(neutronSubnet));
+        when(mockedVirtualNetwork.getFloatingIpPools()).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_OK, subnetHandler.canDeleteSubnet(neutronSubnet));
+    }
+
+    /* Tets method to check if a subnet deletion subnet does not exist */
+    @Test
+    public void testCanDeleteSubnet() throws IOException {
+        Activator.apiConnector = mockedApiConnector;
+        NeutronSubnet neutronSubnet = defaultSubnetObject();
+        when(mockedApiConnector.findById(VirtualNetwork.class, neutronSubnet.getNetworkUUID())).thenReturn(mockedVirtualNetwork);
+        when(mockedVirtualNetwork.getNetworkIpam()).thenReturn(null);
+        assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, subnetHandler.canDeleteSubnet(neutronSubnet));
     }
 }
\ No newline at end of file