You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by re...@apache.org on 2015/11/18 12:11:16 UTC

[2/7] git commit: updated refs/heads/master to 95ae796

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java
new file mode 100644
index 0000000..143a741
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java
@@ -0,0 +1,40 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.util;
+
+import com.cloud.network.Network;
+import com.cloud.network.manager.NuageVspManager;
+import com.cloud.offering.NetworkOffering;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+
+public class NuageVspUtil {
+
+    public static String getPreConfiguredDomainTemplateName(ConfigurationDao configDao, Network network, NetworkOffering networkOffering) {
+        String configKey;
+        if (network.getVpcId() != null) {
+            configKey = NuageVspManager.NuageVspVpcDomainTemplateName.key();
+        } else if (networkOffering.getGuestType() == Network.GuestType.Shared) {
+            configKey = NuageVspManager.NuageVspSharedNetworkDomainTemplateName.key();
+        } else {
+            configKey = NuageVspManager.NuageVspIsolatedNetworkDomainTemplateName.key();
+        }
+        return configDao.getValue(configKey);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java
index 76b9823..57935b9 100644
--- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java
+++ b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java
@@ -19,28 +19,101 @@
 
 package net.nuage.vsp.acs;
 
+import net.nuage.vsp.acs.client.NuageVspApiClient;
+import net.nuage.vsp.acs.client.NuageVspElementClient;
+import net.nuage.vsp.acs.client.NuageVspGuruClient;
+import net.nuage.vsp.acs.client.NuageVspManagerClient;
+import net.nuage.vsp.acs.client.NuageVspSyncClient;
+import org.apache.log4j.Logger;
+
+import javax.naming.ConfigurationException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 
 public class NuageVspPluginClientLoader {
 
-    private static NuageVspPluginClientLoader nuageVspPluginClientClassloader;
-    private ClassLoader loader = null;
+    private ClassLoader _loader = null;
+    private static final Logger s_logger = Logger.getLogger(NuageVspPluginClientLoader.class);
+
+    private NuageVspApiClient _nuageVspApiClient;
+    private NuageVspElementClient _nuageVspElementClient;
+    private NuageVspGuruClient _nuageVspGuruClient;
+    private NuageVspManagerClient _nuageVspManagerClient;
+    private NuageVspSyncClient _nuageVspSyncClient;
+
+    private static final String NUAGE_PLUGIN_CLIENT_JAR_FILE = "/usr/share/nuagevsp/lib/nuage-vsp-acs-client.jar";
+    private static final String NUAGE_VSP_API_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspApiClientImpl";
+    private static final String NUAGE_VSP_SYNC_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspSyncClientImpl";
+    private static final String NUAGE_VSP_ELEMENT_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspElementClientImpl";
+    private static final String NUAGE_VSP_GURU_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspGuruClientImpl";
+    private static final String NUAGE_VSP_MANAGER_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspManagerClientImpl";
 
     private NuageVspPluginClientLoader(String nuagePluginClientJarLocation) {
         try {
-            loader = URLClassLoader.newInstance(new URL[] {new URL("jar:file:" + nuagePluginClientJarLocation + "!/")},
+            _loader = URLClassLoader.newInstance(new URL[] {new URL("jar:file:" + nuagePluginClientJarLocation + "!/")},
                     getClass().getClassLoader());
         } catch (MalformedURLException e) {
-            e.printStackTrace();
+            throw new IllegalArgumentException(e);
         }
     }
 
-    public static ClassLoader getClassLoader(String nuagePluginClientJarLocation) {
-        if (nuageVspPluginClientClassloader == null) {
-            nuageVspPluginClientClassloader = new NuageVspPluginClientLoader(nuagePluginClientJarLocation);
+    public static NuageVspPluginClientLoader getClientLoader(String relativePath, String[] cmsUserInfo, int numRetries, int retryInterval,
+            String nuageVspCmsId) throws ConfigurationException {
+        NuageVspPluginClientLoader nuageVspPluginClientClassloader = new NuageVspPluginClientLoader(NUAGE_PLUGIN_CLIENT_JAR_FILE);
+        nuageVspPluginClientClassloader.loadClasses(relativePath, cmsUserInfo, numRetries, retryInterval, nuageVspCmsId);
+        return nuageVspPluginClientClassloader;
+    }
+
+    private void loadClasses(String relativePath, String[] cmsUserInfo, int numRetries, int retryInterval, String nuageVspCmsId) throws ConfigurationException {
+        try {
+            Class<?> nuageVspApiClientClass = Class.forName(NUAGE_VSP_API_CLIENT_IMPL, true, _loader);
+            Class<?> nuageVspSyncClientClass = Class.forName(NUAGE_VSP_SYNC_CLIENT_IMPL, true, _loader);
+            Class<?> nuageVspGuruClientClass = Class.forName(NUAGE_VSP_GURU_CLIENT_IMPL, true, _loader);
+            Class<?> nuageVspElementClientClass = Class.forName(NUAGE_VSP_ELEMENT_CLIENT_IMPL, true, _loader);
+            Class<?> nuageVspManagerClientClass = Class.forName(NUAGE_VSP_MANAGER_CLIENT_IMPL, true, _loader);
+
+            //Instantiate the instances
+            _nuageVspApiClient = (NuageVspApiClient)nuageVspApiClientClass.newInstance();
+            _nuageVspApiClient.setNuageVspHost(relativePath, cmsUserInfo, numRetries, retryInterval, nuageVspCmsId);
+            _nuageVspSyncClient = (NuageVspSyncClient)nuageVspSyncClientClass.newInstance();
+            _nuageVspSyncClient.setNuageVspApiClient(_nuageVspApiClient);
+            _nuageVspGuruClient = (NuageVspGuruClient)nuageVspGuruClientClass.newInstance();
+            _nuageVspGuruClient.setNuageVspApiClient(_nuageVspApiClient);
+            _nuageVspElementClient = (NuageVspElementClient)nuageVspElementClientClass.newInstance();
+            _nuageVspElementClient.setNuageVspApiClient(_nuageVspApiClient);
+            _nuageVspManagerClient = (NuageVspManagerClient)nuageVspManagerClientClass.newInstance();
+            _nuageVspManagerClient.setNuageVspApiClient(_nuageVspApiClient);
+        } catch (ClassNotFoundException cnfe) {
+            s_logger.error("Error while loading classes of Nuage VSP client", cnfe);
+            throw new ConfigurationException("Error while loading classes of Nuage VSP client");
+        } catch (InstantiationException ie) {
+            s_logger.error("Error while initializing classes of Nuage VSP client", ie);
+            throw new ConfigurationException("Error while initializing classes of Nuage VSP client");
+        } catch (IllegalAccessException iae) {
+            s_logger.error("Error while accessing classes of Nuage VSP client", iae);
+            throw new ConfigurationException("Error while accessing classes of Nuage VSP client");
         }
-        return nuageVspPluginClientClassloader.loader;
+
+    }
+
+    public NuageVspApiClient getNuageVspApiClient() {
+        return _nuageVspApiClient;
+    }
+
+    public NuageVspElementClient getNuageVspElementClient() {
+        return _nuageVspElementClient;
+    }
+
+    public NuageVspGuruClient getNuageVspGuruClient() {
+        return _nuageVspGuruClient;
+    }
+
+    public NuageVspManagerClient getNuageVspManagerClient() {
+        return _nuageVspManagerClient;
+    }
+
+    public NuageVspSyncClient getNuageVspSyncClient() {
+        return _nuageVspSyncClient;
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java
index d584c6f..d80daf9 100644
--- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java
+++ b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java
@@ -19,12 +19,14 @@
 
 package net.nuage.vsp.acs.client;
 
+import java.util.concurrent.ExecutionException;
+
 public interface NuageVspApiClient {
 
-    public void login() throws Exception;
+    void login() throws ExecutionException;
 
-    public void setNuageVspHost(String restRelativePath, String[] cmsUserInfo, int noofRetry, int retryInterval);
+    void setNuageVspHost(String restRelativePath, String[] cmsUserInfo, int noofRetry, int retryInterval, String nuageVspCmsId);
 
-    public String executeRestApi(String method, String resource, String resourceId, String childResource, Object entityDetails, String resourceFilter, String proxyUserUuid,
-            String proxyUserDomainuuid) throws Exception;
+    String executeRestApi(String method, String resource, String resourceId, String childResource, Object entityDetails, String resourceFilter, String proxyUserUuid,
+                                 String proxyUserDomainuuid) throws ExecutionException;
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java
index 27c613b..acd4256 100644
--- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java
+++ b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java
@@ -21,16 +21,22 @@ package net.nuage.vsp.acs.client;
 
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutionException;
 
 public interface NuageVspElementClient {
 
-    public void applyStaticNats(String networkDomainUuid, String vpcOrSubnetUuid, boolean isL3Network, List<Map<String, Object>> staticNatDetails) throws Exception;
+    boolean implement(long networkId, String networkDomainUuid, String networkUuid, String networkName, String vpcOrSubnetUuid, boolean isL2Network, boolean isL3Network,
+                             boolean isVpc, boolean isShared, String domainTemplateName, boolean isFirewallServiceSupported, List<String> dnsServers, List<Map<String, Object>> ingressFirewallRules,
+                             List<Map<String, Object>> egressFirewallRules, List<String> acsFipUuid, boolean egressDefaultPolicy) throws ExecutionException;
 
-    public void applyAclRules(String networkUuid, String networkDomainUuid, String vpcOrSubnetUuid, boolean isL3Network, List<Map<String, Object>> aclRules, boolean isVpc, long networkId)
-            throws Exception;
+    void applyStaticNats(String networkDomainUuid, String networkUuid, String vpcOrSubnetUuid, boolean isL3Network, boolean isVpc,
+                                List<Map<String, Object>> staticNatDetails) throws ExecutionException;
 
-    public void shutDownVpc(String domainUuid, String vpcUuid) throws Exception;
+    void applyAclRules(boolean isNetworkAcl, String networkUuid, String networkDomainUuid, String vpcOrSubnetUuid, String networkName, boolean isL2Network,
+                              List<Map<String, Object>> rules, long networkId, boolean egressDefaultPolicy, Boolean isAcsIngressAcl, boolean networkReset, String domainTemplateName) throws ExecutionException;
 
-    public <C extends NuageVspApiClient> void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient);
+    void shutdownVpc(String domainUuid, String vpcUuid, String domainTemplateName) throws ExecutionException;
+
+    <C extends NuageVspApiClient> void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient);
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java
index 3c7f33d..2b3a63a 100644
--- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java
+++ b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java
@@ -21,24 +21,23 @@ package net.nuage.vsp.acs.client;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
+import java.util.concurrent.ExecutionException;
 
 public interface NuageVspGuruClient {
 
-    public void implement(String networkDomainName, String networkDomainPath, String networkDomainUuid, String networkAccountName, String networkAccountUuid, String networkName,
-            String networkCidr, String networkGateway, String networkUuid, boolean isL3Network, String vpcName, String vpcUuid, boolean defaultEgressPolicy,
-            Collection<String> ipAddressRange) throws Exception;
+    void implement(String networkDomainName, String networkDomainPath, String networkDomainUuid, String networkAccountName, String networkAccountUuid, String networkName,
+                          String networkCidr, String networkGateway, Long networkAclId, List<String> dnsServers, List<String> gatewaySystemIds, boolean isL3Network, boolean isVpc, boolean isSharedNetwork,
+                          String networkUuid, String vpcName, String vpcUuid, boolean defaultEgressPolicy, Collection<String[]> ipAddressRange, String domainTemplateName) throws ExecutionException;
 
-    public List<Map<String, String>> reserve(String nicUuid, String nicMacAddress, String networkUuid, boolean isL3Network, String vpcUuid, String networkDomainUuid,
-            String networksAccountUuid, boolean isDomainRouter, String domainRouterIp, String vmInstanceName, String vmUuid) throws Exception;
+    void reserve(String nicUuid, String nicMacAddress, String networkUuid, boolean isL3Network, boolean isSharedNetwork, String vpcUuid, String networkDomainUuid,
+                                             String networksAccountUuid, boolean isDomainRouter, String domainRouterIp, String vmInstanceName, String vmUuid, boolean useStaticIp, String staticIp, String staticNatIpUuid,
+                                             String staticNatIpAddress, boolean isStaticNatIpAllocated, boolean isOneToOneNat, String staticNatVlanUuid, String staticNatVlanGateway, String staticNatVlanNetmask) throws ExecutionException;
 
-    public void release(String networkUuid, String vmUuid, String vmInstanceName) throws Exception;
+    void deallocate(String networkUuid, String nicFrmDdUuid, String nicMacAddress, String nicIp4Address, boolean isL3Network, boolean isSharedNetwork,
+                           String vpcUuid, String networksDomainUuid, String vmInstanceName, String vmUuid, boolean isExpungingState) throws ExecutionException;
 
-    public void deallocate(String networkUuid, String nicFrmDdUuid, String nicMacAddress, String nicIp4Address, boolean isL3Network, String vpcUuid, String networksDomainUuid,
-            String vmInstanceName, String vmUuid) throws Exception;
+    void trash(String domainUuid, String networkUuid, boolean isL3Network, boolean isSharedNetwork, String vpcUuid, String domainTemplateName) throws ExecutionException;
 
-    public void trash(String domainUuid, String networkUuid, boolean isL3Network, String vpcUuid) throws Exception;
-
-    public void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient);
+    void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient);
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspManagerClient.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspManagerClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspManagerClient.java
new file mode 100644
index 0000000..f134111
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspManagerClient.java
@@ -0,0 +1,42 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package net.nuage.vsp.acs.client;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+
+public interface NuageVspManagerClient {
+
+    Pair<Boolean, String> auditNuageVspCmsId(String nuageVspCmsId, boolean auditOnly) throws ExecutionException;
+
+    String registerNuageVspCmsId() throws ExecutionException;
+
+    boolean unregisterNuageVspCmsId(String nuageVspCmsId) throws ExecutionException;
+
+    boolean isSupportedApiVersion(String version);
+
+    Map<String, Object> getClientDefaults() throws ExecutionException;
+
+    boolean syncDomainWithNuageVsp(String domainUuid, String domainName, String domainPath, boolean add, boolean remove) throws ExecutionException;
+
+    <C extends NuageVspApiClient> void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient);
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java
index b9400f1..951ee5a 100644
--- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java
+++ b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java
@@ -19,9 +19,11 @@
 
 package net.nuage.vsp.acs.client;
 
+import java.util.concurrent.ExecutionException;
+
 public interface NuageVspSyncClient {
 
-    public void syncWithNuageVsp(String nuageVspEntity) throws Exception;
+    void syncWithNuageVsp(String nuageVspEntity) throws ExecutionException;
 
-    public void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient);
+    void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient);
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java
new file mode 100644
index 0000000..817ab7a
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java
@@ -0,0 +1,151 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.agent.api;
+
+import com.cloud.agent.api.element.ApplyAclRuleVspCommand;
+import com.cloud.agent.api.element.ApplyStaticNatVspCommand;
+import com.cloud.agent.api.element.ImplementVspCommand;
+import com.cloud.agent.api.element.ShutDownVpcVspCommand;
+import com.cloud.agent.api.guru.DeallocateVmVspCommand;
+import com.cloud.agent.api.guru.ImplementNetworkVspCommand;
+import com.cloud.agent.api.guru.ReserveVmInterfaceVspCommand;
+import com.cloud.agent.api.guru.TrashNetworkVspCommand;
+import com.cloud.agent.api.manager.SupportedApiVersionCommand;
+import com.cloud.agent.api.sync.SyncDomainCommand;
+import com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand;
+import com.cloud.agent.api.sync.SyncVspCommand;
+import com.google.common.collect.Maps;
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+public class CommandsTest {
+
+    @Test
+    public void testCommandEquals() throws IllegalAccessException, InvocationTargetException, InstantiationException {
+        ApplyAclRuleVspCommand applyAclRuleVspCommand = fillBuilderObject(new ApplyAclRuleVspCommand.Builder()).build();
+        ApplyAclRuleVspCommand otherApplyAclRuleVspCommand = fillBuilderObject(new ApplyAclRuleVspCommand.Builder()).build();
+
+        ApplyStaticNatVspCommand applyStaticNatVspCommand = fillBuilderObject(new ApplyStaticNatVspCommand.Builder()).build();
+        ApplyStaticNatVspCommand otherApplyStaticNatVspCommand = fillBuilderObject(new ApplyStaticNatVspCommand.Builder()).build();
+
+        ImplementVspCommand implementVspCommand = fillBuilderObject(new ImplementVspCommand.Builder()).build();
+        ImplementVspCommand otherImplementVspCommand = fillBuilderObject(new ImplementVspCommand.Builder()).build();
+
+        ShutDownVpcVspCommand shutDownVpcVspCommand = fillBuilderObject(new ShutDownVpcVspCommand.Builder()).build();
+        ShutDownVpcVspCommand otherShutDownVpcVspCommand = fillBuilderObject(new ShutDownVpcVspCommand.Builder()).build();
+
+        DeallocateVmVspCommand deallocateVmVspCommand = fillBuilderObject(new DeallocateVmVspCommand.Builder()).build();
+        DeallocateVmVspCommand otherDeallocateVmVspCommand = fillBuilderObject(new DeallocateVmVspCommand.Builder()).build();
+
+        ImplementNetworkVspCommand implementNetworkVspCommand = fillBuilderObject(new ImplementNetworkVspCommand.Builder()).build();
+        ImplementNetworkVspCommand otherImplementNetworkVspCommand = fillBuilderObject(new ImplementNetworkVspCommand.Builder()).build();
+
+        ReserveVmInterfaceVspCommand reserveVmInterfaceVspCommand = fillBuilderObject(new ReserveVmInterfaceVspCommand.Builder()).build();
+        ReserveVmInterfaceVspCommand otherReserveVmInterfaceVspCommand = fillBuilderObject(new ReserveVmInterfaceVspCommand.Builder()).build();
+
+        TrashNetworkVspCommand trashNetworkVspCommand = fillBuilderObject(new TrashNetworkVspCommand.Builder()).build();
+        TrashNetworkVspCommand otherTrashNetworkVspCommand  = fillBuilderObject(new TrashNetworkVspCommand.Builder()).build();
+
+        SupportedApiVersionCommand supportedApiVersionCommand = new SupportedApiVersionCommand("3.2");
+        SupportedApiVersionCommand otherSupportedApiVersionCommand = new SupportedApiVersionCommand("3.2");
+
+        SyncDomainCommand syncDomainCommand = fillObject(SyncDomainCommand.class);
+        SyncDomainCommand otherSyncDomainCommand = fillObject(SyncDomainCommand.class);
+
+        SyncNuageVspCmsIdCommand syncNuageVspCmsIdCommand = fillObject(SyncNuageVspCmsIdCommand.class);
+        SyncNuageVspCmsIdCommand otherSyncNuageVspCmsIdCommand = fillObject(SyncNuageVspCmsIdCommand.class);
+
+        SyncVspCommand syncVspCommand = fillObject(SyncVspCommand.class);
+        SyncVspCommand otherSyncVspCommand = fillObject(SyncVspCommand.class);
+
+        PingNuageVspCommand pingNuageVspCommand = fillObject(PingNuageVspCommand.class);
+        PingNuageVspCommand otherPingNuageVspCommand = fillObject(PingNuageVspCommand.class);
+
+        VspResourceCommand vspResourceCommand = fillObject(VspResourceCommand.class);
+        VspResourceCommand otherVspResourceCommand = fillObject(VspResourceCommand.class);
+
+        new EqualsTester()
+                .addEqualityGroup(applyAclRuleVspCommand, otherApplyAclRuleVspCommand)
+                .addEqualityGroup(applyStaticNatVspCommand, otherApplyStaticNatVspCommand)
+                .addEqualityGroup(implementVspCommand, otherImplementVspCommand)
+                .addEqualityGroup(shutDownVpcVspCommand, otherShutDownVpcVspCommand)
+                .addEqualityGroup(deallocateVmVspCommand, otherDeallocateVmVspCommand)
+                .addEqualityGroup(implementNetworkVspCommand, otherImplementNetworkVspCommand)
+                .addEqualityGroup(reserveVmInterfaceVspCommand, otherReserveVmInterfaceVspCommand)
+                .addEqualityGroup(trashNetworkVspCommand, otherTrashNetworkVspCommand)
+                .addEqualityGroup(supportedApiVersionCommand, otherSupportedApiVersionCommand)
+                .addEqualityGroup(syncDomainCommand, otherSyncDomainCommand)
+                .addEqualityGroup(syncNuageVspCmsIdCommand, otherSyncNuageVspCmsIdCommand)
+                .addEqualityGroup(syncVspCommand, otherSyncVspCommand)
+                .addEqualityGroup(pingNuageVspCommand, otherPingNuageVspCommand)
+                .addEqualityGroup(vspResourceCommand, otherVspResourceCommand)
+                .testEquals();
+    }
+
+    private <T extends CmdBuilder> T fillBuilderObject(T obj) throws IllegalAccessException, InvocationTargetException {
+        Class clazz = obj.getClass();
+        for (Method method : clazz.getDeclaredMethods()) {
+            if (method.getParameterTypes().length == 1) {
+                Class paramType = method.getParameterTypes()[0];
+                if (isNumericType(paramType)) {
+                    if (Long.class.isAssignableFrom(paramType)) {
+                        method.invoke(obj, Long.valueOf(method.getName().length()));
+                    } else {
+                        method.invoke(obj, method.getName().length());
+                    }
+                } else if (String.class.isAssignableFrom(paramType)) {
+                    method.invoke(obj, method.getName());
+                } else if (Boolean.class.isAssignableFrom(paramType) || boolean.class.isAssignableFrom(paramType)) {
+                    method.invoke(obj, method.getName().length() % 2 == 0);
+                }
+            }
+        }
+        return obj;
+    }
+
+    private <T> T fillObject(Class<T> clazz) throws IllegalAccessException, InvocationTargetException, InstantiationException {
+        Constructor constructor = clazz.getDeclaredConstructors()[0];
+        Object[] constructorArgs = new Object[constructor.getParameterTypes().length];
+        for (int i = 0; i < constructor.getParameterTypes().length; i++) {
+            Class constructorArgType = constructor.getParameterTypes()[i];
+            if (isNumericType(constructorArgType)) {
+                constructorArgs[i] = constructorArgType.getName().length();
+            } else if (String.class.isAssignableFrom(constructorArgType)) {
+                constructorArgs[i] = constructorArgType.getName();
+            } else if (Boolean.class.isAssignableFrom(constructorArgType) || boolean.class.isAssignableFrom(constructorArgType)) {
+                constructorArgs[i] = constructorArgType.getName().length() % 2 == 0;
+            } else if (Map.class.isAssignableFrom(constructorArgType)) {
+                constructorArgs[i] = Maps.newHashMap();
+            } else {
+                constructorArgs[i] = null;
+            }
+        }
+        return (T) constructor.newInstance(constructorArgs);
+    }
+
+    private boolean isNumericType(Class type) {
+        return Number.class.isAssignableFrom(type) || int.class.isAssignableFrom(type) || long.class.isAssignableFrom(type);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java
index 08d685f..bbdf764 100644
--- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java
+++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java
@@ -19,35 +19,10 @@
 
 package com.cloud.network.element;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.naming.ConfigurationException;
-
-import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
 import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.Command;
-import com.cloud.agent.api.element.ApplyAclRuleVspAnswer;
-import com.cloud.agent.api.element.ApplyStaticNatVspAnswer;
 import com.cloud.deploy.DeployDestination;
-import com.cloud.domain.Domain;
 import com.cloud.domain.DomainVO;
 import com.cloud.domain.dao.DomainDao;
 import com.cloud.exception.CloudException;
@@ -64,11 +39,20 @@ import com.cloud.network.NetworkModel;
 import com.cloud.network.Networks.BroadcastDomainType;
 import com.cloud.network.Networks.TrafficType;
 import com.cloud.network.NuageVspDeviceVO;
+import com.cloud.network.PhysicalNetwork;
+import com.cloud.network.dao.FirewallRulesDao;
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.dao.IPAddressVO;
 import com.cloud.network.dao.NetworkServiceMapDao;
 import com.cloud.network.dao.NuageVspDao;
+import com.cloud.network.dao.PhysicalNetworkDao;
+import com.cloud.network.dao.PhysicalNetworkVO;
+import com.cloud.network.manager.NuageVspManager;
 import com.cloud.network.rules.FirewallRule;
+import com.cloud.network.rules.FirewallRuleVO;
 import com.cloud.network.rules.StaticNat;
 import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.Vpc;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.offerings.NetworkOfferingVO;
 import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -76,6 +60,31 @@ import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
 import com.cloud.resource.ResourceManager;
 import com.cloud.user.Account;
 import com.cloud.vm.ReservationContext;
+import com.google.common.collect.Lists;
+import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+
+import javax.naming.ConfigurationException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import static com.cloud.network.manager.NuageVspManager.NuageVspIsolatedNetworkDomainTemplateName;
+import static com.cloud.network.manager.NuageVspManager.NuageVspSharedNetworkDomainTemplateName;
+import static com.cloud.network.manager.NuageVspManager.NuageVspVpcDomainTemplateName;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 public class NuageVspElementTest {
 
@@ -90,8 +99,13 @@ public class NuageVspElementTest {
     DomainDao domainDao = mock(DomainDao.class);
     NetworkOfferingDao ntwkOfferingDao = mock(NetworkOfferingDao.class);
     NetworkOfferingServiceMapDao ntwkOfferingSrvcDao = mock(NetworkOfferingServiceMapDao.class);
+    ConfigurationDao configDao = mock(ConfigurationDao.class);
+    NuageVspManager nuageVspManager = mock(NuageVspManager.class);
+    FirewallRulesDao firewallRulesDao = mock(FirewallRulesDao.class);
+    IPAddressDao ipAddressDao = mock(IPAddressDao.class);
+    PhysicalNetworkDao physNetDao = mock(PhysicalNetworkDao.class);
 
-    Answer<Object> genericAnswer = new Answer<Object>() {
+    org.mockito.stubbing.Answer<Object> genericAnswer = new org.mockito.stubbing.Answer<Object>() {
         public Object answer(InvocationOnMock invocation) {
             return null;
         }
@@ -108,15 +122,23 @@ public class NuageVspElementTest {
         element._ntwkOfferingSrvcDao = ntwkOfferingSrvcDao;
         element._domainDao = domainDao;
         element._ntwkOfferingDao = ntwkOfferingDao;
+        element._configDao = configDao;
+        element._nuageVspManager = nuageVspManager;
+        element._firewallRulesDao = firewallRulesDao;
+        element._ipAddressDao = ipAddressDao;
+        element._physicalNetworkDao = physNetDao;
 
         // Standard responses
         when(networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(true);
+        when(configDao.getValue(NuageVspIsolatedNetworkDomainTemplateName.key())).thenReturn("IsolatedDomainTemplate");
+        when(configDao.getValue(NuageVspVpcDomainTemplateName.key())).thenReturn("VpcDomainTemplate");
+        when(configDao.getValue(NuageVspSharedNetworkDomainTemplateName.key())).thenReturn("SharedDomainTemplate");
 
         element.configure("NuageVspTestElement", Collections.<String, Object> emptyMap());
     }
 
     @Test
-    public void testCcanHandle() {
+    public void testCanHandle() {
         final Network net = mock(Network.class);
         when(net.getBroadcastDomainType()).thenReturn(BroadcastDomainType.Vsp);
         when(net.getId()).thenReturn(NETWORK_ID);
@@ -150,7 +172,10 @@ public class NuageVspElementTest {
         final Network network = mock(Network.class);
         when(network.getBroadcastDomainType()).thenReturn(BroadcastDomainType.Vsp);
         when(network.getId()).thenReturn(NETWORK_ID);
+        when(network.getVpcId()).thenReturn(null);
         when(network.getBroadcastUri()).thenReturn(new URI(""));
+        when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID);
+        when(network.getDomainId()).thenReturn(NETWORK_ID);
         when(networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(true);
         when(ntwkSrvcDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(true);
 
@@ -161,14 +186,27 @@ public class NuageVspElementTest {
 
         DeployDestination deployDest = mock(DeployDestination.class);
 
-        final Domain dom = mock(Domain.class);
+        final DomainVO dom = mock(DomainVO.class);
         when(dom.getName()).thenReturn("domain");
+        when(domainDao.findById(NETWORK_ID)).thenReturn(dom);
         final Account acc = mock(Account.class);
         when(acc.getAccountName()).thenReturn("accountname");
         final ReservationContext context = mock(ReservationContext.class);
         when(context.getDomain()).thenReturn(dom);
         when(context.getAccount()).thenReturn(acc);
 
+        final HostVO host = mock(HostVO.class);
+        when(host.getId()).thenReturn(NETWORK_ID);
+        final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
+        when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
+        when(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[] {nuageVspDevice}));
+        when(hostDao.findById(NETWORK_ID)).thenReturn(host);
+
+        when(firewallRulesDao.listByNetworkPurposeTrafficType(NETWORK_ID, FirewallRule.Purpose.Firewall, FirewallRule.TrafficType.Ingress)).thenReturn(new ArrayList<FirewallRuleVO>());
+        when(firewallRulesDao.listByNetworkPurposeTrafficType(NETWORK_ID, FirewallRule.Purpose.Firewall, FirewallRule.TrafficType.Egress)).thenReturn(new ArrayList<FirewallRuleVO>());
+        when(ipAddressDao.listStaticNatPublicIps(NETWORK_ID)).thenReturn(new ArrayList<IPAddressVO>());
+        when(nuageVspManager.getDnsDetails(network)).thenReturn(new ArrayList<String>());
+
         assertTrue(element.implement(network, offering, deployDest, context));
     }
 
@@ -215,7 +253,7 @@ public class NuageVspElementTest {
         when(hostDao.findById(NETWORK_ID)).thenReturn(host);
 
         when(domainDao.findById(NETWORK_ID)).thenReturn(mock(DomainVO.class));
-        final ApplyStaticNatVspAnswer answer = mock(ApplyStaticNatVspAnswer.class);
+        final Answer answer = mock(Answer.class);
         when(answer.getResult()).thenReturn(true);
         when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
         assertTrue(element.applyStaticNats(network, new ArrayList<StaticNat>()));
@@ -244,7 +282,7 @@ public class NuageVspElementTest {
 
         when(domainDao.findById(NETWORK_ID)).thenReturn(mock(DomainVO.class));
 
-        final ApplyAclRuleVspAnswer answer = mock(ApplyAclRuleVspAnswer.class);
+        final Answer answer = mock(Answer.class);
         when(answer.getResult()).thenReturn(true);
         when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
         assertTrue(element.applyFWRules(network, new ArrayList<FirewallRule>()));
@@ -272,9 +310,44 @@ public class NuageVspElementTest {
         when(hostDao.findById(NETWORK_ID)).thenReturn(host);
 
         when(domainDao.findById(NETWORK_ID)).thenReturn(mock(DomainVO.class));
-        final ApplyAclRuleVspAnswer answer = mock(ApplyAclRuleVspAnswer.class);
+        final Answer answer = mock(Answer.class);
         when(answer.getResult()).thenReturn(true);
         when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
         assertTrue(element.applyNetworkACLs(network, new ArrayList<NetworkACLItem>()));
     }
+
+    @Test
+    public void testShutdownVpc() throws Exception {
+        final Vpc vpc = mock(Vpc.class);
+        when(vpc.getUuid()).thenReturn("aaaaaa");
+        when(vpc.getState()).thenReturn(Vpc.State.Inactive);
+        when(vpc.getDomainId()).thenReturn(NETWORK_ID);
+        when(vpc.getZoneId()).thenReturn(NETWORK_ID);
+
+        final DomainVO dom = mock(DomainVO.class);
+        when(dom.getName()).thenReturn("domain");
+        when(domainDao.findById(NETWORK_ID)).thenReturn(dom);
+        final Account acc = mock(Account.class);
+        when(acc.getAccountName()).thenReturn("accountname");
+        final ReservationContext context = mock(ReservationContext.class);
+        when(context.getDomain()).thenReturn(dom);
+        when(context.getAccount()).thenReturn(acc);
+
+        PhysicalNetworkVO physNet = mock(PhysicalNetworkVO.class);
+        when(physNet.getIsolationMethods()).thenReturn(Lists.newArrayList(PhysicalNetwork.IsolationMethod.VSP.name()));
+        when(physNet.getId()).thenReturn(NETWORK_ID);
+        when(physNetDao.listByZone(NETWORK_ID)).thenReturn(Lists.newArrayList(physNet));
+
+        final HostVO host = mock(HostVO.class);
+        when(host.getId()).thenReturn(NETWORK_ID);
+        final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
+        when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
+        when(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[] {nuageVspDevice}));
+        when(hostDao.findById(NETWORK_ID)).thenReturn(host);
+
+        final Answer answer = mock(Answer.class);
+        when(answer.getResult()).thenReturn(true);
+        when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
+        assertTrue(element.shutdownVpc(vpc, context));
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java
index f879f09..18c088f 100644
--- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java
+++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java
@@ -19,29 +19,9 @@
 
 package com.cloud.network.guru;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-
-import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
-import org.junit.Before;
-import org.junit.Test;
-
 import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.Command;
-import com.cloud.agent.api.guru.ImplementNetworkVspAnswer;
-import com.cloud.agent.api.guru.ReleaseVmVspAnswer;
-import com.cloud.agent.api.guru.ReserveVmInterfaceVspAnswer;
 import com.cloud.dc.DataCenter;
 import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.DataCenterVO;
@@ -63,11 +43,13 @@ import com.cloud.network.Networks.BroadcastDomainType;
 import com.cloud.network.Networks.Mode;
 import com.cloud.network.Networks.TrafficType;
 import com.cloud.network.NuageVspDeviceVO;
+import com.cloud.network.dao.IPAddressDao;
 import com.cloud.network.dao.NetworkDao;
 import com.cloud.network.dao.NetworkVO;
 import com.cloud.network.dao.NuageVspDao;
 import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.PhysicalNetworkVO;
+import com.cloud.network.manager.NuageVspManager;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.offerings.NetworkOfferingVO;
 import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -79,9 +61,28 @@ import com.cloud.vm.NicProfile;
 import com.cloud.vm.NicVO;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.VirtualMachineProfile;
 import com.cloud.vm.dao.NicDao;
+import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+
+import static com.cloud.network.manager.NuageVspManager.NuageVspIsolatedNetworkDomainTemplateName;
+import static com.cloud.network.manager.NuageVspManager.NuageVspSharedNetworkDomainTemplateName;
+import static com.cloud.network.manager.NuageVspManager.NuageVspVpcDomainTemplateName;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 public class NuageVspGuestNetworkGuruTest {
     private static final long NETWORK_ID = 42L;
@@ -98,6 +99,9 @@ public class NuageVspGuestNetworkGuruTest {
     NuageVspDao nuageVspDao = mock(NuageVspDao.class);
     HostDao hostDao = mock(HostDao.class);
     NetworkDao networkDao = mock(NetworkDao.class);
+    ConfigurationDao configDao = mock(ConfigurationDao.class);
+    IPAddressDao ipAddressDao = mock(IPAddressDao.class);
+    NuageVspManager nuageVspManager = mock(NuageVspManager.class);
 
     NetworkDao netdao = mock(NetworkDao.class);
     NuageVspGuestNetworkGuru guru;
@@ -105,7 +109,7 @@ public class NuageVspGuestNetworkGuruTest {
     @Before
     public void setUp() {
         guru = new NuageVspGuestNetworkGuru();
-        ((GuestNetworkGuru)guru)._physicalNetworkDao = physnetdao;
+        guru._physicalNetworkDao = physnetdao;
         guru._physicalNetworkDao = physnetdao;
         guru._nuageVspDao = nuageVspDao;
         guru._dcDao = dcdao;
@@ -119,12 +123,19 @@ public class NuageVspGuestNetworkGuruTest {
         guru._domainDao = domainDao;
         guru._nicDao = nicDao;
         guru._ntwkOfferingDao = ntwkOfferDao;
+        guru._configDao = configDao;
+        guru._ipAddressDao = ipAddressDao;
+        guru._nuageVspManager = nuageVspManager;
 
         final DataCenterVO dc = mock(DataCenterVO.class);
         when(dc.getNetworkType()).thenReturn(NetworkType.Advanced);
         when(dc.getGuestNetworkCidr()).thenReturn("10.1.1.1/24");
 
         when(dcdao.findById((Long)any())).thenReturn(dc);
+
+        when(configDao.getValue(NuageVspIsolatedNetworkDomainTemplateName.key())).thenReturn("IsolatedDomainTemplate");
+        when(configDao.getValue(NuageVspVpcDomainTemplateName.key())).thenReturn("VpcDomainTemplate");
+        when(configDao.getValue(NuageVspSharedNetworkDomainTemplateName.key())).thenReturn("SharedDomainTemplate");
     }
 
     @Test
@@ -146,10 +157,10 @@ public class NuageVspGuestNetworkGuruTest {
         when(offering.getTrafficType()).thenReturn(TrafficType.Management);
         assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet) == true);
 
-        // Not supported: GuestType Shared
+        // Supported: GuestType Shared
         when(offering.getTrafficType()).thenReturn(TrafficType.Guest);
         when(offering.getGuestType()).thenReturn(GuestType.Shared);
-        assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet) == true);
+        assertTrue(guru.canHandle(offering, NetworkType.Advanced, physnet) == true);
 
         // Not supported: Basic networking
         when(offering.getGuestType()).thenReturn(GuestType.Isolated);
@@ -236,7 +247,8 @@ public class NuageVspGuestNetworkGuruTest {
 
     @Test
     public void testReserve() throws InsufficientVirtualNetworkCapacityException, InsufficientAddressCapacityException, URISyntaxException {
-        final Network network = mock(Network.class);
+        final NetworkVO network = mock(NetworkVO.class);
+        when(network.getId()).thenReturn(NETWORK_ID);
         when(network.getUuid()).thenReturn("aaaaaa");
         when(network.getDataCenterId()).thenReturn(NETWORK_ID);
         when(network.getNetworkOfferingId()).thenReturn(NETWORK_ID);
@@ -262,10 +274,15 @@ public class NuageVspGuestNetworkGuruTest {
         when(nicvo.getUuid()).thenReturn("aaaa-fffff");
         when(nicDao.findById(NETWORK_ID)).thenReturn(nicvo);
 
-        final VirtualMachineProfile vm = mock(VirtualMachineProfile.class);
+        final VirtualMachine vm = mock(VirtualMachine.class);
+        when(vm.getId()).thenReturn(NETWORK_ID);
         when(vm.getType()).thenReturn(VirtualMachine.Type.User);
-        when(vm.getInstanceName()).thenReturn("");
-        when(vm.getUuid()).thenReturn("aaaa-bbbbb");
+
+        final VirtualMachineProfile vmProfile = mock(VirtualMachineProfile.class);
+        when(vmProfile.getType()).thenReturn(VirtualMachine.Type.User);
+        when(vmProfile.getInstanceName()).thenReturn("");
+        when(vmProfile.getUuid()).thenReturn("aaaa-bbbbb");
+        when(vmProfile.getVirtualMachine()).thenReturn(vm);
 
         NicProfile nicProfile = mock(NicProfile.class);
         when(nicProfile.getUuid()).thenReturn("aaa-bbbb");
@@ -283,51 +300,20 @@ public class NuageVspGuestNetworkGuruTest {
         when(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[] {nuageVspDevice}));
         when(hostDao.findById(NETWORK_ID)).thenReturn(host);
 
+        when(networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network);
+        when(ipAddressDao.findByVmIdAndNetworkId(NETWORK_ID, NETWORK_ID)).thenReturn(null);
         when(domainDao.findById(NETWORK_ID)).thenReturn(mock(DomainVO.class));
-        final ReserveVmInterfaceVspAnswer answer = mock(ReserveVmInterfaceVspAnswer.class);
-        when(answer.getResult()).thenReturn(true);
-        when(answer.getInterfaceDetails()).thenReturn(new ArrayList<Map<String, String>>());
-        when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
-
-        guru.reserve(nicProfile, network, vm, mock(DeployDestination.class), mock(ReservationContext.class));
-    }
-
-    @Test
-    public void testRelease() {
-        final NicProfile nicProfile = mock(NicProfile.class);
-        when(nicProfile.getNetworkId()).thenReturn(NETWORK_ID);
-        final NetworkVO network = mock(NetworkVO.class);
-        when(network.getUuid()).thenReturn("aaaaaa-ffffff");
-        when(network.getName()).thenReturn("aaaaaa");
-        when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID);
-        when(networkDao.findById(NETWORK_ID)).thenReturn(network);
-
-        final VirtualMachineProfile vm = mock(VirtualMachineProfile.class);
-        when(vm.getType()).thenReturn(VirtualMachine.Type.User);
-        when(vm.getInstanceName()).thenReturn("");
-        when(vm.getUuid()).thenReturn("aaaa-bbbbb");
-
-        final VirtualMachine virtualMachine = mock(VirtualMachine.class);
-        when(vm.getVirtualMachine()).thenReturn(virtualMachine);
-        when(virtualMachine.getState()).thenReturn(State.Stopping);
-
-        final HostVO host = mock(HostVO.class);
-        when(host.getId()).thenReturn(NETWORK_ID);
-        final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
-        when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
-        when(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[] {nuageVspDevice}));
-        when(hostDao.findById(NETWORK_ID)).thenReturn(host);
 
-        final ReleaseVmVspAnswer answer = mock(ReleaseVmVspAnswer.class);
+        final Answer answer = mock(Answer.class);
         when(answer.getResult()).thenReturn(true);
         when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
 
-        guru.release(nicProfile, vm, "aaaaa-fffff");
+        guru.reserve(nicProfile, network, vmProfile, mock(DeployDestination.class), mock(ReservationContext.class));
     }
 
     @Test
     public void testImplementNetwork() throws URISyntaxException, InsufficientVirtualNetworkCapacityException {
-        final Network network = mock(Network.class);
+        final NetworkVO network = mock(NetworkVO.class);
         when(network.getId()).thenReturn(NETWORK_ID);
         when(network.getUuid()).thenReturn("aaaaaa");
         when(network.getDataCenterId()).thenReturn(NETWORK_ID);
@@ -371,8 +357,11 @@ public class NuageVspGuestNetworkGuruTest {
         when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
         when(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[] {nuageVspDevice}));
         when(hostDao.findById(NETWORK_ID)).thenReturn(host);
+        when(networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network);
+        when(nuageVspManager.getDnsDetails(network)).thenReturn(new ArrayList<String>());
+        when(nuageVspManager.getGatewaySystemIds()).thenReturn(new ArrayList<String>());
 
-        final ImplementNetworkVspAnswer answer = mock(ImplementNetworkVspAnswer.class);
+        final Answer answer = mock(Answer.class);
         when(answer.getResult()).thenReturn(true);
         when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
 
@@ -383,4 +372,95 @@ public class NuageVspGuestNetworkGuruTest {
         guru.implement(network, offering, deployDest, reserveContext);
     }
 
+    @Test
+    public void testDeallocate() throws Exception {
+        final NetworkVO network = mock(NetworkVO.class);
+        when(network.getId()).thenReturn(NETWORK_ID);
+        when(network.getUuid()).thenReturn("aaaaaa");
+        when(network.getNetworkOfferingId()).thenReturn(NETWORK_ID);
+        when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID);
+        when(network.getVpcId()).thenReturn(null);
+        when(network.getDomainId()).thenReturn(NETWORK_ID);
+        when(networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network);
+
+        final NetworkOfferingVO offering = mock(NetworkOfferingVO.class);
+        when(offering.getId()).thenReturn(NETWORK_ID);
+        when(offering.getTrafficType()).thenReturn(TrafficType.Guest);
+        when(ntwkOfferDao.findById(NETWORK_ID)).thenReturn(offering);
+
+        final DomainVO domain = mock(DomainVO.class);
+        when(domain.getUuid()).thenReturn("aaaaaa");
+        when(domainDao.findById(NETWORK_ID)).thenReturn(domain);
+
+        final NicVO nic = mock(NicVO.class);
+        when(nic.getId()).thenReturn(NETWORK_ID);
+        when(nic.getIPv4Address()).thenReturn("10.10.10.10");
+        when(nic.getMacAddress()).thenReturn("c8:60:00:56:e5:58");
+        when(nicDao.findById(NETWORK_ID)).thenReturn(nic);
+
+        final NicProfile nicProfile = mock(NicProfile.class);
+        when(nicProfile.getId()).thenReturn(NETWORK_ID);
+        when(nicProfile.getIPv4Address()).thenReturn("10.10.10.10");
+        when(nicProfile.getMacAddress()).thenReturn("c8:60:00:56:e5:58");
+
+        final VirtualMachine vm = mock(VirtualMachine.class);
+        when(vm.getType()).thenReturn(VirtualMachine.Type.User);
+        when(vm.getState()).thenReturn(VirtualMachine.State.Expunging);
+
+        final VirtualMachineProfile vmProfile = mock(VirtualMachineProfile.class);
+        when(vmProfile.getUuid()).thenReturn("aaaaaa");
+        when(vmProfile.getInstanceName()).thenReturn("Test-VM");
+        when(vmProfile.getVirtualMachine()).thenReturn(vm);
+
+        final HostVO host = mock(HostVO.class);
+        when(host.getId()).thenReturn(NETWORK_ID);
+        final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
+        when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
+        when(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[] {nuageVspDevice}));
+        when(hostDao.findById(NETWORK_ID)).thenReturn(host);
+
+        final Answer answer = mock(Answer.class);
+        when(answer.getResult()).thenReturn(true);
+        when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
+
+        guru.deallocate(network, nicProfile, vmProfile);
+    }
+
+    @Test
+    public void testTrash() throws Exception {
+        final NetworkVO network = mock(NetworkVO.class);
+        when(network.getId()).thenReturn(NETWORK_ID);
+        when(network.getUuid()).thenReturn("aaaaaa");
+        when(network.getName()).thenReturn("trash");
+        when(network.getDomainId()).thenReturn(NETWORK_ID);
+        when(network.getNetworkOfferingId()).thenReturn(NETWORK_ID);
+        when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID);
+        when(network.getVpcId()).thenReturn(null);
+        when(networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network);
+
+        final NetworkOfferingVO offering = mock(NetworkOfferingVO.class);
+        when(offering.getId()).thenReturn(NETWORK_ID);
+        when(offering.getTrafficType()).thenReturn(TrafficType.Guest);
+        when(ntwkOfferDao.findById(NETWORK_ID)).thenReturn(offering);
+
+        final DomainVO domain = mock(DomainVO.class);
+        when(domain.getUuid()).thenReturn("aaaaaa");
+        when(domainDao.findById(NETWORK_ID)).thenReturn(domain);
+
+        final HostVO host = mock(HostVO.class);
+        when(host.getId()).thenReturn(NETWORK_ID);
+        final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
+        when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
+        when(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[] {nuageVspDevice}));
+        when(hostDao.findById(NETWORK_ID)).thenReturn(host);
+        when(nuageVspManager.getDnsDetails(network)).thenReturn(new ArrayList<String>());
+        when(nuageVspManager.getGatewaySystemIds()).thenReturn(new ArrayList<String>());
+
+        final Answer answer = mock(Answer.class);
+        when(answer.getResult()).thenReturn(true);
+        when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
+
+        assertTrue(guru.trash(network, offering));
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java
index a8bed6d..a29e3d7 100644
--- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java
+++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java
@@ -19,16 +19,9 @@
 
 package com.cloud.network.manager;
 
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.ArrayList;
-
-import javax.naming.ConfigurationException;
-
-import org.junit.Before;
-import org.junit.Test;
-
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.Command;
+import com.cloud.agent.api.sync.SyncNuageVspCmsIdAnswer;
 import com.cloud.api.commands.DeleteNuageVspDeviceCmd;
 import com.cloud.api.commands.ListNuageVspDevicesCmd;
 import com.cloud.host.HostVO;
@@ -42,6 +35,18 @@ import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.PhysicalNetworkServiceProviderDao;
 import com.cloud.network.dao.PhysicalNetworkVO;
 import com.cloud.resource.ResourceManager;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.cloudstack.framework.config.impl.ConfigurationVO;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.naming.ConfigurationException;
+import java.util.ArrayList;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 public class NuageVspManagerTest {
     private static final long NETWORK_ID = 42L;
@@ -53,6 +58,8 @@ public class NuageVspManagerTest {
     NuageVspDao nuageVspDao = mock(NuageVspDao.class);
     NetworkDao networkDao = mock(NetworkDao.class);
     HostDao hostDao = mock(HostDao.class);
+    AgentManager agentManager = mock(AgentManager.class);
+    ConfigurationDao configDao = mock(ConfigurationDao.class);
 
     NuageVspManagerImpl manager;
 
@@ -67,6 +74,8 @@ public class NuageVspManagerTest {
         manager._nuageVspDao = nuageVspDao;
         manager._networkDao = networkDao;
         manager._hostDao = hostDao;
+        manager._agentMgr = agentManager;
+        manager._configDao = configDao;
     }
 
     @Test
@@ -91,6 +100,14 @@ public class NuageVspManagerTest {
         final DeleteNuageVspDeviceCmd cmd = mock(DeleteNuageVspDeviceCmd.class);
         when(cmd.getNuageVspDeviceId()).thenReturn(NETWORK_ID);
 
+        ConfigurationVO cmsIdConfig = mock(ConfigurationVO.class);
+        when(cmsIdConfig.getValue()).thenReturn("1:1");
+        when(configDao.findByName("nuagevsp.cms.id")).thenReturn(cmsIdConfig);
+
+        final SyncNuageVspCmsIdAnswer answer = mock(SyncNuageVspCmsIdAnswer.class);
+        when(answer.getResult()).thenReturn(true);
+        when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
+
         manager.deleteNuageVspDevice(cmd);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java
index db359b6..770e13f 100644
--- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java
+++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java
@@ -19,46 +19,35 @@
 
 package com.cloud.network.resource;
 
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import net.nuage.vsp.acs.client.NuageVspApiClient;
-import net.nuage.vsp.acs.client.NuageVspElementClient;
-import net.nuage.vsp.acs.client.NuageVspGuruClient;
-import net.nuage.vsp.acs.client.NuageVspSyncClient;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
+import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.PingCommand;
 import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.element.ApplyAclRuleVspAnswer;
 import com.cloud.agent.api.element.ApplyAclRuleVspCommand;
-import com.cloud.agent.api.element.ApplyStaticNatVspAnswer;
 import com.cloud.agent.api.element.ApplyStaticNatVspCommand;
-import com.cloud.agent.api.element.ShutDownVpcVspAnswer;
 import com.cloud.agent.api.element.ShutDownVpcVspCommand;
-import com.cloud.agent.api.guru.DeallocateVmVspAnswer;
 import com.cloud.agent.api.guru.DeallocateVmVspCommand;
-import com.cloud.agent.api.guru.ImplementNetworkVspAnswer;
 import com.cloud.agent.api.guru.ImplementNetworkVspCommand;
-import com.cloud.agent.api.guru.ReleaseVmVspAnswer;
-import com.cloud.agent.api.guru.ReleaseVmVspCommand;
-import com.cloud.agent.api.guru.ReserveVmInterfaceVspAnswer;
 import com.cloud.agent.api.guru.ReserveVmInterfaceVspCommand;
-import com.cloud.agent.api.guru.TrashNetworkVspAnswer;
 import com.cloud.agent.api.guru.TrashNetworkVspCommand;
-import com.cloud.agent.api.sync.SyncVspAnswer;
 import com.cloud.agent.api.sync.SyncVspCommand;
 import com.cloud.host.Host;
+import com.google.common.collect.Maps;
+import net.nuage.vsp.acs.client.NuageVspApiClient;
+import net.nuage.vsp.acs.client.NuageVspElementClient;
+import net.nuage.vsp.acs.client.NuageVspGuruClient;
+import net.nuage.vsp.acs.client.NuageVspSyncClient;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+
+import javax.naming.ConfigurationException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Map;
+
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
 
 public class NuageVspResourceTest {
     NuageVspResource _resource;
@@ -66,9 +55,10 @@ public class NuageVspResourceTest {
     NuageVspElementClient _mockNuageVspElementClient = mock(NuageVspElementClient.class);
     NuageVspGuruClient _mockNuageVspGuruClient = mock(NuageVspGuruClient.class);
     NuageVspSyncClient _mockNuageVspSyncClient = mock(NuageVspSyncClient.class);
-    Map<String, Object> _parameters;
+    NuageVspResource.Configuration _resourceConfiguration;
+    Map<String, Object> _hostDetails;
 
-    Answer<Object> genericAnswer = new Answer<Object>() {
+    org.mockito.stubbing.Answer<Object> genericAnswer = new org.mockito.stubbing.Answer<Object>() {
         public Object answer(InvocationOnMock invocation) {
             return null;
         }
@@ -88,34 +78,36 @@ public class NuageVspResourceTest {
 
             }
 
-            protected void isNuageVspApiLoaded() throws Exception {
+            protected void isNuageVspApiLoaded() throws ConfigurationException {
             }
 
-            protected void isNuageVspGuruLoaded() throws Exception {
+            protected void isNuageVspGuruLoaded() throws ConfigurationException {
             }
 
-            protected void isNuageVspElementLoaded() throws Exception {
+            protected void isNuageVspElementLoaded() throws ConfigurationException {
             }
 
-            protected void isNuageVspSyncLoaded() throws Exception {
+            protected void isNuageVspSyncLoaded() throws ConfigurationException {
             }
 
-            protected void login() throws Exception {
+            protected void login() throws ConfigurationException {
             }
 
         };
 
-        _parameters = new HashMap<String, Object>();
-        _parameters.put("name", "nuagevsptestdevice");
-        _parameters.put("guid", "aaaaa-bbbbb-ccccc");
-        _parameters.put("zoneId", "blublub");
-        _parameters.put("hostname", "nuagevsd");
-        _parameters.put("cmsuser", "cmsuser");
-        _parameters.put("cmsuserpass", "cmsuserpass");
-        _parameters.put("port", "8443");
-        _parameters.put("apirelativepath", "nuage/api/v1_0");
-        _parameters.put("retrycount", "3");
-        _parameters.put("retryinterval", "3");
+        _resourceConfiguration = new NuageVspResource.Configuration()
+                .name("nuagevsptestdevice")
+                .guid("aaaaa-bbbbb-ccccc")
+                .zoneId("blublub")
+                .hostName("nuagevsd")
+                .cmsUser("cmsuser")
+                .cmsUserPassword("cmsuserpass")
+                .port("8443")
+                .apiVersion("v3_2")
+                .apiRelativePath("nuage/api/v3_2")
+                .retryCount("3")
+                .retryInterval("3");
+        _hostDetails = Maps.<String, Object>newHashMap(_resourceConfiguration.build());
     }
 
     @Test(expected = Exception.class)
@@ -125,7 +117,7 @@ public class NuageVspResourceTest {
 
     @Test
     public void resourceConfigure() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
+        _resource.configure("NuageVspResource", _hostDetails);
 
         assertTrue("nuagevsptestdevice".equals(_resource.getName()));
         assertTrue(_resource.getType() == Host.Type.L2Networking);
@@ -133,7 +125,7 @@ public class NuageVspResourceTest {
 
     @Test
     public void testInitialization() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
+        _resource.configure("NuageVspResource", _hostDetails);
 
         StartupCommand[] sc = _resource.initialize();
         assertTrue(sc.length == 1);
@@ -144,7 +136,7 @@ public class NuageVspResourceTest {
 
     @Test
     public void testPingCommandStatus() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
+        _resource.configure("NuageVspResource", _hostDetails);
 
         PingCommand ping = _resource.getCurrentStatus(42);
         assertTrue(ping != null);
@@ -154,99 +146,102 @@ public class NuageVspResourceTest {
 
     @Test
     public void testImplementNetworkVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
-
-        ImplementNetworkVspCommand impNtwkCmd = new ImplementNetworkVspCommand("networkDomainName", "networkDomainPath", "networkDomainUuid", "networkAccountName",
-                "networkAccountUuid", "networkName", "networkCidr", "networkGateway", "networkUuid", true, "vpcName", "vpcUuid", true, new ArrayList<String>());
-        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).implement("networkDomainName", "networkDomainPath", "networkDomainUuid", "networkAccountName", "networkAccountUuid",
-                "networkName", "networkCidr", "networkGateway", "networkUuid", true, "vpcName", "vpcUuid", true, new ArrayList<String>());
-        ImplementNetworkVspAnswer implNtwkAns = (ImplementNetworkVspAnswer)_resource.executeRequest(impNtwkCmd);
+        _resource.configure("NuageVspResource", _hostDetails);
+
+        ImplementNetworkVspCommand.Builder cmdBuilder = new ImplementNetworkVspCommand.Builder().networkDomainName("networkDomainName").networkDomainPath("networkDomainPath")
+                .networkDomainUuid("networkDomainUuid").networkAccountName("networkAccountName").networkAccountUuid("networkAccountUuid").networkName("networkName")
+                .networkCidr("networkCidr").networkGateway("networkGateway").networkAclId(0L).dnsServers(new ArrayList<String>()).gatewaySystemIds(new ArrayList<String>())
+                .networkUuid("networkUuid").isL3Network(true).isVpc(true).isSharedNetwork(true).vpcName("vpcName").vpcUuid("vpcUuid").defaultEgressPolicy(true)
+                .ipAddressRange(new ArrayList<String[]>()).domainTemplateName("domainTemplateName");
+        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).implement("networkDomainName", "networkDomainPath", "networkDomainUuid", "networkAccountName",
+                "networkAccountUuid", "networkName", "networkCidr", "networkGateway", 0L, new ArrayList<String>(), new ArrayList<String>(), true, true, true, "networkUuid",
+                "vpcName", "vpcUuid", true, new ArrayList<String[]>(), "domainTemplateName");
+        com.cloud.agent.api.Answer implNtwkAns = _resource.executeRequest(cmdBuilder.build());
         assertTrue(implNtwkAns.getResult());
     }
 
     @Test
     public void testReserveVmInterfaceVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
-
-        ReserveVmInterfaceVspCommand rsrvVmInfCmd = new ReserveVmInterfaceVspCommand("nicUuid", "nicMacAddress", "networkUuid", true, "vpcUuid", "networkDomainUuid",
-                "networksAccountUuid", false, "domainRouterIp", "vmInstanceName", "vmUuid", "vmUserName", "vmUserDomainName");
-        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).reserve("nicUuid", "nicMacAddress", "networkUuid", true, "vpcUuid", "networkDomainUuid", "networksAccountUuid",
-                false, "domainRouterIp", "vmInstanceName", "vmUuid");
-        ReserveVmInterfaceVspAnswer rsrvVmInfAns = (ReserveVmInterfaceVspAnswer)_resource.executeRequest(rsrvVmInfCmd);
+        _resource.configure("NuageVspResource", _hostDetails);
+
+        ReserveVmInterfaceVspCommand.Builder cmdBuilder = new ReserveVmInterfaceVspCommand.Builder().nicUuid("nicUuid").nicMacAddress("nicMacAddress")
+                .networkUuid("networkUuid").isL3Network(true).isSharedNetwork(true).vpcUuid("vpcUuid").networkDomainUuid("networkDomainUuid")
+                .networksAccountUuid("networksAccountUuid").isDomainRouter(false).domainRouterIp("domainRouterIp").vmInstanceName("vmInstanceName").vmUuid("vmUuid")
+                .vmUserName("vmUserName").vmUserDomainName("vmUserDomainName").useStaticIp(true).staticIp("staticIp").staticNatIpUuid("staticNatIpUuid")
+                .staticNatIpAddress("staticNatIpAddress").isStaticNatIpAllocated(true).isOneToOneNat(true).staticNatVlanUuid("staticNatVlanUuid")
+                .staticNatVlanGateway("staticNatVlanGateway").staticNatVlanNetmask("staticNatVlanNetmask");
+        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).reserve("nicUuid", "nicMacAddress", "networkUuid", true, true, "vpcUuid", "networkDomainUuid",
+                "networksAccountUuid", false, "domainRouterIp", "vmInstanceName", "vmUuid", true, "staticIp", "staticNatIpUuid", "staticNatIpAddress",
+                true, true, "staticNatVlanUuid", "staticNatVlanGateway", "staticNatVlanNetmask");
+        Answer rsrvVmInfAns = _resource.executeRequest(cmdBuilder.build());
         assertTrue(rsrvVmInfAns.getResult());
     }
 
     @Test
-    public void testReleaseVmVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
-
-        ReleaseVmVspCommand releaseVmCmd = new ReleaseVmVspCommand("networkUuid", "vmUuid", "vmInstanceName");
-        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).release("networkUuid", "vmUuid", "vmInstanceName");
-        ReleaseVmVspAnswer releaseVmAns = (ReleaseVmVspAnswer)_resource.executeRequest(releaseVmCmd);
-        assertTrue(releaseVmAns.getResult());
-    }
-
-    @Test
     public void testDeallocateVmVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
-
-        DeallocateVmVspCommand dellocateVmCmd = new DeallocateVmVspCommand("networkUuid", "nicFrmDdUuid", "nicMacAddress", "nicIp4Address", true, "vpcUuid", "networksDomainUuid",
-                "vmInstanceName", "vmUuid");
-        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).deallocate("networkUuid", "nicFrmDdUuid", "nicMacAddress", "nicIp4Address", true, "vpcUuid", "networksDomainUuid",
-                "vmInstanceName", "vmUuid");
-        DeallocateVmVspAnswer dellocateVmAns = (DeallocateVmVspAnswer)_resource.executeRequest(dellocateVmCmd);
+        _resource.configure("NuageVspResource", _hostDetails);
+
+        DeallocateVmVspCommand.Builder cmdBuilder = new DeallocateVmVspCommand.Builder().networkUuid("networkUuid").nicFromDbUuid("nicFromDbUuid")
+                .nicMacAddress("nicMacAddress").nicIp4Address("nicIp4Address").isL3Network(true).isSharedNetwork(true).vpcUuid("vpcUuid")
+                .networksDomainUuid("networksDomainUuid").vmInstanceName("vmInstanceName").vmUuid("vmUuid").isExpungingState(true);
+        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).deallocate("networkUuid", "nicFrmDdUuid", "nicMacAddress", "nicIp4Address", true, true, "vpcUuid", "networksDomainUuid",
+                "vmInstanceName", "vmUuid", true);
+        Answer dellocateVmAns = _resource.executeRequest(cmdBuilder.build());
         assertTrue(dellocateVmAns.getResult());
     }
 
     @Test
     public void testTrashNetworkVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
+        _resource.configure("NuageVspResource", _hostDetails);
 
-        TrashNetworkVspCommand trashNtwkCmd = new TrashNetworkVspCommand("domainUuid", "networkUuid", true, "vpcUuid");
-        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).trash("domainUuid", "networkUuid", true, "vpcUuid");
-        TrashNetworkVspAnswer trashNtwkAns = (TrashNetworkVspAnswer)_resource.executeRequest(trashNtwkCmd);
+        TrashNetworkVspCommand.Builder cmdBuilder = new TrashNetworkVspCommand.Builder().domainUuid("domainUuid").networkUuid("networkUuid")
+                .isL3Network(true).isSharedNetwork(true).vpcUuid("vpcUuid").domainTemplateName("domainTemplateName");
+        doAnswer(genericAnswer).when(_mockNuageVspGuruClient).trash("domainUuid", "networkUuid", true, true, "vpcUuid", "domainTemplateName");
+        Answer trashNtwkAns = _resource.executeRequest(cmdBuilder.build());
         assertTrue(trashNtwkAns.getResult());
     }
 
     @Test
     public void testApplyStaticNatVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
+        _resource.configure("NuageVspResource", _hostDetails);
 
-        ApplyStaticNatVspCommand applyNatCmd = new ApplyStaticNatVspCommand("networkDomainUuid", "vpcOrSubnetUuid", true, new ArrayList<Map<String, Object>>());
-        doAnswer(genericAnswer).when(_mockNuageVspElementClient).applyStaticNats("networkDomainUuid", "vpcOrSubnetUuid", true, new ArrayList<Map<String, Object>>());
-        ApplyStaticNatVspAnswer applyNatAns = (ApplyStaticNatVspAnswer)_resource.executeRequest(applyNatCmd);
+        ApplyStaticNatVspCommand.Builder cmdBuilder = new ApplyStaticNatVspCommand.Builder().networkDomainUuid("networkDomainUuid").networkUuid("networkUuid")
+                .vpcOrSubnetUuid("vpcOrSubnetUuid").isL3Network(true).isVpc(true).staticNatDetails(new ArrayList<Map<String, Object>>());
+        doAnswer(genericAnswer).when(_mockNuageVspElementClient).applyStaticNats("networkDomainUuid", "networkUuid", "vpcOrSubnetUuid", true, true, new ArrayList<Map<String, Object>>());
+        Answer applyNatAns = _resource.executeRequest(cmdBuilder.build());
         assertTrue(applyNatAns.getResult());
     }
 
     @Test
     public void testApplyAclRuleVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
-
-        ApplyAclRuleVspCommand applyAclCmd = new ApplyAclRuleVspCommand("networkUuid", "networkDomainUuid", "vpcOrSubnetUuid", true, new ArrayList<Map<String, Object>>(), false,
-                100);
-        doAnswer(genericAnswer).when(_mockNuageVspElementClient).applyAclRules("networkUuid", "networkDomainUuid", "vpcOrSubnetUuid", true, new ArrayList<Map<String, Object>>(),
-                false, 100);
-        ApplyAclRuleVspAnswer applyAclAns = (ApplyAclRuleVspAnswer)_resource.executeRequest(applyAclCmd);
+        _resource.configure("NuageVspResource", _hostDetails);
+
+        ApplyAclRuleVspCommand.Builder cmdBuilder = new ApplyAclRuleVspCommand.Builder().networkAcl(true).networkUuid("networkUuid").networkDomainUuid("networkDomainUuid")
+                .vpcOrSubnetUuid("vpcOrSubnetUuid").networkName("networkName").isL2Network(true).aclRules(new ArrayList<Map<String, Object>>()).networkId(100)
+                .egressDefaultPolicy(false).acsIngressAcl(true).networkReset(true).domainTemplateName("domainTemplateName");
+        doAnswer(genericAnswer).when(_mockNuageVspElementClient).applyAclRules(true, "networkUuid", "networkDomainUuid", "vpcOrSubnetUuid", "networkName", true,
+        new ArrayList<Map<String, Object>>(), 100, false, true, true, "domainTemplateName");
+        Answer applyAclAns = _resource.executeRequest(cmdBuilder.build());
         assertTrue(applyAclAns.getResult());
     }
 
     @Test
     public void testShutDownVpcVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
+        _resource.configure("NuageVspResource", _hostDetails);
 
-        ShutDownVpcVspCommand shutVpcCmd = new ShutDownVpcVspCommand("domainUuid", "vpcUuid");
-        doAnswer(genericAnswer).when(_mockNuageVspElementClient).shutDownVpc("domainUuid", "vpcUuid");
-        ShutDownVpcVspAnswer shutVpcAns = (ShutDownVpcVspAnswer)_resource.executeRequest(shutVpcCmd);
+        ShutDownVpcVspCommand.Builder cmdBuilder = new ShutDownVpcVspCommand.Builder().domainUuid("domainUuid").vpcUuid("vpcUuid").domainTemplateName("domainTemplateName");
+        doAnswer(genericAnswer).when(_mockNuageVspElementClient).shutdownVpc("domainUuid", "vpcUuid", "domainTemplateName");
+        Answer shutVpcAns = _resource.executeRequest(cmdBuilder.build());
         assertTrue(shutVpcAns.getResult());
     }
 
     @Test
     public void testSyncVspCommand() throws Exception {
-        _resource.configure("NuageVspResource", _parameters);
+        _resource.configure("NuageVspResource", _hostDetails);
 
         SyncVspCommand shutVpcCmd = new SyncVspCommand("nuageVspEntity");
         doAnswer(genericAnswer).when(_mockNuageVspSyncClient).syncWithNuageVsp("nuageVspEntity");
-        SyncVspAnswer shutVpcAns = (SyncVspAnswer)_resource.executeRequest(shutVpcCmd);
+        Answer shutVpcAns = _resource.executeRequest(shutVpcCmd);
         assertTrue(shutVpcAns.getResult());
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java
index f9e503d..23430d4 100644
--- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java
+++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java
@@ -19,23 +19,22 @@
 
 package com.cloud.network.sync;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.Arrays;
-
-import org.junit.Before;
-import org.junit.Test;
-
 import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.Command;
-import com.cloud.agent.api.sync.SyncVspAnswer;
 import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
 import com.cloud.network.NuageVspDeviceVO;
 import com.cloud.network.dao.NuageVspDao;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Arrays;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 public class NuageVspSyncTest {
     private static final long NETWORK_ID = 42L;
@@ -64,7 +63,7 @@ public class NuageVspSyncTest {
         when(host.getId()).thenReturn(NETWORK_ID);
         when(hostDao.findById(NETWORK_ID)).thenReturn(host);
 
-        final SyncVspAnswer answer = mock(SyncVspAnswer.class);
+        final Answer answer = mock(Answer.class);
         when(answer.getResult()).thenReturn(true);
         when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 69e70e6..ccbc0b0 100644
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -4602,10 +4602,11 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
     @Override
     public boolean isOfferingForVpc(final NetworkOffering offering) {
         final boolean vpcProvider = _ntwkOffServiceMapDao.isProviderForNetworkOffering(offering.getId(), Provider.VPCVirtualRouter) ||
-                _ntwkOffServiceMapDao.isProviderForNetworkOffering(offering.getId(), Provider.JuniperContrailVpcRouter) ||
-                _ntwkOffServiceMapDao.getDistinctProviders(offering.getId()).contains(Provider.NuageVsp.getName());
+                _ntwkOffServiceMapDao.isProviderForNetworkOffering(offering.getId(), Provider.JuniperContrailVpcRouter);
+        final boolean nuageVpcProvider = _ntwkOffServiceMapDao.getDistinctProviders(offering.getId()).contains(Provider.NuageVsp.getName())
+                && offering.getIsPersistent();
 
-        return vpcProvider;
+        return vpcProvider || nuageVpcProvider;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/server/src/com/cloud/network/guru/DirectNetworkGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/guru/DirectNetworkGuru.java b/server/src/com/cloud/network/guru/DirectNetworkGuru.java
index 9686f80..018ab90 100644
--- a/server/src/com/cloud/network/guru/DirectNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/DirectNetworkGuru.java
@@ -21,6 +21,7 @@ import java.util.List;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
+import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
 import org.apache.log4j.Logger;
 
@@ -98,6 +99,8 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru {
     NicDao _nicDao;
     @Inject
     IpAddressManager _ipAddrMgr;
+    @Inject
+    NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao;
 
     private static final TrafficType[] TrafficTypes = {TrafficType.Guest};
 
@@ -118,7 +121,8 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru {
 
     protected boolean canHandle(NetworkOffering offering, DataCenter dc) {
         // this guru handles only Guest networks in Advance zone with source nat service disabled
-        if (dc.getNetworkType() == NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) && offering.getGuestType() == GuestType.Shared) {
+        if (dc.getNetworkType() == NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) && offering.getGuestType() == GuestType.Shared
+                && !_ntwkOfferingSrvcDao.isProviderForNetworkOffering(offering.getId(), Network.Provider.NuageVsp)) {
             return true;
         } else {
             s_logger.trace("We only take care of Guest networks of type " + GuestType.Shared);