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:42 UTC

[3/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/domain/cloud/VirtualMachineNetworkingLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineNetworkingLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineNetworkingLiveApiTest.java
index ae0a31f..4b60d4a 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineNetworkingLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineNetworkingLiveApiTest.java
@@ -17,9 +17,11 @@
 package org.jclouds.abiquo.domain.cloud;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.get;
+import static com.google.common.collect.Iterables.getLast;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.fail;
 
@@ -65,13 +67,10 @@ public class VirtualMachineNetworkingLiveApiTest extends BaseAbiquoApiLiveApiTes
 
    @BeforeClass
    public void setupIps() {
-      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);
-
-      publicIpInfrastructure = env.virtualDatacenter.listAvailablePublicIps().get(0);
+      publicIpInfrastructure = getLast(env.virtualDatacenter.listAvailablePublicIps());
       env.virtualDatacenter.purchasePublicIp(publicIpInfrastructure);
 
       publicIpCloud = find(env.virtualDatacenter.listPurchasedPublicIps(), new Predicate<PublicIp>() {
@@ -87,9 +86,9 @@ public class VirtualMachineNetworkingLiveApiTest extends BaseAbiquoApiLiveApiTes
       VirtualMachineTask task = env.virtualMachine.setNics(Lists.<Ip<?, ?>> newArrayList(privateIp));
       assertNull(task);
 
-      List<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
-      assertEquals(nics.size(), 1);
-      assertEquals(nics.get(0).getId(), privateIp.getId());
+      Iterable<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
+      assertEquals(size(nics), 1);
+      assertEquals(get(nics, 0).getId(), privateIp.getId());
 
       final String address = publicIpCloud.getIp();
       env.virtualDatacenter.releasePublicIp(publicIpCloud);
@@ -108,18 +107,18 @@ public class VirtualMachineNetworkingLiveApiTest extends BaseAbiquoApiLiveApiTes
       VirtualMachineTask task = env.virtualMachine.setNics(Lists.<Ip<?, ?>> newArrayList(publicIpInfrastructure));
       assertNull(task);
 
-      List<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
-      assertEquals(nics.size(), 1);
-      assertEquals(nics.get(0).getId(), publicIpInfrastructure.getId());
+      Iterable<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
+      assertEquals(size(nics), 1);
+      assertEquals(get(nics, 0).getId(), publicIpInfrastructure.getId());
    }
 
    public void testAttachPublicIp() {
       VirtualMachineTask task = env.virtualMachine.setNics(Lists.<Ip<?, ?>> newArrayList(publicIpCloud));
       assertNull(task);
 
-      List<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
-      assertEquals(nics.size(), 1);
-      assertEquals(nics.get(0).getId(), publicIpCloud.getId());
+      Iterable<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
+      assertEquals(size(nics), 1);
+      assertEquals(get(nics, 0).getId(), publicIpCloud.getId());
    }
 
    @Test(dependsOnMethods = "testAttachPublicIp")
@@ -130,7 +129,7 @@ public class VirtualMachineNetworkingLiveApiTest extends BaseAbiquoApiLiveApiTes
       VirtualMachineTask task = env.virtualMachine.setNics(nics);
       assertNull(task);
 
-      nics = env.virtualMachine.listAttachedNics();
+      nics = Lists.newArrayList(env.virtualMachine.listAttachedNics());
       assertEquals(nics.size(), 2);
       assertEquals(nics.get(0).getId(), publicIpCloud.getId());
       assertEquals(nics.get(1).getId(), privateIp.getId());
@@ -144,7 +143,7 @@ public class VirtualMachineNetworkingLiveApiTest extends BaseAbiquoApiLiveApiTes
       VirtualMachineTask task = env.virtualMachine.setNics(nics);
       assertNull(task);
 
-      nics = env.virtualMachine.listAttachedNics();
+      nics = Lists.newArrayList(env.virtualMachine.listAttachedNics());
       assertEquals(nics.size(), 3);
       assertEquals(nics.get(0).getId(), publicIpCloud.getId());
       assertEquals(nics.get(1).getId(), privateIp.getId());
@@ -153,34 +152,34 @@ public class VirtualMachineNetworkingLiveApiTest extends BaseAbiquoApiLiveApiTes
 
    @Test(dependsOnMethods = "testAttachExternalIp")
    public void testAddUnmanagedNics() {
-      List<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
+      Iterable<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
 
-      VirtualMachineTask task = env.virtualMachine.setNics(nics,
+      VirtualMachineTask task = env.virtualMachine.setNics(Lists.newArrayList(nics),
             Lists.<UnmanagedNetwork> newArrayList(env.unmanagedNetwork, env.unmanagedNetwork));
       assertNull(task);
 
       nics = env.virtualMachine.listAttachedNics();
-      assertEquals(nics.size(), 5);
-      assertEquals(nics.get(0).getId(), publicIpCloud.getId());
-      assertEquals(nics.get(1).getId(), privateIp.getId());
-      assertEquals(nics.get(2).getId(), externalIp.getId());
+      assertEquals(size(nics), 5);
+      assertEquals(get(nics, 0).getId(), publicIpCloud.getId());
+      assertEquals(get(nics, 1).getId(), privateIp.getId());
+      assertEquals(get(nics, 2).getId(), externalIp.getId());
       // Unmanaged ips are created during the attach.
-      assertEquals(nics.get(3).getNetworkName(), env.unmanagedNetwork.getName());
-      assertEquals(nics.get(4).getNetworkName(), env.unmanagedNetwork.getName());
+      assertEquals(get(nics, 3).getNetworkName(), env.unmanagedNetwork.getName());
+      assertEquals(get(nics, 4).getNetworkName(), env.unmanagedNetwork.getName());
 
-      unmanagedIp1 = (UnmanagedIp) nics.get(3);
-      unmanagedIp2 = (UnmanagedIp) nics.get(4);
+      unmanagedIp1 = (UnmanagedIp) get(nics, 3);
+      unmanagedIp2 = (UnmanagedIp) get(nics, 4);
    }
 
    @Test(dependsOnMethods = "testAddUnmanagedNics")
    public void testReorderNics() {
-      List<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
+      List<Ip<?, ?>> nics = Lists.newArrayList(env.virtualMachine.listAttachedNics());
 
       VirtualMachineTask task = env.virtualMachine.setNics(Lists.<Ip<?, ?>> newArrayList(nics.get(2), nics.get(1),
             nics.get(0), nics.get(4), nics.get(3)));
       assertNull(task);
 
-      nics = env.virtualMachine.listAttachedNics();
+      nics = Lists.newArrayList(env.virtualMachine.listAttachedNics());
       assertEquals(nics.size(), 5);
       assertEquals(nics.get(0).getId(), externalIp.getId());
       assertEquals(nics.get(1).getId(), privateIp.getId());
@@ -191,12 +190,12 @@ public class VirtualMachineNetworkingLiveApiTest extends BaseAbiquoApiLiveApiTes
 
    @Test(dependsOnMethods = "testReorderNics")
    public void testDetachNics() {
-      List<Ip<?, ?>> nics = env.virtualMachine.listAttachedNics();
+      List<Ip<?, ?>> nics = Lists.newArrayList(env.virtualMachine.listAttachedNics());
 
       VirtualMachineTask task = env.virtualMachine.setNics(Lists.<Ip<?, ?>> newArrayList(nics.get(1), nics.get(2)));
       assertNull(task);
 
-      nics = env.virtualMachine.listAttachedNics();
+      nics = Lists.newArrayList(env.virtualMachine.listAttachedNics());
       assertEquals(nics.size(), 2);
       assertEquals(nics.get(0).getId(), privateIp.getId());
       assertEquals(nics.get(1).getId(), publicIpCloud.getId());

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineStorageLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineStorageLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineStorageLiveApiTest.java
index ea060cb..6d5aded 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineStorageLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineStorageLiveApiTest.java
@@ -17,14 +17,15 @@
 package org.jclouds.abiquo.domain.cloud;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.get;
+import static com.google.common.collect.Iterables.isEmpty;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
-import java.util.List;
-
 import org.jclouds.abiquo.domain.infrastructure.Tier;
 import org.jclouds.abiquo.domain.task.VirtualMachineTask;
 import org.jclouds.abiquo.internal.BaseAbiquoApiLiveApiTest;
@@ -51,16 +52,16 @@ public class VirtualMachineStorageLiveApiTest extends BaseAbiquoApiLiveApiTest {
       VirtualMachineTask task = env.virtualMachine.attachVolumes(volume);
       assertNull(task);
 
-      List<Volume> attached = env.virtualMachine.listAttachedVolumes();
-      assertEquals(attached.size(), 1);
-      assertEquals(attached.get(0).getId(), volume.getId());
+      Iterable<Volume> attached = env.virtualMachine.listAttachedVolumes();
+      assertEquals(size(attached), 1);
+      assertEquals(get(attached, 0).getId(), volume.getId());
    }
 
    @Test(dependsOnMethods = "testAttachVolumes")
    public void detachVolume() {
       env.virtualMachine.detachVolumes(volume);
-      List<Volume> attached = env.virtualMachine.listAttachedVolumes();
-      assertTrue(attached.isEmpty());
+      Iterable<Volume> attached = env.virtualMachine.listAttachedVolumes();
+      assertTrue(isEmpty(attached));
    }
 
    @Test(dependsOnMethods = "detachVolume")
@@ -71,8 +72,8 @@ public class VirtualMachineStorageLiveApiTest extends BaseAbiquoApiLiveApiTest {
       assertNull(task);
 
       env.virtualMachine.detachAllVolumes();
-      List<Volume> attached = env.virtualMachine.listAttachedVolumes();
-      assertTrue(attached.isEmpty());
+      Iterable<Volume> attached = env.virtualMachine.listAttachedVolumes();
+      assertTrue(isEmpty(attached));
 
       deleteVolume(volume);
    }
@@ -85,16 +86,16 @@ public class VirtualMachineStorageLiveApiTest extends BaseAbiquoApiLiveApiTest {
       VirtualMachineTask task = env.virtualMachine.attachHardDisks(hardDisk);
       assertNull(task);
 
-      List<HardDisk> attached = env.virtualMachine.listAttachedHardDisks();
-      assertEquals(attached.size(), 1);
-      assertEquals(attached.get(0).getId(), hardDisk.getId());
+      Iterable<HardDisk> attached = env.virtualMachine.listAttachedHardDisks();
+      assertEquals(size(attached), 1);
+      assertEquals(get(attached, 0).getId(), hardDisk.getId());
    }
 
    @Test(dependsOnMethods = "testAttachHardDisks")
    public void detachHardDisk() {
       env.virtualMachine.detachHardDisks(hardDisk);
-      List<HardDisk> attached = env.virtualMachine.listAttachedHardDisks();
-      assertTrue(attached.isEmpty());
+      Iterable<HardDisk> attached = env.virtualMachine.listAttachedHardDisks();
+      assertTrue(isEmpty(attached));
    }
 
    @Test(dependsOnMethods = "detachHardDisk")
@@ -105,8 +106,8 @@ public class VirtualMachineStorageLiveApiTest extends BaseAbiquoApiLiveApiTest {
       assertNull(task);
 
       env.virtualMachine.detachAllHardDisks();
-      List<HardDisk> attached = env.virtualMachine.listAttachedHardDisks();
-      assertTrue(attached.isEmpty());
+      Iterable<HardDisk> attached = env.virtualMachine.listAttachedHardDisks();
+      assertTrue(isEmpty(attached));
 
       deleteHardDisk(hardDisk);
    }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VolumeLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VolumeLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VolumeLiveApiTest.java
index 02ec993..b720be5 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VolumeLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VolumeLiveApiTest.java
@@ -17,14 +17,14 @@
 package org.jclouds.abiquo.domain.cloud;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.isEmpty;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
-import java.util.List;
-
 import org.jclouds.abiquo.domain.cloud.options.VolumeOptions;
 import org.jclouds.abiquo.domain.infrastructure.Tier;
 import org.jclouds.abiquo.domain.network.PrivateNetwork;
@@ -32,7 +32,6 @@ import org.jclouds.abiquo.domain.task.VirtualMachineTask;
 import org.jclouds.abiquo.internal.BaseAbiquoApiLiveApiTest;
 import org.testng.annotations.Test;
 
-import com.abiquo.server.core.infrastructure.storage.VolumeManagementDto;
 import com.google.common.base.Predicate;
 
 /**
@@ -64,14 +63,11 @@ public class VolumeLiveApiTest extends BaseAbiquoApiLiveApiTest {
       VolumeOptions validOptions = VolumeOptions.builder().has("hawa").build();
       VolumeOptions invalidOptions = VolumeOptions.builder().has("cacatua").build();
 
-      List<VolumeManagementDto> volumes = env.cloudApi.listVolumes(env.virtualDatacenter.unwrap(), validOptions)
-            .getCollection();
-
-      assertEquals(volumes.size(), 1);
-
-      volumes = env.cloudApi.listVolumes(env.virtualDatacenter.unwrap(), invalidOptions).getCollection();
+      Iterable<Volume> volumes = env.virtualDatacenter.listVolumes(validOptions);
+      assertEquals(size(volumes), 1);
 
-      assertEquals(volumes.size(), 0);
+      volumes = env.virtualDatacenter.listVolumes(invalidOptions);
+      assertTrue(isEmpty(volumes));
    }
 
    @Test(dependsOnMethods = "testFilterVolumes")

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/EnterpriseLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/EnterpriseLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/EnterpriseLiveApiTest.java
index 473ef5e..24fbd76 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/EnterpriseLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/EnterpriseLiveApiTest.java
@@ -16,6 +16,9 @@
  */
 package org.jclouds.abiquo.domain.enterprise;
 
+import static com.google.common.collect.Iterables.get;
+import static com.google.common.collect.Iterables.isEmpty;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
@@ -24,8 +27,6 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
-import java.util.List;
-
 import javax.ws.rs.core.Response.Status;
 
 import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
@@ -78,9 +79,9 @@ public class EnterpriseLiveApiTest extends BaseAbiquoApiLiveApiTest {
          assertHasError(ex, Status.CONFLICT, "ENTERPRISE-10");
       }
 
-      List<Datacenter> allowed = enterprise.listAllowedDatacenters();
+      Iterable<Datacenter> allowed = enterprise.listAllowedDatacenters();
       assertNotNull(allowed);
-      assertTrue(allowed.isEmpty());
+      assertTrue(isEmpty(allowed));
 
       enterprise.delete();
    }
@@ -118,9 +119,9 @@ public class EnterpriseLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testListLimits() {
-      List<Limits> allLimits = enterprise.listLimits();
+      Iterable<Limits> allLimits = enterprise.listLimits();
       assertNotNull(allLimits);
-      assertEquals(allLimits.size(), 1);
+      assertEquals(size(allLimits), 1);
    }
 
    public void testUpdateInvalidLimits() {
@@ -146,20 +147,20 @@ public class EnterpriseLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testListAllowedDatacenters() {
-      List<Datacenter> allowed = enterprise.listAllowedDatacenters();
+      Iterable<Datacenter> allowed = enterprise.listAllowedDatacenters();
 
       assertNotNull(allowed);
-      assertFalse(allowed.isEmpty());
-      assertEquals(allowed.get(0).getId(), env.datacenter.getId());
+      assertFalse(isEmpty(allowed));
+      assertEquals(get(allowed, 0).getId(), env.datacenter.getId());
    }
 
    public void testListVirtualMachines() {
-      List<VirtualMachine> machines = env.defaultEnterprise.listVirtualMachines();
-      assertTrue(machines.size() > 0);
+      Iterable<VirtualMachine> machines = env.defaultEnterprise.listVirtualMachines();
+      assertTrue(size(machines) > 0);
    }
 
    public void testListVirtualAppliances() {
-      List<VirtualAppliance> vapps = env.defaultEnterprise.listVirtualAppliances();
-      assertTrue(vapps.size() > 0);
+      Iterable<VirtualAppliance> vapps = env.defaultEnterprise.listVirtualAppliances();
+      assertTrue(size(vapps) > 0);
    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionListLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionListLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionListLiveApiTest.java
index b5909a5..c618e93 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionListLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionListLiveApiTest.java
@@ -22,8 +22,6 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 
-import java.util.List;
-
 import org.jclouds.abiquo.internal.BaseAbiquoApiLiveApiTest;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
@@ -56,7 +54,7 @@ public class TemplateDefinitionListLiveApiTest extends BaseAbiquoApiLiveApiTest
    }
 
    public void testListStates() {
-      List<TemplateState> states = list.listStatus(env.datacenter);
+      Iterable<TemplateState> states = list.listStatus(env.datacenter);
       assertNotNull(states);
    }
 

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/UserLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/UserLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/UserLiveApiTest.java
index b27cb45..14fdc5a 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/UserLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/enterprise/UserLiveApiTest.java
@@ -26,7 +26,6 @@ import static org.testng.Assert.fail;
 
 import javax.ws.rs.core.Response.Status;
 
-import org.jclouds.abiquo.domain.enterprise.options.UserOptions;
 import org.jclouds.abiquo.domain.exception.AbiquoException;
 import org.jclouds.abiquo.internal.BaseAbiquoApiLiveApiTest;
 import org.testng.annotations.Test;
@@ -90,16 +89,6 @@ public class UserLiveApiTest extends BaseAbiquoApiLiveApiTest {
       users = filter(env.enterprise.listUsers(), nick(env.user.getName() + "FAIL"));
       assertEquals(size(users), 0);
    }
-   
-   public void testListUserWithOptions() {
-      Iterable<User> users = env.enterprise.listUsers(UserOptions.builder()
-            .limit(1).startWith(0).build());
-      assertEquals(size(users),  1);
-
-      users = env.enterprise.listUsers(UserOptions.builder()
-            .limit(1).page(2).build());
-      assertEquals(size(users),  1);
-   }
 
    public void testGetCurrentUser() {
       User user = env.context.getAdministrationService().getCurrentUser();

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/DatacenterLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/DatacenterLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/DatacenterLiveApiTest.java
index 5d34eb5..ad17ab4 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/DatacenterLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/DatacenterLiveApiTest.java
@@ -16,14 +16,13 @@
  */
 package org.jclouds.abiquo.domain.infrastructure;
 
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
-import java.util.List;
-
 import javax.ws.rs.core.Response.Status;
 
 import org.jclouds.abiquo.domain.enterprise.Limits;
@@ -71,9 +70,9 @@ public class DatacenterLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testListLimits() {
-      List<Limits> limits = env.datacenter.listLimits();
+      Iterable<Limits> limits = env.datacenter.listLimits();
       assertNotNull(limits);
-      assertTrue(limits.size() > 0);
+      assertTrue(size(limits) > 0);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/MachineLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/MachineLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/MachineLiveApiTest.java
index e4eafd7..31cc7ef 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/MachineLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/MachineLiveApiTest.java
@@ -25,7 +25,6 @@ import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
 import java.net.URI;
-import java.util.List;
 
 import javax.ws.rs.core.Response.Status;
 
@@ -115,9 +114,8 @@ public class MachineLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testListVirtualMachines() {
-      List<VirtualMachine> machines = env.machine.listRemoteVirtualMachines();
+      Iterable<VirtualMachine> machines = env.machine.listRemoteVirtualMachines();
       assertNotNull(machines);
-      assertTrue(machines.size() >= 0);
    }
 
    public void testReserveMachine() {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/RemoteServiceLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/RemoteServiceLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/RemoteServiceLiveApiTest.java
index 4c75f62..8abcde9 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/RemoteServiceLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/RemoteServiceLiveApiTest.java
@@ -18,6 +18,7 @@ package org.jclouds.abiquo.domain.infrastructure;
 
 import static com.google.common.collect.Iterables.filter;
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.get;
 import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
@@ -87,7 +88,7 @@ public class RemoteServiceLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testCreateRepeated() {
-      RemoteService repeated = Builder.fromRemoteService(env.remoteServices.get(1)).build();
+      RemoteService repeated = Builder.fromRemoteService(get(env.remoteServices, 1)).build();
 
       try {
          repeated.save();
@@ -99,7 +100,7 @@ public class RemoteServiceLiveApiTest extends BaseAbiquoApiLiveApiTest {
 
    public void testListRemoteServices() {
       Iterable<RemoteService> remoteServices = env.datacenter.listRemoteServices();
-      assertEquals(size(remoteServices), env.remoteServices.size());
+      assertEquals(size(remoteServices), size(env.remoteServices));
 
       remoteServices = filter(env.datacenter.listRemoteServices(), type(RemoteServiceType.NODE_COLLECTOR));
       assertEquals(size(remoteServices), 1);

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/TierLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/TierLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/TierLiveApiTest.java
index c04b3b6..76cbbd8 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/TierLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/infrastructure/TierLiveApiTest.java
@@ -18,9 +18,9 @@ package org.jclouds.abiquo.domain.infrastructure;
 
 import static com.google.common.collect.Iterables.filter;
 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;
 
 import org.jclouds.abiquo.internal.BaseAbiquoApiLiveApiTest;
 import org.testng.annotations.Test;
@@ -37,8 +37,7 @@ import com.google.common.base.Predicate;
 public class TierLiveApiTest extends BaseAbiquoApiLiveApiTest {
 
    public void testUpdate() {
-      Tier tier = env.datacenter.listTiers().get(0);
-      assertNotNull(tier);
+      Tier tier = getLast(env.datacenter.listTiers());
 
       String previousName = tier.getName();
       tier.setName("Updated tier");

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/network/ExternalNetworkLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/ExternalNetworkLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/ExternalNetworkLiveApiTest.java
index e0056dc..0224ff6 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/ExternalNetworkLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/ExternalNetworkLiveApiTest.java
@@ -17,16 +17,16 @@
 package org.jclouds.abiquo.domain.network;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.fail;
 
-import java.util.List;
-
 import javax.ws.rs.core.Response.Status;
 
+import org.jclouds.abiquo.domain.PaginatedCollection;
 import org.jclouds.abiquo.domain.exception.AbiquoException;
 import org.jclouds.abiquo.domain.network.options.IpOptions;
 import org.jclouds.abiquo.internal.BaseAbiquoApiLiveApiTest;
@@ -35,6 +35,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import com.abiquo.server.core.infrastructure.network.ExternalIpDto;
 import com.abiquo.server.core.infrastructure.network.ExternalIpsDto;
 import com.google.common.base.Predicate;
 
@@ -58,27 +59,26 @@ public class ExternalNetworkLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testListIps() {
-      ExternalIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi()
-            .listExternalIps(externalNetwork.unwrap(), IpOptions.builder().limit(1).build());
+      PaginatedCollection<ExternalIpDto, ExternalIpsDto> ipsDto = env.context.getApiContext().getApi()
+            .getInfrastructureApi().listExternalIps(externalNetwork.unwrap(), IpOptions.builder().limit(1).build());
       int totalIps = ipsDto.getTotalSize();
 
-      List<ExternalIp> ips = externalNetwork.listIps();
-
-      assertEquals(ips.size(), totalIps);
+      Iterable<ExternalIp> ips = externalNetwork.listIps();
+      assertEquals(size(ips), totalIps);
    }
 
    public void testListIpsWithOptions() {
-      List<ExternalIp> ips = externalNetwork.listIps(IpOptions.builder().limit(5).build());
-      assertEquals(ips.size(), 5);
+      Iterable<ExternalIp> ips = externalNetwork.listIps(IpOptions.builder().limit(5).build());
+      assertEquals(size(ips), 5);
    }
 
    public void testListUnusedIps() {
-      ExternalIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi()
-            .listExternalIps(externalNetwork.unwrap(), IpOptions.builder().limit(1).build());
+      PaginatedCollection<ExternalIpDto, ExternalIpsDto> ipsDto = env.context.getApiContext().getApi()
+            .getInfrastructureApi().listExternalIps(externalNetwork.unwrap(), IpOptions.builder().limit(1).build());
       int totalIps = ipsDto.getTotalSize();
 
-      List<ExternalIp> ips = externalNetwork.listUnusedIps();
-      assertEquals(ips.size(), totalIps);
+      Iterable<ExternalIp> ips = externalNetwork.listUnusedIps();
+      assertEquals(size(ips), totalIps);
    }
 
    public void testUpdateBasicInfo() {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/network/GenericNetworkLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/GenericNetworkLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/GenericNetworkLiveApiTest.java
index 52d0cde..b464f1a 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/GenericNetworkLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/GenericNetworkLiveApiTest.java
@@ -16,12 +16,12 @@
  */
 package org.jclouds.abiquo.domain.network;
 
+import static com.google.common.collect.Iterables.get;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 
-import java.util.List;
-
 import javax.ws.rs.core.Response.Status;
 
 import org.jclouds.abiquo.domain.exception.AbiquoException;
@@ -39,36 +39,36 @@ import com.abiquo.model.enumerator.NetworkType;
 public class GenericNetworkLiveApiTest extends BaseAbiquoApiLiveApiTest {
    public void testListDatacenterNetworks() {
       // Make sure all network types are listed
-      List<Network<?>> networks = env.datacenter.listNetworks();
+      Iterable<Network<?>> networks = env.datacenter.listNetworks();
       assertNotNull(networks);
-      assertEquals(networks.size(), 3);
+      assertEquals(size(networks), 3);
    }
 
    public void testListPublicNetworks() {
-      List<Network<?>> networks = env.datacenter.listNetworks(NetworkType.PUBLIC);
+      Iterable<Network<?>> networks = env.datacenter.listNetworks(NetworkType.PUBLIC);
       assertNotNull(networks);
-      assertEquals(networks.size(), 1);
+      assertEquals(size(networks), 1);
 
       // Make sure it can be converted
-      networks.get(0).toPublicNetwork();
+      get(networks, 0).toPublicNetwork();
    }
 
    public void testListExternaletworks() {
-      List<Network<?>> networks = env.datacenter.listNetworks(NetworkType.EXTERNAL);
+      Iterable<Network<?>> networks = env.datacenter.listNetworks(NetworkType.EXTERNAL);
       assertNotNull(networks);
-      assertEquals(networks.size(), 1);
+      assertEquals(size(networks), 1);
 
       // Make sure it can be converted
-      networks.get(0).toExternalNetwork();
+      get(networks, 0).toExternalNetwork();
    }
 
    public void testListUnmanagedNetworks() {
-      List<Network<?>> networks = env.datacenter.listNetworks(NetworkType.UNMANAGED);
+      Iterable<Network<?>> networks = env.datacenter.listNetworks(NetworkType.UNMANAGED);
       assertNotNull(networks);
-      assertEquals(networks.size(), 1);
+      assertEquals(size(networks), 1);
 
       // Make sure it can be converted
-      networks.get(0).toUnmanagedNetwork();
+      get(networks, 0).toUnmanagedNetwork();
    }
 
    public void testListPrivateNetworks() {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PrivateNetworkLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PrivateNetworkLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PrivateNetworkLiveApiTest.java
index ac1fb2b..f54f50d 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PrivateNetworkLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PrivateNetworkLiveApiTest.java
@@ -17,16 +17,16 @@
 package org.jclouds.abiquo.domain.network;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.fail;
 
-import java.util.List;
-
 import javax.ws.rs.core.Response.Status;
 
+import org.jclouds.abiquo.domain.PaginatedCollection;
 import org.jclouds.abiquo.domain.cloud.VirtualDatacenter;
 import org.jclouds.abiquo.domain.exception.AbiquoException;
 import org.jclouds.abiquo.domain.network.options.IpOptions;
@@ -36,6 +36,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import com.abiquo.server.core.infrastructure.network.PrivateIpDto;
 import com.abiquo.server.core.infrastructure.network.PrivateIpsDto;
 
 /**
@@ -58,27 +59,26 @@ public class PrivateNetworkLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testListIps() {
-      PrivateIpsDto ipsDto = env.context.getApiContext().getApi().getCloudApi()
+      PaginatedCollection<PrivateIpDto, PrivateIpsDto> ipsDto = env.context.getApiContext().getApi().getCloudApi()
             .listPrivateNetworkIps(privateNetwork.unwrap(), IpOptions.builder().limit(1).build());
       int totalIps = ipsDto.getTotalSize();
 
-      List<PrivateIp> ips = privateNetwork.listIps();
-
-      assertEquals(ips.size(), totalIps);
+      Iterable<PrivateIp> ips = privateNetwork.listIps();
+      assertEquals(size(ips), totalIps);
    }
 
    public void testListIpsWithOptions() {
-      List<PrivateIp> ips = privateNetwork.listIps(IpOptions.builder().limit(5).build());
-      assertEquals(ips.size(), 5);
+      Iterable<PrivateIp> ips = privateNetwork.listIps(IpOptions.builder().limit(5).build());
+      assertEquals(size(ips), 5);
    }
 
    public void testListUnusedIps() {
-      PrivateIpsDto ipsDto = env.context.getApiContext().getApi().getCloudApi()
+      PaginatedCollection<PrivateIpDto, PrivateIpsDto> ipsDto = env.context.getApiContext().getApi().getCloudApi()
             .listPrivateNetworkIps(privateNetwork.unwrap(), IpOptions.builder().limit(1).build());
       int totalIps = ipsDto.getTotalSize();
 
-      List<PrivateIp> ips = privateNetwork.listUnusedIps();
-      assertEquals(ips.size(), totalIps);
+      Iterable<PrivateIp> ips = privateNetwork.listUnusedIps();
+      assertEquals(size(ips), totalIps);
    }
 
    public void testUpdateBasicInfo() {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PublicNetworkLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PublicNetworkLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PublicNetworkLiveApiTest.java
index 203aba6..95b56e3 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PublicNetworkLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/PublicNetworkLiveApiTest.java
@@ -17,16 +17,16 @@
 package org.jclouds.abiquo.domain.network;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.fail;
 
-import java.util.List;
-
 import javax.ws.rs.core.Response.Status;
 
+import org.jclouds.abiquo.domain.PaginatedCollection;
 import org.jclouds.abiquo.domain.exception.AbiquoException;
 import org.jclouds.abiquo.domain.network.options.IpOptions;
 import org.jclouds.abiquo.internal.BaseAbiquoApiLiveApiTest;
@@ -35,6 +35,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import com.abiquo.server.core.infrastructure.network.PublicIpDto;
 import com.abiquo.server.core.infrastructure.network.PublicIpsDto;
 
 /**
@@ -57,27 +58,26 @@ public class PublicNetworkLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testListIps() {
-      PublicIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi()
-            .listPublicIps(publicNetwork.unwrap(), IpOptions.builder().limit(1).build());
+      PaginatedCollection<PublicIpDto, PublicIpsDto> ipsDto = env.context.getApiContext().getApi()
+            .getInfrastructureApi().listPublicIps(publicNetwork.unwrap(), IpOptions.builder().limit(1).build());
       int totalIps = ipsDto.getTotalSize();
 
-      List<PublicIp> ips = publicNetwork.listIps();
-
-      assertEquals(ips.size(), totalIps);
+      Iterable<PublicIp> ips = publicNetwork.listIps();
+      assertEquals(size(ips), totalIps);
    }
 
    public void testListIpsWithOptions() {
-      List<PublicIp> ips = publicNetwork.listIps(IpOptions.builder().limit(5).build());
-      assertEquals(ips.size(), 5);
+      Iterable<PublicIp> ips = publicNetwork.listIps(IpOptions.builder().limit(5).build());
+      assertEquals(size(ips), 5);
    }
 
    public void testListUnusedIps() {
-      PublicIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi()
-            .listPublicIps(publicNetwork.unwrap(), IpOptions.builder().limit(1).build());
+      PaginatedCollection<PublicIpDto, PublicIpsDto> ipsDto = env.context.getApiContext().getApi()
+            .getInfrastructureApi().listPublicIps(publicNetwork.unwrap(), IpOptions.builder().limit(1).build());
       int totalIps = ipsDto.getTotalSize();
 
-      List<PublicIp> ips = publicNetwork.listUnusedIps();
-      assertEquals(ips.size(), totalIps);
+      Iterable<PublicIp> ips = publicNetwork.listUnusedIps();
+      assertEquals(size(ips), totalIps);
    }
 
    public void testUpdateBasicInfo() {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/domain/network/UnmanagedNetworkLiveApiTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/UnmanagedNetworkLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/UnmanagedNetworkLiveApiTest.java
index 96981b3..fb3184c 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/domain/network/UnmanagedNetworkLiveApiTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/network/UnmanagedNetworkLiveApiTest.java
@@ -17,6 +17,7 @@
 package org.jclouds.abiquo.domain.network;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.jclouds.abiquo.util.Assert.assertHasError;
 import static org.testng.Assert.assertEquals;
@@ -24,10 +25,9 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.fail;
 
-import java.util.List;
-
 import javax.ws.rs.core.Response.Status;
 
+import org.jclouds.abiquo.domain.PaginatedCollection;
 import org.jclouds.abiquo.domain.exception.AbiquoException;
 import org.jclouds.abiquo.domain.network.options.IpOptions;
 import org.jclouds.abiquo.internal.BaseAbiquoApiLiveApiTest;
@@ -36,6 +36,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import com.abiquo.server.core.infrastructure.network.UnmanagedIpDto;
 import com.abiquo.server.core.infrastructure.network.UnmanagedIpsDto;
 import com.google.common.base.Predicate;
 
@@ -59,28 +60,27 @@ public class UnmanagedNetworkLiveApiTest extends BaseAbiquoApiLiveApiTest {
    }
 
    public void testListIps() {
-      UnmanagedIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi()
-            .listUnmanagedIps(unmanagedNetwork.unwrap(), IpOptions.builder().limit(1).build());
+      PaginatedCollection<UnmanagedIpDto, UnmanagedIpsDto> ipsDto = env.context.getApiContext().getApi()
+            .getInfrastructureApi().listUnmanagedIps(unmanagedNetwork.unwrap(), IpOptions.builder().limit(1).build());
       int totalIps = ipsDto.getTotalSize();
 
-      List<UnmanagedIp> ips = unmanagedNetwork.listIps();
-
-      assertEquals(ips.size(), totalIps);
+      Iterable<UnmanagedIp> ips = unmanagedNetwork.listIps();
+      assertEquals(size(ips), totalIps);
    }
 
    public void testListIpsWithOptions() {
-      List<UnmanagedIp> ips = unmanagedNetwork.listIps(IpOptions.builder().limit(5).build());
+      Iterable<UnmanagedIp> ips = unmanagedNetwork.listIps(IpOptions.builder().limit(5).build());
       // Unmanaged networks do not have IPs until attached to VMs
-      assertEquals(ips.size(), 0);
+      assertEquals(size(ips), 0);
    }
 
    public void testListUnusedIps() {
-      UnmanagedIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi()
-            .listUnmanagedIps(unmanagedNetwork.unwrap(), IpOptions.builder().limit(1).build());
+      PaginatedCollection<UnmanagedIpDto, UnmanagedIpsDto> ipsDto = env.context.getApiContext().getApi()
+            .getInfrastructureApi().listUnmanagedIps(unmanagedNetwork.unwrap(), IpOptions.builder().limit(1).build());
       int totalIps = ipsDto.getTotalSize();
 
-      List<UnmanagedIp> ips = unmanagedNetwork.listUnusedIps();
-      assertEquals(ips.size(), totalIps);
+      Iterable<UnmanagedIp> ips = unmanagedNetwork.listUnusedIps();
+      assertEquals(size(ips), totalIps);
    }
 
    public void testUpdateBasicInfo() {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/environment/CloudTestEnvironment.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/environment/CloudTestEnvironment.java b/abiquo/src/test/java/org/jclouds/abiquo/environment/CloudTestEnvironment.java
index 4a3579c..7873450 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/environment/CloudTestEnvironment.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/environment/CloudTestEnvironment.java
@@ -18,14 +18,12 @@ package org.jclouds.abiquo.environment;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.isEmpty;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 
-import java.util.Collections;
-import java.util.List;
-
 import org.jclouds.ContextBuilder;
 import org.jclouds.abiquo.AbiquoApiMetadata;
 import org.jclouds.abiquo.AbiquoContext;
@@ -37,7 +35,6 @@ import org.jclouds.abiquo.domain.enterprise.Enterprise;
 import org.jclouds.abiquo.domain.network.PrivateNetwork;
 import org.jclouds.abiquo.features.CloudApi;
 import org.jclouds.abiquo.features.services.EventService;
-import org.testng.collections.Lists;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Ordering;
@@ -163,20 +160,10 @@ public class CloudTestEnvironment extends InfrastructureTestEnvironment {
    }
 
    protected void createVirtualMachine() {
-      List<VirtualMachineTemplate> templates = virtualDatacenter.listAvailableTemplates();
-      assertFalse(templates.isEmpty());
-
-      List<VirtualMachineTemplate> sorted = Lists.newArrayList(templates);
+      Iterable<VirtualMachineTemplate> templates = virtualDatacenter.listAvailableTemplates();
+      assertFalse(isEmpty(templates));
 
-      // Sort by size to use the smallest one
-      Collections.sort(sorted, new Ordering<VirtualMachineTemplate>() {
-         @Override
-         public int compare(final VirtualMachineTemplate left, final VirtualMachineTemplate right) {
-            return Longs.compare(left.getDiskFileSize(), right.getDiskFileSize());
-         }
-      });
-
-      template = sorted.get(0);
+      template = templateBySize().min(templates);
 
       virtualMachine = VirtualMachine.builder(context.getApiContext(), virtualAppliance, template).cpu(2)
             .nameLabel(PREFIX + "VM Aloha").ram(128).build();
@@ -222,7 +209,15 @@ public class CloudTestEnvironment extends InfrastructureTestEnvironment {
          virtualMachine.delete();
          assertNull(cloudApi.getVirtualMachine(virtualAppliance.unwrap(), idVirtualMachine));
       }
+   }
 
+   public static Ordering<VirtualMachineTemplate> templateBySize() {
+      return new Ordering<VirtualMachineTemplate>() {
+         @Override
+         public int compare(final VirtualMachineTemplate left, final VirtualMachineTemplate right) {
+            return Longs.compare(left.getDiskFileSize(), right.getDiskFileSize());
+         }
+      };
    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/environment/InfrastructureTestEnvironment.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/environment/InfrastructureTestEnvironment.java b/abiquo/src/test/java/org/jclouds/abiquo/environment/InfrastructureTestEnvironment.java
index 0c2add5..4f2ce71 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/environment/InfrastructureTestEnvironment.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/environment/InfrastructureTestEnvironment.java
@@ -17,6 +17,7 @@
 package org.jclouds.abiquo.environment;
 
 import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.size;
 import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
@@ -26,7 +27,6 @@ import java.io.IOException;
 import java.net.URI;
 import java.net.URL;
 import java.nio.charset.Charset;
-import java.util.List;
 import java.util.UUID;
 
 import org.jclouds.abiquo.AbiquoContext;
@@ -94,7 +94,7 @@ public class InfrastructureTestEnvironment implements TestEnvironment {
 
    public UnmanagedNetwork unmanagedNetwork;
 
-   public List<RemoteService> remoteServices;
+   public Iterable<RemoteService> remoteServices;
 
    public Rack rack;
 
@@ -190,7 +190,7 @@ public class InfrastructureTestEnvironment implements TestEnvironment {
       assertNotNull(datacenter.getId());
 
       remoteServices = datacenter.listRemoteServices();
-      assertEquals(remoteServices.size(), 7);
+      assertEquals(size(remoteServices), 7);
    }
 
    protected void createMachine() {
@@ -237,7 +237,7 @@ public class InfrastructureTestEnvironment implements TestEnvironment {
       String user = Config.get("abiquo.storage.user");
       String pass = Config.get("abiquo.storage.pass");
 
-      List<StorageDeviceMetadata> devices = datacenter.listSupportedStorageDevices();
+      Iterable<StorageDeviceMetadata> devices = datacenter.listSupportedStorageDevices();
       StorageDeviceMetadata metadata = find(devices, new Predicate<StorageDeviceMetadata>() {
          @Override
          public boolean apply(StorageDeviceMetadata input) {

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/14fbe2d3/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiExpectTest.java
----------------------------------------------------------------------
diff --git a/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiExpectTest.java b/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiExpectTest.java
index 27df7cf..760d245 100644
--- a/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiExpectTest.java
+++ b/abiquo/src/test/java/org/jclouds/abiquo/features/CloudApiExpectTest.java
@@ -22,17 +22,36 @@ 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.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.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.model.transport.AcceptedRequestDto;
+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.VirtualDatacenterDto;
 import com.abiquo.server.core.cloud.VirtualMachineDto;
 import com.abiquo.server.core.cloud.VirtualMachineInstanceDto;
+import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto;
 import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto;
+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.storage.VolumeManagementDto;
+import com.abiquo.server.core.infrastructure.storage.VolumesManagementDto;
 
 /**
  * Expect tests for the {@link CloudApi} class.
@@ -43,7 +62,7 @@ import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto;
 public class CloudApiExpectTest extends BaseAbiquoApiExpectTest<CloudApi> {
 
    public void testListAllVirtualMachinesWhenResponseIs2xx() {
-      CloudApi api = requestSendsResponse(
+      CloudApi api = requestsSendResponses(
             HttpRequest.builder() //
                   .method("GET") //
                   .endpoint(URI.create("http://localhost/api/cloud/virtualmachines")) //
@@ -56,13 +75,132 @@ public class CloudApiExpectTest extends BaseAbiquoApiExpectTest<CloudApi> {
                   .payload(
                         payloadFromResourceWithContentType("/payloads/all-vms.xml",
                               normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualmachines")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "2").build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/all-vms-lastpage.xml",
+                              normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE))) //
+                  .build());
+
+      PagedIterable<VirtualMachineWithNodeExtendedDto> result = api.listAllVirtualMachines();
+      List<VirtualMachineWithNodeExtendedDto> vms = result.concat().toList();
+
+      assertEquals(vms.size(), 2);
+      assertEquals(vms.get(0).getId(), Integer.valueOf(1));
+      assertEquals(vms.get(1).getId(), Integer.valueOf(2));
+      assertEquals(vms.get(0).getName(), "VM");
+      assertNotNull(vms.get(0).getEditLink());
+   }
+
+   public void testListAllVirtualMachinesWithPagination() {
+      CloudApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualmachines")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "2").build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/all-vms-lastpage.xml",
+                              normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualMachineOptions options = VirtualMachineOptions.builder().startWith(2).build();
+      PaginatedCollection<VirtualMachineWithNodeExtendedDto, VirtualMachinesWithNodeExtendedDto> vms = api
+            .listAllVirtualMachines(options);
+
+      assertEquals(vms.size(), 1);
+      assertEquals(vms.getTotalSize().intValue(), 2);
+      assertEquals(vms.get(0).getId().intValue(), 2);
+   }
+
+   public void testListVirtualMachinesWhenResponseIs2xx() {
+      CloudApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET")
+                  //
+                  .endpoint(
+                        URI.create("http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/vms-page.xml",
+                              normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET")
+                  //
+                  .endpoint(
+                        URI.create("http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "2").build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/vms-lastpage.xml",
+                              normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE))) //
                   .build());
 
-      VirtualMachinesWithNodeExtendedDto vms = api.listAllVirtualMachines();
-      assertEquals(vms.getCollection().size(), 1);
-      assertEquals(vms.getCollection().get(0).getId(), Integer.valueOf(1));
-      assertEquals(vms.getCollection().get(0).getName(), "VM");
-      assertNotNull(vms.getCollection().get(0).getEditLink());
+      VirtualApplianceDto vapp = new VirtualApplianceDto();
+      vapp.addLink(new RESTLink("virtualmachines",
+            "http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines"));
+
+      PagedIterable<VirtualMachineWithNodeExtendedDto> result = api.listVirtualMachines(vapp);
+      List<VirtualMachineWithNodeExtendedDto> vms = result.concat().toList();
+
+      assertEquals(vms.size(), 2);
+      assertEquals(vms.get(0).getId(), Integer.valueOf(1));
+      assertEquals(vms.get(1).getId(), Integer.valueOf(2));
+      assertEquals(vms.get(0).getName(), "VM");
+      assertNotNull(vms.get(0).getEditLink());
+   }
+
+   public void testLisVirtualMachinesWithPagination() {
+      CloudApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET")
+                  //
+                  .endpoint(
+                        URI.create("http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "2").build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/vms-lastpage.xml",
+                              normalize(VirtualMachinesWithNodeExtendedDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualApplianceDto vapp = new VirtualApplianceDto();
+      vapp.addLink(new RESTLink("virtualmachines",
+            "http://localhost/api/cloud/virtualdatacenters/1/virtualappliances/1/virtualmachines"));
+
+      VirtualMachineOptions options = VirtualMachineOptions.builder().startWith(2).build();
+      PaginatedCollection<VirtualMachineWithNodeExtendedDto, VirtualMachinesWithNodeExtendedDto> vms = api
+            .listVirtualMachines(vapp, options);
+
+      assertEquals(vms.size(), 1);
+      assertEquals(vms.getTotalSize().intValue(), 2);
+      assertEquals(vms.get(0).getId().intValue(), 2);
    }
 
    public void testSnapshotVirtualMachineReturns2xx() {
@@ -95,6 +233,358 @@ public class CloudApiExpectTest extends BaseAbiquoApiExpectTest<CloudApi> {
       assertNotNull(taskRef);
    }
 
+   public void testListAvailablePublicIps() {
+      CloudApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/publicips/topurchase")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-available-page.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/publicips/topurchase")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-available-lastpage.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualDatacenterDto vdc = new VirtualDatacenterDto();
+      vdc.addLink(new RESTLink("topurchase", "http://localhost/api/cloud/virtualdatacenters/1/publicips/topurchase"));
+
+      PagedIterable<PublicIpDto> publicIps = api.listAvailablePublicIps(vdc);
+      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 testListAvailablePublicIpsWithPagination() {
+      CloudApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/publicips/topurchase")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-available-lastpage.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualDatacenterDto vdc = new VirtualDatacenterDto();
+      vdc.addLink(new RESTLink("topurchase", "http://localhost/api/cloud/virtualdatacenters/1/publicips/topurchase"));
+
+      IpOptions options = IpOptions.builder().startWith(3).build();
+      PaginatedCollection<PublicIpDto, PublicIpsDto> ips = api.listAvailablePublicIps(vdc, 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 testListPurchasedPublicIps() {
+      CloudApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/publicips/purchased")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-purchased-page.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/publicips/purchased")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-purchased-lastpage.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualDatacenterDto vdc = new VirtualDatacenterDto();
+      vdc.addLink(new RESTLink("purchased", "http://localhost/api/cloud/virtualdatacenters/1/publicips/purchased"));
+
+      PagedIterable<PublicIpDto> publicIps = api.listPurchasedPublicIps(vdc);
+      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 testListPurchasedPublicIpsWithPagination() {
+      CloudApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/publicips/purchased")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PublicIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "3") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/publicips-purchased-lastpage.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualDatacenterDto vdc = new VirtualDatacenterDto();
+      vdc.addLink(new RESTLink("purchased", "http://localhost/api/cloud/virtualdatacenters/1/publicips/purchased"));
+
+      IpOptions options = IpOptions.builder().startWith(3).build();
+      PaginatedCollection<PublicIpDto, PublicIpsDto> ips = api.listPurchasedPublicIps(vdc, 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 testListPrivteIps() {
+      CloudApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/privatenetworks/1/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PrivateIpsDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/privateips-page.xml",
+                              normalize(PublicIpsDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/privatenetworks/1/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PrivateIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/privateips-lastpage.xml",
+                              normalize(PrivateIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VLANNetworkDto vlan = new VLANNetworkDto();
+      vlan.addLink(new RESTLink("ips", "http://localhost/api/cloud/virtualdatacenters/1/privatenetworks/1/ips"));
+
+      PagedIterable<PrivateIpDto> privateIps = api.listPrivateNetworkIps(vlan);
+      List<PrivateIpDto> ips = privateIps.concat().toList();
+
+      assertEquals(ips.size(), 2);
+      assertEquals(ips.get(0).getId().intValue(), 1);
+      assertEquals(ips.get(1).getId().intValue(), 2);
+   }
+
+   public void testListPrivateIpsWithPagination() {
+      CloudApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://localhost/api/cloud/virtualdatacenters/1/privatenetworks/1/ips")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(PrivateIpsDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/privateips-lastpage.xml",
+                              normalize(PrivateIpsDto.MEDIA_TYPE))) //
+                  .build());
+
+      VLANNetworkDto vlan = new VLANNetworkDto();
+      vlan.addLink(new RESTLink("ips", "http://localhost/api/cloud/virtualdatacenters/1/privatenetworks/1/ips"));
+
+      IpOptions options = IpOptions.builder().startWith(1).build();
+      PaginatedCollection<PrivateIpDto, PrivateIpsDto> ips = api.listPrivateNetworkIps(vlan, options);
+
+      assertEquals(ips.size(), 1);
+      assertEquals(ips.getTotalSize().intValue(), 2);
+      assertEquals(ips.get(0).getId().intValue(), 2);
+   }
+
+   public void testListAvailableTemplates() {
+      CloudApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://example.com/api/cloud/virtualdatacenters/1/action/templates")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachineTemplatesDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/available-templates-page.xml",
+                              normalize(VirtualMachineTemplatesDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://example.com/api/cloud/virtualdatacenters/1/action/templates")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachineTemplatesDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/available-templates-lastpage.xml",
+                              normalize(VirtualMachineTemplatesDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualDatacenterDto vdc = new VirtualDatacenterDto();
+      vdc.addLink(new RESTLink("templates", "http://example.com/api/cloud/virtualdatacenters/1/action/templates"));
+
+      PagedIterable<VirtualMachineTemplateDto> templates = api.listAvailableTemplates(vdc);
+      List<VirtualMachineTemplateDto> all = templates.concat().toList();
+
+      assertEquals(all.size(), 2);
+      assertEquals(all.get(0).getId().intValue(), 15);
+      assertEquals(all.get(1).getId().intValue(), 16);
+   }
+
+   public void testListAvailableTemplatesWithPagination() {
+      CloudApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://example.com/api/cloud/virtualdatacenters/1/action/templates")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VirtualMachineTemplatesDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/available-templates-lastpage.xml",
+                              normalize(VirtualMachineTemplatesDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualDatacenterDto vdc = new VirtualDatacenterDto();
+      vdc.addLink(new RESTLink("templates", "http://example.com/api/cloud/virtualdatacenters/1/action/templates"));
+
+      VirtualMachineTemplateOptions options = VirtualMachineTemplateOptions.builder().startWith(1).build();
+      PaginatedCollection<VirtualMachineTemplateDto, VirtualMachineTemplatesDto> templates = api
+            .listAvailableTemplates(vdc, options);
+
+      assertEquals(templates.size(), 1);
+      assertEquals(templates.getTotalSize().intValue(), 2);
+      assertEquals(templates.get(0).getId().intValue(), 16);
+   }
+
+   public void testListVolumes() {
+      CloudApi api = requestsSendResponses(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://example.com/api/cloud/virtualdatacenters/1/volumes")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VolumesManagementDto.MEDIA_TYPE)) //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/volumes-page.xml",
+                              normalize(VolumesManagementDto.MEDIA_TYPE))) //
+                  .build(),
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://example.com/api/cloud/virtualdatacenters/1/volumes")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VolumesManagementDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/volumes-lastpage.xml",
+                              normalize(VolumesManagementDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualDatacenterDto vdc = new VirtualDatacenterDto();
+      vdc.addLink(new RESTLink("volumes", "http://example.com/api/cloud/virtualdatacenters/1/volumes"));
+
+      PagedIterable<VolumeManagementDto> volumes = api.listVolumes(vdc);
+      List<VolumeManagementDto> all = volumes.concat().toList();
+
+      assertEquals(all.size(), 2);
+      assertEquals(all.get(0).getId().intValue(), 1530);
+      assertEquals(all.get(1).getId().intValue(), 1531);
+   }
+
+   public void testListVolumesWithPagination() {
+      CloudApi api = requestSendsResponse(
+            HttpRequest.builder() //
+                  .method("GET") //
+                  .endpoint(URI.create("http://example.com/api/cloud/virtualdatacenters/1/volumes")) //
+                  .addHeader("Cookie", tokenAuth) //
+                  .addHeader("Accept", normalize(VolumesManagementDto.MEDIA_TYPE)) //
+                  .addQueryParam("startwith", "1") //
+                  .build(),
+            HttpResponse
+                  .builder()
+                  .statusCode(200)
+                  .payload(
+                        payloadFromResourceWithContentType("/payloads/volumes-lastpage.xml",
+                              normalize(VolumesManagementDto.MEDIA_TYPE))) //
+                  .build());
+
+      VirtualDatacenterDto vdc = new VirtualDatacenterDto();
+      vdc.addLink(new RESTLink("volumes", "http://example.com/api/cloud/virtualdatacenters/1/volumes"));
+
+      VolumeOptions options = VolumeOptions.builder().startWith(1).build();
+      PaginatedCollection<VolumeManagementDto, VolumesManagementDto> templates = api.listVolumes(vdc, options);
+
+      assertEquals(templates.size(), 1);
+      assertEquals(templates.getTotalSize().intValue(), 2);
+      assertEquals(templates.get(0).getId().intValue(), 1531);
+   }
+
    @Override
    protected CloudApi clientFrom(AbiquoApi api) {
       return api.getCloudApi();