You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2013/08/23 10:37:41 UTC

[2/5] JCLOUDS-198: Implemented the PagedIterable in Abiquo

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiTest.java
index 249b62f..baa36d5 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiTest.java
@@ -30,9 +30,6 @@ import org.jclouds.abiquo.domain.InfrastructureResources;
 import org.jclouds.abiquo.domain.NetworkResources;
 import org.jclouds.abiquo.domain.cloud.options.VirtualDatacenterOptions;
 import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions;
-import org.jclouds.abiquo.domain.cloud.options.VirtualMachineTemplateOptions;
-import org.jclouds.abiquo.domain.cloud.options.VolumeOptions;
-import org.jclouds.abiquo.domain.network.options.IpOptions;
 import org.jclouds.abiquo.fallbacks.MovedVolume;
 import org.jclouds.abiquo.functions.ReturnTaskReferenceOrNull;
 import org.jclouds.http.functions.ParseXMLWithJAXB;
@@ -42,12 +39,10 @@ import org.jclouds.reflect.Invocation;
 import org.jclouds.rest.internal.GeneratedHttpRequest;
 import org.testng.annotations.Test;
 
-import com.abiquo.model.enumerator.HypervisorType;
 import com.abiquo.model.rest.RESTLink;
 import com.abiquo.model.transport.AcceptedRequestDto;
 import com.abiquo.model.transport.LinksDto;
 import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto;
-import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto;
 import com.abiquo.server.core.cloud.VirtualApplianceDto;
 import com.abiquo.server.core.cloud.VirtualApplianceStateDto;
 import com.abiquo.server.core.cloud.VirtualAppliancesDto;
@@ -57,13 +52,10 @@ import com.abiquo.server.core.cloud.VirtualMachineDto;
 import com.abiquo.server.core.cloud.VirtualMachineStateDto;
 import com.abiquo.server.core.cloud.VirtualMachineTaskDto;
 import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto;
-import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto;
 import com.abiquo.server.core.enterprise.EnterpriseDto;
 import com.abiquo.server.core.infrastructure.DatacenterDto;
 import com.abiquo.server.core.infrastructure.network.PrivateIpDto;
-import com.abiquo.server.core.infrastructure.network.PrivateIpsDto;
 import com.abiquo.server.core.infrastructure.network.PublicIpDto;
-import com.abiquo.server.core.infrastructure.network.PublicIpsDto;
 import com.abiquo.server.core.infrastructure.network.VLANNetworkDto;
 import com.abiquo.server.core.infrastructure.network.VLANNetworksDto;
 import com.abiquo.server.core.infrastructure.network.VMNetworkConfigurationsDto;
@@ -190,44 +182,6 @@ public class CloudApiTest extends BaseAbiquoApiTest<CloudApi> {
 
    /*********************** Ips ***********************/
 
-   public void testListAvailablePublicIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      IpOptions options = IpOptions.builder().limit(5).build();
-      Invokable<?, ?> method = method(CloudApi.class, "listAvailablePublicIps", VirtualDatacenterDto.class,
-            IpOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(CloudResources.virtualDatacenterPut(), options)));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/cloud/virtualdatacenters/1/publicips/topurchase?limit=5 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + PublicIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListPurchasedPublicIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      IpOptions options = IpOptions.builder().limit(5).build();
-      Invokable<?, ?> method = method(CloudApi.class, "listPurchasedPublicIps", VirtualDatacenterDto.class,
-            IpOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(CloudResources.virtualDatacenterPut(), options)));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/cloud/virtualdatacenters/1/publicips/purchased?limit=5 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + PublicIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testPurchasePublicIp() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(CloudApi.class, "purchasePublicIp", PublicIpDto.class);
       GeneratedHttpRequest request = processor.apply(Invocation.create(method,
@@ -264,42 +218,6 @@ public class CloudApiTest extends BaseAbiquoApiTest<CloudApi> {
 
    /*********************** Available templates ***********************/
 
-   public void testListAvailableTemplates() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(CloudApi.class, "listAvailableTemplates", VirtualDatacenterDto.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(CloudResources.virtualDatacenterPut())));
-
-      assertRequestLineEquals(request, "GET http://localhost/api/cloud/virtualdatacenters/1/action/templates HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VirtualMachineTemplatesDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListAvailableTemplatesWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(CloudApi.class, "listAvailableTemplates", VirtualDatacenterDto.class,
-            VirtualMachineTemplateOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(
-            method,
-            ImmutableList.<Object> of(CloudResources.virtualDatacenterPut(), VirtualMachineTemplateOptions.builder()
-                  .hypervisorType(HypervisorType.XENSERVER).categoryName("Firewalls").idTemplate(1).build())));
-
-      assertRequestLineEquals(request, "GET http://localhost/api/cloud/virtualdatacenters/1/action/templates"
-            + "?hypervisorTypeName=XENSERVER&categoryName=Firewalls&idTemplate=1 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VirtualMachineTemplatesDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    /*********************** Storage Tiers ***********************/
 
    public void testListStorageTiers() throws SecurityException, NoSuchMethodException, IOException {
@@ -480,41 +398,6 @@ public class CloudApiTest extends BaseAbiquoApiTest<CloudApi> {
 
    /*********************** Private Network IPs ***********************/
 
-   public void testListPrivateNetworkIps() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(CloudApi.class, "listPrivateNetworkIps", VLANNetworkDto.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(NetworkResources.privateNetworkPut())));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/cloud/virtualdatacenters/1/privatenetworks/1/ips HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + PrivateIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListPrivateNetworkIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      IpOptions options = IpOptions.builder().startWith(10).build();
-      Invokable<?, ?> method = method(CloudApi.class, "listPrivateNetworkIps", VLANNetworkDto.class, IpOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(NetworkResources.privateNetworkPut(), options)));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/cloud/virtualdatacenters/1/privatenetworks/1/ips?startwith=10 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + PrivateIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testGetPrivateNetworkIp() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(CloudApi.class, "getPrivateNetworkIp", VLANNetworkDto.class, Integer.class);
       GeneratedHttpRequest request = processor.apply(Invocation.create(method,
@@ -695,43 +578,6 @@ public class CloudApiTest extends BaseAbiquoApiTest<CloudApi> {
 
    /*********************** Virtual Machine ***********************/
 
-   public void testListVirtualMachines() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(CloudApi.class, "listVirtualMachines", VirtualApplianceDto.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(CloudResources.virtualAppliancePut())));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VirtualMachinesWithNodeExtendedDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListVirtualMachinesWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(CloudApi.class, "listVirtualMachines", VirtualApplianceDto.class,
-            VirtualMachineOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(
-            method,
-            ImmutableList.<Object> of(CloudResources.virtualAppliancePut(), VirtualMachineOptions.builder()
-                  .disablePagination().build())));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines?limit=0 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VirtualMachinesWithNodeExtendedDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testGetVirtualMachine() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(CloudApi.class, "getVirtualMachine", VirtualApplianceDto.class, Integer.class);
       GeneratedHttpRequest request = processor.apply(Invocation.create(method,
@@ -1166,61 +1012,6 @@ public class CloudApiTest extends BaseAbiquoApiTest<CloudApi> {
 
    /*********************** Volumes ***********************/
 
-   public void testListVolumes() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(CloudApi.class, "listVolumes", VirtualDatacenterDto.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(CloudResources.virtualDatacenterPut())));
-
-      assertRequestLineEquals(request, "GET http://localhost/api/cloud/virtualdatacenters/1/volumes HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VolumesManagementDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListVolumesWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(CloudApi.class, "listVolumes", VirtualDatacenterDto.class, VolumeOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(
-            method,
-            ImmutableList.<Object> of(CloudResources.virtualDatacenterPut(), VolumeOptions.builder()
-                  .onlyAvailable(true).build())));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/cloud/virtualdatacenters/1/volumes?available=true HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VolumesManagementDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListVolumesWithFilterOptions() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(CloudApi.class, "listVolumes", VirtualDatacenterDto.class, VolumeOptions.class);
-
-      GeneratedHttpRequest request = processor.apply(Invocation.create(
-            method,
-            ImmutableList.<Object> of(CloudResources.virtualDatacenterPut(), VolumeOptions.builder().has("vol")
-                  .orderBy("name").ascendant(true).build())));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/cloud/virtualdatacenters/1/volumes?has=vol&by=name&asc=true HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VolumesManagementDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testGetVolume() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(CloudApi.class, "getVolume", VirtualDatacenterDto.class, Integer.class);
       GeneratedHttpRequest request = processor.apply(Invocation.create(method,

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiExpectTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiExpectTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiExpectTest.java
index cd05564..4bc3ff2 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiExpectTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiExpectTest.java
@@ -17,78 +17,194 @@
 package org.jclouds.abiquo.features;
 
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
 
 import java.net.URI;
+import java.util.List;
 
 import org.jclouds.abiquo.AbiquoApi;
+import org.jclouds.abiquo.domain.PaginatedCollection;
+import org.jclouds.abiquo.domain.enterprise.options.EnterpriseOptions;
 import org.jclouds.abiquo.domain.enterprise.options.UserOptions;
+import org.jclouds.collect.PagedIterable;
 import org.jclouds.http.HttpRequest;
-import org.jclouds.http.HttpRequest.Builder;
 import org.jclouds.http.HttpResponse;
 import org.testng.annotations.Test;
 
 import com.abiquo.model.rest.RESTLink;
 import com.abiquo.server.core.enterprise.EnterpriseDto;
+import com.abiquo.server.core.enterprise.EnterprisesDto;
+import com.abiquo.server.core.enterprise.UserDto;
 import com.abiquo.server.core.enterprise.UsersDto;
+import com.abiquo.server.core.infrastructure.DatacenterDto;
 
 /**
  * Expect tests for the {@link EnterpriseApi} class.
  * 
  * @author Carlos Garcia
+ * @author Ignasi Barrera
  */
 @Test(groups = "unit", testName = "EnterpriseApiExpectTest")
 public class EnterpriseApiExpectTest extends BaseAbiquoApiExpectTest<EnterpriseApi> {
 
-   private EnterpriseApi buildMockEnterpriseApi(String payloadFile, Builder<?> requestBuilder) {
-      return requestSendsResponse(requestBuilder.build(),
-            HttpResponse.builder().statusCode(200).payload(
-                  payloadFromResourceWithContentType(payloadFile,
-                        normalize(UsersDto.MEDIA_TYPE))) //
-                        .build());
-   }
-
-   public Builder<?> getRequestBuilder() {
-      return HttpRequest.builder() //
-            .method("GET")
-            .endpoint(URI.create("http://localhost/api/admin/enterprises/1/users"))
-            .addHeader("Cookie", tokenAuth)
-            .addHeader("Accept", normalize(UsersDto.MEDIA_TYPE));
-   }
-
    public void testListUsersWithoutPagination() {
-      EnterpriseApi api = buildMockEnterpriseApi("/payloads/usr-list.xml",
-            getRequestBuilder());
+      EnterpriseApi api = requestsSendResponses(
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/admin/enterprises/1/users")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(UsersDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/users-page.xml", normalize(UsersDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/admin/enterprises/1/users")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(UsersDto.MEDIA_TYPE)) //
+                  .addQueryParam("numResults", "2") //
+                  .addQueryParam("page", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/users-lastpage.xml",
+                              normalize(UsersDto.MEDIA_TYPE))) //
+                  .build());
 
       EnterpriseDto enterprise = new EnterpriseDto();
-      enterprise.addLink(new RESTLink("users",
-            "http://localhost/api/admin/enterprises/1/users"));
-
-      UsersDto users = api.listUsers(enterprise);
-      assertEquals(users.getCollection().size(), 3);
-      assertEquals(users.getCollection().get(0).getNick(), "potter");
-      assertEquals(users.getCollection().get(1).getNick(), "granger");
-      assertEquals(users.getCollection().get(2).getNick(), "ron");
+      enterprise.addLink(new RESTLink("users", "http://localhost/api/admin/enterprises/1/users"));
+
+      PagedIterable<UserDto> result = api.listUsers(enterprise);
+      List<UserDto> all = result.concat().toList();
+
+      assertEquals(all.size(), 3);
+      assertEquals(all.get(0).getId().intValue(), 1);
+      assertEquals(all.get(1).getId().intValue(), 2);
+      assertEquals(all.get(2).getId().intValue(), 3);
    }
 
    public void testListUsersWithPagination() {
-      Builder<?> builder = getRequestBuilder();
-      builder.addQueryParam("numResults", "2"); 
-      builder.addQueryParam("page", "2");
-      EnterpriseApi api = buildMockEnterpriseApi("/payloads/usr-list-page-2.xml", builder);
+      EnterpriseApi api = requestSendsResponse(
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/admin/enterprises/1/users")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(UsersDto.MEDIA_TYPE)) //
+                  .addQueryParam("page", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/users-lastpage.xml",
+                              normalize(UsersDto.MEDIA_TYPE))) //
+                  .build());
 
       EnterpriseDto enterprise = new EnterpriseDto();
-      enterprise.addLink(new RESTLink("users",
-            "http://localhost/api/admin/enterprises/1/users"));
+      enterprise.addLink(new RESTLink("users", "http://localhost/api/admin/enterprises/1/users"));
+
+      UserOptions options = UserOptions.builder().page(1).build();
+      PaginatedCollection<UserDto, UsersDto> result = api.listUsers(enterprise, options);
+
+      assertEquals(result.size(), 1);
+      assertEquals(result.getTotalSize().intValue(), 3);
+      assertEquals(result.get(0).getId().intValue(), 3);
+      assertNotNull(result.searchLink("first"));
+      assertNotNull(result.searchLink("last"));
+   }
+
+   public void testListEnterprises() {
+      EnterpriseApi api = requestSendsResponse(
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/admin/enterprises")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(EnterprisesDto.MEDIA_TYPE)) //
+                  .addQueryParam("limit", "1") //
+                  .addQueryParam("has", "text") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/enterprises-page.xml",
+                              normalize(EnterprisesDto.MEDIA_TYPE))) //
+                  .build());
+
+      EnterpriseOptions options = EnterpriseOptions.builder().limit(1).has("text").build();
+      PaginatedCollection<EnterpriseDto, EnterprisesDto> result = api.listEnterprises(options);
 
-      UsersDto users = api.listUsers(enterprise, 
-            UserOptions.builder().limit(2).page(2).build());
-      assertEquals(users.getCollection().size(), 1);
-      assertEquals(users.getCollection().get(0).getNick(), "ron");
+      assertEquals(result.size(), 1);
+      assertEquals(result.getTotalSize().intValue(), 2);
+      assertEquals(result.get(0).getId().intValue(), 1);
+      assertNotNull(result.searchLink("first"));
+      assertNotNull(result.searchLink("last"));
+   }
+
+   public void testListEnterprisesByDatacenterWithOptions() {
+      EnterpriseApi api = requestSendsResponse(
+            HttpRequest.builder().method("GET")
+                  .endpoint(URI.create("http://localhost/api/admin/datacenters/1/action/enterprises")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(EnterprisesDto.MEDIA_TYPE)) //
+                  .addQueryParam("limit", "1") //
+                  .addQueryParam("has", "text") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/enterprises-page.xml",
+                              normalize(EnterprisesDto.MEDIA_TYPE))) //
+                  .build());
+
+      DatacenterDto datacenter = new DatacenterDto();
+      datacenter.addLink(new RESTLink("enterprises", "http://localhost/api/admin/datacenters/1/action/enterprises"));
+
+      EnterpriseOptions options = EnterpriseOptions.builder().limit(1).has("text").build();
+      PaginatedCollection<EnterpriseDto, EnterprisesDto> result = api.listEnterprises(datacenter, options);
+
+      assertEquals(result.size(), 1);
+      assertEquals(result.getTotalSize().intValue(), 2);
+      assertEquals(result.get(0).getId().intValue(), 1);
+      assertNotNull(result.searchLink("first"));
+      assertNotNull(result.searchLink("last"));
+   }
+
+   public void testListEnterprisesReturns2xx() {
+      EnterpriseApi api = requestsSendResponses(
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/admin/enterprises")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(EnterprisesDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/enterprises-page.xml",
+                              normalize(EnterprisesDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/admin/enterprises")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(EnterprisesDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/enterprises-lastpage.xml",
+                              normalize(EnterprisesDto.MEDIA_TYPE))) //
+                  .build());
+
+      PagedIterable<EnterpriseDto> result = api.listEnterprises();
+      List<EnterpriseDto> all = result.concat().toList();
+
+      assertEquals(all.size(), 2);
+      assertEquals(all.get(0).getId().intValue(), 1);
+      assertEquals(all.get(1).getId().intValue(), 2);
    }
 
    @Override
    protected EnterpriseApi clientFrom(AbiquoApi api) {
       return api.getEnterpriseApi();
    }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiTest.java
index b6b9f19..dab4357 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/EnterpriseApiTest.java
@@ -24,7 +24,6 @@ import java.io.IOException;
 import org.jclouds.Fallbacks.NullOnNotFoundOr404;
 import org.jclouds.abiquo.domain.EnterpriseResources;
 import org.jclouds.abiquo.domain.InfrastructureResources;
-import org.jclouds.abiquo.domain.enterprise.options.EnterpriseOptions;
 import org.jclouds.fallbacks.MapHttp4xxCodesToExceptions;
 import org.jclouds.http.functions.ParseXMLWithJAXB;
 import org.jclouds.http.functions.ReleasePayloadAndReturn;
@@ -43,9 +42,7 @@ import com.abiquo.server.core.enterprise.DatacenterLimitsDto;
 import com.abiquo.server.core.enterprise.DatacentersLimitsDto;
 import com.abiquo.server.core.enterprise.EnterpriseDto;
 import com.abiquo.server.core.enterprise.EnterprisePropertiesDto;
-import com.abiquo.server.core.enterprise.EnterprisesDto;
 import com.abiquo.server.core.enterprise.UserDto;
-import com.abiquo.server.core.enterprise.UsersDto;
 import com.abiquo.server.core.infrastructure.DatacenterDto;
 import com.abiquo.server.core.infrastructure.DatacentersDto;
 import com.abiquo.server.core.infrastructure.MachinesDto;
@@ -63,58 +60,6 @@ import com.google.common.reflect.Invokable;
 public class EnterpriseApiTest extends BaseAbiquoApiTest<EnterpriseApi> {
    /*********************** Enterprise ********************** */
 
-   public void testListEnterprises() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(EnterpriseApi.class, "listEnterprises");
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.of()));
-
-      assertRequestLineEquals(request, "GET http://localhost/api/admin/enterprises HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + EnterprisesDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListEnterprisesWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      EnterpriseOptions options = EnterpriseOptions.builder().has("abi").orderBy("name").ascendant(true).build();
-
-      Invokable<?, ?> method = method(EnterpriseApi.class, "listEnterprises", EnterpriseOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(options)));
-
-      assertRequestLineEquals(request, "GET http://localhost/api/admin/enterprises?has=abi&by=name&asc=true HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + EnterprisesDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListEnterprisesByDatacenter() throws SecurityException, NoSuchMethodException, IOException {
-      EnterpriseOptions options = EnterpriseOptions.builder().startWith(0).limit(25).network(true).build();
-
-      Invokable<?, ?> method = method(EnterpriseApi.class, "listEnterprises", DatacenterDto.class,
-            EnterpriseOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), options)));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/admin/datacenters/1/action/enterprises?network=true&startwith=0&limit=25 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + EnterprisesDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testCreateEnterprise() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(EnterpriseApi.class, "createEnterprise", EnterpriseDto.class);
       GeneratedHttpRequest request = processor.apply(Invocation.create(method,
@@ -367,22 +312,6 @@ public class EnterpriseApiTest extends BaseAbiquoApiTest<EnterpriseApi> {
       checkFilters(request);
    }
 
-   public void testListUsers() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(EnterpriseApi.class, "listUsers", EnterpriseDto.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(EnterpriseResources.enterprisePut())));
-
-      assertRequestLineEquals(request, "GET http://localhost/api/admin/enterprises/1/users HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + UsersDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testCreateUser() throws SecurityException, NoSuchMethodException, IOException {
       EnterpriseDto enterprise = EnterpriseResources.enterprisePut();
       UserDto user = EnterpriseResources.userPost();

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/EventApiExpectTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/EventApiExpectTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/EventApiExpectTest.java
new file mode 100644
index 0000000..4c1d3c1
--- /dev/null
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/EventApiExpectTest.java
@@ -0,0 +1,108 @@
+/*
+ * 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 org.jclouds.abiquo.features;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.net.URI;
+import java.util.List;
+
+import org.jclouds.abiquo.AbiquoApi;
+import org.jclouds.abiquo.domain.PaginatedCollection;
+import org.jclouds.abiquo.domain.event.options.EventOptions;
+import org.jclouds.collect.PagedIterable;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.testng.annotations.Test;
+
+import com.abiquo.server.core.event.EventDto;
+import com.abiquo.server.core.event.EventsDto;
+
+/**
+ * Expect tests for the {@link EventApi}.
+ * 
+ * @author Ignasi Barrera
+ */
+@Test(groups = "unit", testName = "EventApiExpectTest")
+public class EventApiExpectTest extends BaseAbiquoApiExpectTest<EventApi> {
+
+   public void testListEventsWithPagination() {
+      EventApi api = requestSendsResponse(
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/events")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(EventsDto.MEDIA_TYPE)) //
+                  .addQueryParam("limit", "1") //
+                  .addQueryParam("has", "text") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/events-page.xml", normalize(EventsDto.MEDIA_TYPE))) //
+                  .build());
+
+      EventOptions options = EventOptions.builder().limit(1).has("text").build();
+      PaginatedCollection<EventDto, EventsDto> result = api.listEvents(options);
+
+      assertEquals(result.size(), 2);
+      assertEquals(result.getTotalSize().intValue(), 4);
+      assertEquals(result.get(0).getId().intValue(), 109);
+      assertNotNull(result.searchLink("first"));
+      assertNotNull(result.searchLink("last"));
+   }
+
+   public void testListEventsReturns2xx() {
+      EventApi api = requestsSendResponses(
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/events")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(EventsDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/events-page.xml", normalize(EventsDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder().method("GET").endpoint(URI.create("http://localhost/api/events")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(EventsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/events-lastpage.xml",
+                              normalize(EventsDto.MEDIA_TYPE))) //
+                  .build());
+
+      PagedIterable<EventDto> result = api.listEvents();
+      List<EventDto> all = result.concat().toList();
+
+      assertEquals(all.size(), 4);
+      assertEquals(all.get(0).getId().intValue(), 109);
+      assertEquals(all.get(1).getId().intValue(), 108);
+      assertEquals(all.get(2).getId().intValue(), 110);
+      assertEquals(all.get(3).getId().intValue(), 111);
+   }
+
+   @Override
+   protected EventApi clientFrom(AbiquoApi api) {
+      return api.getEventApi();
+   }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/EventApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/EventApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/EventApiTest.java
deleted file mode 100644
index b0aa4a6..0000000
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/EventApiTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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 org.jclouds.abiquo.features;
-
-import static org.jclouds.reflect.Reflection2.method;
-
-import java.io.IOException;
-
-import org.jclouds.http.functions.ParseXMLWithJAXB;
-import org.jclouds.reflect.Invocation;
-import org.jclouds.rest.internal.GeneratedHttpRequest;
-import org.testng.annotations.Test;
-
-import com.abiquo.server.core.event.EventsDto;
-import com.google.common.collect.ImmutableList;
-import com.google.common.reflect.Invokable;
-
-/**
- * Tests annotation parsing of {@code EventApi}
- * 
- * @author Ignasi Barrera
- * @author Vivien Mahé
- */
-@Test(groups = "unit", testName = "EventApiTest")
-public class EventApiTest extends BaseAbiquoApiTest<EventApi> {
-   public void testListEvents() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(EventApi.class, "listEvents");
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.of()));
-
-      assertRequestLineEquals(request, "GET http://localhost/api/events HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + EventsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiExpectTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiExpectTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiExpectTest.java
index 90683ed..fcdc3a3 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiExpectTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiExpectTest.java
@@ -21,16 +21,27 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 
 import java.net.URI;
+import java.util.List;
 
 import org.jclouds.abiquo.AbiquoApi;
+import org.jclouds.abiquo.domain.PaginatedCollection;
+import org.jclouds.abiquo.domain.network.options.IpOptions;
+import org.jclouds.collect.PagedIterable;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.testng.annotations.Test;
 
 import com.abiquo.model.rest.RESTLink;
 import com.abiquo.server.core.infrastructure.DatacenterDto;
+import com.abiquo.server.core.infrastructure.network.ExternalIpDto;
+import com.abiquo.server.core.infrastructure.network.ExternalIpsDto;
 import com.abiquo.server.core.infrastructure.network.NetworkServiceTypeDto;
 import com.abiquo.server.core.infrastructure.network.NetworkServiceTypesDto;
+import com.abiquo.server.core.infrastructure.network.PublicIpDto;
+import com.abiquo.server.core.infrastructure.network.PublicIpsDto;
+import com.abiquo.server.core.infrastructure.network.UnmanagedIpDto;
+import com.abiquo.server.core.infrastructure.network.UnmanagedIpsDto;
+import com.abiquo.server.core.infrastructure.network.VLANNetworkDto;
 
 /**
  * Expect tests for the {@link InfrastructureApi} class.
@@ -191,6 +202,222 @@ public class InfrastructureApiExpectTest extends BaseAbiquoApiExpectTest<Infrast
       api.deleteNetworkServiceType(nst);
    }
 
+   public void testListPublicIps() {
+      InfrastructureApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/datacenters/1/network/1/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-page.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/datacenters/1/network/1/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-lastpage.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VLANNetworkDto vlan = new VLANNetworkDto();
+      vlan.addLink(new RESTLink("ips", "http://localhost/api/admin/datacenters/1/network/1/ips"));
+
+      PagedIterable<PublicIpDto> publicIps = api.listPublicIps(vlan);
+      List<PublicIpDto> ips = publicIps.concat().toList();
+
+      assertEquals(ips.size(), 4);
+      assertEquals(ips.get(0).getId().intValue(), 1);
+      assertEquals(ips.get(1).getId().intValue(), 2);
+      assertEquals(ips.get(2).getId().intValue(), 3);
+      assertEquals(ips.get(3).getId().intValue(), 4);
+   }
+
+   public void testListPublicIpsWithPagination() {
+      InfrastructureApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/datacenters/1/network/1/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-lastpage.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VLANNetworkDto vlan = new VLANNetworkDto();
+      vlan.addLink(new RESTLink("ips", "http://localhost/api/admin/datacenters/1/network/1/ips"));
+
+      IpOptions options = IpOptions.builder().startWith(3).build();
+      PaginatedCollection<PublicIpDto, PublicIpsDto> ips = api.listPublicIps(vlan, options);
+
+      assertEquals(ips.size(), 2);
+      assertEquals(ips.getTotalSize().intValue(), 4);
+      assertEquals(ips.get(0).getId().intValue(), 3);
+      assertEquals(ips.get(1).getId().intValue(), 4);
+   }
+
+   public void testListExternalIps() {
+      InfrastructureApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(ExternalIpsDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/externalips-page.xml",
+                              normalize(ExternalIpsDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(ExternalIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/externalips-lastpage.xml",
+                              normalize(ExternalIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VLANNetworkDto vlan = new VLANNetworkDto();
+      vlan.addLink(new RESTLink("ips", "http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips"));
+
+      PagedIterable<ExternalIpDto> publicIps = api.listExternalIps(vlan);
+      List<ExternalIpDto> ips = publicIps.concat().toList();
+
+      assertEquals(ips.size(), 4);
+      assertEquals(ips.get(0).getId().intValue(), 1);
+      assertEquals(ips.get(1).getId().intValue(), 2);
+      assertEquals(ips.get(2).getId().intValue(), 3);
+      assertEquals(ips.get(3).getId().intValue(), 4);
+   }
+
+   public void testListExternalIpsWithPagination() {
+      InfrastructureApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(ExternalIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/externalips-lastpage.xml",
+                              normalize(ExternalIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VLANNetworkDto vlan = new VLANNetworkDto();
+      vlan.addLink(new RESTLink("ips", "http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips"));
+
+      IpOptions options = IpOptions.builder().startWith(3).build();
+      PaginatedCollection<ExternalIpDto, ExternalIpsDto> ips = api.listExternalIps(vlan, options);
+
+      assertEquals(ips.size(), 2);
+      assertEquals(ips.getTotalSize().intValue(), 4);
+      assertEquals(ips.get(0).getId().intValue(), 3);
+      assertEquals(ips.get(1).getId().intValue(), 4);
+   }
+
+   public void testListUnmanagedIps() {
+      InfrastructureApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(UnmanagedIpsDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/unmanagedips-page.xml",
+                              normalize(UnmanagedIpsDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(UnmanagedIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/unmanagedips-lastpage.xml",
+                              normalize(UnmanagedIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VLANNetworkDto vlan = new VLANNetworkDto();
+      vlan.addLink(new RESTLink("ips", "http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips"));
+
+      PagedIterable<UnmanagedIpDto> unmanagedIps = api.listUnmanagedIps(vlan);
+      List<UnmanagedIpDto> ips = unmanagedIps.concat().toList();
+
+      assertEquals(ips.size(), 4);
+      assertEquals(ips.get(0).getId().intValue(), 1);
+      assertEquals(ips.get(1).getId().intValue(), 2);
+      assertEquals(ips.get(2).getId().intValue(), 3);
+      assertEquals(ips.get(3).getId().intValue(), 4);
+   }
+
+   public void testListUnmanagedIpsWithPagination() {
+      InfrastructureApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(UnmanagedIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/unmanagedips-lastpage.xml",
+                              normalize(UnmanagedIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VLANNetworkDto vlan = new VLANNetworkDto();
+      vlan.addLink(new RESTLink("ips", "http://localhost/api/admin/enterprises/2/limits/2/externalnetworks/2/ips"));
+
+      IpOptions options = IpOptions.builder().startWith(3).build();
+      PaginatedCollection<UnmanagedIpDto, UnmanagedIpsDto> ips = api.listUnmanagedIps(vlan, options);
+
+      assertEquals(ips.size(), 2);
+      assertEquals(ips.getTotalSize().intValue(), 4);
+      assertEquals(ips.get(0).getId().intValue(), 3);
+      assertEquals(ips.get(1).getId().intValue(), 4);
+   }
+
    @Override
    protected InfrastructureApi clientFrom(AbiquoApi api) {
       return api.getInfrastructureApi();

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiTest.java
index 3064935..36eb667 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/InfrastructureApiTest.java
@@ -33,7 +33,6 @@ import org.jclouds.abiquo.domain.infrastructure.options.DatacenterOptions;
 import org.jclouds.abiquo.domain.infrastructure.options.IpmiOptions;
 import org.jclouds.abiquo.domain.infrastructure.options.MachineOptions;
 import org.jclouds.abiquo.domain.infrastructure.options.StoragePoolOptions;
-import org.jclouds.abiquo.domain.network.options.IpOptions;
 import org.jclouds.abiquo.domain.network.options.NetworkOptions;
 import org.jclouds.fallbacks.MapHttp4xxCodesToExceptions;
 import org.jclouds.http.functions.ParseXMLWithJAXB;
@@ -63,11 +62,8 @@ import com.abiquo.server.core.infrastructure.RacksDto;
 import com.abiquo.server.core.infrastructure.RemoteServiceDto;
 import com.abiquo.server.core.infrastructure.RemoteServicesDto;
 import com.abiquo.server.core.infrastructure.network.ExternalIpDto;
-import com.abiquo.server.core.infrastructure.network.ExternalIpsDto;
 import com.abiquo.server.core.infrastructure.network.PublicIpDto;
-import com.abiquo.server.core.infrastructure.network.PublicIpsDto;
 import com.abiquo.server.core.infrastructure.network.UnmanagedIpDto;
-import com.abiquo.server.core.infrastructure.network.UnmanagedIpsDto;
 import com.abiquo.server.core.infrastructure.network.VLANNetworkDto;
 import com.abiquo.server.core.infrastructure.network.VLANNetworksDto;
 import com.abiquo.server.core.infrastructure.network.VlanTagAvailabilityDto;
@@ -1231,40 +1227,6 @@ public class InfrastructureApiTest extends BaseAbiquoApiTest<InfrastructureApi>
 
    /*********************** Network IPs ***********************/
 
-   public void testListPublicIps() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(InfrastructureApi.class, "listPublicIps", VLANNetworkDto.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(NetworkResources.publicNetworkPut())));
-
-      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/network/1/ips HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + PublicIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListPublicIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      IpOptions options = IpOptions.builder().startWith(10).build();
-      Invokable<?, ?> method = method(InfrastructureApi.class, "listPublicIps", VLANNetworkDto.class, IpOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(NetworkResources.publicNetworkPut(), options)));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/admin/datacenters/1/network/1/ips?startwith=10 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + PublicIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testGetPublicIp() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(InfrastructureApi.class, "getPublicIp", VLANNetworkDto.class, Integer.class);
       GeneratedHttpRequest request = processor.apply(Invocation.create(method,
@@ -1281,41 +1243,6 @@ public class InfrastructureApiTest extends BaseAbiquoApiTest<InfrastructureApi>
       checkFilters(request);
    }
 
-   public void testListExternalIps() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(InfrastructureApi.class, "listExternalIps", VLANNetworkDto.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(NetworkResources.externalNetworkPut())));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + ExternalIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListExternalIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      IpOptions options = IpOptions.builder().startWith(10).build();
-      Invokable<?, ?> method = method(InfrastructureApi.class, "listExternalIps", VLANNetworkDto.class, IpOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(NetworkResources.externalNetworkPut(), options)));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips?startwith=10 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + ExternalIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testGetExternalIp() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(InfrastructureApi.class, "getExternalIp", VLANNetworkDto.class, Integer.class);
       GeneratedHttpRequest request = processor.apply(Invocation.create(method,
@@ -1333,42 +1260,6 @@ public class InfrastructureApiTest extends BaseAbiquoApiTest<InfrastructureApi>
       checkFilters(request);
    }
 
-   public void testListUnmanagedIps() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(InfrastructureApi.class, "listUnmanagedIps", VLANNetworkDto.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(NetworkResources.unmanagedNetworkPut())));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + UnmanagedIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListUnmanagedIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
-      IpOptions options = IpOptions.builder().startWith(10).build();
-      Invokable<?, ?> method = method(InfrastructureApi.class, "listUnmanagedIps", VLANNetworkDto.class,
-            IpOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
-            ImmutableList.<Object> of(NetworkResources.unmanagedNetworkPut(), options)));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips?startwith=10 HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + UnmanagedIpsDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testGetUnmanagedIp() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(InfrastructureApi.class, "getUnmanagedIp", VLANNetworkDto.class, Integer.class);
       GeneratedHttpRequest request = processor.apply(Invocation.create(method,

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiExpectTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiExpectTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiExpectTest.java
index e9aabe4..7f8f267 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiExpectTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiExpectTest.java
@@ -20,13 +20,17 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 
 import java.net.URI;
+import java.util.List;
 
 import org.jclouds.abiquo.AbiquoApi;
+import org.jclouds.abiquo.domain.PaginatedCollection;
 import org.jclouds.abiquo.domain.cloud.options.VirtualMachineTemplateOptions;
+import org.jclouds.collect.PagedIterable;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.testng.annotations.Test;
 
+import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto;
 import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto;
 
 /**
@@ -59,16 +63,59 @@ public class VirtualMachineTemplateApiExpectTest extends BaseAbiquoApiExpectTest
                   .build());
 
       VirtualMachineTemplateOptions options = VirtualMachineTemplateOptions.builder().limit(1).has("text").build();
-      VirtualMachineTemplatesDto result = api.listVirtualMachineTemplates(1, 1, options);
+      PaginatedCollection<VirtualMachineTemplateDto, VirtualMachineTemplatesDto> result = api
+            .listVirtualMachineTemplates(1, 1, options);
 
-      assertEquals(result.getCollection().size(), 1);
+      assertEquals(result.size(), 1);
       assertEquals(result.getTotalSize().intValue(), 2);
-      assertEquals(result.getCollection().get(0).getId().intValue(), 151);
+      assertEquals(result.get(0).getId().intValue(), 151);
       assertNotNull(result.searchLink("first"));
       assertNotNull(result.searchLink("last"));
       assertNotNull(result.searchLink("next"));
    }
 
+   public void testListVirtualMachineTemplatesReturns2xx() {
+      VirtualMachineTemplateApi api = requestsSendResponses(
+            HttpRequest
+                  .builder()
+                  .method("GET")
+                  .endpoint(
+                        URI.create("http://localhost/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachineTemplatesDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/templates-page.xml",
+                              normalize(VirtualMachineTemplatesDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest
+                  .builder()
+                  .method("GET")
+                  .endpoint(
+                        URI.create("http://localhost/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachineTemplatesDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/templates-lastpage.xml",
+                              normalize(VirtualMachineTemplatesDto.MEDIA_TYPE))) //
+                  .build());
+
+      PagedIterable<VirtualMachineTemplateDto> result = api.listVirtualMachineTemplates(1, 1);
+      List<VirtualMachineTemplateDto> all = result.concat().toList();
+
+      assertEquals(all.size(), 2);
+      assertEquals(all.get(0).getId().intValue(), 151);
+      assertEquals(all.get(1).getId().intValue(), 152);
+   }
+
    @Override
    protected VirtualMachineTemplateApi clientFrom(AbiquoApi api) {
       return api.getVirtualMachineTemplateApi();

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiTest.java
index 86a0046..4739871 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/VirtualMachineTemplateApiTest.java
@@ -24,7 +24,6 @@ import java.io.IOException;
 import org.jclouds.Fallbacks.NullOnNotFoundOr404;
 import org.jclouds.abiquo.domain.TemplateResources;
 import org.jclouds.abiquo.domain.cloud.options.ConversionOptions;
-import org.jclouds.abiquo.domain.cloud.options.VirtualMachineTemplateOptions;
 import org.jclouds.abiquo.functions.ReturnTaskReferenceOrNull;
 import org.jclouds.http.functions.ParseXMLWithJAXB;
 import org.jclouds.http.functions.ReleasePayloadAndReturn;
@@ -40,7 +39,6 @@ import com.abiquo.server.core.appslibrary.ConversionDto;
 import com.abiquo.server.core.appslibrary.ConversionsDto;
 import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto;
 import com.abiquo.server.core.appslibrary.VirtualMachineTemplatePersistentDto;
-import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto;
 import com.google.common.collect.ImmutableList;
 import com.google.common.reflect.Invokable;
 
@@ -54,48 +52,6 @@ import com.google.common.reflect.Invokable;
 public class VirtualMachineTemplateApiTest extends BaseAbiquoApiTest<VirtualMachineTemplateApi> {
    /*********************** Virtual Machine Template ***********************/
 
-   public void testListVirtualMachineTemplates() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(VirtualMachineTemplateApi.class, "listVirtualMachineTemplates", Integer.class,
-            Integer.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(1, 1)));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VirtualMachineTemplatesDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   public void testListVirtualMachineTemplatesWithOptions() throws SecurityException, NoSuchMethodException,
-         IOException {
-      Invokable<?, ?> method = method(VirtualMachineTemplateApi.class, "listVirtualMachineTemplates", Integer.class,
-            Integer.class, VirtualMachineTemplateOptions.class);
-      GeneratedHttpRequest request = processor.apply(Invocation.create(
-            method,
-            ImmutableList.<Object> of(
-                  1,
-                  1,
-                  VirtualMachineTemplateOptions.builder().hypervisorType(HypervisorType.XENSERVER)
-                        .categoryName("Firewalls").build())));
-
-      assertRequestLineEquals(request,
-            "GET http://localhost/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates"
-                  + "?hypervisorTypeName=XENSERVER&categoryName=Firewalls HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Accept: " + VirtualMachineTemplatesDto.BASE_MEDIA_TYPE + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
    public void testGetVirtualMachineTemplate() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(VirtualMachineTemplateApi.class, "getVirtualMachineTemplate", Integer.class,
             Integer.class, Integer.class);

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/strategy/cloud/ListAttachedNicsLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/strategy/cloud/ListAttachedNicsLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/strategy/cloud/ListAttachedNicsLiveApiTest.java
index 7bb9a7b..643254f 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/strategy/cloud/ListAttachedNicsLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/strategy/cloud/ListAttachedNicsLiveApiTest.java
@@ -17,6 +17,7 @@
 package org.jclouds.abiquo.strategy.cloud;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.getLast;
 import static com.google.common.collect.Iterables.size;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
@@ -55,13 +56,10 @@ public class ListAttachedNicsLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
    protected void setupStrategy() {
       this.strategy = env.context.utils().injector().getInstance(ListAttachedNics.class);
 
-      privateIp = env.privateNetwork.listUnusedIps().get(0);
-      assertNotNull(privateIp);
+      privateIp = getLast(env.privateNetwork.listUnusedIps());
+      externalIp = getLast(env.externalNetwork.listUnusedIps());
 
-      externalIp = env.externalNetwork.listUnusedIps().get(0);
-      assertNotNull(externalIp);
-
-      publicIp = env.virtualDatacenter.listAvailablePublicIps().get(0);
+      publicIp = getLast(env.virtualDatacenter.listAvailablePublicIps());
       env.virtualDatacenter.purchasePublicIp(publicIp);
       publicIp = find(env.virtualDatacenter.listPurchasedPublicIps(), new Predicate<PublicIp>() {
          @Override

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/resources/logback-test.xml
----------------------------------------------------------------------
diff --git a/abiquo/src/test/resources/logback-test.xml b/abiquo/src/test/resources/logback-test.xml
index 70a88e8..ebdf6c0 100644
--- a/abiquo/src/test/resources/logback-test.xml
+++ b/abiquo/src/test/resources/logback-test.xml
@@ -15,8 +15,8 @@
             <maxHistory>5</maxHistory>
         </rollingPolicy>
     </appender>
-    <appender name="PAYLOADFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>target/test-data/jclouds-payloads.log</file>
+    <appender name="WIREFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>target/test-data/jclouds-wire.log</file>
         <append>true</append>
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <level>TRACE</level>
@@ -72,11 +72,11 @@
     <logger name="jclouds.headers">
         <level value="DEBUG" />
         <appender-ref ref="HEADERSFILE" />
-        <appender-ref ref="PAYLOADFILE" />
+        <appender-ref ref="WIREFILE" />
     </logger>
     <logger name="jclouds.wire">
         <level value="DEBUG" />
-        <appender-ref ref="PAYLOADFILE" />
+        <appender-ref ref="WIREFILE" />
     </logger>
     <logger name="jclouds.compute">
         <level value="DEBUG" />

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/resources/payloads/all-vms-lastpage.xml
----------------------------------------------------------------------
diff --git a/abiquo/src/test/resources/payloads/all-vms-lastpage.xml b/abiquo/src/test/resources/payloads/all-vms-lastpage.xml
new file mode 100644
index 0000000..05ae6eb
--- /dev/null
+++ b/abiquo/src/test/resources/payloads/all-vms-lastpage.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<virtualmachineswithnodeextended>
+    <link href="http://localhost/api/cloud/virtualmachines" rel="first" />
+    <link href="http://localhost/api/cloud/virtualmachines?startwith=0" rel="previous" />
+    <link href="http://localhost/api/cloud/virtualmachines?startwith=2" rel="last" />
+    <totalSize>2</totalSize>
+    <virtualmachinewithnodeextended>
+        <link rel="deploy" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/action/deploy" />
+        <link rel="disks" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/storage/disks" />
+        <link rel="edit" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1" />
+        <link rel="state" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/state" />
+        <link rel="reset" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/action/reset" />
+        <link rel="tasks" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/tasks" />
+        <link rel="undeploy" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/action/undeploy" />
+        <link rel="persistent" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/action/persistent" />
+        <link rel="virtualappliance" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1" />
+        <link rel="virtualmachinetemplate" href="/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates/1" />
+        <link rel="nics" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/network/nics" />
+        <link rel="volumes" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/storage/volumes" />
+        <link rel="configurations" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/network/configurations" />
+        <cpu>0</cpu>
+        <hdInBytes>0</hdInBytes>
+        <highDisponibility>0</highDisponibility>
+        <id>2</id>
+        <idState>0</idState>
+        <idType>0</idType>
+        <name>VM</name>
+        <ram>0</ram>
+        <vdrpPort>0</vdrpPort>
+    </virtualmachinewithnodeextended>
+</virtualmachineswithnodeextended>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/resources/payloads/all-vms.xml
----------------------------------------------------------------------
diff --git a/abiquo/src/test/resources/payloads/all-vms.xml b/abiquo/src/test/resources/payloads/all-vms.xml
index 329f202..007fe11 100644
--- a/abiquo/src/test/resources/payloads/all-vms.xml
+++ b/abiquo/src/test/resources/payloads/all-vms.xml
@@ -1,5 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <virtualmachineswithnodeextended>
+    <link href="http://localhost/api/cloud/virtualmachines" rel="first" />
+    <link href="http://localhost/api/cloud/virtualmachines?startwith=2" rel="next" />
+    <link href="http://localhost/api/cloud/virtualmachines?startwith=2" rel="last" />
+    <totalSize>2</totalSize>
     <virtualmachinewithnodeextended>
         <link rel="deploy" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/action/deploy" />
         <link rel="disks" href="http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines/1/storage/disks" />

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/resources/payloads/available-templates-lastpage.xml
----------------------------------------------------------------------
diff --git a/abiquo/src/test/resources/payloads/available-templates-lastpage.xml b/abiquo/src/test/resources/payloads/available-templates-lastpage.xml
new file mode 100644
index 0000000..4e8b2f7
--- /dev/null
+++ b/abiquo/src/test/resources/payloads/available-templates-lastpage.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<virtualMachineTemplates>
+    <link href="http://example.com/api/cloud/virtualdatacenters/1/action/templates" rel="first" />
+    <link href="http://example.com/api/cloud/virtualdatacenters/1/action/templates?startwith=0" rel="previous" />
+    <link href="http://example.com/api/cloud/virtualdatacenters/1/action/templates?startwith=1" rel="last" />
+    <totalSize>2</totalSize>
+    <virtualMachineTemplate>
+        <link href="http://example.com/api/config/categories/1" rel="category" title="Others" type="application/vnd.abiquo.category+xml" />
+        <link href="http://example.com/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates/16/conversions" rel="conversions" type="application/vnd.abiquo.conversions+xml" />
+        <link href="http://example.com/api/admin/datacenters/1" rel="datacenter" type="application/vnd.abiquo.datacenter+xml" />
+        <link href="http://example.com/api/admin/enterprises/1/datacenterrepositories/1" rel="datacenterrepository" type="application/vnd.abiquo.datacenterrepository+xml" />
+        <link href="http://example.com/am/erepos/1/templates/rs.bcn.abiquo.com%253A9000%252Fovf%252F71%252Fdesc.ovf?format=diskFile" rel="diskfile" />
+        <link href="http://example.com/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates/16" rel="edit" title="Abiquo KVM" type="application/vnd.abiquo.virtualmachinetemplate+xml" />
+        <link href="http://example.com/api/admin/enterprises/1" rel="enterprise" type="application/vnd.abiquo.enterprise+xml" />
+        <link href="http://example.com/am/erepos/1/templates/rs.bcn.abiquo.com%253A9000%252Fovf%252F71%252Fdesc.ovf?format=envelope" rel="ovfdocument" />
+        <link href="http://example.com/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates/16/tasks" rel="tasks" type="application/vnd.abiquo.tasks+xml" />
+        <link href="http://example.com/am/erepos/1/templates/rs.bcn.abiquo.com%253A9000%252Fovf%252F71%252Fdesc.ovf" rel="template" />
+        <link href="http://rs.bcn.abiquo.com:9000/ovf/71/desc.ovf" rel="templatedefinition" />
+        <link href="http://example.com/am/erepos/1/templates/rs.bcn.abiquo.com%253A9000%252Fovf%252F71%252Fdesc.ovf?format=status" rel="templatestatus" />
+        <id>16</id>
+        <name>Abiquo KVM</name>
+        <description />
+        <osType>UNRECOGNIZED</osType>
+        <osVersion />
+        <path>1/rs.bcn.abiquo.com/abiport9000/ovf/71/KVM-Recursion.qcow2</path>
+        <diskFormatType>QCOW2_SPARSE</diskFormatType>
+        <diskFileSize>320798720</diskFileSize>
+        <cpuRequired>1</cpuRequired>
+        <ramRequired>1024</ramRequired>
+        <hdRequired>4294967296</hdRequired>
+        <shared>false</shared>
+        <state>DONE</state>
+        <costCode>0</costCode>
+        <creationDate>2013-01-16T15:06:14+01:00</creationDate>
+        <creationUser>SYSTEM</creationUser>
+        <chefEnabled>false</chefEnabled>
+        <iconUrl>http://rs.bcn.abiquo.com:9000/public/icons/q.png</iconUrl>
+        <loginUser>user</loginUser>
+        <loginPassword>password</loginPassword>
+        <ethernetDriverType>E1000</ethernetDriverType>
+        <diskControllerType>SCSI</diskControllerType>
+    </virtualMachineTemplate>
+</virtualMachineTemplates>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/resources/payloads/available-templates-page.xml
----------------------------------------------------------------------
diff --git a/abiquo/src/test/resources/payloads/available-templates-page.xml b/abiquo/src/test/resources/payloads/available-templates-page.xml
new file mode 100644
index 0000000..886d364
--- /dev/null
+++ b/abiquo/src/test/resources/payloads/available-templates-page.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<virtualMachineTemplates>
+    <link href="http://example.com/api/cloud/virtualdatacenters/1/action/templates" rel="first" />
+    <link href="http://example.com/api/cloud/virtualdatacenters/1/action/templates?startwith=1" rel="next" />
+    <link href="http://example.com/api/cloud/virtualdatacenters/1/action/templates?startwith=1" rel="last" />
+    <totalSize>2</totalSize>
+    <virtualMachineTemplate>
+        <link href="http://example.com/api/config/categories/1" rel="category" title="Others" type="application/vnd.abiquo.category+xml" />
+        <link href="http://example.com/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates/15/conversions" rel="conversions" type="application/vnd.abiquo.conversions+xml" />
+        <link href="http://example.com/api/admin/datacenters/1" rel="datacenter" type="application/vnd.abiquo.datacenter+xml" />
+        <link href="http://example.com/api/admin/enterprises/1/datacenterrepositories/1" rel="datacenterrepository" type="application/vnd.abiquo.datacenterrepository+xml" />
+        <link href="http://example.com/am/erepos/1/templates/rs.bcn.abiquo.com%253A9000%252Fovf%252F71%252Fdesc.ovf?format=diskFile" rel="diskfile" />
+        <link href="http://example.com/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates/15" rel="edit" title="Abiquo KVM" type="application/vnd.abiquo.virtualmachinetemplate+xml" />
+        <link href="http://example.com/api/admin/enterprises/1" rel="enterprise" type="application/vnd.abiquo.enterprise+xml" />
+        <link href="http://example.com/am/erepos/1/templates/rs.bcn.abiquo.com%253A9000%252Fovf%252F71%252Fdesc.ovf?format=envelope" rel="ovfdocument" />
+        <link href="http://example.com/api/admin/enterprises/1/datacenterrepositories/1/virtualmachinetemplates/15/tasks" rel="tasks" type="application/vnd.abiquo.tasks+xml" />
+        <link href="http://example.com/am/erepos/1/templates/rs.bcn.abiquo.com%253A9000%252Fovf%252F71%252Fdesc.ovf" rel="template" />
+        <link href="http://rs.bcn.abiquo.com:9000/ovf/71/desc.ovf" rel="templatedefinition" />
+        <link href="http://example.com/am/erepos/1/templates/rs.bcn.abiquo.com%253A9000%252Fovf%252F71%252Fdesc.ovf?format=status" rel="templatestatus" />
+        <id>15</id>
+        <name>Abiquo KVM</name>
+        <description />
+        <osType>UNRECOGNIZED</osType>
+        <osVersion />
+        <path>1/rs.bcn.abiquo.com/abiport9000/ovf/71/KVM-Recursion.qcow2</path>
+        <diskFormatType>QCOW2_SPARSE</diskFormatType>
+        <diskFileSize>320798720</diskFileSize>
+        <cpuRequired>1</cpuRequired>
+        <ramRequired>1024</ramRequired>
+        <hdRequired>4294967296</hdRequired>
+        <shared>false</shared>
+        <state>DONE</state>
+        <costCode>0</costCode>
+        <creationDate>2013-01-16T15:06:14+01:00</creationDate>
+        <creationUser>SYSTEM</creationUser>
+        <chefEnabled>false</chefEnabled>
+        <iconUrl>http://rs.bcn.abiquo.com:9000/public/icons/q.png</iconUrl>
+        <loginUser>user</loginUser>
+        <loginPassword>password</loginPassword>
+        <ethernetDriverType>E1000</ethernetDriverType>
+        <diskControllerType>SCSI</diskControllerType>
+    </virtualMachineTemplate>
+</virtualMachineTemplates>
\ No newline at end of file