Use NSX specific RestClient in API implementation (NiciraNvpApi)

- Simplify public API to return Lists instead of NiciraNvpLists


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/09f71533
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/09f71533
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/09f71533

Branch: refs/heads/deploy-from-snapshot
Commit: 09f715337882c432e8731f81bce6490362e1cc2d
Parents: c6602ee
Author: Miguel Ferreira <miguelferre...@me.com>
Authored: Sat Aug 22 17:30:58 2015 +0200
Committer: Miguel Ferreira <miguelferre...@me.com>
Committed: Tue Aug 25 17:36:17 2015 +0200

----------------------------------------------------------------------
 .../cloud/network/nicira/NiciraConstants.java   |  42 ++
 .../com/cloud/network/nicira/NiciraNvpApi.java  | 323 ++++++++-------
 .../network/resource/NiciraNvpResource.java     |  26 +-
 ...figurePortForwardingRulesCommandWrapper.java |   7 +-
 ...ciraNvpConfigurePublicIpsCommandWrapper.java |   9 +-
 ...vpConfigureStaticNatRulesCommandWrapper.java |   7 +-
 ...aNvpFindLogicalSwitchPortCommandWrapper.java |   7 +-
 .../cloud/network/nicira/NiciraNvpApiIT.java    | 202 ++++-----
 .../cloud/network/nicira/NiciraNvpApiTest.java  | 411 ++++++-------------
 .../resource/NiciraNvpRequestWrapperTest.java   |   7 +-
 .../network/resource/NiciraNvpResourceTest.java |  72 +---
 .../utils/rest/HttpUriRequestPathMatcher.java   |  43 ++
 12 files changed, 539 insertions(+), 617 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09f71533/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraConstants.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraConstants.java
 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraConstants.java
new file mode 100644
index 0000000..31adf9d
--- /dev/null
+++ 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraConstants.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 com.cloud.network.nicira;
+
+public class NiciraConstants {
+
+    public static final String SEC_PROFILE_URI_PREFIX = 
"/ws.v1/security-profile";
+    public static final String ACL_URI_PREFIX = "/ws.v1/acl";
+    public static final String SWITCH_URI_PREFIX = "/ws.v1/lswitch";
+    public static final String ROUTER_URI_PREFIX = "/ws.v1/lrouter";
+    public static final String LOGIN_URL = "/ws.v1/login";
+    public static final String CONTROL_CLUSTER_STATUS_URL = 
"/ws.v1/control-cluster/status";
+
+    public static final String ATTACHMENT_PATH_SEGMENT = "/attachment";
+    public static final String NAT_PATH_SEGMENT = "/nat";
+    public static final String LPORT_PATH_SEGMENT = "/lport";
+
+    public static final String ATTACHMENT_VIF_UUID_QUERY_PARAMETER_NAME = 
"attachment_vif_uuid";
+    public static final String ATTACHMENT_VLAN_PARAMETER = "attachment_vlan";
+    public static final String ATTACHMENT_GWSVC_UUID_QUERY_PARAMETER = 
"attachment_gwsvc_uuid";
+    public static final String WILDCARD_QUERY_PARAMETER = "*";
+    public static final String UUID_QUERY_PARAMETER = "uuid";
+    public static final String FIELDS_QUERY_PARAMETER = "fields";
+
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09f71533/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraNvpApi.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraNvpApi.java
 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraNvpApi.java
index 39262b6..093d90d 100644
--- 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraNvpApi.java
+++ 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/nicira/NiciraNvpApi.java
@@ -20,32 +20,39 @@
 package com.cloud.network.nicira;
 
 import java.lang.reflect.Type;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.impl.client.CloseableHttpClient;
+
 import com.cloud.utils.rest.CloudstackRESTException;
 import com.cloud.utils.rest.RESTServiceConnector;
-import com.cloud.utils.rest.RESTValidationStrategy;
-import com.google.gson.JsonDeserializationContext;
+import com.google.common.base.Optional;
 import com.google.gson.JsonDeserializer;
 import com.google.gson.reflect.TypeToken;
 
 @SuppressWarnings("rawtypes")
 public class NiciraNvpApi {
-    protected static final String GET_METHOD_TYPE = "get";
-    protected static final String DELETE_METHOD_TYPE = "delete";
-    protected static final String PUT_METHOD_TYPE = "put";
-    protected static final String POST_METHOD_TYPE = "post";
 
-    protected static final String SEC_PROFILE_URI_PREFIX = 
"/ws.v1/security-profile";
-    protected static final String ACL_URI_PREFIX = "/ws.v1/acl";
-    private static final String SWITCH_URI_PREFIX = "/ws.v1/lswitch";
-    private static final String ROUTER_URI_PREFIX = "/ws.v1/lrouter";
-    private static final String LOGIN_URL = "/ws.v1/login";
+    private static final Optional<String> ABSENT = Optional.absent();
+
+    private static final String SWITCH_URI_PREFIX = 
NiciraConstants.SWITCH_URI_PREFIX;
+    private static final String ROUTER_URI_PREFIX = 
NiciraConstants.ROUTER_URI_PREFIX;
+
+    private static final String ATTACHMENT_PATH_SEGMENT = 
NiciraConstants.ATTACHMENT_PATH_SEGMENT;
+    private static final String NAT_PATH_SEGMENT = 
NiciraConstants.NAT_PATH_SEGMENT;
+    private static final String LPORT_PATH_SEGMENT = 
NiciraConstants.LPORT_PATH_SEGMENT;
+
+    private static final String ATTACHMENT_GWSVC_UUID_QUERY_PARAMETER = 
NiciraConstants.ATTACHMENT_GWSVC_UUID_QUERY_PARAMETER;
+    private static final String WILDCARD_QUERY_PARAMETER = 
NiciraConstants.WILDCARD_QUERY_PARAMETER;
+    private static final String UUID_QUERY_PARAMETER = 
NiciraConstants.UUID_QUERY_PARAMETER;
+    private static final String FIELDS_QUERY_PARAMETER = 
NiciraConstants.FIELDS_QUERY_PARAMETER;
+
+    private static final int DEFAULT_MAX_RETRIES = 5;
 
     private final RESTServiceConnector restConnector;
 
@@ -57,8 +64,8 @@ public class NiciraNvpApi {
 
     static {
         prefixMap = new HashMap<Class, String>();
-        prefixMap.put(SecurityProfile.class, SEC_PROFILE_URI_PREFIX);
-        prefixMap.put(Acl.class, ACL_URI_PREFIX);
+        prefixMap.put(SecurityProfile.class, 
NiciraConstants.SEC_PROFILE_URI_PREFIX);
+        prefixMap.put(Acl.class, NiciraConstants.ACL_URI_PREFIX);
         prefixMap.put(LogicalSwitch.class, SWITCH_URI_PREFIX);
         prefixMap.put(LogicalRouter.class, ROUTER_URI_PREFIX);
 
@@ -73,32 +80,31 @@ public class NiciraNvpApi {
         }.getType());
 
         defaultListParams = new HashMap<String, String>();
-        defaultListParams.put("fields", "*");
-    }
-
-    public NiciraNvpApi() {
-        final List<Class<?>> classList = new ArrayList<Class<?>>();
-        classList.add(NatRule.class);
-        classList.add(RoutingConfig.class);
-        final List<JsonDeserializer<?>> deserializerList = new 
ArrayList<JsonDeserializer<?>>();
-        deserializerList.add(new NatRuleAdapter());
-        deserializerList.add(new RoutingConfigAdapter());
-
-        restConnector = new RESTServiceConnector(new 
RESTValidationStrategy(LOGIN_URL), classList, deserializerList);
+        defaultListParams.put(FIELDS_QUERY_PARAMETER, 
WILDCARD_QUERY_PARAMETER);
     }
 
-    public NiciraNvpApi(final String address, final String username, final 
String password) {
-        this();
-        restConnector.setControllerAddress(address);
-        restConnector.setAdminCredentials(username, password);
-    }
+    private NiciraNvpApi(final Builder builder) {
+        final Map<Class<?>, JsonDeserializer<?>> classToDeserializerMap = new 
HashMap<>();
+        classToDeserializerMap.put(NatRule.class, new NatRuleAdapter());
+        classToDeserializerMap.put(RoutingConfig.class, new 
RoutingConfigAdapter());
 
-    public void setControllerAddress(final String address) {
-        restConnector.setControllerAddress(address);
+        final NiciraRestClient niciraRestClient = NiciraRestClient.create()
+            .client(builder.httpClient)
+            .clientContext(builder.httpClientContext)
+            .hostname(builder.host)
+            .username(builder.username)
+            .password(builder.password)
+            .loginUrl(NiciraConstants.LOGIN_URL)
+            .executionLimit(DEFAULT_MAX_RETRIES)
+            .build();
+        restConnector = RESTServiceConnector.create()
+            .classToDeserializerMap(classToDeserializerMap)
+            .client(niciraRestClient)
+            .build();
     }
 
-    public void setAdminCredentials(final String username, final String 
password) {
-        restConnector.setAdminCredentials(username, password);
+    public static Builder create() {
+        return new Builder();
     }
 
     /**
@@ -123,8 +129,7 @@ public class NiciraNvpApi {
     private <T> T createWithUri(final T entity, final String uri) throws 
NiciraNvpApiException {
         T createdEntity;
         try {
-            createdEntity = restConnector.executeCreateObject(entity, new 
TypeToken<T>() {
-            }.getType(), uri, Collections.<String, String> emptyMap());
+            createdEntity = restConnector.executeCreateObject(entity, uri, 
Collections.<String, String> emptyMap());
         } catch (final CloudstackRESTException e) {
             throw new NiciraNvpApiException(e);
         }
@@ -145,7 +150,7 @@ public class NiciraNvpApi {
         Map<String, String> params = defaultListParams;
         if (uuid.isPresent()) {
             params = new HashMap<String, String>(defaultListParams);
-            params.put("uuid", uuid);
+            params.put(UUID_QUERY_PARAMETER, uuid.get());
         }
 
         NiciraNvpList<T> entities;
@@ -159,7 +164,7 @@ public class NiciraNvpApi {
             throw new NiciraNvpApiException("Unexpected response from API");
         }
 
-        return entities;
+        return entities.getResults();
     }
 
     /**
@@ -231,8 +236,8 @@ public class NiciraNvpApi {
      * @return
      * @throws NiciraNvpApiException
      */
-    public NiciraNvpList<SecurityProfile> findSecurityProfile() throws 
NiciraNvpApiException {
-        return findSecurityProfile(null);
+    public List<SecurityProfile> findSecurityProfile() throws 
NiciraNvpApiException {
+        return find(ABSENT, SecurityProfile.class);
     }
 
     /**
@@ -244,8 +249,8 @@ public class NiciraNvpApi {
      * @return
      * @throws NiciraNvpApiException
      */
-    public NiciraNvpList<SecurityProfile> findSecurityProfile(final String 
uuid) throws NiciraNvpApiException {
-        return find(uuid, SecurityProfile.class);
+    public List<SecurityProfile> findSecurityProfile(final String uuid) throws 
NiciraNvpApiException {
+        return find(Optional.fromNullable(uuid), SecurityProfile.class);
     }
 
     /**
@@ -286,7 +291,7 @@ public class NiciraNvpApi {
      * @return
      * @throws NiciraNvpApiException
      */
-    public NiciraNvpList<Acl> findAcl() throws NiciraNvpApiException {
+    public List<Acl> findAcl() throws NiciraNvpApiException {
         return findAcl(null);
     }
 
@@ -297,8 +302,8 @@ public class NiciraNvpApi {
      * @return
      * @throws NiciraNvpApiException
      */
-    public NiciraNvpList<Acl> findAcl(final String uuid) throws 
NiciraNvpApiException {
-        return find(uuid, Acl.class);
+    public List<Acl> findAcl(final String uuid) throws NiciraNvpApiException {
+        return find(Optional.fromNullable(uuid), Acl.class);
     }
 
     /**
@@ -332,7 +337,7 @@ public class NiciraNvpApi {
      * @return
      * @throws NiciraNvpApiException
      */
-    public NiciraNvpList<LogicalSwitch> findLogicalSwitch() throws 
NiciraNvpApiException {
+    public List<LogicalSwitch> findLogicalSwitch() throws 
NiciraNvpApiException {
         return findLogicalSwitch(null);
     }
 
@@ -343,8 +348,8 @@ public class NiciraNvpApi {
      * @return
      * @throws NiciraNvpApiException
      */
-    public NiciraNvpList<LogicalSwitch> findLogicalSwitch(final String uuid) 
throws NiciraNvpApiException {
-        return find(uuid, LogicalSwitch.class);
+    public List<LogicalSwitch> findLogicalSwitch(final String uuid) throws 
NiciraNvpApiException {
+        return find(Optional.fromNullable(uuid), LogicalSwitch.class);
     }
 
     /**
@@ -363,100 +368,81 @@ public class NiciraNvpApi {
     }
 
     public LogicalSwitchPort createLogicalSwitchPort(final String 
logicalSwitchUuid, final LogicalSwitchPort logicalSwitchPort) throws 
NiciraNvpApiException {
-        final String uri = SWITCH_URI_PREFIX + "/" + logicalSwitchUuid + 
"/lport";
-        return createWithUri(logicalSwitchPort, uri);
+        return createWithUri(logicalSwitchPort, 
buildLogicalSwitchElementUri(logicalSwitchUuid, LPORT_PATH_SEGMENT));
     }
 
     public void updateLogicalSwitchPort(final String logicalSwitchUuid, final 
LogicalSwitchPort logicalSwitchPort) throws NiciraNvpApiException {
-        final String uri = SWITCH_URI_PREFIX + "/" + logicalSwitchUuid + 
"/lport/" + logicalSwitchPort.getUuid();
-        updateWithUri(logicalSwitchPort, uri);
+        updateWithUri(logicalSwitchPort, 
buildLogicalSwitchElementUri(logicalSwitchUuid, LPORT_PATH_SEGMENT, 
logicalSwitchPort.getUuid().toString()));
     }
 
     public void updateLogicalSwitchPortAttachment(final String 
logicalSwitchUuid, final String logicalSwitchPortUuid, final Attachment 
attachment) throws NiciraNvpApiException {
-        final String uri = SWITCH_URI_PREFIX + "/" + logicalSwitchUuid + 
"/lport/" + logicalSwitchPortUuid + "/attachment";
-        updateWithUri(attachment, uri);
+        updateWithUri(attachment, 
buildLogicalSwitchElementUri(logicalSwitchUuid, LPORT_PATH_SEGMENT, 
logicalSwitchPortUuid) + ATTACHMENT_PATH_SEGMENT);
     }
 
     public void deleteLogicalSwitchPort(final String logicalSwitchUuid, final 
String logicalSwitchPortUuid) throws NiciraNvpApiException {
-        final String uri = SWITCH_URI_PREFIX + "/" + logicalSwitchUuid + 
"/lport/" + logicalSwitchPortUuid;
-        deleteWithUri(uri);
+        deleteWithUri(buildLogicalSwitchElementUri(logicalSwitchUuid, 
LPORT_PATH_SEGMENT, logicalSwitchPortUuid));
     }
 
     public String findLogicalSwitchPortUuidByVifAttachmentUuid(final String 
logicalSwitchUuid, final String vifAttachmentUuid) throws NiciraNvpApiException 
{
-        final String uri = SWITCH_URI_PREFIX + "/" + logicalSwitchUuid + 
"/lport";
-        final Map<String, String> params = new HashMap<String, String>();
-        params.put("attachment_vif_uuid", vifAttachmentUuid);
-        params.put("fields", "uuid");
+        final String uri = buildLogicalSwitchElementUri(logicalSwitchUuid, 
LPORT_PATH_SEGMENT);
+        final Map<String, String> params = 
buildBasicParametersMap(UUID_QUERY_PARAMETER);
+        params.put(NiciraConstants.ATTACHMENT_VIF_UUID_QUERY_PARAMETER_NAME, 
vifAttachmentUuid);
 
-        NiciraNvpList<LogicalSwitchPort> lspl;
+        NiciraNvpList<LogicalSwitchPort> niciraList;
         try {
-            lspl = restConnector.executeRetrieveObject(new 
TypeToken<NiciraNvpList<LogicalSwitchPort>>() {
-            }.getType(), uri, params);
+            final Type niciraListType = new 
TypeToken<NiciraNvpList<LogicalSwitchPort>>() {
+            }.getType();
+            niciraList = restConnector.executeRetrieveObject(niciraListType, 
uri, params);
         } catch (final CloudstackRESTException e) {
             throw new NiciraNvpApiException(e);
         }
 
-        if (lspl == null || lspl.getResultCount() != 1) {
-            throw new NiciraNvpApiException("Unexpected response from API");
+        final List<LogicalSwitchPort> lspl = niciraList.getResults();
+
+        final int listSize = lspl.size();
+        if (listSize != 1) {
+            throw new NiciraNvpApiException("Expected 1 LogicalSwitchPort, but 
got " + listSize);
         }
 
-        final LogicalSwitchPort lsp = lspl.getResults().get(0);
+        final LogicalSwitchPort lsp = lspl.get(0);
         return lsp.getUuid();
     }
 
     public ControlClusterStatus getControlClusterStatus() throws 
NiciraNvpApiException {
-        final String uri = "/ws.v1/control-cluster/status";
-        ControlClusterStatus ccs;
+        final String uri = NiciraConstants.CONTROL_CLUSTER_STATUS_URL;
         try {
-            ccs = restConnector.executeRetrieveObject(new 
TypeToken<ControlClusterStatus>() {
-            }.getType(), uri, null);
+            return 
restConnector.executeRetrieveObject(ControlClusterStatus.class, uri, new 
HashMap<String, String>());
         } catch (final CloudstackRESTException e) {
             throw new NiciraNvpApiException(e);
         }
-
-        return ccs;
     }
 
-    public NiciraNvpList<LogicalSwitchPort> findLogicalSwitchPortsByUuid(final 
String logicalSwitchUuid, final String logicalSwitchPortUuid) throws 
NiciraNvpApiException {
-        final String uri = SWITCH_URI_PREFIX + "/" + logicalSwitchUuid + 
"/lport";
-        final Map<String, String> params = new HashMap<String, String>();
-        params.put("uuid", logicalSwitchPortUuid);
-        params.put("fields", "uuid");
+    public List<LogicalSwitchPort> findLogicalSwitchPortsByUuid(final String 
logicalSwitchUuid, final String logicalSwitchPortUuid) throws 
NiciraNvpApiException {
+        final String uri = buildLogicalSwitchElementUri(logicalSwitchUuid, 
LPORT_PATH_SEGMENT);
+        final Map<String, String> params = 
buildBasicParametersMap(UUID_QUERY_PARAMETER);
+        params.put(UUID_QUERY_PARAMETER, logicalSwitchPortUuid);
 
-        NiciraNvpList<LogicalSwitchPort> lspl;
         try {
-            lspl = restConnector.executeRetrieveObject(new 
TypeToken<NiciraNvpList<LogicalSwitchPort>>() {
-            }.getType(), uri, params);
+            final Type niciraListType = new 
TypeToken<NiciraNvpList<LogicalSwitchPort>>() {
+            }.getType();
+            return restConnector.<NiciraNvpList<LogicalSwitchPort>> 
executeRetrieveObject(niciraListType, uri, params).getResults();
         } catch (final CloudstackRESTException e) {
             throw new NiciraNvpApiException(e);
         }
-
-        if (lspl == null) {
-            throw new NiciraNvpApiException("Unexpected response from API");
-        }
-
-        return lspl;
     }
 
-    public NiciraNvpList<LogicalRouterPort> findLogicalRouterPortsByUuid(final 
String logicalRouterUuid, final String logicalRouterPortUuid) throws 
NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/lport";
-        final Map<String, String> params = new HashMap<String, String>();
-        params.put("uuid", logicalRouterPortUuid);
-        params.put("fields", "uuid");
+    public List<LogicalRouterPort> findLogicalRouterPortsByUuid(final String 
logicalRouterUuid, final String logicalRouterPortUuid) throws 
NiciraNvpApiException {
+        final String uri = buildLogicalRouterElementUri(logicalRouterUuid, 
LPORT_PATH_SEGMENT);
+        final Map<String, String> params = 
buildBasicParametersMap(UUID_QUERY_PARAMETER);
+        params.put(UUID_QUERY_PARAMETER, logicalRouterPortUuid);
 
-        NiciraNvpList<LogicalRouterPort> lrpl;
         try {
-            lrpl = restConnector.executeRetrieveObject(new 
TypeToken<NiciraNvpList<LogicalRouterPort>>() {
-            }.getType(), uri, params);
+            final Type niciraListType = new 
TypeToken<NiciraNvpList<LogicalRouterPort>>() {
+            }.getType();
+            return restConnector.<NiciraNvpList<LogicalRouterPort>> 
executeRetrieveObject(niciraListType, uri, params).getResults();
         } catch (final CloudstackRESTException e) {
             throw new NiciraNvpApiException(e);
         }
-
-        if (lrpl == null) {
-            throw new NiciraNvpApiException("Unexpected response from API");
-        }
-
-        return lrpl;
     }
 
     public LogicalRouter createLogicalRouter(final LogicalRouter 
logicalRouter) throws NiciraNvpApiException {
@@ -469,7 +455,7 @@ public class NiciraNvpApi {
      * @return
      * @throws NiciraNvpApiException
      */
-    public NiciraNvpList<LogicalRouter> findLogicalRouter() throws 
NiciraNvpApiException {
+    public List<LogicalRouter> findLogicalRouter() throws 
NiciraNvpApiException {
         return findLogicalRouter(null);
     }
 
@@ -480,12 +466,12 @@ public class NiciraNvpApi {
      * @return
      * @throws NiciraNvpApiException
      */
-    public NiciraNvpList<LogicalRouter> findLogicalRouter(final String uuid) 
throws NiciraNvpApiException {
-        return find(uuid, LogicalRouter.class);
+    public List<LogicalRouter> findLogicalRouter(final String uuid) throws 
NiciraNvpApiException {
+        return find(Optional.fromNullable(uuid), LogicalRouter.class);
     }
 
     public LogicalRouter findOneLogicalRouterByUuid(final String 
logicalRouterUuid) throws NiciraNvpApiException {
-        return findLogicalRouter(logicalRouterUuid).getResults().get(0);
+        return findLogicalRouter(logicalRouterUuid).get(0);
     }
 
     public void updateLogicalRouter(final LogicalRouter logicalRouter, final 
String logicalRouterUuid) throws NiciraNvpApiException {
@@ -493,100 +479,149 @@ public class NiciraNvpApi {
     }
 
     public void deleteLogicalRouter(final String logicalRouterUuid) throws 
NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid;
-        deleteWithUri(uri);
+        deleteWithUri(buildLogicalRouterUri(logicalRouterUuid));
     }
 
     public LogicalRouterPort createLogicalRouterPort(final String 
logicalRouterUuid, final LogicalRouterPort logicalRouterPort) throws 
NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/lport";
-        return createWithUri(logicalRouterPort, uri);
+        return createWithUri(logicalRouterPort, 
buildLogicalRouterElementUri(logicalRouterUuid, LPORT_PATH_SEGMENT));
     }
 
     public void deleteLogicalRouterPort(final String logicalRouterUuid, final 
String logicalRouterPortUuid) throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/lport/" + logicalRouterPortUuid;
-        deleteWithUri(uri);
+        deleteWithUri(buildLogicalRouterElementUri(logicalRouterUuid, 
LPORT_PATH_SEGMENT, logicalRouterPortUuid));
     }
 
     public void updateLogicalRouterPort(final String logicalRouterUuid, final 
LogicalRouterPort logicalRouterPort) throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/lport/" + logicalRouterPort.getUuid();
-        updateWithUri(logicalRouterPort, uri);
+        updateWithUri(logicalRouterPort, 
buildLogicalRouterElementUri(logicalRouterUuid, LPORT_PATH_SEGMENT, 
logicalRouterPort.getUuid().toString()));
     }
 
     public void updateLogicalRouterPortAttachment(final String 
logicalRouterUuid, final String logicalRouterPortUuid, final Attachment 
attachment) throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/lport/" + logicalRouterPortUuid + "/attachment";
-        updateWithUri(attachment, uri);
+        updateWithUri(attachment, 
buildLogicalRouterElementUri(logicalRouterUuid, LPORT_PATH_SEGMENT, 
logicalRouterPortUuid) + ATTACHMENT_PATH_SEGMENT);
     }
 
     public NatRule createLogicalRouterNatRule(final String logicalRouterUuid, 
final NatRule natRule) throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/nat";
-        return createWithUri(natRule, uri);
+        return createWithUri(natRule, 
buildLogicalRouterElementUri(logicalRouterUuid, NAT_PATH_SEGMENT));
     }
 
     public void updateLogicalRouterNatRule(final String logicalRouterUuid, 
final NatRule natRule) throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/nat/" + natRule.getUuid();
-        updateWithUri(natRule, uri);
+        updateWithUri(natRule, buildLogicalRouterElementUri(logicalRouterUuid, 
NAT_PATH_SEGMENT, natRule.getUuid().toString()));
     }
 
     public void deleteLogicalRouterNatRule(final String logicalRouterUuid, 
final UUID natRuleUuid) throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/nat/" + natRuleUuid.toString();
-        deleteWithUri(uri);
+        deleteWithUri(buildLogicalRouterElementUri(logicalRouterUuid, 
NAT_PATH_SEGMENT, natRuleUuid.toString()));
     }
 
-    public NiciraNvpList<LogicalRouterPort> 
findLogicalRouterPortByGatewayServiceAndVlanId(final String logicalRouterUuid, 
final String gatewayServiceUuid, final long vlanId)
-            throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/lport";
-        final Map<String, String> params = new HashMap<String, String>();
-        params.put("attachment_gwsvc_uuid", gatewayServiceUuid);
-        params.put("attachment_vlan", Long.toString(vlanId));
-        params.put("fields", "*");
+    public List<LogicalRouterPort> 
findLogicalRouterPortByGatewayServiceAndVlanId(final String logicalRouterUuid, 
final String gatewayServiceUuid, final long vlanId)
+                    throws NiciraNvpApiException {
+        final String uri = buildLogicalRouterElementUri(logicalRouterUuid, 
LPORT_PATH_SEGMENT);
+        final Map<String, String> params = 
buildBasicParametersMap(WILDCARD_QUERY_PARAMETER);
+        params.put(ATTACHMENT_GWSVC_UUID_QUERY_PARAMETER, gatewayServiceUuid);
+        params.put(NiciraConstants.ATTACHMENT_VLAN_PARAMETER, 
Long.toString(vlanId));
 
         try {
-            return restConnector.executeRetrieveObject(new 
TypeToken<NiciraNvpList<LogicalRouterPort>>() {
-            }.getType(), uri, params);
+            final Type niciraListType = new 
TypeToken<NiciraNvpList<LogicalRouterPort>>() {
+            }.getType();
+            return restConnector.<NiciraNvpList<LogicalRouterPort>> 
executeRetrieveObject(niciraListType, uri, params).getResults();
         } catch (final CloudstackRESTException e) {
             throw new NiciraNvpApiException(e);
         }
     }
 
-    public NiciraNvpList<NatRule> findNatRulesByLogicalRouterUuid(final String 
logicalRouterUuid) throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/nat";
-        final Map<String, String> params = new HashMap<String, String>();
-        params.put("fields", "*");
+    public List<NatRule> findNatRulesByLogicalRouterUuid(final String 
logicalRouterUuid) throws NiciraNvpApiException {
+        final String uri = buildLogicalRouterElementUri(logicalRouterUuid, 
NAT_PATH_SEGMENT);
+        final Map<String, String> params = 
buildBasicParametersMap(WILDCARD_QUERY_PARAMETER);
 
         try {
-            return restConnector.executeRetrieveObject(new 
TypeToken<NiciraNvpList<NatRule>>() {
-            }.getType(), uri, params);
+            final Type niciraListType = new 
TypeToken<NiciraNvpList<NatRule>>() {
+            }.getType();
+            return restConnector.<NiciraNvpList<NatRule>> 
executeRetrieveObject(niciraListType, uri, params).getResults();
         } catch (final CloudstackRESTException e) {
             throw new NiciraNvpApiException(e);
         }
     }
 
-    public NiciraNvpList<LogicalRouterPort> 
findLogicalRouterPortByGatewayServiceUuid(final String logicalRouterUuid, final 
String l3GatewayServiceUuid)
-            throws NiciraNvpApiException {
-        final String uri = ROUTER_URI_PREFIX + "/" + logicalRouterUuid + 
"/lport";
-        final Map<String, String> params = new HashMap<String, String>();
-        params.put("fields", "*");
-        params.put("attachment_gwsvc_uuid", l3GatewayServiceUuid);
+    public List<LogicalRouterPort> 
findLogicalRouterPortByGatewayServiceUuid(final String logicalRouterUuid, final 
String l3GatewayServiceUuid)
+                    throws NiciraNvpApiException {
+        final String uri = buildLogicalRouterElementUri(logicalRouterUuid, 
LPORT_PATH_SEGMENT);
+        final Map<String, String> params = 
buildBasicParametersMap(WILDCARD_QUERY_PARAMETER);
+        params.put(ATTACHMENT_GWSVC_UUID_QUERY_PARAMETER, 
l3GatewayServiceUuid);
 
         try {
-            return restConnector.executeRetrieveObject(new 
TypeToken<NiciraNvpList<LogicalRouterPort>>() {
-            }.getType(), uri, params);
+            final Type niciraListType = new 
TypeToken<NiciraNvpList<LogicalRouterPort>>() {
+            }.getType();
+            return restConnector.<NiciraNvpList<LogicalRouterPort>> 
executeRetrieveObject(niciraListType, uri, params).getResults();
         } catch (final CloudstackRESTException e) {
             throw new NiciraNvpApiException(e);
         }
     }
 
+    private static Map<String, String> buildBasicParametersMap(final String 
fieldsQueryValue) {
+        final Map<String, String> params = new HashMap<String, String>();
+        params.put(FIELDS_QUERY_PARAMETER, fieldsQueryValue);
+        return params;
+    }
 
+    private static String buildUri(final String uriPrefix, final String uuid) {
+        return uriPrefix + "/" + uuid;
+    }
 
+    private static String buildLogicalSwitchUri(final String 
logicalSwitchUuid) {
+        return buildUri(SWITCH_URI_PREFIX, logicalSwitchUuid);
+    }
 
+    private static String buildLogicalSwitchElementUri(final String 
logicalSwitchUuid, final String logicalElementType) {
+        return buildLogicalSwitchUri(logicalSwitchUuid) + logicalElementType;
+    }
 
+    private static String buildLogicalSwitchElementUri(final String 
logicalSwitchUuid, final String logicalElementType, final String elementUuid) {
+        return buildLogicalSwitchElementUri(logicalSwitchUuid, 
logicalElementType) + "/" + elementUuid.toString();
     }
 
+    private static String buildLogicalRouterUri(final String 
logicalRouterUuid) {
+        return buildUri(ROUTER_URI_PREFIX, logicalRouterUuid);
+    }
 
+    private static String buildLogicalRouterElementUri(final String 
logicalRouterUuid, final String logicalElementType) {
+        return buildLogicalRouterUri(logicalRouterUuid) + logicalElementType;
+    }
+
+    private static String buildLogicalRouterElementUri(final String 
logicalRouterUuid, final String logicalRouterElementType, final String 
elementUuid) {
+        return buildLogicalRouterElementUri(logicalRouterUuid, 
logicalRouterElementType) + "/" + elementUuid.toString();
+    }
 
+    public static class Builder {
+        private String host;
+        private String username;
+        private String password;
+        private CloseableHttpClient httpClient;
+        private HttpClientContext httpClientContext = 
HttpClientContext.create();
 
+        public Builder host(final String host) {
+            this.host = host;
+            return this;
+        }
+
+        public Builder username(final String username) {
+            this.username = username;
+            return this;
+        }
 
+        public Builder password(final String password) {
+            this.password = password;
+            return this;
+        }
+
+        public Builder httpClient(final CloseableHttpClient httpClient) {
+            this.httpClient = httpClient;
+            return this;
+        }
+
+        public Builder httpClientContext(final HttpClientContext 
httpClientContext) {
+            this.httpClientContext = httpClientContext;
+            return this;
+        }
 
+        public NiciraNvpApi build() {
+            return new NiciraNvpApi(this);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09f71533/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/NiciraNvpResource.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/NiciraNvpResource.java
 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/NiciraNvpResource.java
index af5812d..d6355b2 100644
--- 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/NiciraNvpResource.java
+++ 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/NiciraNvpResource.java
@@ -19,6 +19,9 @@
 
 package com.cloud.network.resource;
 
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
 import java.util.Map;
 
 import javax.naming.ConfigurationException;
@@ -42,6 +45,8 @@ import com.cloud.network.nicira.NiciraNvpApiException;
 import com.cloud.network.nicira.SourceNatRule;
 import com.cloud.network.utils.CommandRetryUtility;
 import com.cloud.resource.ServerResource;
+import com.cloud.utils.rest.CloudstackRESTException;
+import com.cloud.utils.rest.HttpClientHelper;
 
 public class NiciraNvpResource implements ServerResource {
 
@@ -49,6 +54,7 @@ public class NiciraNvpResource implements ServerResource {
 
     public static final int NAME_MAX_LEN = 40;
     public static final int NUM_RETRIES = 2;
+    private static final int MAX_REDIRECTS = 5;
 
     private String name;
     private String guid;
@@ -58,8 +64,16 @@ public class NiciraNvpResource implements ServerResource {
     private NiciraNvpUtilities niciraNvpUtilities;
     private CommandRetryUtility retryUtility;
 
-    protected NiciraNvpApi createNiciraNvpApi() {
-        return new NiciraNvpApi();
+    protected NiciraNvpApi createNiciraNvpApi(final String host, final String 
username, final String password) throws CloudstackRESTException {
+        try {
+            return 
NiciraNvpApi.create().host(host).username(username).password(password).httpClient(HttpClientHelper.createHttpClient(MAX_REDIRECTS)).build();
+        } catch (final KeyManagementException e) {
+            throw new CloudstackRESTException("Could not create HTTP client", 
e);
+        } catch (final NoSuchAlgorithmException e) {
+            throw new CloudstackRESTException("Could not create HTTP client", 
e);
+        } catch (final KeyStoreException e) {
+            throw new CloudstackRESTException("Could not create HTTP client", 
e);
+        }
     }
 
     @Override
@@ -99,9 +113,11 @@ public class NiciraNvpResource implements ServerResource {
         retryUtility = CommandRetryUtility.getInstance();
         retryUtility.setServerResource(this);
 
-        niciraNvpApi = createNiciraNvpApi();
-        niciraNvpApi.setControllerAddress(ip);
-        niciraNvpApi.setAdminCredentials(adminuser, adminpass);
+        try {
+            niciraNvpApi = createNiciraNvpApi(ip, adminuser, adminpass);
+        } catch (final CloudstackRESTException e) {
+            throw new ConfigurationException("Could not create a Nicira Nvp 
API client: " + e.getMessage());
+        }
 
         return true;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09f71533/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
index 35ab04c..ae0d4ba 100644
--- 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
+++ 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
@@ -21,6 +21,8 @@ package com.cloud.network.resource.wrapper;
 
 import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
 
+import java.util.List;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.agent.api.Answer;
@@ -30,7 +32,6 @@ import com.cloud.agent.api.to.PortForwardingRuleTO;
 import com.cloud.network.nicira.NatRule;
 import com.cloud.network.nicira.NiciraNvpApi;
 import com.cloud.network.nicira.NiciraNvpApiException;
-import com.cloud.network.nicira.NiciraNvpList;
 import com.cloud.network.resource.NiciraNvpResource;
 import com.cloud.network.utils.CommandRetryUtility;
 import com.cloud.resource.CommandWrapper;
@@ -45,7 +46,7 @@ public final class 
NiciraNvpConfigurePortForwardingRulesCommandWrapper extends C
     public Answer execute(final 
ConfigurePortForwardingRulesOnLogicalRouterCommand command, final 
NiciraNvpResource niciraNvpResource) {
         final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
         try {
-            final NiciraNvpList<NatRule> existingRules = 
niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
+            final List<NatRule> existingRules = 
niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
             // Rules of the game (also known as 
assumptions-that-will-make-stuff-break-later-on)
             // A SourceNat rule with a match other than a /32 cidr is assumed 
to be the "main" SourceNat rule
             // Any other SourceNat rule should have a corresponding 
DestinationNat rule
@@ -66,7 +67,7 @@ public final class 
NiciraNvpConfigurePortForwardingRulesCommandWrapper extends C
                 NatRule incoming = null;
                 NatRule outgoing = null;
 
-                for (final NatRule storedRule : existingRules.getResults()) {
+                for (final NatRule storedRule : existingRules) {
                     if (storedRule.equalsIgnoreUuid(rulepair[1])) {
                         // The outgoing rule exists
                         outgoing = storedRule;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09f71533/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
index 9d4c711..d584629 100644
--- 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
+++ 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
@@ -21,13 +21,14 @@ package com.cloud.network.resource.wrapper;
 
 import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
 
+import java.util.List;
+
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterAnswer;
 import com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterCommand;
 import com.cloud.network.nicira.LogicalRouterPort;
 import com.cloud.network.nicira.NiciraNvpApi;
 import com.cloud.network.nicira.NiciraNvpApiException;
-import com.cloud.network.nicira.NiciraNvpList;
 import com.cloud.network.resource.NiciraNvpResource;
 import com.cloud.network.utils.CommandRetryUtility;
 import com.cloud.resource.CommandWrapper;
@@ -41,11 +42,11 @@ public final class 
NiciraNvpConfigurePublicIpsCommandWrapper extends CommandWrap
         final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
 
         try {
-            final NiciraNvpList<LogicalRouterPort> ports = 
niciraNvpApi.findLogicalRouterPortByGatewayServiceUuid(command.getLogicalRouterUuid(),
 command.getL3GatewayServiceUuid());
-            if (ports.getResultCount() != 1) {
+            final List<LogicalRouterPort> ports = 
niciraNvpApi.findLogicalRouterPortByGatewayServiceUuid(command.getLogicalRouterUuid(),
 command.getL3GatewayServiceUuid());
+            if (ports.size() != 1) {
                 return new ConfigurePublicIpsOnLogicalRouterAnswer(command, 
false, "No logical router ports found, unable to set ip addresses");
             }
-            final LogicalRouterPort lrp = ports.getResults().get(0);
+            final LogicalRouterPort lrp = ports.get(0);
             lrp.setIpAddresses(command.getPublicCidrs());
             
niciraNvpApi.updateLogicalRouterPort(command.getLogicalRouterUuid(), lrp);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09f71533/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
index e576db9..ae59784 100644
--- 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
+++ 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
@@ -21,6 +21,8 @@ package com.cloud.network.resource.wrapper;
 
 import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
 
+import java.util.List;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.agent.api.Answer;
@@ -30,7 +32,6 @@ import com.cloud.agent.api.to.StaticNatRuleTO;
 import com.cloud.network.nicira.NatRule;
 import com.cloud.network.nicira.NiciraNvpApi;
 import com.cloud.network.nicira.NiciraNvpApiException;
-import com.cloud.network.nicira.NiciraNvpList;
 import com.cloud.network.resource.NiciraNvpResource;
 import com.cloud.network.utils.CommandRetryUtility;
 import com.cloud.resource.CommandWrapper;
@@ -46,7 +47,7 @@ public final class 
NiciraNvpConfigureStaticNatRulesCommandWrapper extends Comman
         final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
 
         try {
-            final NiciraNvpList<NatRule> existingRules = 
niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
+            final List<NatRule> existingRules = 
niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
             // Rules of the game (also known as 
assumptions-that-will-make-stuff-break-later-on)
             // A SourceNat rule with a match other than a /32 cidr is assumed 
to be the "main" SourceNat rule
             // Any other SourceNat rule should have a corresponding 
DestinationNat rule
@@ -58,7 +59,7 @@ public final class 
NiciraNvpConfigureStaticNatRulesCommandWrapper extends Comman
                 NatRule incoming = null;
                 NatRule outgoing = null;
 
-                for (final NatRule storedRule : existingRules.getResults()) {
+                for (final NatRule storedRule : existingRules) {
                     if (storedRule.equalsIgnoreUuid(rulepair[1])) {
                         // The outgoing rule exists
                         outgoing = storedRule;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09f71533/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java
 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java
index ea68538..8c11427 100644
--- 
a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java
+++ 
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java
@@ -21,13 +21,14 @@ package com.cloud.network.resource.wrapper;
 
 import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
 
+import java.util.List;
+
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.FindLogicalSwitchPortAnswer;
 import com.cloud.agent.api.FindLogicalSwitchPortCommand;
 import com.cloud.network.nicira.LogicalSwitchPort;
 import com.cloud.network.nicira.NiciraNvpApi;
 import com.cloud.network.nicira.NiciraNvpApiException;
-import com.cloud.network.nicira.NiciraNvpList;
 import com.cloud.network.resource.NiciraNvpResource;
 import com.cloud.network.utils.CommandRetryUtility;
 import com.cloud.resource.CommandWrapper;
@@ -44,8 +45,8 @@ public final class 
NiciraNvpFindLogicalSwitchPortCommandWrapper extends CommandW
         final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
 
         try {
-            final NiciraNvpList<LogicalSwitchPort> ports = 
niciraNvpApi.findLogicalSwitchPortsByUuid(logicalSwitchUuid, 
logicalSwitchPortUuid);
-            if (ports.getResultCount() == 0) {
+            final List<LogicalSwitchPort> ports = 
niciraNvpApi.findLogicalSwitchPortsByUuid(logicalSwitchUuid, 
logicalSwitchPortUuid);
+            if (ports.size() == 0) {
                 return new FindLogicalSwitchPortAnswer(command, false, 
"Logical switchport " + logicalSwitchPortUuid + " not found", null);
             } else {
                 return new FindLogicalSwitchPortAnswer(command, true, "Logical 
switchport " + logicalSwitchPortUuid + " found", logicalSwitchPortUuid);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09f71533/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/nicira/NiciraNvpApiIT.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/nicira/NiciraNvpApiIT.java
 
b/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/nicira/NiciraNvpApiIT.java
index 3bb4b9d..a95a8d6 100644
--- 
a/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/nicira/NiciraNvpApiIT.java
+++ 
b/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/nicira/NiciraNvpApiIT.java
@@ -22,16 +22,15 @@ package com.cloud.network.nicira;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Properties;
 import java.util.UUID;
 
 import org.junit.Before;
 import org.junit.Test;
 
 import com.cloud.utils.PropertiesUtil;
+import com.cloud.utils.rest.HttpClientHelper;
 
 public class NiciraNvpApiIT {
 
@@ -40,18 +39,23 @@ public class NiciraNvpApiIT {
     protected long timestamp = System.currentTimeMillis();
 
     @Before
-    public void setup() throws IOException {
-        final Properties properties = 
PropertiesUtil.loadFromFile(PropertiesUtil.findConfigFile("config.properties"));
-        api = new NiciraNvpApi();
-        api.setControllerAddress(properties.getProperty("nvp.host"));
-        api.setAdminCredentials(properties.getProperty("nvp.admin.user"),
-                properties.getProperty("nvp.admin.pwd"));
+    public void setup() throws Exception {
+        
PropertiesUtil.loadFromFile(PropertiesUtil.findConfigFile("config.properties"));
+        final String host = System.getProperty("nvp.host");
+        final String user = System.getProperty("nvp.admin.user");
+        final String pass = System.getProperty("nvp.admin.pwd");
+        api = NiciraNvpApi.create()
+            .host(host)
+            .username(user)
+            .password(pass)
+            .httpClient(HttpClientHelper.createHttpClient(5))
+            .build();
     }
 
     @Test
-    public void testCRUDSecurityProfile() throws NiciraNvpApiException {
+    public void testCRUDSecurityProfile() {
         SecurityProfile sProfile = new SecurityProfile();
-        sProfile.setDisplayName("SecProfile"+timestamp);
+        sProfile.setDisplayName("SecProfile" + timestamp);
 
         final List<SecurityRule> egressRules = new ArrayList<SecurityRule>();
         sProfile.setLogicalPortEgressRules(egressRules);
@@ -73,27 +77,23 @@ public class NiciraNvpApiIT {
             sProfile = api.createSecurityProfile(sProfile);
 
             // We can now update the new entity
-            sProfile.setDisplayName("UpdatedSecProfile"+timestamp);
+            sProfile.setDisplayName("UpdatedSecProfile" + timestamp);
             api.updateSecurityProfile(sProfile, sProfile.getUuid());
 
             // Read them all
-            NiciraNvpList<SecurityProfile> profiles = 
api.findSecurityProfile();
+            List<SecurityProfile> profiles = api.findSecurityProfile();
             SecurityProfile scInList = null;
-            for(final SecurityProfile iProfile : profiles.getResults()) {
+            for (final SecurityProfile iProfile : profiles) {
                 if (iProfile.getUuid().equalsIgnoreCase(sProfile.getUuid())) {
                     scInList = iProfile;
                 }
             }
-            assertEquals("Read a Security Profile different from the one just 
created and updated",
-                    sProfile, scInList);
+            assertEquals("Read a Security Profile different from the one just 
created and updated", sProfile, scInList);
 
             // Read them filtered by uuid (get one)
             profiles = api.findSecurityProfile(sProfile.getUuid());
-            assertEquals("Read a Security Profile different from the one just 
created and updated",
-                    sProfile,
-                    profiles.getResults().get(0));
-            assertEquals("Read a Security Profile filtered by unique id (UUID) 
with more than one item",
-                    1, profiles.getResults().size());
+            assertEquals("Read a Security Profile different from the one just 
created and updated", sProfile, profiles.get(0));
+            assertEquals("Read a Security Profile filtered by unique id (UUID) 
with more than one item", 1, profiles.size());
 
             // We can now delete the new entity
             api.deleteSecurityProfile(sProfile.getUuid());
@@ -104,25 +104,21 @@ public class NiciraNvpApiIT {
     }
 
     @Test
-    public void testCRUDAcl() throws NiciraNvpApiException {
+    public void testCRUDAcl() {
         Acl acl = new Acl();
-        acl.setDisplayName("Acl"+timestamp);
+        acl.setDisplayName("Acl" + timestamp);
 
         // Note that if the protocol is 6 (TCP) then you cannot put ICMP code 
and type
         // Note that if the protocol is 1 (ICMP) then you cannot put ports
         final List<AclRule> egressRules = new ArrayList<AclRule>();
         acl.setLogicalPortEgressRules(egressRules);
-        egressRules.add(new AclRule(AclRule.ETHERTYPE_IPV4, 1, "allow", null, 
null,
-                "1.10.10.0", "1.10.10.1", null, null, null, null, 0, 0, 5));
-        egressRules.add(new AclRule(AclRule.ETHERTYPE_IPV4, 6, "allow", null, 
null,
-                "1.10.10.6", "1.10.10.7", 80, 80, 80, 80, 1, null, null));
+        egressRules.add(new AclRule(AclRule.ETHERTYPE_IPV4, 1, "allow", null, 
null, "1.10.10.0", "1.10.10.1", null, null, null, null, 0, 0, 5));
+        egressRules.add(new AclRule(AclRule.ETHERTYPE_IPV4, 6, "allow", null, 
null, "1.10.10.6", "1.10.10.7", 80, 80, 80, 80, 1, null, null));
 
         final List<AclRule> ingressRules = new ArrayList<AclRule>();
         acl.setLogicalPortIngressRules(ingressRules);
-        ingressRules.add(new AclRule(AclRule.ETHERTYPE_IPV4, 1, "allow", null, 
null,
-                "1.10.10.0", "1.10.10.1", null, null, null, null, 0, 0, 5));
-        ingressRules.add(new AclRule(AclRule.ETHERTYPE_IPV4, 6, "allow", null, 
null,
-                "1.10.10.6", "1.10.10.7", 80, 80, 80, 80, 1, null, null));
+        ingressRules.add(new AclRule(AclRule.ETHERTYPE_IPV4, 1, "allow", null, 
null, "1.10.10.0", "1.10.10.1", null, null, null, null, 0, 0, 5));
+        ingressRules.add(new AclRule(AclRule.ETHERTYPE_IPV4, 6, "allow", null, 
null, "1.10.10.6", "1.10.10.7", 80, 80, 80, 80, 1, null, null));
 
         final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>();
         acl.setTags(tags);
@@ -134,27 +130,23 @@ public class NiciraNvpApiIT {
             acl = api.createAcl(acl);
 
             // We can now update the new entity
-            acl.setDisplayName("UpdatedAcl"+timestamp);
+            acl.setDisplayName("UpdatedAcl" + timestamp);
             api.updateAcl(acl, acl.getUuid());
 
             // Read them all
-            NiciraNvpList<Acl> acls = api.findAcl();
+            List<Acl> acls = api.findAcl();
             Acl scInList = null;
-            for(final Acl iAcl : acls.getResults()) {
+            for (final Acl iAcl : acls) {
                 if (iAcl.getUuid().equalsIgnoreCase(acl.getUuid())) {
                     scInList = iAcl;
                 }
             }
-            assertEquals("Read a ACL different from the one just created and 
updated",
-                    acl, scInList);
+            assertEquals("Read a ACL different from the one just created and 
updated", acl, scInList);
 
             // Read them filtered by uuid (get one)
             acls = api.findAcl(acl.getUuid());
-            assertEquals("Read a ACL different from the one just created and 
updated",
-                    acl,
-                    acls.getResults().get(0));
-            assertEquals("Read a ACL filtered by unique id (UUID) with more 
than one item",
-                    1, acls.getResults().size());
+            assertEquals("Read a ACL different from the one just created and 
updated", acl, acls.get(0));
+            assertEquals("Read a ACL filtered by unique id (UUID) with more 
than one item", 1, acls.size());
 
             // We can now delete the new entity
             api.deleteAcl(acl.getUuid());
@@ -165,9 +157,9 @@ public class NiciraNvpApiIT {
     }
 
     @Test
-    public void testCRUDLogicalSwitch() throws NiciraNvpApiException {
+    public void testCRUDLogicalSwitch() throws Exception {
         LogicalSwitch logicalSwitch = new LogicalSwitch();
-        logicalSwitch.setDisplayName("LogicalSwitch"+timestamp);
+        logicalSwitch.setDisplayName("LogicalSwitch" + timestamp);
         logicalSwitch.setPortIsolationEnabled(true);
         logicalSwitch.setReplicationMode("service");
         logicalSwitch.setTags(new ArrayList<NiciraNvpTag>());
@@ -175,78 +167,65 @@ public class NiciraNvpApiIT {
 
         // In the creation we don't get to specify UUID, href or schema: they 
don't exist yet
 
-        try {
-            logicalSwitch = api.createLogicalSwitch(logicalSwitch);
+        logicalSwitch = api.createLogicalSwitch(logicalSwitch);
 
-            // We can now update the new entity
-            logicalSwitch.setDisplayName("UpdatedLogicalSwitch"+timestamp);
-            api.updateLogicalSwitch(logicalSwitch, logicalSwitch.getUuid());
+        // We can now update the new entity
+        logicalSwitch.setDisplayName("UpdatedLogicalSwitch" + timestamp);
+        api.updateLogicalSwitch(logicalSwitch, logicalSwitch.getUuid());
 
-            // Read them all
-            NiciraNvpList<LogicalSwitch> logicalSwitches = 
api.findLogicalSwitch();
-            for(final LogicalSwitch iLogicalSwitch : 
logicalSwitches.getResults()) {
-                if 
(iLogicalSwitch.getUuid().equalsIgnoreCase(logicalSwitch.getUuid())) {
-                    assertEquals("Read a LogicalSwitch different from the one 
just created and updated",
-                            logicalSwitch, iLogicalSwitch);
-                }
+        // Read them all
+        List<LogicalSwitch> logicalSwitches = api.findLogicalSwitch();
+        for (final LogicalSwitch iLogicalSwitch : logicalSwitches) {
+            if 
(iLogicalSwitch.getUuid().equalsIgnoreCase(logicalSwitch.getUuid())) {
+                assertEquals("Read a LogicalSwitch different from the one just 
created and updated", logicalSwitch, iLogicalSwitch);
             }
+        }
 
-            // Read them filtered by uuid (get one)
-            logicalSwitches = api.findLogicalSwitch(logicalSwitch.getUuid());
-            assertEquals("Read a LogicalSwitch different from the one just 
created and updated",
-                    logicalSwitch,
-                    logicalSwitches.getResults().get(0));
-            assertEquals("Read a LogicalSwitch filtered by unique id (UUID) 
with more than one item",
-                    1, logicalSwitches.getResults().size());
-
-            // Before deleting the test LogicalSwitch, test its ports
-            final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>();
-            tags.add(new NiciraNvpTag("cs_account", "OwnerName"));
+        // Read them filtered by uuid (get one)
+        logicalSwitches = api.findLogicalSwitch(logicalSwitch.getUuid());
+        assertEquals("Read a LogicalSwitch different from the one just created 
and updated", logicalSwitch, logicalSwitches.get(0));
+        assertEquals("Read a LogicalSwitch filtered by unique id (UUID) with 
more than one item", 1, logicalSwitches.size());
 
-            LogicalSwitchPort logicalSwitchPort = new 
LogicalSwitchPort("LSwitchPort"+timestamp, tags, true);
-            logicalSwitchPort = 
api.createLogicalSwitchPort(logicalSwitch.getUuid(), logicalSwitchPort);
+        // Before deleting the test LogicalSwitch, test its ports
+        final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>();
+        tags.add(new NiciraNvpTag("cs_account", "OwnerName"));
 
-            logicalSwitchPort.setDisplayName("UpdatedLSwitchPort"+timestamp);
-            api.updateLogicalSwitchPort(logicalSwitch.getUuid(), 
logicalSwitchPort);
+        LogicalSwitchPort logicalSwitchPort = new 
LogicalSwitchPort("LSwitchPort" + timestamp, tags, true);
+        logicalSwitchPort = 
api.createLogicalSwitchPort(logicalSwitch.getUuid(), logicalSwitchPort);
 
-            final NiciraNvpList<LogicalSwitchPort> logicalSwitchePorts =
-                    api.findLogicalSwitchPortsByUuid(logicalSwitch.getUuid(), 
logicalSwitchPort.getUuid());
-            for(final LogicalSwitchPort iLSwitchPort : 
logicalSwitchePorts.getResults()) {
-                if 
(iLSwitchPort.getUuid().equalsIgnoreCase(logicalSwitchPort.getUuid())) {
-                    assertEquals("Read a LogicalSwitchPort different from the 
one just created and updated",
-                            logicalSwitchPort, iLSwitchPort);
-                }
+        logicalSwitchPort.setDisplayName("UpdatedLSwitchPort" + timestamp);
+        api.updateLogicalSwitchPort(logicalSwitch.getUuid(), 
logicalSwitchPort);
+
+        final List<LogicalSwitchPort> logicalSwitchePorts = 
api.findLogicalSwitchPortsByUuid(logicalSwitch.getUuid(), 
logicalSwitchPort.getUuid());
+        for (final LogicalSwitchPort iLSwitchPort : logicalSwitchePorts) {
+            if 
(iLSwitchPort.getUuid().equalsIgnoreCase(logicalSwitchPort.getUuid())) {
+                assertEquals("Read a LogicalSwitchPort different from the one 
just created and updated", logicalSwitchPort, iLSwitchPort);
             }
+        }
 
-            // And finally test attachments
-            final String attachmentUuid = UUID.randomUUID().toString();
-            final VifAttachment vifAttachment = new 
VifAttachment(attachmentUuid);
-            api.updateLogicalSwitchPortAttachment(logicalSwitch.getUuid(), 
logicalSwitchPort.getUuid(),
-                    vifAttachment);
+        // And finally test attachments
+        final String attachmentUuid = UUID.randomUUID().toString();
+        final VifAttachment vifAttachment = new VifAttachment(attachmentUuid);
+        api.updateLogicalSwitchPortAttachment(logicalSwitch.getUuid(), 
logicalSwitchPort.getUuid(), vifAttachment);
 
-            assertEquals("Read a LogicalSwitchPort by vifAttachment different 
than expected",
-                    
api.findLogicalSwitchPortUuidByVifAttachmentUuid(logicalSwitch.getUuid(), 
vifAttachment.getVifUuid()),
-                            logicalSwitchPort.getUuid());
+        assertEquals("Read a LogicalSwitchPort by vifAttachment different than 
expected",
+                        
api.findLogicalSwitchPortUuidByVifAttachmentUuid(logicalSwitch.getUuid(), 
vifAttachment.getVifUuid()), logicalSwitchPort.getUuid());
 
-            api.deleteLogicalSwitchPort(logicalSwitch.getUuid(), 
logicalSwitchPort.getUuid());
+        api.deleteLogicalSwitchPort(logicalSwitch.getUuid(), 
logicalSwitchPort.getUuid());
 
-            // We can now delete the new entity
-            api.deleteLogicalSwitch(logicalSwitch.getUuid());
-        } catch (final NiciraNvpApiException e) {
-            e.printStackTrace();
-            assertTrue("Errors in LogicalSwitch CRUD", false);
-        }
+        // We can now delete the new entity
+        api.deleteLogicalSwitch(logicalSwitch.getUuid());
     }
 
     @Test
-    public void testCRUDLogicalRouter() throws NiciraNvpApiException {
+    public void testCRUDLogicalRouter() {
         LogicalRouter logicalRouter = new LogicalRouter();
-        logicalRouter.setDisplayName("LogicalRouter"+timestamp);
+        logicalRouter.setDisplayName("LogicalRouter" + timestamp);
         logicalRouter.setDistributed(true);
         logicalRouter.setNatSynchronizationEnabled(true);
         
logicalRouter.setReplicationMode(LogicalRouter.REPLICATION_MODE_SERVICE);
         final RoutingConfig routingConfig = new 
SingleDefaultRouteImplicitRoutingConfig(
-                new RouterNextHop("192.168.10.20"));
+                        new RouterNextHop("192.168.10.20"));
         logicalRouter.setRoutingConfig(routingConfig);
 
         // In the creation we don't get to specify UUID, href or schema: they 
don't exist yet
@@ -255,37 +234,32 @@ public class NiciraNvpApiIT {
             logicalRouter = api.createLogicalRouter(logicalRouter);
 
             // We can now update the new entity
-            logicalRouter.setDisplayName("UpdatedLogicalSwitch"+timestamp);
+            logicalRouter.setDisplayName("UpdatedLogicalSwitch" + timestamp);
             api.updateLogicalRouter(logicalRouter, logicalRouter.getUuid());
 
             // Read them all
-            NiciraNvpList<LogicalRouter> logicalRouters = 
api.findLogicalRouter();
+            List<LogicalRouter> logicalRouters = api.findLogicalRouter();
             LogicalRouter lsInList = null;
-            for(final LogicalRouter iLogicalRouter : 
logicalRouters.getResults()) {
+            for (final LogicalRouter iLogicalRouter : logicalRouters) {
                 if 
(iLogicalRouter.getUuid().equalsIgnoreCase(logicalRouter.getUuid())) {
                     lsInList = iLogicalRouter;
                 }
             }
-            assertEquals("Read a LogicalRouter different from the one just 
created and updated",
-                    logicalRouter, lsInList);
+            assertEquals("Read a LogicalRouter different from the one just 
created and updated", logicalRouter, lsInList);
 
             // Read them filtered by uuid (get one)
             logicalRouters = api.findLogicalRouter(logicalRouter.getUuid());
-            assertEquals("Read a LogicalRouter different from the one just 
created and updated",
-                    logicalRouter,
-                    logicalRouters.getResults().get(0));
-            assertEquals("Read a LogicalRouter filtered by unique id (UUID) 
with more than one item",
-                    1, logicalRouters.getResults().size());
+            assertEquals("Read a LogicalRouter different from the one just 
created and updated", logicalRouter, logicalRouters.get(0));
+            assertEquals("Read a LogicalRouter filtered by unique id (UUID) 
with more than one item", 1, logicalRouters.size());
 
-            assertEquals("", logicalRouters.getResults().get(0),
-                    api.findOneLogicalRouterByUuid(logicalRouter.getUuid()));
+            assertEquals(logicalRouters.get(0), 
api.findOneLogicalRouterByUuid(logicalRouter.getUuid()));
 
             // Before deleting the test LogicalRouter, test its ports
             final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>();
             tags.add(new NiciraNvpTag("cs_account", "OwnerName"));
 
             LogicalRouterPort logicalRouterPort = new LogicalRouterPort();
-            logicalRouterPort.setDisplayName("LRouterPort"+timestamp);
+            logicalRouterPort.setDisplayName("LRouterPort" + timestamp);
             logicalRouterPort.setTags(tags);
             logicalRouterPort.setAdminStatusEnabled(true);
             logicalRouterPort.setPortno(1024);
@@ -296,15 +270,13 @@ public class NiciraNvpApiIT {
             logicalRouterPort.setIpAddresses(ipAddresses);
             logicalRouterPort = 
api.createLogicalRouterPort(logicalRouter.getUuid(), logicalRouterPort);
 
-            logicalRouterPort.setDisplayName("UpdatedLRouterPort"+timestamp);
+            logicalRouterPort.setDisplayName("UpdatedLRouterPort" + timestamp);
             api.updateLogicalRouterPort(logicalRouter.getUuid(), 
logicalRouterPort);
 
-            final NiciraNvpList<LogicalRouterPort> logicalRouterePorts =
-                    api.findLogicalRouterPortsByUuid(logicalRouter.getUuid(), 
logicalRouterPort.getUuid());
-            for(final LogicalRouterPort iLRouterPort : 
logicalRouterePorts.getResults()) {
+            final List<LogicalRouterPort> logicalRouterePorts = 
api.findLogicalRouterPortsByUuid(logicalRouter.getUuid(), 
logicalRouterPort.getUuid());
+            for (final LogicalRouterPort iLRouterPort : logicalRouterePorts) {
                 if 
(iLRouterPort.getUuid().equalsIgnoreCase(logicalRouterPort.getUuid())) {
-                    assertEquals("Read a LogicalRouterPort different from the 
one just created and updated",
-                            logicalRouterPort, iLRouterPort);
+                    assertEquals("Read a LogicalRouterPort different from the 
one just created and updated", logicalRouterPort, iLRouterPort);
                 }
             }
 
@@ -339,8 +311,8 @@ public class NiciraNvpApiIT {
     public void testGetControlClusterStatus() throws NiciraNvpApiException {
         final ControlClusterStatus controlClusterStatus = 
api.getControlClusterStatus();
         final String clusterStatus = controlClusterStatus.getClusterStatus();
-        final boolean correctStatus = 
(clusterStatus.equalsIgnoreCase("stable") ||
-                clusterStatus.equalsIgnoreCase("joining") || 
clusterStatus.equalsIgnoreCase("unstable"));
+        final boolean correctStatus = clusterStatus.equalsIgnoreCase("stable") 
||
+                        clusterStatus.equalsIgnoreCase("joining") || 
clusterStatus.equalsIgnoreCase("unstable");
         assertTrue("Not recognizable cluster status", correctStatus);
     }
 

Reply via email to