From 1f22c3fb596069a9480d1960471db64bb9baf69b Mon Sep 17 00:00:00 2001 From: Ignasi Barrera Date: Sun, 11 Aug 2013 22:41:09 +0200 Subject: [PATCH] JCLOUDS-198: Implemented the PagedIterable in Abiquo * Refactored all the domain objects to return Iterables instead of Lists, to allow a more flexible approach when using the PagedIterable. * Added a generic PaginatedCollection that knows how to advance any paginated collection. * Changed all methods from the Abiquo APIs that allow pagination to return the corresponding PagedIterables and PaginatedCollections. * Added Expect tests for every paginated resource. * Handle the special case of user pagination, to bypass Abiquo issue http://jira.abiquo.com/browse/ABICLOUDPREMIUM-5927 --- .../functions/VirtualMachineToNodeMetadata.java | 4 +- .../jclouds/abiquo/config/AbiquoHttpApiModule.java | 9 +- .../abiquo/domain/DomainWithTasksWrapper.java | 5 +- .../org/jclouds/abiquo/domain/DomainWrapper.java | 18 +- .../jclouds/abiquo/domain/PaginatedCollection.java | 160 +++++++ .../abiquo/domain/cloud/VirtualAppliance.java | 15 +- .../abiquo/domain/cloud/VirtualDatacenter.java | 73 +-- .../abiquo/domain/cloud/VirtualMachine.java | 6 +- .../domain/cloud/VirtualMachineTemplate.java | 5 +- .../abiquo/domain/enterprise/Enterprise.java | 54 +-- .../org/jclouds/abiquo/domain/enterprise/Role.java | 3 +- .../domain/enterprise/TemplateDefinitionList.java | 9 +- .../org/jclouds/abiquo/domain/enterprise/User.java | 7 +- .../enterprise/options/EnterpriseOptions.java | 56 +-- .../domain/enterprise/options/UserOptions.java | 12 - .../abiquo/domain/infrastructure/Datacenter.java | 41 +- .../abiquo/domain/infrastructure/Machine.java | 15 +- .../jclouds/abiquo/domain/infrastructure/Rack.java | 4 +- .../domain/infrastructure/StorageDevice.java | 10 +- .../jclouds/abiquo/domain/infrastructure/Tier.java | 4 +- .../abiquo/domain/network/ExternalNetwork.java | 23 +- .../org/jclouds/abiquo/domain/network/Network.java | 20 +- .../abiquo/domain/network/PrivateNetwork.java | 32 +- .../abiquo/domain/network/PublicNetwork.java | 23 +- .../abiquo/domain/network/UnmanagedNetwork.java | 23 +- .../abiquo/domain/options/FilterOptions.java | 12 +- .../org/jclouds/abiquo/domain/task/AsyncTask.java | 4 +- .../java/org/jclouds/abiquo/features/CloudApi.java | 111 ++++- .../org/jclouds/abiquo/features/EnterpriseApi.java | 34 +- .../java/org/jclouds/abiquo/features/EventApi.java | 16 +- .../jclouds/abiquo/features/InfrastructureApi.java | 60 ++- .../abiquo/features/VirtualMachineTemplateApi.java | 14 +- .../features/services/AdministrationService.java | 6 + .../abiquo/features/services/CloudService.java | 6 + .../functions/pagination/BasePaginationParser.java | 56 +++ .../functions/pagination/ParseEnterprises.java | 49 ++ .../abiquo/functions/pagination/ParseEvents.java | 49 ++ .../functions/pagination/ParseExternalIps.java | 49 ++ .../functions/pagination/ParsePrivateIps.java | 49 ++ .../functions/pagination/ParsePublicIps.java | 49 ++ .../functions/pagination/ParseUnmanagedIps.java | 49 ++ .../abiquo/functions/pagination/ParseUsers.java | 157 +++++++ .../pagination/ParseVirtualMachineTemplates.java | 51 +++ .../functions/pagination/ParseVirtualMachines.java | 51 +++ .../abiquo/functions/pagination/ParseVolumes.java | 50 ++ .../abiquo/internal/BaseAdministrationService.java | 14 +- .../jclouds/abiquo/internal/BaseCloudService.java | 15 +- .../jclouds/abiquo/internal/BaseEventService.java | 11 +- .../predicates/VirtualDatacenterPredicates.java | 7 +- .../enterprise/ListVirtualMachineTemplates.java | 20 +- .../abiquo/domain/cloud/AccountLiveTest.java | 5 +- .../domain/cloud/VirtualDatacenterLiveApiTest.java | 10 +- .../domain/cloud/VirtualMachineLiveApiTest.java | 4 +- .../domain/cloud/VirtualMachineLiveTest.java | 12 +- .../cloud/VirtualMachineNetworkingLiveApiTest.java | 63 ++- .../cloud/VirtualMachineStorageLiveApiTest.java | 33 +- .../abiquo/domain/cloud/VolumeLiveApiTest.java | 16 +- .../domain/enterprise/EnterpriseLiveApiTest.java | 27 +- .../TemplateDefinitionListLiveApiTest.java | 4 +- .../abiquo/domain/enterprise/UserLiveApiTest.java | 11 - .../infrastructure/DatacenterLiveApiTest.java | 7 +- .../domain/infrastructure/MachineLiveApiTest.java | 4 +- .../infrastructure/RemoteServiceLiveApiTest.java | 5 +- .../domain/infrastructure/TierLiveApiTest.java | 5 +- .../domain/network/ExternalNetworkLiveApiTest.java | 26 +- .../domain/network/GenericNetworkLiveApiTest.java | 26 +- .../domain/network/PrivateNetworkLiveApiTest.java | 22 +- .../domain/network/PublicNetworkLiveApiTest.java | 26 +- .../network/UnmanagedNetworkLiveApiTest.java | 26 +- .../abiquo/environment/CloudTestEnvironment.java | 29 +- .../environment/InfrastructureTestEnvironment.java | 8 +- .../abiquo/features/CloudApiExpectTest.java | 502 ++++++++++++++++++++- .../org/jclouds/abiquo/features/CloudApiTest.java | 209 --------- .../abiquo/features/EnterpriseApiExpectTest.java | 192 ++++++-- .../jclouds/abiquo/features/EnterpriseApiTest.java | 71 --- .../abiquo/features/EventApiExpectTest.java | 108 +++++ .../org/jclouds/abiquo/features/EventApiTest.java | 54 --- .../features/InfrastructureApiExpectTest.java | 227 ++++++++++ .../abiquo/features/InfrastructureApiTest.java | 109 ----- .../VirtualMachineTemplateApiExpectTest.java | 53 ++- .../features/VirtualMachineTemplateApiTest.java | 44 -- .../cloud/ListAttachedNicsLiveApiTest.java | 10 +- abiquo/src/test/resources/logback-test.xml | 8 +- .../test/resources/payloads/all-vms-lastpage.xml | 31 ++ abiquo/src/test/resources/payloads/all-vms.xml | 4 + .../payloads/available-templates-lastpage.xml | 43 ++ .../payloads/available-templates-page.xml | 43 ++ .../resources/payloads/enterprises-lastpage.xml | 40 ++ .../test/resources/payloads/enterprises-page.xml | 40 ++ .../test/resources/payloads/events-lastpage.xml | 40 ++ abiquo/src/test/resources/payloads/events-page.xml | 40 ++ .../resources/payloads/externalips-lastpage.xml | 27 ++ .../test/resources/payloads/externalips-page.xml | 27 ++ .../resources/payloads/privateips-lastpage.xml | 17 + .../test/resources/payloads/privateips-page.xml | 17 + .../payloads/publicips-available-lastpage.xml | 29 ++ .../payloads/publicips-available-page.xml | 29 ++ .../test/resources/payloads/publicips-lastpage.xml | 25 + .../src/test/resources/payloads/publicips-page.xml | 25 + .../payloads/publicips-purchased-lastpage.xml | 29 ++ .../payloads/publicips-purchased-page.xml | 29 ++ .../test/resources/payloads/templates-lastpage.xml | 35 ++ .../src/test/resources/payloads/templates-page.xml | 26 +- .../resources/payloads/unmanagedips-lastpage.xml | 29 ++ .../test/resources/payloads/unmanagedips-page.xml | 29 ++ .../src/test/resources/payloads/users-lastpage.xml | 24 + abiquo/src/test/resources/payloads/users-page.xml | 39 ++ .../test/resources/payloads/usr-list-page-2.xml | 23 - abiquo/src/test/resources/payloads/usr-list.xml | 54 --- .../src/test/resources/payloads/vms-lastpage.xml | 31 ++ abiquo/src/test/resources/payloads/vms-page.xml | 31 ++ .../test/resources/payloads/volumes-lastpage.xml | 18 + .../src/test/resources/payloads/volumes-page.xml | 18 + 113 files changed, 3267 insertions(+), 1201 deletions(-) create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/domain/PaginatedCollection.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/BasePaginationParser.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseEnterprises.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseEvents.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseExternalIps.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParsePrivateIps.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParsePublicIps.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseUnmanagedIps.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseUsers.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVirtualMachineTemplates.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVirtualMachines.java create mode 100644 abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVolumes.java create mode 100644 abiquo/src/test/java/org/jclouds/abiquo/features/EventApiExpectTest.java delete mode 100644 abiquo/src/test/java/org/jclouds/abiquo/features/EventApiTest.java create mode 100644 abiquo/src/test/resources/payloads/all-vms-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/available-templates-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/available-templates-page.xml create mode 100644 abiquo/src/test/resources/payloads/enterprises-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/enterprises-page.xml create mode 100644 abiquo/src/test/resources/payloads/events-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/events-page.xml create mode 100644 abiquo/src/test/resources/payloads/externalips-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/externalips-page.xml create mode 100644 abiquo/src/test/resources/payloads/privateips-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/privateips-page.xml create mode 100644 abiquo/src/test/resources/payloads/publicips-available-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/publicips-available-page.xml create mode 100644 abiquo/src/test/resources/payloads/publicips-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/publicips-page.xml create mode 100644 abiquo/src/test/resources/payloads/publicips-purchased-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/publicips-purchased-page.xml create mode 100644 abiquo/src/test/resources/payloads/templates-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/unmanagedips-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/unmanagedips-page.xml create mode 100644 abiquo/src/test/resources/payloads/users-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/users-page.xml delete mode 100644 abiquo/src/test/resources/payloads/usr-list-page-2.xml delete mode 100644 abiquo/src/test/resources/payloads/usr-list.xml create mode 100644 abiquo/src/test/resources/payloads/vms-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/vms-page.xml create mode 100644 abiquo/src/test/resources/payloads/volumes-lastpage.xml create mode 100644 abiquo/src/test/resources/payloads/volumes-page.xml diff --git a/abiquo/src/main/java/org/jclouds/abiquo/compute/functions/VirtualMachineToNodeMetadata.java b/abiquo/src/main/java/org/jclouds/abiquo/compute/functions/VirtualMachineToNodeMetadata.java index 16489c4..dbeaa5c 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/compute/functions/VirtualMachineToNodeMetadata.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/compute/functions/VirtualMachineToNodeMetadata.java @@ -20,8 +20,6 @@ import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.transform; -import java.util.List; - import javax.annotation.Resource; import javax.inject.Inject; import javax.inject.Singleton; @@ -114,7 +112,7 @@ public NodeMetadata apply(final VirtualMachine vm) { builder.hardware(hardware); // Networking configuration - List> nics = vm.listAttachedNics(); + Iterable> nics = vm.listAttachedNics(); builder.privateAddresses(ips(filter(nics, Predicates.instanceOf(PrivateIp.class)))); builder.publicAddresses(ips(filter(nics, Predicates.not(Predicates.instanceOf(PrivateIp.class))))); diff --git a/abiquo/src/main/java/org/jclouds/abiquo/config/AbiquoHttpApiModule.java b/abiquo/src/main/java/org/jclouds/abiquo/config/AbiquoHttpApiModule.java index e5ec1b2..0e13406 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/config/AbiquoHttpApiModule.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/config/AbiquoHttpApiModule.java @@ -19,7 +19,6 @@ import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL; import static org.jclouds.abiquo.domain.DomainWrapper.wrap; -import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -98,9 +97,9 @@ public Enterprise get() { final AtomicReference authException, @Named(PROPERTY_SESSION_INTERVAL) final long seconds, @Memoized final Supplier currentEnterprise) { Supplier> availableRegionsMapSupplier = Suppliers.compose( - new Function, Map>() { + new Function, Map>() { @Override - public Map apply(final List datacenters) { + public Map apply(final Iterable datacenters) { // Index available regions by id return Maps.uniqueIndex(datacenters, new Function() { @Override @@ -109,9 +108,9 @@ public Integer apply(final Datacenter input) { } }); } - }, new Supplier>() { + }, new Supplier>() { @Override - public List get() { + public Iterable get() { // Get the list of regions available for the user's tenant return currentEnterprise.get().listAllowedDatacenters(); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWithTasksWrapper.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWithTasksWrapper.java index 741a87d..2207c24 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWithTasksWrapper.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWithTasksWrapper.java @@ -26,7 +26,6 @@ import com.abiquo.model.transport.SingleResourceTransportDto; import com.abiquo.server.core.task.TaskDto; import com.abiquo.server.core.task.TasksDto; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; import com.google.common.primitives.Longs; @@ -43,7 +42,7 @@ protected DomainWithTasksWrapper(final ApiContext context, final T ta super(context, target); } - public List> listTasks() { + public Iterable> listTasks() { TasksDto result = context.getApi().getTaskApi().listTasks(target); List> tasks = Lists.newArrayList(); for (TaskDto dto : result.getCollection()) { @@ -58,6 +57,6 @@ public int compare(final AsyncTask left, final AsyncTask right) { } }.reverse()); - return ImmutableList.copyOf(tasks); + return tasks; } } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWrapper.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWrapper.java index 4e3e728..dbff107 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWrapper.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/DomainWrapper.java @@ -36,6 +36,7 @@ import org.jclouds.abiquo.reference.ValidationErrors; import org.jclouds.http.HttpResponse; import org.jclouds.http.functions.ParseXMLWithJAXB; +import org.jclouds.javax.annotation.Nullable; import org.jclouds.rest.ApiContext; import com.abiquo.model.rest.RESTLink; @@ -45,7 +46,6 @@ import com.abiquo.server.core.task.TaskDto; import com.abiquo.server.core.task.enums.TaskType; import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.reflect.Invokable; import com.google.inject.TypeLiteral; @@ -117,7 +117,7 @@ protected Integer getParentId(final String parentLinkRel) { * Wraps an object in the given wrapper class. */ public static > W wrap( - final ApiContext context, final Class wrapperClass, final T target) { + final ApiContext context, final Class wrapperClass, @Nullable final T target) { if (target == null) { return null; } @@ -135,31 +135,31 @@ protected Integer getParentId(final String parentLinkRel) { /** * Wrap a collection of objects to the given wrapper class. */ - public static > List wrap( - final ApiContext context, final Class wrapperClass, final Iterable targets) { + public static > Iterable wrap( + final ApiContext context, final Class wrapperClass, @Nullable final Iterable targets) { if (targets == null) { return null; } - return ImmutableList.copyOf(transform(targets, new Function() { + return transform(targets, new Function() { @Override public W apply(final T input) { return wrap(context, wrapperClass, input); } - })); + }); } /** * Unwrap a collection of objects. */ - public static > List unwrap( + public static > Iterable unwrap( final Iterable targets) { - return ImmutableList.copyOf(transform(targets, new Function() { + return transform(targets, new Function() { @Override public T apply(final W input) { return input.unwrap(); } - })); + }); } /** diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/PaginatedCollection.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/PaginatedCollection.java new file mode 100644 index 0000000..694a17a --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/PaginatedCollection.java @@ -0,0 +1,160 @@ +/* + * 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.domain; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.collect.PagedIterables.advance; +import static org.jclouds.collect.PagedIterables.onlyPage; + +import java.util.Iterator; +import java.util.List; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.PagedIterable; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.model.rest.RESTLink; +import com.abiquo.model.transport.WrapperDto; +import com.google.common.base.Function; +import com.google.common.base.Optional; + +/** + * This class represents a collection that is paginated. + *

+ * Contains a single page of the collection, and all the information needed to + * fetch the next page on demand. + * + * @author Ignasi Barrera + * + * @see PagedIterable + */ +public class PaginatedCollection> extends IterableWithMarker { + protected final AbiquoApi api; + protected final W delegate; + protected final ParseXMLWithJAXB parser; + + public PaginatedCollection(AbiquoApi api, W delegate, ParseXMLWithJAXB parser) { + this.api = checkNotNull(api, "api must not be null"); + this.delegate = checkNotNull(delegate, "delegate must not be null"); + this.parser = checkNotNull(parser, "parser must not be null"); + } + + @Override + public Iterator iterator() { + return delegate.getCollection().iterator(); + } + + @Override + public Optional nextMarker() { + return Optional. fromNullable(delegate.searchLink("next")); + } + + /** + * Transforms this {@link PaginatedCollection} into a {@link PagedIterable} + * so next the pages can be easily fetched. + * + * @return A PagedIterable that is capable of fetching more pages. + */ + public PagedIterable toPagedIterable() { + return new ToPagedIterable(api, parser).apply(this); + } + + /** + * Returns a function that transforms the PaginatedCollection into a + * {@link PagedIterable}. + *

+ * The PagedIterable will fetch the next pages based on the next + * link of the current object. + *

+ * Subclasses may overwrite this one, to provide a concrete type for the + * parser parameter, so this function can be injected in the different api + * methods and be used as a transformer for the returned collection. + * + * @author Ignasi Barrera + */ + public static class ToPagedIterable> implements + Function, PagedIterable> { + protected final AbiquoApi api; + protected final ParseXMLWithJAXB parser; + + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + this.api = checkNotNull(api, "api must not be null"); + this.parser = checkNotNull(parser, "parser must not be null"); + } + + @Override + public PagedIterable apply(final PaginatedCollection input) { + return input.nextMarker().isPresent() ? advance(input, nextPage(input)) : onlyPage(input); + } + + protected Function> nextPage(final PaginatedCollection input) { + return new Function>() { + @Override + public IterableWithMarker apply(Object marker) { + checkArgument(marker instanceof RESTLink, "Marker must be a RESTLink"); + RESTLink next = RESTLink.class.cast(marker); + + // The Abiquo API does not provide the media types in the + // pagination links, but it will be the same type than the + // current page, so just set it. + next.setType(input.delegate.getMediaType()); + + W nextPage = parser.apply(api.get(next)); + return new PaginatedCollection(api, nextPage, parser); + } + }; + } + + } + + // Delegate methods + + public Integer getTotalSize() { + return delegate.getTotalSize(); + } + + public List getLinks() { + return delegate.getLinks(); + } + + public RESTLink searchLink(String rel) { + return delegate.searchLink(rel); + } + + public List searchLinks(String rel) { + return delegate.searchLinks(rel); + } + + public RESTLink searchLink(String rel, String title) { + return delegate.searchLink(rel, title); + } + + public RESTLink searchLinkByHref(String href) { + return delegate.searchLinkByHref(href); + } + + public Integer getIdFromLink(String rel) { + return delegate.getIdFromLink(rel); + } + + public String getMediaType() { + return delegate.getMediaType(); + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualAppliance.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualAppliance.java index e37b456..01df495 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualAppliance.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualAppliance.java @@ -19,16 +19,17 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.Arrays; -import java.util.List; import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWrapper; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions; import org.jclouds.abiquo.domain.enterprise.Enterprise; import org.jclouds.abiquo.domain.task.AsyncTask; import org.jclouds.abiquo.domain.task.VirtualMachineTask; import org.jclouds.abiquo.reference.ValidationErrors; import org.jclouds.abiquo.reference.rest.ParentLinkName; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.ApiContext; import com.abiquo.model.transport.AcceptedRequestDto; @@ -144,8 +145,9 @@ public VirtualApplianceState getState() { * > http://community.abiquo.com/display/ABI18/Virtual+Machine+Resource# * VirtualMachineResource -RetrievethelistofVirtualMachines. */ - public List listVirtualMachines() { - return listVirtualMachines(VirtualMachineOptions.builder().disablePagination().build()); + public Iterable listVirtualMachines() { + PagedIterable vms = context.getApi().getCloudApi().listVirtualMachines(target); + return wrap(context, VirtualMachine.class, vms.concat()); } /** @@ -157,9 +159,10 @@ public VirtualApplianceState getState() { * > http://community.abiquo.com/display/ABI18/Virtual+Machine+Resource# * VirtualMachineResource -RetrievethelistofVirtualMachines. */ - public List listVirtualMachines(final VirtualMachineOptions options) { - VirtualMachinesWithNodeExtendedDto vms = context.getApi().getCloudApi().listVirtualMachines(target, options); - return wrap(context, VirtualMachine.class, vms.getCollection()); + public Iterable listVirtualMachines(final VirtualMachineOptions options) { + PaginatedCollection vms = context.getApi() + .getCloudApi().listVirtualMachines(target, options); + return wrap(context, VirtualMachine.class, vms.toPagedIterable().concat()); } /** diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenter.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenter.java index c8e03f1..5bbe292 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenter.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenter.java @@ -19,12 +19,12 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.Iterables.find; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWithLimitsWrapper; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.builder.LimitsBuilder; import org.jclouds.abiquo.domain.cloud.options.VirtualMachineTemplateOptions; +import org.jclouds.abiquo.domain.cloud.options.VolumeOptions; import org.jclouds.abiquo.domain.enterprise.Enterprise; import org.jclouds.abiquo.domain.infrastructure.Datacenter; import org.jclouds.abiquo.domain.infrastructure.Tier; @@ -32,19 +32,20 @@ import org.jclouds.abiquo.domain.network.Network; import org.jclouds.abiquo.domain.network.PrivateNetwork; import org.jclouds.abiquo.domain.network.PublicIp; -import org.jclouds.abiquo.domain.network.options.IpOptions; import org.jclouds.abiquo.reference.ValidationErrors; import org.jclouds.abiquo.reference.rest.ParentLinkName; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.ApiContext; import com.abiquo.model.enumerator.HypervisorType; import com.abiquo.model.enumerator.NetworkType; import com.abiquo.model.enumerator.StatefulInclusion; +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.VirtualAppliancesDto; import com.abiquo.server.core.cloud.VirtualDatacenterDto; -import com.abiquo.server.core.infrastructure.network.PublicIpsDto; +import com.abiquo.server.core.infrastructure.network.PublicIpDto; import com.abiquo.server.core.infrastructure.network.VLANNetworkDto; import com.abiquo.server.core.infrastructure.network.VLANNetworksDto; import com.abiquo.server.core.infrastructure.storage.DiskManagementDto; @@ -54,6 +55,7 @@ import com.abiquo.server.core.infrastructure.storage.VolumeManagementDto; import com.abiquo.server.core.infrastructure.storage.VolumesManagementDto; import com.google.common.base.Predicate; +import com.google.common.collect.FluentIterable; /** * Represents a virtual datacenter. @@ -172,7 +174,7 @@ public Enterprise getEnterprise() { * >http://community.abiquo.com/display/ABI20/Virtual+Appliance+Resource * # VirtualApplianceResource-RetrievethelistofVirtualAppliances */ - public List listVirtualAppliances() { + public Iterable listVirtualAppliances() { VirtualAppliancesDto vapps = context.getApi().getCloudApi().listVirtualAppliances(target); return wrap(context, VirtualAppliance.class, vapps.getCollection()); } @@ -200,7 +202,7 @@ public VirtualAppliance getVirtualAppliance(final Integer id) { * > http://community.abiquo.com/display/ABI20/Virtual+Datacenter+ * Resource# VirtualDatacenterResource-Retrieveenabledtiers */ - public List listStorageTiers() { + public Iterable listStorageTiers() { TiersDto tiers = context.getApi().getCloudApi().listStorageTiers(target); return wrap(context, Tier.class, tiers.getCollection()); } @@ -227,9 +229,15 @@ public Tier getStorageTier(final Integer id) { * > http://community.abiquo.com/display/ABI20/Volume+Resource# * VolumeResource- Retrievethelistofvolumes */ - public List listVolumes() { - VolumesManagementDto volumes = context.getApi().getCloudApi().listVolumes(target); - return wrap(context, Volume.class, volumes.getCollection()); + public Iterable listVolumes() { + PagedIterable volumes = context.getApi().getCloudApi().listVolumes(target); + return wrap(context, Volume.class, volumes.concat()); + } + + public Iterable listVolumes(VolumeOptions options) { + PaginatedCollection volumes = context.getApi().getCloudApi() + .listVolumes(target, options); + return wrap(context, Volume.class, volumes.toPagedIterable().concat()); } public Volume getVolume(final Integer id) { @@ -243,7 +251,7 @@ public Volume getVolume(final Integer id) { * > http://community.abiquo.com/display/ABI20/Hard+Disks+Resource# * HardDisksResource- GetthelistofHardDisksofaVirtualDatacenter */ - public List listHardDisks() { + public Iterable listHardDisks() { DisksManagementDto hardDisks = context.getApi().getCloudApi().listHardDisks(target); return wrap(context, HardDisk.class, hardDisks.getCollection()); } @@ -273,7 +281,7 @@ public HardDisk getHardDisk(final Integer id) { * > http://community.abiquo.com/display/ABI20/Private+Network+Resource# * PrivateNetworkResource -RetrievealistofPrivateNetworks */ - public List listPrivateNetworks() { + public Iterable listPrivateNetworks() { VLANNetworksDto networks = context.getApi().getCloudApi().listPrivateNetworks(target); return wrap(context, PrivateNetwork.class, networks.getCollection()); } @@ -283,35 +291,36 @@ public PrivateNetwork getPrivateNetwork(final Integer id) { return wrap(context, PrivateNetwork.class, network); } - public List listAvailableTemplates() { - VirtualMachineTemplatesDto templates = context.getApi().getCloudApi().listAvailableTemplates(target); - - return wrap(context, VirtualMachineTemplate.class, templates.getCollection()); + public Iterable listAvailableTemplates() { + PagedIterable templates = context.getApi().getCloudApi() + .listAvailableTemplates(target); + return wrap(context, VirtualMachineTemplate.class, templates.concat()); } - public List listAvailableTemplates(final VirtualMachineTemplateOptions options) { - VirtualMachineTemplatesDto templates = context.getApi().getCloudApi().listAvailableTemplates(target, options); - - return wrap(context, VirtualMachineTemplate.class, templates.getCollection()); + public Iterable listAvailableTemplates(final VirtualMachineTemplateOptions options) { + PaginatedCollection templates = context.getApi() + .getCloudApi().listAvailableTemplates(target, options); + return wrap(context, VirtualMachineTemplate.class, templates.toPagedIterable().concat()); } public VirtualMachineTemplate getAvailableTemplate(final Integer id) { - VirtualMachineTemplatesDto templates = context.getApi().getCloudApi() + PaginatedCollection templates = context.getApi() + .getCloudApi() .listAvailableTemplates(target, VirtualMachineTemplateOptions.builder().idTemplate(id).build()); - return templates.getCollection().isEmpty() ? null : // - wrap(context, VirtualMachineTemplate.class, templates.getCollection().get(0)); + FluentIterable all = templates.toPagedIterable().concat(); + return wrap(context, VirtualMachineTemplate.class, all.first().orNull()); } public VirtualMachineTemplate getAvailablePersistentTemplate(final Integer id) { - VirtualMachineTemplatesDto templates = context + PaginatedCollection templates = context .getApi() .getCloudApi() .listAvailableTemplates(target, VirtualMachineTemplateOptions.builder().idTemplate(id).persistent(StatefulInclusion.ALL).build()); - return templates.getCollection().isEmpty() ? null : // - wrap(context, VirtualMachineTemplate.class, templates.getCollection().get(0)); + FluentIterable all = templates.toPagedIterable().concat(); + return wrap(context, VirtualMachineTemplate.class, all.first().orNull()); } /** @@ -322,10 +331,9 @@ public VirtualMachineTemplate getAvailablePersistentTemplate(final Integer id) { * VirtualDatacenterResource-ListofPublicIPstopurchasebyVirtualDatacenter * */ - public List listAvailablePublicIps() { - IpOptions options = IpOptions.builder().build(); - PublicIpsDto ips = context.getApi().getCloudApi().listAvailablePublicIps(target, options); - return wrap(context, PublicIp.class, ips.getCollection()); + public Iterable listAvailablePublicIps() { + PagedIterable ips = context.getApi().getCloudApi().listAvailablePublicIps(target); + return wrap(context, PublicIp.class, ips.concat()); } /** @@ -336,10 +344,9 @@ public VirtualMachineTemplate getAvailablePersistentTemplate(final Integer id) { * VirtualDatacenterResource-ListofpurchasedPublicIPsbyVirtualDatacenter * */ - public List listPurchasedPublicIps() { - IpOptions options = IpOptions.builder().build(); - PublicIpsDto ips = context.getApi().getCloudApi().listPurchasedPublicIps(target, options); - return wrap(context, PublicIp.class, ips.getCollection()); + public Iterable listPurchasedPublicIps() { + PagedIterable ips = context.getApi().getCloudApi().listPurchasedPublicIps(target); + return wrap(context, PublicIp.class, ips.concat()); } public void purchasePublicIp(final PublicIp ip) { diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualMachine.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualMachine.java index a0df109..d7caaa4 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualMachine.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualMachine.java @@ -300,19 +300,19 @@ public VirtualMachineTemplate getTemplate() { // Children access - public List listAttachedHardDisks() { + public Iterable listAttachedHardDisks() { refresh(); DisksManagementDto hardDisks = context.getApi().getCloudApi().listAttachedHardDisks(target); return wrap(context, HardDisk.class, hardDisks.getCollection()); } - public List listAttachedVolumes() { + public Iterable listAttachedVolumes() { refresh(); VolumesManagementDto volumes = context.getApi().getCloudApi().listAttachedVolumes(target); return wrap(context, Volume.class, volumes.getCollection()); } - public List> listAttachedNics() { + public Iterable> listAttachedNics() { // The strategy will refresh the vm. There is no need to do it here ListAttachedNics strategy = context.utils().injector().getInstance(ListAttachedNics.class); return ImmutableList.copyOf(strategy.execute(this)); diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualMachineTemplate.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualMachineTemplate.java index b3822d4..6cefa16 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualMachineTemplate.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/cloud/VirtualMachineTemplate.java @@ -19,7 +19,6 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.Date; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -204,7 +203,7 @@ public Datacenter getDatacenter() { * ConversionResource- ListConversions * @return all the conversions of the virtual machine template */ - public List listConversions() { + public Iterable listConversions() { ConversionsDto convs = context.getApi().getVirtualMachineTemplateApi().listConversions(target); return wrap(context, Conversion.class, convs.getCollection()); } @@ -224,7 +223,7 @@ public Datacenter getDatacenter() { * @return all the conversions of the virtual machine template applying the * constrains */ - public List listConversions(final HypervisorType hypervisor, final ConversionState state) { + public Iterable listConversions(final HypervisorType hypervisor, final ConversionState state) { ConversionsDto convs = context .getApi() .getVirtualMachineTemplateApi() diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Enterprise.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Enterprise.java index c3e1c12..b198858 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Enterprise.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Enterprise.java @@ -16,10 +16,9 @@ */ package org.jclouds.abiquo.domain.enterprise; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWithLimitsWrapper; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.builder.LimitsBuilder; import org.jclouds.abiquo.domain.cloud.VirtualAppliance; import org.jclouds.abiquo.domain.cloud.VirtualDatacenter; @@ -32,6 +31,7 @@ import org.jclouds.abiquo.domain.network.ExternalNetwork; import org.jclouds.abiquo.domain.network.UnmanagedNetwork; import org.jclouds.abiquo.strategy.enterprise.ListVirtualMachineTemplates; +import org.jclouds.collect.PagedIterable; import org.jclouds.http.HttpResponse; import org.jclouds.http.functions.ParseXMLWithJAXB; import org.jclouds.rest.ApiContext; @@ -40,7 +40,6 @@ import com.abiquo.server.core.appslibrary.TemplateDefinitionListDto; import com.abiquo.server.core.appslibrary.TemplateDefinitionListsDto; import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto; -import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto; import com.abiquo.server.core.cloud.VirtualAppliancesDto; import com.abiquo.server.core.cloud.VirtualDatacentersDto; import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto; @@ -55,7 +54,6 @@ import com.abiquo.server.core.infrastructure.MachinesDto; import com.abiquo.server.core.infrastructure.network.VLANNetworksDto; import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.inject.TypeLiteral; @@ -132,7 +130,7 @@ public void update() { * RetrievealistofvitualdatacentersbyanEnterprise * @return List of virtual datacenters in this enterprise. */ - public List listVirtualDatacenters() { + public Iterable listVirtualDatacenters() { VirtualDatacentersDto dto = context.getApi().getEnterpriseApi().listVirtualDatacenters(target); return wrap(context, VirtualDatacenter.class, dto.getCollection()); } @@ -147,7 +145,7 @@ public void update() { * TemplateDefinitionListResource-Retrievealltemplatedefinitionlists * @return List of template definition lists of the enterprise. */ - public List listTemplateDefinitionLists() { + public Iterable listTemplateDefinitionLists() { TemplateDefinitionListsDto dto = context.getApi().getEnterpriseApi().listTemplateDefinitionLists(target); return wrap(context, TemplateDefinitionList.class, dto.getCollection()); } @@ -180,7 +178,7 @@ public TemplateDefinitionList getTemplateDefinitionList(final Integer id) { * DatacenterLimitsResource-Retrievelimitsbyenterprise * @return List of datacenter limits by enterprise. */ - public List listLimits() { + public Iterable listLimits() { DatacentersLimitsDto dto = context.getApi().getEnterpriseApi().listLimits(this.unwrap()); return wrap(context, Limits.class, dto.getCollection()); } @@ -210,10 +208,9 @@ public EnterpriseProperties getEnterpriseProperties() { * Retrievealistofusers * @return List of users of this enterprise. */ - public List listUsers() { - // Delegate the retrieval of users to the options-enabled version of the - // method, with pagination disabled - return listUsers(UserOptions.builder().disablePagination().build()); + public Iterable listUsers() { + PagedIterable dto = context.getApi().getEnterpriseApi().listUsers(target); + return wrap(context, User.class, dto.concat()); } /** @@ -226,13 +223,12 @@ public EnterpriseProperties getEnterpriseProperties() { * > * http://community.abiquo.com/display/ABI20/UserResource#UserResource- * Retrievealistofusers - * @return List of users of this enterprise, according to the specified - * pagination options + * @return List of users of this enterprise, according to the specified + * pagination options */ - public List listUsers(final UserOptions options) { - UsersDto dto = context.getApi().getEnterpriseApi().listUsers( - this.unwrap(), options); - return wrap(context, User.class, dto.getCollection()); + public Iterable listUsers(final UserOptions options) { + PaginatedCollection dto = context.getApi().getEnterpriseApi().listUsers(target, options); + return wrap(context, User.class, dto.toPagedIterable().concat()); } /** @@ -257,15 +253,15 @@ public User getUser(final Integer id) { * * @return List of roles by this enterprise. */ - public List listRoles() { + public Iterable listRoles() { RolesDto dto = context.getApi().getAdminApi().listRoles(target); return wrap(context, Role.class, dto.getCollection()); } - public List listTemplatesInRepository(final Datacenter datacenter) { - VirtualMachineTemplatesDto dto = context.getApi().getVirtualMachineTemplateApi() + public Iterable listTemplatesInRepository(final Datacenter datacenter) { + PagedIterable templates = context.getApi().getVirtualMachineTemplateApi() .listVirtualMachineTemplates(target.getId(), datacenter.getId()); - return wrap(context, VirtualMachineTemplate.class, dto.getCollection()); + return wrap(context, VirtualMachineTemplate.class, templates.concat()); } public VirtualMachineTemplate getTemplateInRepository(final Datacenter datacenter, final Integer id) { @@ -274,12 +270,12 @@ public VirtualMachineTemplate getTemplateInRepository(final Datacenter datacente return wrap(context, VirtualMachineTemplate.class, template); } - public List listTemplates() { + public Iterable listTemplates() { ListVirtualMachineTemplates strategy = context.utils().injector().getInstance(ListVirtualMachineTemplates.class); - return ImmutableList.copyOf(strategy.execute(this)); + return strategy.execute(this); } - public List listAllowedDatacenters() { + public Iterable listAllowedDatacenters() { DatacentersDto datacenters = context.getApi().getEnterpriseApi().listAllowedDatacenters(target.getId()); return wrap(context, Datacenter.class, datacenters.getCollection()); } @@ -290,7 +286,7 @@ public VirtualMachineTemplate getTemplateInRepository(final Datacenter datacente * > http://community.abiquo.com/display/ABI20/Enterprise+Resource# * EnterpriseResource- Getthelistofexternalnetworks */ - public List listExternalNetworks(final Datacenter datacenter) { + public Iterable listExternalNetworks(final Datacenter datacenter) { DatacenterLimitsDto limitForDatacenter = getLimits(datacenter); HttpResponse response = context.getApi().get(limitForDatacenter.searchLink("externalnetworks")); @@ -301,7 +297,7 @@ public VirtualMachineTemplate getTemplateInRepository(final Datacenter datacente return wrap(context, ExternalNetwork.class, parser.apply(response).getCollection()); } - public List listUnmanagedNetworks(final Datacenter datacenter) { + public Iterable listUnmanagedNetworks(final Datacenter datacenter) { DatacenterLimitsDto limitForDatacenter = getLimits(datacenter); // The "rel" for the unmanaged networks is the same than the one used for @@ -324,7 +320,7 @@ public VirtualMachineTemplate getTemplateInRepository(final Datacenter datacente * RetrievethelistofvirtualappliancesbyanEnterprise * @return List of virtual appliances by this enterprise. */ - public List listVirtualAppliances() { + public Iterable listVirtualAppliances() { VirtualAppliancesDto virtualAppliances = context.getApi().getEnterpriseApi().listVirtualAppliances(target); return wrap(context, VirtualAppliance.class, virtualAppliances.getCollection()); } @@ -338,12 +334,12 @@ public VirtualMachineTemplate getTemplateInRepository(final Datacenter datacente * EnterpriseResource- RetrievealistofvirtualmachinesbyanEnterprise * @return List of virtual machines by this enterprise. */ - public List listVirtualMachines() { + public Iterable listVirtualMachines() { VirtualMachinesWithNodeExtendedDto machines = context.getApi().getEnterpriseApi().listVirtualMachines(target); return wrap(context, VirtualMachine.class, machines.getCollection()); } - public List listReservedMachines() { + public Iterable listReservedMachines() { MachinesDto machines = context.getApi().getEnterpriseApi().listReservedMachines(target); return wrap(context, Machine.class, machines.getCollection()); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Role.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Role.java index ba9b279..b1271a4 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Role.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Role.java @@ -126,9 +126,8 @@ private void addPrivilege(final Privilege privilege) { * > http://community.abiquo.com/display/ABI20/Roles+Resource# * RolesResource- RetrievealistofprivilegesfromaRole */ - public List listPrivileges() { + public Iterable listPrivileges() { PrivilegesDto dto = context.getApi().getAdminApi().listPrivileges(target); - return wrap(context, Privilege.class, dto.getCollection()); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionList.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionList.java index 48b9089..1afaf8e 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionList.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/TemplateDefinitionList.java @@ -18,8 +18,6 @@ import static com.google.common.collect.Iterables.filter; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWrapper; import org.jclouds.abiquo.domain.infrastructure.Datacenter; @@ -28,7 +26,6 @@ import com.abiquo.am.model.TemplatesStateDto; import com.abiquo.server.core.appslibrary.TemplateDefinitionListDto; import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableList; /** * Adds high level functionality to {@link TemplateDefinitionListDto}. A @@ -111,7 +108,7 @@ public void update() { * TemplateDefinitionListResource# TemplateDefinitionListResource- * Retrievealistofthestatusofalltemplatestatuslist */ - public List listStatus(final Datacenter datacenter) { + public Iterable listStatus(final Datacenter datacenter) { TemplatesStateDto states = context.getApi().getEnterpriseApi() .listTemplateListStatus(target, datacenter.unwrap()); return wrap(context, TemplateState.class, states.getCollection()); @@ -134,8 +131,8 @@ public void update() { * TemplateDefinitionListResource# TemplateDefinitionListResource- * Retrievealistofthestatusofalltemplatestatuslist */ - public List listStatus(final Predicate filter, final Datacenter datacenter) { - return ImmutableList.copyOf(filter(listStatus(datacenter), filter)); + public Iterable listStatus(final Predicate filter, final Datacenter datacenter) { + return filter(listStatus(datacenter), filter); } // Builder diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/User.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/User.java index 4519f5c..dc9d0f6 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/User.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/User.java @@ -35,7 +35,6 @@ import com.abiquo.server.core.enterprise.RoleDto; import com.abiquo.server.core.enterprise.UserDto; import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; /** @@ -112,7 +111,7 @@ public void update() { target = context.getApi().getEnterpriseApi().updateUser(target); } - public List listPermittedVirtualDatacenters() { + public Iterable listPermittedVirtualDatacenters() { List ids = extractAvailableDatacenters(); // null value means all virtual datacenters all allowed @@ -122,7 +121,7 @@ public void update() { ListVirtualDatacenters listVirtualDatacenters = context.utils().injector() .getInstance(ListVirtualDatacenters.class); - return ImmutableList.copyOf(listVirtualDatacenters.execute(ids)); + return listVirtualDatacenters.execute(ids); } /** @@ -175,7 +174,7 @@ public Role getRole() { * > http://community.abiquo.com/display/ABI20/User+resource# * Userresource- Retrievethelistofvirtualmachinesbyuser */ - public List listMachines() { + public Iterable listMachines() { VirtualMachinesWithNodeExtendedDto machines = context.getApi().getEnterpriseApi().listVirtualMachines(target); return wrap(context, VirtualMachine.class, machines.getCollection()); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/options/EnterpriseOptions.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/options/EnterpriseOptions.java index 4145ba1..b1880ee 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/options/EnterpriseOptions.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/options/EnterpriseOptions.java @@ -18,11 +18,13 @@ import org.jclouds.abiquo.domain.options.FilterOptions.BaseFilterOptionsBuilder; import org.jclouds.http.options.BaseHttpRequestOptions; +import org.jclouds.rest.annotations.SinceApiVersion; /** * Available options to query enterprises. * * @author Francesc Montserrat + * @author Ignasi Barrera */ public class EnterpriseOptions extends BaseHttpRequestOptions { public static Builder builder() { @@ -39,43 +41,23 @@ protected Object clone() throws CloneNotSupportedException { public static class Builder extends BaseFilterOptionsBuilder { private String idPricingTemplate; - private Boolean included; - - private String filter; - - private Integer page; - - private Integer results; + private String idScope; - private Boolean network; + private Boolean included; public Builder pricingTemplate(final String idPricingTemplate) { this.idPricingTemplate = idPricingTemplate; return this; } - public Builder included(final boolean included) { - this.included = included; - return this; - } - - public Builder filter(final String filter) { - this.filter = filter; - return this; - } - - public Builder network(final boolean network) { - this.network = network; - return this; - } - - public Builder page(final int page) { - this.page = page; + @SinceApiVersion("2.3") + public Builder scope(final String scope) { + this.idScope = scope; return this; } - public Builder results(final int results) { - this.results = results; + public Builder included(final boolean included) { + this.included = included; return this; } @@ -86,24 +68,12 @@ public EnterpriseOptions build() { options.queryParameters.put("idPricingTemplate", String.valueOf(idPricingTemplate)); } - if (included != null) { - options.queryParameters.put("included", String.valueOf(included)); - } - - if (filter != null) { - options.queryParameters.put("filter", String.valueOf(filter)); - } - - if (page != null) { - options.queryParameters.put("page", String.valueOf(page)); + if (idScope != null) { + options.queryParameters.put("idScope", String.valueOf(idScope)); } - if (results != null) { - options.queryParameters.put("numResults", String.valueOf(results)); - } - - if (network != null) { - options.queryParameters.put("network", String.valueOf(network)); + if (included != null) { + options.queryParameters.put("included", String.valueOf(included)); } return addFilterOptions(options); diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/options/UserOptions.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/options/UserOptions.java index 3848bca..5512bef 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/options/UserOptions.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/options/UserOptions.java @@ -54,17 +54,5 @@ public Builder limit(int limit) { public UserOptions build() { return addFilterOptions(this.options); } - - // FIXME: This method is overriden to change its behavior until the - // issue ABICLOUDPREMIUM-5927 in Abiquo isissue is solved ( - // (http://jira.abiquo.com/browse/ABICLOUDPREMIUM-5927) - // Once its fixed, this method should be deleted - @Override - public Builder disablePagination() { - // Unlike in its parent method, disabling pagination means to set - // the limit attribute to the biggest value possible - this.limit = Integer.MAX_VALUE; - return (Builder) this; - } } } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Datacenter.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Datacenter.java index 25f8664..4e28d13 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Datacenter.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Datacenter.java @@ -19,8 +19,6 @@ import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Iterables.transform; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWrapper; import org.jclouds.abiquo.domain.cloud.VirtualMachineTemplate; @@ -34,6 +32,7 @@ import org.jclouds.abiquo.domain.network.PrivateNetwork; import org.jclouds.abiquo.domain.network.options.NetworkOptions; import org.jclouds.abiquo.predicates.NetworkServiceTypePredicates; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.ApiContext; import com.abiquo.model.enumerator.HypervisorType; @@ -43,7 +42,6 @@ import com.abiquo.model.enumerator.RemoteServiceType; import com.abiquo.model.enumerator.VlanTagAvailabilityType; import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto; -import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto; import com.abiquo.server.core.cloud.HypervisorTypeDto; import com.abiquo.server.core.cloud.HypervisorTypesDto; import com.abiquo.server.core.enterprise.DatacentersLimitsDto; @@ -65,7 +63,6 @@ import com.abiquo.server.core.infrastructure.storage.StorageDevicesMetadataDto; import com.abiquo.server.core.infrastructure.storage.TiersDto; import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; /** * Adds high level functionality to {@link DatacenterDto}. @@ -172,7 +169,7 @@ public VlanTagAvailabilityType checkTagAvailability(final int tag) { * - RetrievealistofRacks * @return List of unmanaged racks in this datacenter. */ - public List listRacks() { + public Iterable listRacks() { RacksDto racks = context.getApi().getInfrastructureApi().listRacks(target); return wrap(context, Rack.class, racks.getCollection()); } @@ -205,7 +202,7 @@ public Rack getRack(final Integer id) { * information for the storage devices, such as the management and * iscsi ports, or the default credentials to access the device. */ - public List listSupportedStorageDevices() { + public Iterable listSupportedStorageDevices() { StorageDevicesMetadataDto devices = context.getApi().getInfrastructureApi().listSupportedStorageDevices(target); return wrap(context, StorageDeviceMetadata.class, devices.getCollection()); } @@ -219,7 +216,7 @@ public Rack getRack(final Integer id) { * StorageDeviceResource- Retrievethelistofstoragedevices * @return List of storage devices in this datacenter. */ - public List listStorageDevices() { + public Iterable listStorageDevices() { StorageDevicesDto devices = context.getApi().getInfrastructureApi().listStorageDevices(target); return wrap(context, StorageDevice.class, devices.getCollection()); } @@ -248,7 +245,7 @@ public StorageDevice getStorageDevice(final Integer id) { * * @return List of network services in this datacenter. */ - public List listNetworkServiceTypes() { + public Iterable listNetworkServiceTypes() { NetworkServiceTypesDto dtos = context.getApi().getInfrastructureApi().listNetworkServiceTypes(target); return wrap(context, NetworkServiceType.class, dtos.getCollection()); } @@ -286,7 +283,7 @@ public NetworkServiceType defaultNetworkServiceType() { * RemoteServiceResource- RetrievealistofRemoteServices * @return List of remote services in this datacenter. */ - public List listRemoteServices() { + public Iterable listRemoteServices() { RemoteServicesDto remoteServices = context.getApi().getInfrastructureApi().listRemoteServices(target); return wrap(context, RemoteService.class, remoteServices.getCollection()); } @@ -316,7 +313,7 @@ private void createRemoteService(final RemoteServiceType type) { * DatacenterResource- Retrievelimitsbydatacenter * @return List of datacenter limits by all enterprises. */ - public List listLimits() { + public Iterable listLimits() { DatacentersLimitsDto dto = context.getApi().getInfrastructureApi().listLimits(this.unwrap()); return DomainWrapper.wrap(context, Limits.class, dto.getCollection()); } @@ -331,7 +328,7 @@ private void createRemoteService(final RemoteServiceType type) { * Retrievethelistoftiers * @return List of tiers in this datacenter. */ - public List listTiers() { + public Iterable listTiers() { TiersDto dto = context.getApi().getInfrastructureApi().listTiers(this.unwrap()); return DomainWrapper.wrap(context, Tier.class, dto.getCollection()); } @@ -347,7 +344,7 @@ private void createRemoteService(final RemoteServiceType type) { * @return List of public, external and unmanaged networks in this * datacenter. */ - public List> listNetworks() { + public Iterable> listNetworks() { VLANNetworksDto networks = context.getApi().getInfrastructureApi().listNetworks(target); return Network.wrapNetworks(context, networks.getCollection()); } @@ -363,7 +360,7 @@ private void createRemoteService(final RemoteServiceType type) { * PublicNetworkResource- Getthelistofpublicnetworks * @return List of networks of this datacenter matching the given type. */ - public List> listNetworks(final NetworkType type) { + public Iterable> listNetworks(final NetworkType type) { NetworkOptions options = NetworkOptions.builder().type(type).build(); VLANNetworksDto networks = context.getApi().getInfrastructureApi().listNetworks(target, options); return Network.wrapNetworks(context, networks.getCollection()); @@ -424,18 +421,18 @@ public HypervisorType getHypervisorType(final String ip) { * DatacenterResource- Retrieveavailablehypervisortypes * @return List of available hypervisor types in the datacenter. */ - public List listAvailableHypervisors() { + public Iterable listAvailableHypervisors() { HypervisorTypesDto types = context.getApi().getInfrastructureApi().getHypervisorTypes(target); return getHypervisorTypes(types); } - private List getHypervisorTypes(final HypervisorTypesDto dtos) { - return ImmutableList.copyOf(transform(dtos.getCollection(), new Function() { + private Iterable getHypervisorTypes(final HypervisorTypesDto dtos) { + return transform(dtos.getCollection(), new Function() { @Override public HypervisorType apply(HypervisorTypeDto input) { return HypervisorType.fromId(input.getId()); } - })); + }); } /** @@ -519,7 +516,7 @@ public Machine discoverSingleMachine(final String ip, final HypervisorType hyper * > http://community.abiquo.com/display/ABI20/DatacenterResource# * DatacenterResource- Retrievealistofremotemachineinformation */ - public List discoverMultipleMachines(final String ipFrom, final String ipTo, + public Iterable discoverMultipleMachines(final String ipFrom, final String ipTo, final HypervisorType hypervisorType, final String user, final String password) { return discoverMultipleMachines(ipFrom, ipTo, hypervisorType, user, password, hypervisorType.defaultPort); } @@ -547,7 +544,7 @@ public Machine discoverSingleMachine(final String ip, final HypervisorType hyper * > http://community.abiquo.com/display/ABI20/DatacenterResource# * DatacenterResource- Retrievealistofremotemachineinformation */ - public List discoverMultipleMachines(final String ipFrom, final String ipTo, + public Iterable discoverMultipleMachines(final String ipFrom, final String ipTo, final HypervisorType hypervisorType, final String user, final String password, final int port) { MachinesDto dto = context .getApi() @@ -687,10 +684,10 @@ public MachineIpmiState checkMachineIpmiState(final String ip, final String user * @return List of virtual machine templates in the repository of this * datacenter. */ - public List listTemplatesInRepository(final Enterprise enterprise) { - VirtualMachineTemplatesDto dto = context.getApi().getVirtualMachineTemplateApi() + public Iterable listTemplatesInRepository(final Enterprise enterprise) { + PagedIterable templates = context.getApi().getVirtualMachineTemplateApi() .listVirtualMachineTemplates(enterprise.getId(), target.getId()); - return wrap(context, VirtualMachineTemplate.class, dto.getCollection()); + return wrap(context, VirtualMachineTemplate.class, templates.concat()); } /** diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Machine.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Machine.java index dd851a8..102f7d4 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Machine.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Machine.java @@ -17,6 +17,7 @@ package org.jclouds.abiquo.domain.infrastructure; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.ImmutableList.copyOf; import java.util.List; @@ -138,11 +139,11 @@ public Rack getRack() { // Children access - public List getDatastores() { + public Iterable getDatastores() { return wrap(context, Datastore.class, target.getDatastores().getCollection()); } - public List getNetworkInterfaces() { + public Iterable getNetworkInterfaces() { return wrap(context, NetworkInterface.class, target.getNetworkInterfaces().getCollection()); } @@ -156,7 +157,7 @@ public Rack getRack() { * MachineResource- * Retrievethelistofvirtualmachinesbymachine'shypervisor */ - public List listVirtualMachines() { + public Iterable listVirtualMachines() { MachineOptions options = MachineOptions.builder().sync(false).build(); VirtualMachinesWithNodeExtendedDto vms = context.getApi().getInfrastructureApi() .listVirtualMachinesByMachine(target, options); @@ -180,7 +181,7 @@ public VirtualMachine getVirtualMachine(final Integer virtualMachineId) { * MachineResource- * Retrievethelistofvirtualmachinesbymachine'shypervisor */ - public List listRemoteVirtualMachines() { + public Iterable listRemoteVirtualMachines() { MachineOptions options = MachineOptions.builder().sync(true).build(); VirtualMachinesWithNodeExtendedDto vms = context.getApi().getInfrastructureApi() .listVirtualMachinesByMachine(target, options); @@ -430,11 +431,11 @@ public Machine build() { dto.setState(state); DatastoresDto datastoresDto = new DatastoresDto(); - datastoresDto.getCollection().addAll(unwrap(datastores)); + datastoresDto.getCollection().addAll(copyOf(unwrap(datastores))); dto.setDatastores(datastoresDto); NetworkInterfacesDto networkInterfacesDto = new NetworkInterfacesDto(); - networkInterfacesDto.getCollection().addAll(unwrap(networkInterfaces)); + networkInterfacesDto.getCollection().addAll(copyOf(unwrap(networkInterfaces))); dto.setNetworkInterfaces(networkInterfacesDto); Machine machine = new Machine(context, dto); @@ -533,7 +534,7 @@ public Integer getVirtualRamUsedInMb() { public void setDatastores(final List datastores) { DatastoresDto datastoresDto = new DatastoresDto(); - datastoresDto.getCollection().addAll(DomainWrapper.unwrap(datastores)); + datastoresDto.getCollection().addAll(copyOf(unwrap(datastores))); target.setDatastores(datastoresDto); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Rack.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Rack.java index d8f31c2..0c214e7 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Rack.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Rack.java @@ -18,8 +18,6 @@ import static com.google.common.base.Preconditions.checkNotNull; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWrapper; import org.jclouds.abiquo.reference.ValidationErrors; @@ -127,7 +125,7 @@ public Datacenter getDatacenter() { * > http://community.abiquo.com/display/ABI20/MachineResource# * MachineResource- RetrievealistofMachines */ - public List listMachines() { + public Iterable listMachines() { MachinesDto machines = context.getApi().getInfrastructureApi().listMachines(target); return wrap(context, Machine.class, machines.getCollection()); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/StorageDevice.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/StorageDevice.java index 166cf82..bfcead3 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/StorageDevice.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/StorageDevice.java @@ -18,8 +18,6 @@ import static com.google.common.base.Preconditions.checkNotNull; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWrapper; import org.jclouds.abiquo.domain.infrastructure.options.StoragePoolOptions; @@ -121,11 +119,11 @@ public Datacenter getDatacenter() { * StoragePoolResource- Retrievestoragepools * @return Synchronized list of storage pools in this device. */ - public List listRemoteStoragePools() { + public Iterable listRemoteStoragePools() { StoragePoolsDto storagePools = context.getApi().getInfrastructureApi() .listStoragePools(target, StoragePoolOptions.builder().sync(true).build()); - List storagePoolList = wrap(context, StoragePool.class, storagePools.getCollection()); + Iterable storagePoolList = wrap(context, StoragePool.class, storagePools.getCollection()); for (StoragePool storagePool : storagePoolList) { storagePool.storageDevice = this; @@ -144,7 +142,7 @@ public Datacenter getDatacenter() { * StoragePoolResource- Retrievestoragepools * @return Unsynchronized list of storage pools in this device. */ - public List listStoragePools() { + public Iterable listStoragePools() { StoragePoolsDto storagePools = context.getApi().getInfrastructureApi() .listStoragePools(target, StoragePoolOptions.builder().sync(false).build()); return wrap(context, StoragePool.class, storagePools.getCollection()); @@ -177,7 +175,7 @@ public StoragePool getStoragePool(final String id) { * Retrievethelistoftiers * @return List of tiers in the datacenter using this device. */ - public List listTiersFromDatacenter() { + public Iterable listTiersFromDatacenter() { DatacenterDto datacenter; if (this.datacenter == null) { diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Tier.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Tier.java index 0bc615a..190b81f 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Tier.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/infrastructure/Tier.java @@ -16,8 +16,6 @@ */ package org.jclouds.abiquo.domain.infrastructure; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWrapper; import org.jclouds.abiquo.reference.rest.ParentLinkName; @@ -73,7 +71,7 @@ public void update() { * StoragePoolResource- Retrievestoragepools * @return List of storage pools in this tier. */ - public List listStoragePools() { + public Iterable listStoragePools() { StoragePoolsDto storagePools = context.getApi().getInfrastructureApi().listStoragePools(target); return wrap(context, StoragePool.class, storagePools.getCollection()); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/ExternalNetwork.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/ExternalNetwork.java index e6c5f05..dd10ca4 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/ExternalNetwork.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/ExternalNetwork.java @@ -18,14 +18,14 @@ import static com.google.common.base.Preconditions.checkNotNull; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.enterprise.Enterprise; import org.jclouds.abiquo.domain.infrastructure.Datacenter; import org.jclouds.abiquo.domain.network.options.IpOptions; import org.jclouds.abiquo.reference.ValidationErrors; import org.jclouds.abiquo.reference.rest.ParentLinkName; +import org.jclouds.collect.PagedIterable; import org.jclouds.http.HttpResponse; import org.jclouds.http.functions.ParseXMLWithJAXB; import org.jclouds.rest.ApiContext; @@ -98,16 +98,17 @@ public void update() { target = context.getApi().getInfrastructureApi().updateNetwork(target); } - /** - * @see API: http://community.abiquo.com/display/ABI20/Public+IPs+Resource# - * PublicIPsResource- ReturnthelistofIPsforaPublicNetwork - */ @Override - public List listIps(final IpOptions options) { - ExternalIpsDto ips = context.getApi().getInfrastructureApi().listExternalIps(target, options); - return wrap(context, ExternalIp.class, ips.getCollection()); + public Iterable listIps() { + PagedIterable ips = context.getApi().getInfrastructureApi().listExternalIps(target); + return wrap(context, ExternalIp.class, ips.concat()); + } + + @Override + public Iterable listIps(final IpOptions options) { + PaginatedCollection ips = context.getApi().getInfrastructureApi() + .listExternalIps(target, options); + return wrap(context, ExternalIp.class, ips.toPagedIterable().concat()); } @Override diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/Network.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/Network.java index 0f1a4e7..f59c7f0 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/Network.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/Network.java @@ -32,7 +32,6 @@ import com.abiquo.model.enumerator.NetworkType; import com.abiquo.server.core.infrastructure.network.VLANNetworkDto; import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; /** * Adds generic high level functionality to {@link VLANNetworkDto}. @@ -56,17 +55,14 @@ protected Network(final ApiContext context, final VLANNetworkDto targ public abstract void delete(); - public abstract List listIps(IpOptions options); + public abstract Iterable listIps(); - public abstract T getIp(Integer id); + public abstract Iterable listIps(IpOptions options); - public List listIps() { - // Disable pagination by default - return listIps(IpOptions.builder().disablePagination().build()); - } + public abstract T getIp(Integer id); - public List listUnusedIps() { - return ImmutableList.copyOf(filter(listIps(), IpPredicates. notUsed())); + public Iterable listUnusedIps() { + return filter(listIps(), IpPredicates. notUsed()); } // Builder @@ -302,12 +298,12 @@ public String toString() { return network; } - public static List> wrapNetworks(final ApiContext context, final List dtos) { - return ImmutableList.copyOf(transform(dtos, new Function>() { + public static Iterable> wrapNetworks(final ApiContext context, final List dtos) { + return transform(dtos, new Function>() { @Override public Network apply(VLANNetworkDto input) { return wrapNetwork(context, input); } - })); + }); } } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/PrivateNetwork.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/PrivateNetwork.java index 531a12c..4d411f5 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/PrivateNetwork.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/PrivateNetwork.java @@ -16,11 +16,11 @@ */ package org.jclouds.abiquo.domain.network; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.cloud.VirtualDatacenter; import org.jclouds.abiquo.domain.network.options.IpOptions; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.ApiContext; import com.abiquo.model.enumerator.NetworkType; @@ -84,24 +84,26 @@ public void update() { target = context.getApi().getCloudApi().updatePrivateNetwork(target); } - /** - * @see API: http://community.abiquo.com/display/ABI20/Private+Network+Resource# - * PrivateNetworkResource -RetrievethelistofIPSofthePrivateNetwork - */ @Override - public List listIps(final IpOptions options) { - PrivateIpsDto ips = context.getApi().getCloudApi().listPrivateNetworkIps(target, options); - return wrap(context, PrivateIp.class, ips.getCollection()); + public Iterable listIps() { + PagedIterable ips = context.getApi().getCloudApi().listPrivateNetworkIps(target); + return wrap(context, PrivateIp.class, ips.concat()); + } + + @Override + public Iterable listIps(final IpOptions options) { + PaginatedCollection ips = context.getApi().getCloudApi() + .listPrivateNetworkIps(target, options); + return wrap(context, PrivateIp.class, ips.toPagedIterable().concat()); } // Override to apply the filter in the server side @Override - public List listUnusedIps() { - IpOptions options = IpOptions.builder().disablePagination().free(true).build(); - PrivateIpsDto ips = context.getApi().getCloudApi().listPrivateNetworkIps(target, options); - return wrap(context, PrivateIp.class, ips.getCollection()); + public Iterable listUnusedIps() { + IpOptions options = IpOptions.builder().free(true).build(); + PaginatedCollection ips = context.getApi().getCloudApi() + .listPrivateNetworkIps(target, options); + return wrap(context, PrivateIp.class, ips.toPagedIterable().concat()); } @Override diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/PublicNetwork.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/PublicNetwork.java index e1c1dce..aa3f562 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/PublicNetwork.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/PublicNetwork.java @@ -18,13 +18,13 @@ import static com.google.common.base.Preconditions.checkNotNull; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.infrastructure.Datacenter; import org.jclouds.abiquo.domain.network.options.IpOptions; import org.jclouds.abiquo.reference.ValidationErrors; import org.jclouds.abiquo.reference.rest.ParentLinkName; +import org.jclouds.collect.PagedIterable; import org.jclouds.http.HttpResponse; import org.jclouds.http.functions.ParseXMLWithJAXB; import org.jclouds.rest.ApiContext; @@ -92,16 +92,17 @@ public void update() { target = context.getApi().getInfrastructureApi().updateNetwork(target); } - /** - * @see API: http://community.abiquo.com/display/ABI20/Public+IPs+Resource# - * PublicIPsResource- ReturnthelistofIPsforaPublicNetwork - */ @Override - public List listIps(final IpOptions options) { - PublicIpsDto ips = context.getApi().getInfrastructureApi().listPublicIps(target, options); - return wrap(context, PublicIp.class, ips.getCollection()); + public Iterable listIps() { + PagedIterable ips = context.getApi().getInfrastructureApi().listPublicIps(target); + return wrap(context, PublicIp.class, ips.concat()); + } + + @Override + public Iterable listIps(final IpOptions options) { + PaginatedCollection ips = context.getApi().getInfrastructureApi() + .listPublicIps(target, options); + return wrap(context, PublicIp.class, ips.toPagedIterable().concat()); } @Override diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/UnmanagedNetwork.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/UnmanagedNetwork.java index 15f6bb3..6de0a29 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/network/UnmanagedNetwork.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/network/UnmanagedNetwork.java @@ -18,14 +18,14 @@ import static com.google.common.base.Preconditions.checkNotNull; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.enterprise.Enterprise; import org.jclouds.abiquo.domain.infrastructure.Datacenter; import org.jclouds.abiquo.domain.network.options.IpOptions; import org.jclouds.abiquo.reference.ValidationErrors; import org.jclouds.abiquo.reference.rest.ParentLinkName; +import org.jclouds.collect.PagedIterable; import org.jclouds.http.HttpResponse; import org.jclouds.http.functions.ParseXMLWithJAXB; import org.jclouds.rest.ApiContext; @@ -98,16 +98,17 @@ public void update() { target = context.getApi().getInfrastructureApi().updateNetwork(target); } - /** - * @see API: http://community.abiquo.com/display/ABI20/Public+IPs+Resource# - * PublicIPsResource- ReturnthelistofIPsforaPublicNetwork - */ @Override - public List listIps(final IpOptions options) { - UnmanagedIpsDto ips = context.getApi().getInfrastructureApi().listUnmanagedIps(target, options); - return wrap(context, UnmanagedIp.class, ips.getCollection()); + public Iterable listIps() { + PagedIterable ips = context.getApi().getInfrastructureApi().listUnmanagedIps(target); + return wrap(context, UnmanagedIp.class, ips.concat()); + } + + @Override + public Iterable listIps(final IpOptions options) { + PaginatedCollection ips = context.getApi().getInfrastructureApi() + .listUnmanagedIps(target, options); + return wrap(context, UnmanagedIp.class, ips.toPagedIterable().concat()); } @Override diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/options/FilterOptions.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/options/FilterOptions.java index 2bcf022..c8cfc45 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/options/FilterOptions.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/options/FilterOptions.java @@ -76,21 +76,11 @@ public T orderBy(final String by) { return (T) this; } - public T ascendant(final boolean asc) { + public T asc(final boolean asc) { this.asc = asc; return (T) this; } - public T descendant(final boolean desc) { - this.asc = !desc; - return (T) this; - } - - public T disablePagination() { - this.limit = 0; - return (T) this; - } - protected O addFilterOptions(final O options) { Multimap queryParameters = options.buildQueryParameters(); diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/task/AsyncTask.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/task/AsyncTask.java index fca2827..1594184 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/task/AsyncTask.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/task/AsyncTask.java @@ -18,8 +18,6 @@ import static com.google.common.base.Preconditions.checkNotNull; -import java.util.List; - import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWrapper; import org.jclouds.abiquo.reference.ValidationErrors; @@ -93,7 +91,7 @@ public T getResult() { /** * Get the individual jobs that compose the current task. */ - public List getJobs() { + public Iterable getJobs() { return wrap(context, AsyncJob.class, target.getJobs().getCollection()); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/CloudApi.java b/abiquo/src/main/java/org/jclouds/abiquo/features/CloudApi.java index 3906e63..fa34f17 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/features/CloudApi.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/features/CloudApi.java @@ -40,6 +40,7 @@ import org.jclouds.abiquo.binders.cloud.BindNetworkRefToPayload; import org.jclouds.abiquo.binders.cloud.BindVirtualDatacenterRefToPayload; import org.jclouds.abiquo.binders.cloud.BindVolumeRefsToPayload; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.cloud.options.VirtualApplianceOptions; import org.jclouds.abiquo.domain.cloud.options.VirtualDatacenterOptions; import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions; @@ -50,9 +51,15 @@ import org.jclouds.abiquo.functions.ReturnTaskReferenceOrNull; import org.jclouds.abiquo.functions.enterprise.ParseEnterpriseId; import org.jclouds.abiquo.functions.infrastructure.ParseDatacenterId; +import org.jclouds.abiquo.functions.pagination.ParsePrivateIps; +import org.jclouds.abiquo.functions.pagination.ParsePublicIps; +import org.jclouds.abiquo.functions.pagination.ParseVirtualMachineTemplates; +import org.jclouds.abiquo.functions.pagination.ParseVirtualMachines; +import org.jclouds.abiquo.functions.pagination.ParseVolumes; import org.jclouds.abiquo.http.filters.AbiquoAuthentication; import org.jclouds.abiquo.http.filters.AppendApiVersionToMediaType; import org.jclouds.abiquo.rest.annotations.EndpointLink; +import org.jclouds.collect.PagedIterable; import org.jclouds.http.functions.ReturnStringIf2xx; import org.jclouds.rest.annotations.BinderParam; import org.jclouds.rest.annotations.Fallback; @@ -61,6 +68,7 @@ import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.ResponseParser; import org.jclouds.rest.annotations.SinceApiVersion; +import org.jclouds.rest.annotations.Transform; import org.jclouds.rest.binders.BindToXMLPayload; import com.abiquo.model.transport.AcceptedRequestDto; @@ -195,8 +203,9 @@ void deleteVirtualDatacenter( @Named("vdc:listtemplates") @GET @Consumes(VirtualMachineTemplatesDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VirtualMachineTemplatesDto listAvailableTemplates( + @ResponseParser(ParseVirtualMachineTemplates.class) + @Transform(ParseVirtualMachineTemplates.ToPagedIterable.class) + PagedIterable listAvailableTemplates( @EndpointLink("templates") @BinderParam(BindToPath.class) VirtualDatacenterDto virtualDatacenter); /** @@ -211,8 +220,8 @@ VirtualMachineTemplatesDto listAvailableTemplates( @Named("vdc:listtemplates") @GET @Consumes(VirtualMachineTemplatesDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VirtualMachineTemplatesDto listAvailableTemplates( + @ResponseParser(ParseVirtualMachineTemplates.class) + PaginatedCollection listAvailableTemplates( @EndpointLink("templates") @BinderParam(BindToPath.class) VirtualDatacenterDto virtualDatacenter, VirtualMachineTemplateOptions options); @@ -229,8 +238,26 @@ VirtualMachineTemplatesDto listAvailableTemplates( @Named("vdc:listavailablepublicips") @GET @Consumes(PublicIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - PublicIpsDto listAvailablePublicIps( + @ResponseParser(ParsePublicIps.class) + @Transform(ParsePublicIps.ToPagedIterable.class) + PagedIterable listAvailablePublicIps( + @EndpointLink("topurchase") @BinderParam(BindToPath.class) VirtualDatacenterDto virtualDatacenter); + + /** + * List all available ips to purchase in the datacenter by the virtual + * datacenter. + * + * @param virtualDatacenter + * The virtual datacenter. + * @param options + * Filtering options. + * @return The list of available ips. + */ + @Named("vdc:listavailablepublicips") + @GET + @Consumes(PublicIpsDto.BASE_MEDIA_TYPE) + @ResponseParser(ParsePublicIps.class) + PaginatedCollection listAvailablePublicIps( @EndpointLink("topurchase") @BinderParam(BindToPath.class) VirtualDatacenterDto virtualDatacenter, IpOptions options); @@ -246,8 +273,25 @@ PublicIpsDto listAvailablePublicIps( @Named("vdc:listpurchasedpublicips") @GET @Consumes(PublicIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - PublicIpsDto listPurchasedPublicIps( + @ResponseParser(ParsePublicIps.class) + @Transform(ParsePublicIps.ToPagedIterable.class) + PagedIterable listPurchasedPublicIps( + @EndpointLink("purchased") @BinderParam(BindToPath.class) VirtualDatacenterDto virtualDatacenter); + + /** + * List all purchased public ip addresses in the virtual datacenter. + * + * @param virtualDatacenter + * The virtual datacenter. + * @param options + * Filtering options. + * @return The list of purchased ips. + */ + @Named("vdc:listpurchasedpublicips") + @GET + @Consumes(PublicIpsDto.BASE_MEDIA_TYPE) + @ResponseParser(ParsePublicIps.class) + PaginatedCollection listPurchasedPublicIps( @EndpointLink("purchased") @BinderParam(BindToPath.class) VirtualDatacenterDto virtualDatacenter, IpOptions options); @@ -426,8 +470,10 @@ VLANNetworkDto updatePrivateNetwork( @Named("privatenetwork:listips") @GET @Consumes(PrivateIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - PrivateIpsDto listPrivateNetworkIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network); + @ResponseParser(ParsePrivateIps.class) + @Transform(ParsePrivateIps.ToPagedIterable.class) + PagedIterable listPrivateNetworkIps( + @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network); /** * List all ips for a private network with options. @@ -441,9 +487,9 @@ VLANNetworkDto updatePrivateNetwork( @Named("privatenetwork:listips") @GET @Consumes(PrivateIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - PrivateIpsDto listPrivateNetworkIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, - IpOptions options); + @ResponseParser(ParsePrivateIps.class) + PaginatedCollection listPrivateNetworkIps( + @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, IpOptions options); /** * Get the requested ip from the given private network. @@ -630,8 +676,25 @@ String getVirtualAppliancePrice( @GET @Path("/virtualmachines") @Consumes(VirtualMachinesWithNodeExtendedDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VirtualMachinesWithNodeExtendedDto listAllVirtualMachines(); + @ResponseParser(ParseVirtualMachines.class) + @Transform(ParseVirtualMachines.ToPagedIterable.class) + PagedIterable listAllVirtualMachines(); + + /** + * List all virtual machines available to the current user. + * + * @param options + * The filter options. + * @return The list of all virtual machines available to the current user. + */ + @SinceApiVersion("2.4") + @Named("vm:listall") + @GET + @Path("/virtualmachines") + @Consumes(VirtualMachinesWithNodeExtendedDto.BASE_MEDIA_TYPE) + @ResponseParser(ParseVirtualMachines.class) + PaginatedCollection listAllVirtualMachines( + VirtualMachineOptions options); /** * List all virtual machines for a virtual appliance. @@ -643,8 +706,9 @@ String getVirtualAppliancePrice( @Named("vm:list") @GET @Consumes(VirtualMachinesWithNodeExtendedDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VirtualMachinesWithNodeExtendedDto listVirtualMachines( + @ResponseParser(ParseVirtualMachines.class) + @Transform(ParseVirtualMachines.ToPagedIterable.class) + PagedIterable listVirtualMachines( @EndpointLink("virtualmachines") @BinderParam(BindToPath.class) VirtualApplianceDto virtualAppliance); /** @@ -659,8 +723,8 @@ VirtualMachinesWithNodeExtendedDto listVirtualMachines( @Named("vm:list") @GET @Consumes(VirtualMachinesWithNodeExtendedDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VirtualMachinesWithNodeExtendedDto listVirtualMachines( + @ResponseParser(ParseVirtualMachines.class) + PaginatedCollection listVirtualMachines( @EndpointLink("virtualmachines") @BinderParam(BindToPath.class) VirtualApplianceDto virtualAppliance, VirtualMachineOptions options); @@ -1079,8 +1143,9 @@ DiskManagementDto createHardDisk( @Named("volume:list") @GET @Consumes(VolumesManagementDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VolumesManagementDto listVolumes( + @ResponseParser(ParseVolumes.class) + @Transform(ParseVolumes.ToPagedIterable.class) + PagedIterable listVolumes( @EndpointLink("volumes") @BinderParam(BindToPath.class) VirtualDatacenterDto virtualDatacenter); /** @@ -1095,8 +1160,8 @@ VolumesManagementDto listVolumes( @Named("volume:list") @GET @Consumes(VolumesManagementDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VolumesManagementDto listVolumes( + @ResponseParser(ParseVolumes.class) + PaginatedCollection listVolumes( @EndpointLink("volumes") @BinderParam(BindToPath.class) VirtualDatacenterDto virtualDatacenter, VolumeOptions options); diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/EnterpriseApi.java b/abiquo/src/main/java/org/jclouds/abiquo/features/EnterpriseApi.java index 668e288..a7d1b04 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/features/EnterpriseApi.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/features/EnterpriseApi.java @@ -33,17 +33,23 @@ import org.jclouds.abiquo.binders.AppendToPath; import org.jclouds.abiquo.binders.BindToPath; import org.jclouds.abiquo.binders.BindToXMLPayloadAndPath; +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.abiquo.functions.infrastructure.ParseDatacenterId; +import org.jclouds.abiquo.functions.pagination.ParseEnterprises; +import org.jclouds.abiquo.functions.pagination.ParseUsers; import org.jclouds.abiquo.http.filters.AbiquoAuthentication; import org.jclouds.abiquo.http.filters.AppendApiVersionToMediaType; import org.jclouds.abiquo.rest.annotations.EndpointLink; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.annotations.BinderParam; import org.jclouds.rest.annotations.Fallback; import org.jclouds.rest.annotations.JAXBResponseParser; import org.jclouds.rest.annotations.ParamParser; import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.Transform; import org.jclouds.rest.binders.BindToXMLPayload; import com.abiquo.am.model.TemplatesStateDto; @@ -88,8 +94,9 @@ @GET @Path("/enterprises") @Consumes(EnterprisesDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - EnterprisesDto listEnterprises(); + @ResponseParser(ParseEnterprises.class) + @Transform(ParseEnterprises.ToPagedIterable.class) + PagedIterable listEnterprises(); /** * List enterprises with options. @@ -102,8 +109,8 @@ @GET @Path("/enterprises") @Consumes(EnterprisesDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - EnterprisesDto listEnterprises(EnterpriseOptions options); + @ResponseParser(ParseEnterprises.class) + PaginatedCollection listEnterprises(EnterpriseOptions options); /** * List filtered enterprises by datacenter. @@ -117,9 +124,9 @@ @Named("enterprise:list") @GET @Consumes(EnterprisesDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - EnterprisesDto listEnterprises(@EndpointLink("enterprises") @BinderParam(BindToPath.class) DatacenterDto datacenter, - EnterpriseOptions options); + @ResponseParser(ParseEnterprises.class) + PaginatedCollection listEnterprises( + @EndpointLink("enterprises") @BinderParam(BindToPath.class) DatacenterDto datacenter, EnterpriseOptions options); /** * Create a new enterprise. @@ -327,9 +334,10 @@ DatacenterLimitsDto updateLimits( @Named("user:list") @GET @Consumes(UsersDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - UsersDto listUsers(@EndpointLink("users") @BinderParam(BindToPath.class) EnterpriseDto enterprise); - + @ResponseParser(ParseUsers.class) + @Transform(ParseUsers.ToPagedIterable.class) + PagedIterable listUsers(@EndpointLink("users") @BinderParam(BindToPath.class) EnterpriseDto enterprise); + /** * List filtered users by enterprise. * @@ -342,9 +350,9 @@ DatacenterLimitsDto updateLimits( @Named("user:list") @GET @Consumes(UsersDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - UsersDto listUsers(@EndpointLink("users") @BinderParam(BindToPath.class) EnterpriseDto enterprise, - UserOptions options); + @ResponseParser(ParseUsers.class) + PaginatedCollection listUsers( + @EndpointLink("users") @BinderParam(BindToPath.class) EnterpriseDto enterprise, UserOptions options); /** * Create a new user in the given enterprise. diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/EventApi.java b/abiquo/src/main/java/org/jclouds/abiquo/features/EventApi.java index 3e3ef1b..e9040fd 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/features/EventApi.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/features/EventApi.java @@ -23,12 +23,17 @@ import javax.ws.rs.GET; import javax.ws.rs.Path; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.event.options.EventOptions; +import org.jclouds.abiquo.functions.pagination.ParseEvents; import org.jclouds.abiquo.http.filters.AbiquoAuthentication; import org.jclouds.abiquo.http.filters.AppendApiVersionToMediaType; -import org.jclouds.rest.annotations.JAXBResponseParser; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.Transform; +import com.abiquo.server.core.event.EventDto; import com.abiquo.server.core.event.EventsDto; /** @@ -50,8 +55,9 @@ @Named("event:list") @GET @Consumes(EventsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - EventsDto listEvents(); + @ResponseParser(ParseEvents.class) + @Transform(ParseEvents.ToPagedIterable.class) + PagedIterable listEvents(); /** * List events using filters. @@ -61,6 +67,6 @@ @Named("event:list") @GET @Consumes(EventsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - EventsDto listEvents(EventOptions options); + @ResponseParser(ParseEvents.class) + PaginatedCollection listEvents(EventOptions options); } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/InfrastructureApi.java b/abiquo/src/main/java/org/jclouds/abiquo/features/InfrastructureApi.java index 391d48d..85b799f 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/features/InfrastructureApi.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/features/InfrastructureApi.java @@ -39,6 +39,7 @@ import org.jclouds.abiquo.binders.infrastructure.AppendMachineIdToPath; import org.jclouds.abiquo.binders.infrastructure.AppendRemoteServiceTypeToPath; import org.jclouds.abiquo.binders.infrastructure.BindSupportedDevicesLinkToPath; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.infrastructure.options.DatacenterOptions; import org.jclouds.abiquo.domain.infrastructure.options.IpmiOptions; import org.jclouds.abiquo.domain.infrastructure.options.MachineOptions; @@ -46,9 +47,13 @@ import org.jclouds.abiquo.domain.network.options.IpOptions; import org.jclouds.abiquo.domain.network.options.NetworkOptions; import org.jclouds.abiquo.functions.infrastructure.ParseDatacenterId; +import org.jclouds.abiquo.functions.pagination.ParseExternalIps; +import org.jclouds.abiquo.functions.pagination.ParsePublicIps; +import org.jclouds.abiquo.functions.pagination.ParseUnmanagedIps; import org.jclouds.abiquo.http.filters.AbiquoAuthentication; import org.jclouds.abiquo.http.filters.AppendApiVersionToMediaType; import org.jclouds.abiquo.rest.annotations.EndpointLink; +import org.jclouds.collect.PagedIterable; import org.jclouds.http.functions.ReturnStringIf2xx; import org.jclouds.rest.annotations.BinderParam; import org.jclouds.rest.annotations.Fallback; @@ -56,6 +61,8 @@ import org.jclouds.rest.annotations.ParamParser; import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SinceApiVersion; +import org.jclouds.rest.annotations.Transform; import org.jclouds.rest.binders.BindToXMLPayload; import com.abiquo.model.enumerator.HypervisorType; @@ -1141,13 +1148,14 @@ VlanTagAvailabilityDto checkTagAvailability( * @param network * The public network. * @return The IPs in the given public network. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("publicnetwork:listips") @GET @Consumes(PublicIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - PublicIpsDto listPublicIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network); + @ResponseParser(ParsePublicIps.class) + @Transform(ParsePublicIps.ToPagedIterable.class) + PagedIterable listPublicIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network); /** * List all the IPs in the given public network. @@ -1157,14 +1165,14 @@ VlanTagAvailabilityDto checkTagAvailability( * @param options * The filtering options. * @return The IPs in the given public network. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("publicnetwork:listips") @GET @Consumes(PublicIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - PublicIpsDto listPublicIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, - IpOptions options); + @ResponseParser(ParsePublicIps.class) + PaginatedCollection listPublicIps( + @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, IpOptions options); /** * Get the given public ip. @@ -1174,8 +1182,8 @@ PublicIpsDto listPublicIps(@EndpointLink("ips") @BinderParam(BindToPath.class) V * @param ipId * The id of the ip to get. * @return The requested ip. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("publicnetwork:getip") @GET @Consumes(PublicIpDto.BASE_MEDIA_TYPE) @@ -1189,13 +1197,15 @@ PublicIpDto getPublicIp(@EndpointLink("ips") @BinderParam(BindToPath.class) VLAN * @param network * The external network. * @return The IPs in the given external network. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("externalnetwork:listips") @GET @Consumes(ExternalIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - ExternalIpsDto listExternalIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network); + @ResponseParser(ParseExternalIps.class) + @Transform(ParseExternalIps.ToPagedIterable.class) + PagedIterable listExternalIps( + @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network); /** * List all the IPs in the given external network. @@ -1205,14 +1215,14 @@ PublicIpDto getPublicIp(@EndpointLink("ips") @BinderParam(BindToPath.class) VLAN * @param options * The filtering options. * @return The IPs in the given external network. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("externalnetwork:listips") @GET @Consumes(ExternalIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - ExternalIpsDto listExternalIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, - IpOptions options); + @ResponseParser(ParseExternalIps.class) + PaginatedCollection listExternalIps( + @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, IpOptions options); /** * Get the given external ip. @@ -1222,8 +1232,8 @@ ExternalIpsDto listExternalIps(@EndpointLink("ips") @BinderParam(BindToPath.clas * @param ipId * The id of the ip to get. * @return The requested ip. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("externalnetwork:getip") @GET @Consumes(ExternalIpDto.BASE_MEDIA_TYPE) @@ -1237,13 +1247,15 @@ ExternalIpDto getExternalIp(@EndpointLink("ips") @BinderParam(BindToPath.class) * @param network * The unmanaged network. * @return The IPs in the given unmanaged network. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("unmanagednetwork:listips") @GET @Consumes(UnmanagedIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - UnmanagedIpsDto listUnmanagedIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network); + @ResponseParser(ParseUnmanagedIps.class) + @Transform(ParseUnmanagedIps.ToPagedIterable.class) + PagedIterable listUnmanagedIps( + @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network); /** * List all the IPs in the given unmanaged network. @@ -1253,14 +1265,14 @@ ExternalIpDto getExternalIp(@EndpointLink("ips") @BinderParam(BindToPath.class) * @param options * The filtering options. * @return The IPs in the given unmanaged network. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("unmanagednetwork:listips") @GET @Consumes(UnmanagedIpsDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - UnmanagedIpsDto listUnmanagedIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, - IpOptions options); + @ResponseParser(ParseUnmanagedIps.class) + PaginatedCollection listUnmanagedIps( + @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, IpOptions options); /** * Get the given unmanaged ip. @@ -1270,8 +1282,8 @@ UnmanagedIpsDto listUnmanagedIps(@EndpointLink("ips") @BinderParam(BindToPath.cl * @param ipId * The id of the ip to get. * @return The requested ip. - * @since 2.3 */ + @SinceApiVersion("2.3") @Named("unmanagednetwork:getip") @GET @Consumes(UnmanagedIpDto.BASE_MEDIA_TYPE) diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/VirtualMachineTemplateApi.java b/abiquo/src/main/java/org/jclouds/abiquo/features/VirtualMachineTemplateApi.java index 6fa4f58..30e8680 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/features/VirtualMachineTemplateApi.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/features/VirtualMachineTemplateApi.java @@ -32,17 +32,21 @@ import org.jclouds.abiquo.binders.AppendToPath; import org.jclouds.abiquo.binders.BindToPath; import org.jclouds.abiquo.binders.BindToXMLPayloadAndPath; +import org.jclouds.abiquo.domain.PaginatedCollection; 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.abiquo.functions.pagination.ParseVirtualMachineTemplates; import org.jclouds.abiquo.http.filters.AbiquoAuthentication; import org.jclouds.abiquo.http.filters.AppendApiVersionToMediaType; import org.jclouds.abiquo.rest.annotations.EndpointLink; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.annotations.BinderParam; import org.jclouds.rest.annotations.Fallback; import org.jclouds.rest.annotations.JAXBResponseParser; import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.Transform; import org.jclouds.rest.binders.BindToXMLPayload; import com.abiquo.model.enumerator.DiskFormatType; @@ -81,8 +85,9 @@ @GET @Path("/{enterprise}/datacenterrepositories/{datacenterrepository}/virtualmachinetemplates") @Consumes(VirtualMachineTemplatesDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VirtualMachineTemplatesDto listVirtualMachineTemplates(@PathParam("enterprise") Integer enterpriseId, + @ResponseParser(ParseVirtualMachineTemplates.class) + @Transform(ParseVirtualMachineTemplates.ToPagedIterable.class) + PagedIterable listVirtualMachineTemplates(@PathParam("enterprise") Integer enterpriseId, @PathParam("datacenterrepository") Integer datacenterRepositoryId); /** @@ -102,8 +107,9 @@ VirtualMachineTemplatesDto listVirtualMachineTemplates(@PathParam("enterprise") @GET @Path("/{enterprise}/datacenterrepositories/{datacenterrepository}/virtualmachinetemplates") @Consumes(VirtualMachineTemplatesDto.BASE_MEDIA_TYPE) - @JAXBResponseParser - VirtualMachineTemplatesDto listVirtualMachineTemplates(@PathParam("enterprise") Integer enterpriseId, + @ResponseParser(ParseVirtualMachineTemplates.class) + PaginatedCollection listVirtualMachineTemplates( + @PathParam("enterprise") Integer enterpriseId, @PathParam("datacenterrepository") Integer datacenterRepositoryId, VirtualMachineTemplateOptions options); /** diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/services/AdministrationService.java b/abiquo/src/main/java/org/jclouds/abiquo/features/services/AdministrationService.java index 2278708..929ae4c 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/features/services/AdministrationService.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/features/services/AdministrationService.java @@ -24,6 +24,7 @@ import org.jclouds.abiquo.domain.enterprise.EnterpriseProperties; import org.jclouds.abiquo.domain.enterprise.Role; import org.jclouds.abiquo.domain.enterprise.User; +import org.jclouds.abiquo.domain.enterprise.options.EnterpriseOptions; import org.jclouds.abiquo.domain.infrastructure.Datacenter; import org.jclouds.abiquo.domain.infrastructure.Machine; import org.jclouds.abiquo.internal.BaseAdministrationService; @@ -65,6 +66,11 @@ Iterable listEnterprises(); /** + * Get the list of all enterprises, filtered with the given options. + */ + Iterable listEnterprises(EnterpriseOptions options); + + /** * Get the enterprise with the given id. */ Enterprise getEnterprise(final Integer enterpriseId); diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/services/CloudService.java b/abiquo/src/main/java/org/jclouds/abiquo/features/services/CloudService.java index fc1aeed..080fc8f 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/features/services/CloudService.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/features/services/CloudService.java @@ -21,6 +21,7 @@ import org.jclouds.abiquo.domain.cloud.VirtualAppliance; import org.jclouds.abiquo.domain.cloud.VirtualDatacenter; import org.jclouds.abiquo.domain.cloud.VirtualMachine; +import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions; import org.jclouds.abiquo.domain.enterprise.Enterprise; import org.jclouds.abiquo.internal.BaseCloudService; @@ -75,4 +76,9 @@ */ Iterable listVirtualMachines(); + /** + * Get the list of all virtual machines filtered with the given options. + */ + Iterable listVirtualMachines(VirtualMachineOptions options); + } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/BasePaginationParser.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/BasePaginationParser.java new file mode 100644 index 0000000..0fcf254 --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/BasePaginationParser.java @@ -0,0 +1,56 @@ +/* + * 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.functions.pagination; + +import static com.google.common.base.Preconditions.checkNotNull; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.collect.PagedIterable; +import org.jclouds.http.HttpResponse; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.model.transport.WrapperDto; +import com.google.common.base.Function; + +/** + * Base class for all pagination response parsers. + *

+ * Parses the response with the given parser, and wraps the results in a + * {@link PaginatedCollection} so it can be properly iterated. + * + * @author Ignasi Barrera + * + * @see PaginatedCollection + * @see PagedIterable + */ +public abstract class BasePaginationParser> implements + Function> { + protected final AbiquoApi api; + protected final ParseXMLWithJAXB parser; + + public BasePaginationParser(AbiquoApi api, ParseXMLWithJAXB parser) { + this.api = checkNotNull(api, "api must not be null"); + this.parser = checkNotNull(parser, "parser must not be null"); + } + + @Override + public PaginatedCollection apply(HttpResponse input) { + return new PaginatedCollection(api, parser.apply(input), parser); + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseEnterprises.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseEnterprises.java new file mode 100644 index 0000000..99fcc1d --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseEnterprises.java @@ -0,0 +1,49 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.enterprise.EnterpriseDto; +import com.abiquo.server.core.enterprise.EnterprisesDto; + +/** + * Parses a paginated enterprise list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParseEnterprises extends BasePaginationParser { + @Inject + public ParseEnterprises(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseEvents.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseEvents.java new file mode 100644 index 0000000..2cbcd0d --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseEvents.java @@ -0,0 +1,49 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.event.EventDto; +import com.abiquo.server.core.event.EventsDto; + +/** + * Parses a paginated event list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParseEvents extends BasePaginationParser { + @Inject + public ParseEvents(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseExternalIps.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseExternalIps.java new file mode 100644 index 0000000..86a67e0 --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseExternalIps.java @@ -0,0 +1,49 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.infrastructure.network.ExternalIpDto; +import com.abiquo.server.core.infrastructure.network.ExternalIpsDto; + +/** + * Parses a paginated external ip list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParseExternalIps extends BasePaginationParser { + @Inject + public ParseExternalIps(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParsePrivateIps.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParsePrivateIps.java new file mode 100644 index 0000000..a56688a --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParsePrivateIps.java @@ -0,0 +1,49 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.infrastructure.network.PrivateIpDto; +import com.abiquo.server.core.infrastructure.network.PrivateIpsDto; + +/** + * Parses a paginated private ip list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParsePrivateIps extends BasePaginationParser { + @Inject + public ParsePrivateIps(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParsePublicIps.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParsePublicIps.java new file mode 100644 index 0000000..7671024 --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParsePublicIps.java @@ -0,0 +1,49 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.infrastructure.network.PublicIpDto; +import com.abiquo.server.core.infrastructure.network.PublicIpsDto; + +/** + * Parses a paginated public ip list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParsePublicIps extends BasePaginationParser { + @Inject + public ParsePublicIps(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseUnmanagedIps.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseUnmanagedIps.java new file mode 100644 index 0000000..33ee503 --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseUnmanagedIps.java @@ -0,0 +1,49 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.infrastructure.network.UnmanagedIpDto; +import com.abiquo.server.core.infrastructure.network.UnmanagedIpsDto; + +/** + * Parses a paginated unmnaged ip list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParseUnmanagedIps extends BasePaginationParser { + @Inject + public ParseUnmanagedIps(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseUsers.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseUsers.java new file mode 100644 index 0000000..f782ccb --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseUsers.java @@ -0,0 +1,157 @@ +/* + * 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.functions.pagination; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.collect.Iterables.getFirst; +import static org.jclouds.http.utils.Queries.encodeQueryLine; +import static org.jclouds.http.utils.Queries.queryParser; + +import java.net.URI; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.PagedIterable; +import org.jclouds.http.HttpResponse; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.model.rest.RESTLink; +import com.abiquo.server.core.enterprise.UserDto; +import com.abiquo.server.core.enterprise.UsersDto; +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.collect.Multimap; + +/** + * Parses a paginated user list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParseUsers extends BasePaginationParser { + @Inject + public ParseUsers(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + // Return a custom class to bypass + // http://jira.abiquo.com/browse/ABICLOUDPREMIUM-5927 + // Remove once the fix has been deployed to production + @Override + public PaginatedCollection apply(HttpResponse input) { + return new UserPaginatedCollection(api, parser.apply(input), parser); + } + + @Singleton + public static class ToPagedIterable extends PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + // Overwrite to return a custom class and bypass + // http://jira.abiquo.com/browse/ABICLOUDPREMIUM-5927 + // Remove once the fix has been deployed to production + @Override + protected Function> nextPage(PaginatedCollection input) { + return new Function>() { + @Override + public IterableWithMarker apply(Object marker) { + checkArgument(marker instanceof RESTLink, "Marker must be a RESTLink"); + RESTLink next = RESTLink.class.cast(marker); + + // The Abiquo API does not provide the media types in the + // pagination links, but it will be the same type than the + // current page, so just set it. + next.setType(UsersDto.BASE_MEDIA_TYPE); + + UsersDto nextPage = parser.apply(api.get(next)); + return new UserPaginatedCollection(api, nextPage, parser); + } + }; + } + } + + /** + * This class is used to bypass + * http://jira.abiquo.com/browse/ABICLOUDPREMIUM-5927 + *

+ * The issue has already been fixed but still not been deployed in + * production. Once that is done, this class should be removed. + * + * @author Ignasi Barrera + */ + private static class UserPaginatedCollection extends PaginatedCollection { + public UserPaginatedCollection(AbiquoApi api, UsersDto delegate, ParseXMLWithJAXB parser) { + super(api, delegate, parser); + } + + @Override + public Optional nextMarker() { + Optional next = super.nextMarker(); + // Pagination links are not consistent and a "next" link can be + // returned even if there are no more pages. Overwrite the + // default behavior to handle this, and to adapt the query + // parameters returned in the pagination links to what the api + // expects in the GET requests + if (next.isPresent()) { + checkArgument(next.get() instanceof RESTLink, "Marker must be a RESTLink"); + RESTLink link = RESTLink.class.cast(next.get()); + + // Get the conflicting query parameters and remove them from the + // query parameter map + Multimap params = queryParser().apply(URI.create(link.getHref()).getRawQuery()); + String limit = getFirst(params.removeAll("limit"), null); + String startwith = getFirst(params.removeAll("startwith"), null); + + // Next page links always have both query parameters. Otherwise + // assume there is no next page + if (limit != null && startwith != null) { + int resultsPerPage = Integer.parseInt(limit); + int totalResults = delegate.getTotalSize(); + int pageNumber = Integer.parseInt(startwith) - resultsPerPage; + + // Check if there is really a next page, and then return the + // marker with the appropriate values + if (totalResults / (double) resultsPerPage > pageNumber + 1) { + params.put("numResults", limit); + params.put("page", String.valueOf(pageNumber + 1)); + + // Build the new URI stripping the existing query + // parameters and using the new ones + String uri = link.getHref().substring(0, link.getHref().indexOf('?') + 1); + uri += encodeQueryLine(params); + + return Optional. of(new RESTLink(link.getRel(), uri)); + } + } + } + + return Optional.absent(); + } + + @Override + public PagedIterable toPagedIterable() { + return new ParseUsers.ToPagedIterable(api, parser).apply(this); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVirtualMachineTemplates.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVirtualMachineTemplates.java new file mode 100644 index 0000000..a26766c --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVirtualMachineTemplates.java @@ -0,0 +1,51 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto; +import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto; + +/** + * Parses a paginated virtual machine template list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParseVirtualMachineTemplates extends + BasePaginationParser { + @Inject + public ParseVirtualMachineTemplates(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends + PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVirtualMachines.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVirtualMachines.java new file mode 100644 index 0000000..2103a77 --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVirtualMachines.java @@ -0,0 +1,51 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto; +import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto; + +/** + * Parses a paginated virtual machine list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParseVirtualMachines extends + BasePaginationParser { + @Inject + public ParseVirtualMachines(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends + PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVolumes.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVolumes.java new file mode 100644 index 0000000..d9f9ab2 --- /dev/null +++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/pagination/ParseVolumes.java @@ -0,0 +1,50 @@ +/* + * 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.functions.pagination; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; +import org.jclouds.http.functions.ParseXMLWithJAXB; + +import com.abiquo.server.core.infrastructure.storage.VolumeManagementDto; +import com.abiquo.server.core.infrastructure.storage.VolumesManagementDto; + +/** + * Parses a paginated volume list. + * + * @author Ignasi Barrera + */ +@Singleton +public class ParseVolumes extends BasePaginationParser { + @Inject + public ParseVolumes(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + + @Singleton + public static class ToPagedIterable extends + PaginatedCollection.ToPagedIterable { + @Inject + public ToPagedIterable(AbiquoApi api, ParseXMLWithJAXB parser) { + super(api, parser); + } + } + +} diff --git a/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseAdministrationService.java b/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseAdministrationService.java index ceffaa4..290f0fd 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseAdministrationService.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseAdministrationService.java @@ -24,6 +24,7 @@ import javax.inject.Singleton; import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.config.Category; import org.jclouds.abiquo.domain.config.License; import org.jclouds.abiquo.domain.config.Privilege; @@ -34,12 +35,14 @@ import org.jclouds.abiquo.domain.enterprise.EnterpriseProperties; import org.jclouds.abiquo.domain.enterprise.Role; import org.jclouds.abiquo.domain.enterprise.User; +import org.jclouds.abiquo.domain.enterprise.options.EnterpriseOptions; import org.jclouds.abiquo.domain.infrastructure.Datacenter; import org.jclouds.abiquo.domain.infrastructure.Machine; import org.jclouds.abiquo.features.services.AdministrationService; import org.jclouds.abiquo.reference.ValidationErrors; import org.jclouds.abiquo.strategy.infrastructure.ListMachines; import org.jclouds.collect.Memoized; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.ApiContext; import com.abiquo.server.core.appslibrary.CategoriesDto; @@ -112,8 +115,15 @@ public Datacenter getDatacenter(final Integer datacenterId) { @Override public Iterable listEnterprises() { - EnterprisesDto result = context.getApi().getEnterpriseApi().listEnterprises(); - return wrap(context, Enterprise.class, result.getCollection()); + PagedIterable result = context.getApi().getEnterpriseApi().listEnterprises(); + return wrap(context, Enterprise.class, result.concat()); + } + + @Override + public Iterable listEnterprises(EnterpriseOptions options) { + PaginatedCollection result = context.getApi().getEnterpriseApi() + .listEnterprises(options); + return wrap(context, Enterprise.class, result.toPagedIterable().concat()); } @Override diff --git a/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseCloudService.java b/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseCloudService.java index 1ef28af..a8df42d 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseCloudService.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseCloudService.java @@ -25,18 +25,22 @@ import javax.inject.Singleton; import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.cloud.VirtualAppliance; import org.jclouds.abiquo.domain.cloud.VirtualDatacenter; import org.jclouds.abiquo.domain.cloud.VirtualMachine; import org.jclouds.abiquo.domain.cloud.options.VirtualDatacenterOptions; +import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions; import org.jclouds.abiquo.domain.enterprise.Enterprise; import org.jclouds.abiquo.features.services.CloudService; import org.jclouds.abiquo.reference.ValidationErrors; import org.jclouds.abiquo.strategy.cloud.ListVirtualAppliances; import org.jclouds.abiquo.strategy.cloud.ListVirtualDatacenters; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.ApiContext; import com.abiquo.server.core.cloud.VirtualDatacenterDto; +import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto; import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto; import com.google.common.annotations.VisibleForTesting; @@ -104,7 +108,14 @@ public VirtualDatacenter getVirtualDatacenter(final Integer virtualDatacenterId) @Override public Iterable listVirtualMachines() { - VirtualMachinesWithNodeExtendedDto vms = context.getApi().getCloudApi().listAllVirtualMachines(); - return wrap(context, VirtualMachine.class, vms.getCollection()); + PagedIterable vms = context.getApi().getCloudApi().listAllVirtualMachines(); + return wrap(context, VirtualMachine.class, vms.concat()); + } + + @Override + public Iterable listVirtualMachines(VirtualMachineOptions options) { + PaginatedCollection vms = context.getApi() + .getCloudApi().listAllVirtualMachines(options); + return wrap(context, VirtualMachine.class, vms.toPagedIterable().concat()); } } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseEventService.java b/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseEventService.java index 38f5e43..669ed4d 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseEventService.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/internal/BaseEventService.java @@ -23,11 +23,14 @@ import javax.inject.Singleton; import org.jclouds.abiquo.AbiquoApi; +import org.jclouds.abiquo.domain.PaginatedCollection; import org.jclouds.abiquo.domain.event.Event; import org.jclouds.abiquo.domain.event.options.EventOptions; import org.jclouds.abiquo.features.services.EventService; +import org.jclouds.collect.PagedIterable; import org.jclouds.rest.ApiContext; +import com.abiquo.server.core.event.EventDto; import com.abiquo.server.core.event.EventsDto; import com.google.common.annotations.VisibleForTesting; @@ -49,13 +52,13 @@ protected BaseEventService(final ApiContext context) { @Override public Iterable listEvents() { - EventsDto result = context.getApi().getEventApi().listEvents(); - return wrap(context, Event.class, result.getCollection()); + PagedIterable result = context.getApi().getEventApi().listEvents(); + return wrap(context, Event.class, result.concat()); } @Override public Iterable listEvents(final EventOptions options) { - EventsDto result = context.getApi().getEventApi().listEvents(options); - return wrap(context, Event.class, result.getCollection()); + PaginatedCollection result = context.getApi().getEventApi().listEvents(options); + return wrap(context, Event.class, result.toPagedIterable().concat()); } } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/predicates/VirtualDatacenterPredicates.java b/abiquo/src/main/java/org/jclouds/abiquo/predicates/VirtualDatacenterPredicates.java index ac71720..97e4695 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/predicates/VirtualDatacenterPredicates.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/predicates/VirtualDatacenterPredicates.java @@ -17,8 +17,7 @@ package org.jclouds.abiquo.predicates; import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.List; +import static com.google.common.collect.Iterables.isEmpty; import org.jclouds.abiquo.domain.cloud.Conversion; import org.jclouds.abiquo.domain.cloud.VirtualDatacenter; @@ -71,8 +70,8 @@ public boolean apply(final VirtualDatacenter vdc) { HypervisorType type = vdc.getHypervisorType(); boolean compatible = type.isCompatible(template.getDiskFormatType()); if (!compatible) { - List compatibleConversions = template.listConversions(type, ConversionState.FINISHED); - compatible = compatibleConversions != null && !compatibleConversions.isEmpty(); + Iterable compatibleConversions = template.listConversions(type, ConversionState.FINISHED); + compatible = compatibleConversions != null && !isEmpty(compatibleConversions); } return compatible; } diff --git a/abiquo/src/main/java/org/jclouds/abiquo/strategy/enterprise/ListVirtualMachineTemplates.java b/abiquo/src/main/java/org/jclouds/abiquo/strategy/enterprise/ListVirtualMachineTemplates.java index d82d3ad..989e42e 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/strategy/enterprise/ListVirtualMachineTemplates.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/strategy/enterprise/ListVirtualMachineTemplates.java @@ -17,6 +17,7 @@ package org.jclouds.abiquo.strategy.enterprise; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.Iterables.concat; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.transform; import static com.google.common.util.concurrent.Futures.allAsList; @@ -31,16 +32,15 @@ import org.jclouds.Constants; import org.jclouds.abiquo.AbiquoApi; -import org.jclouds.abiquo.domain.DomainWrapper; import org.jclouds.abiquo.domain.cloud.VirtualMachineTemplate; import org.jclouds.abiquo.domain.enterprise.Enterprise; import org.jclouds.abiquo.domain.infrastructure.Datacenter; import org.jclouds.abiquo.strategy.ListEntities; +import org.jclouds.collect.PagedIterable; import org.jclouds.logging.Logger; import org.jclouds.rest.ApiContext; import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto; -import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.util.concurrent.ListenableFuture; @@ -90,21 +90,23 @@ private Iterable listConcurrentTemplates(final ListeningExecutorService executor, final Enterprise parent, final Iterable dcs) { - ListenableFuture> futures = allAsList(transform(dcs, - new Function>() { + ListenableFuture>> futures = allAsList(transform(dcs, + new Function>>() { @Override - public ListenableFuture apply(final Datacenter input) { - return executor.submit(new Callable() { + public ListenableFuture> apply(final Datacenter input) { + return executor.submit(new Callable>() { @Override - public VirtualMachineTemplatesDto call() throws Exception { - return context.getApi().getVirtualMachineTemplateApi() + public Iterable call() throws Exception { + PagedIterable templates = context.getApi() + .getVirtualMachineTemplateApi() .listVirtualMachineTemplates(parent.getId(), input.getId()); + return templates.concat(); } }); } })); logger.trace("getting virtual machine templates"); - return DomainWrapper.join(getUnchecked(futures)); + return concat(getUnchecked(futures)); } } diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/AccountLiveTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/AccountLiveTest.java index 144280d..a2599cd 100644 --- a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/AccountLiveTest.java +++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/AccountLiveTest.java @@ -16,6 +16,7 @@ */ package org.jclouds.abiquo.domain.cloud; +import static com.google.common.collect.Iterables.size; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; @@ -46,11 +47,11 @@ public void testGetCurrentUser() { } public void testAllowedDatacenters() { - assertTrue(enterprise.listAllowedDatacenters().size() > 0); + assertTrue(size(enterprise.listAllowedDatacenters()) > 0); } public void testAvailableTemplates() { - assertTrue(enterprise.listTemplates().size() > 0); + assertTrue(size(enterprise.listTemplates()) > 0); } } diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenterLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenterLiveApiTest.java index c6c6fdd..5f8ac67 100644 --- a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenterLiveApiTest.java +++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualDatacenterLiveApiTest.java @@ -17,7 +17,9 @@ 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.size; +import static com.google.common.collect.Lists.newArrayList; import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; @@ -79,13 +81,13 @@ public void testCreateFromEnterprise() { Enterprise enterprise = env.enterpriseAdminContext.getAdministrationService().getCurrentUser().getEnterprise(); assertNotNull(enterprise); - List datacenters = enterprise.listAllowedDatacenters(); + List datacenters = newArrayList(enterprise.listAllowedDatacenters()); assertNotNull(datacenters); assertTrue(size(datacenters) > 0); Datacenter datacenter = datacenters.get(0); - List hypervisors = datacenter.listAvailableHypervisors(); + List hypervisors = newArrayList(datacenter.listAvailableHypervisors()); assertNotNull(datacenters); assertTrue(size(datacenters) > 0); @@ -130,7 +132,7 @@ public void testCreateFromVirtualDatacenter() { } public void testPurchaseIp() { - final PublicIp publicIp = env.virtualDatacenter.listAvailablePublicIps().get(0); + final PublicIp publicIp = get(env.virtualDatacenter.listAvailablePublicIps(), 0); assertNotNull(publicIp); env.virtualDatacenter.purchasePublicIp(publicIp); @@ -160,7 +162,7 @@ public void testGetDefaultNetwork() { } public void testGetAvailableTemplates() { - List templates = env.virtualDatacenter.listAvailableTemplates(); + List templates = newArrayList(env.virtualDatacenter.listAvailableTemplates()); assertNotNull(templates); assertFalse(templates.isEmpty()); diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineLiveApiTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineLiveApiTest.java index d838438..fab4988 100644 --- a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineLiveApiTest.java +++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineLiveApiTest.java @@ -27,8 +27,6 @@ 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.exception.AbiquoException; @@ -77,7 +75,7 @@ public void testUpdateInfoFromNode() { } public void testGetTasks() { - List> tasks = env.virtualMachine.listTasks(); + Iterable> tasks = env.virtualMachine.listTasks(); assertNotNull(tasks); } diff --git a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineLiveTest.java b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineLiveTest.java index 3a2eb1a..c5e67a4 100644 --- a/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineLiveTest.java +++ b/abiquo/src/test/java/org/jclouds/abiquo/domain/cloud/VirtualMachineLiveTest.java @@ -18,6 +18,7 @@ import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Iterables.getLast; +import static org.jclouds.abiquo.environment.CloudTestEnvironment.templateBySize; import static org.jclouds.abiquo.reference.AbiquoTestConstants.PREFIX; import static org.jclouds.abiquo.util.Assert.assertHasError; import static org.testng.Assert.assertEquals; @@ -42,8 +43,6 @@ import com.abiquo.server.core.cloud.VirtualMachineState; import com.google.common.base.Predicate; import com.google.common.collect.Lists; -import com.google.common.collect.Ordering; -import com.google.common.primitives.Longs; /** * Live integration tests for the {@link VirtualMachine} domain class. @@ -179,13 +178,4 @@ public void tesDeleteVirtualMachine() { assertNull(vapp.getVirtualMachine(vmId)); } - private static Ordering templateBySize() { - return new Ordering() { - @Override - public int compare(final VirtualMachineTemplate left, final VirtualMachineTemplate right) { - return Longs.compare(left.getDiskFileSize(), right.getDiskFileSize()); - } - }; - } - } 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 @@ @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() { @@ -87,9 +86,9 @@ public void restorePrivateIp() { VirtualMachineTask task = env.virtualMachine.setNics(Lists.> newArrayList(privateIp)); assertNull(task); - List> nics = env.virtualMachine.listAttachedNics(); - assertEquals(nics.size(), 1); - assertEquals(nics.get(0).getId(), privateIp.getId()); + Iterable> 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 void testAttachInfrastructurePublicIp() { VirtualMachineTask task = env.virtualMachine.setNics(Lists.> newArrayList(publicIpInfrastructure)); assertNull(task); - List> nics = env.virtualMachine.listAttachedNics(); - assertEquals(nics.size(), 1); - assertEquals(nics.get(0).getId(), publicIpInfrastructure.getId()); + Iterable> nics = env.virtualMachine.listAttachedNics(); + assertEquals(size(nics), 1); + assertEquals(get(nics, 0).getId(), publicIpInfrastructure.getId()); } public void testAttachPublicIp() { VirtualMachineTask task = env.virtualMachine.setNics(Lists.> newArrayList(publicIpCloud)); assertNull(task); - List> nics = env.virtualMachine.listAttachedNics(); - assertEquals(nics.size(), 1); - assertEquals(nics.get(0).getId(), publicIpCloud.getId()); + Iterable> nics = env.virtualMachine.listAttachedNics(); + assertEquals(size(nics), 1); + assertEquals(get(nics, 0).getId(), publicIpCloud.getId()); } @Test(dependsOnMethods = "testAttachPublicIp") @@ -130,7 +129,7 @@ public void testAttachPrivateIp() { 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 void testAttachExternalIp() { 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 void testAttachExternalIp() { @Test(dependsOnMethods = "testAttachExternalIp") public void testAddUnmanagedNics() { - List> nics = env.virtualMachine.listAttachedNics(); + Iterable> nics = env.virtualMachine.listAttachedNics(); - VirtualMachineTask task = env.virtualMachine.setNics(nics, + VirtualMachineTask task = env.virtualMachine.setNics(Lists.newArrayList(nics), Lists. 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> nics = env.virtualMachine.listAttachedNics(); + List> nics = Lists.newArrayList(env.virtualMachine.listAttachedNics()); VirtualMachineTask task = env.virtualMachine.setNics(Lists.> 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 void testReorderNics() { @Test(dependsOnMethods = "testReorderNics") public void testDetachNics() { - List> nics = env.virtualMachine.listAttachedNics(); + List> nics = Lists.newArrayList(env.virtualMachine.listAttachedNics()); VirtualMachineTask task = env.virtualMachine.setNics(Lists.> 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()); 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 void testAttachVolumes() { VirtualMachineTask task = env.virtualMachine.attachVolumes(volume); assertNull(task); - List attached = env.virtualMachine.listAttachedVolumes(); - assertEquals(attached.size(), 1); - assertEquals(attached.get(0).getId(), volume.getId()); + Iterable 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 attached = env.virtualMachine.listAttachedVolumes(); - assertTrue(attached.isEmpty()); + Iterable attached = env.virtualMachine.listAttachedVolumes(); + assertTrue(isEmpty(attached)); } @Test(dependsOnMethods = "detachVolume") @@ -71,8 +72,8 @@ public void detachAllVolumes() { assertNull(task); env.virtualMachine.detachAllVolumes(); - List attached = env.virtualMachine.listAttachedVolumes(); - assertTrue(attached.isEmpty()); + Iterable attached = env.virtualMachine.listAttachedVolumes(); + assertTrue(isEmpty(attached)); deleteVolume(volume); } @@ -85,16 +86,16 @@ public void testAttachHardDisks() { VirtualMachineTask task = env.virtualMachine.attachHardDisks(hardDisk); assertNull(task); - List attached = env.virtualMachine.listAttachedHardDisks(); - assertEquals(attached.size(), 1); - assertEquals(attached.get(0).getId(), hardDisk.getId()); + Iterable 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 attached = env.virtualMachine.listAttachedHardDisks(); - assertTrue(attached.isEmpty()); + Iterable attached = env.virtualMachine.listAttachedHardDisks(); + assertTrue(isEmpty(attached)); } @Test(dependsOnMethods = "detachHardDisk") @@ -105,8 +106,8 @@ public void detachAllHardDisks() { assertNull(task); env.virtualMachine.detachAllHardDisks(); - List attached = env.virtualMachine.listAttachedHardDisks(); - assertTrue(attached.isEmpty()); + Iterable attached = env.virtualMachine.listAttachedHardDisks(); + assertTrue(isEmpty(attached)); deleteHardDisk(hardDisk); } 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.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 void testFilterVolumes() { VolumeOptions validOptions = VolumeOptions.builder().has("hawa").build(); VolumeOptions invalidOptions = VolumeOptions.builder().has("cacatua").build(); - List volumes = env.cloudApi.listVolumes(env.virtualDatacenter.unwrap(), validOptions) - .getCollection(); - - assertEquals(volumes.size(), 1); - - volumes = env.cloudApi.listVolumes(env.virtualDatacenter.unwrap(), invalidOptions).getCollection(); + Iterable volumes = env.virtualDatacenter.listVolumes(validOptions); + assertEquals(size(volumes), 1); - assertEquals(volumes.size(), 0); + volumes = env.virtualDatacenter.listVolumes(invalidOptions); + assertTrue(isEmpty(volumes)); } @Test(dependsOnMethods = "testFilterVolumes") 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.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 void tearDownEnterprise() { assertHasError(ex, Status.CONFLICT, "ENTERPRISE-10"); } - List allowed = enterprise.listAllowedDatacenters(); + Iterable allowed = enterprise.listAllowedDatacenters(); assertNotNull(allowed); - assertTrue(allowed.isEmpty()); + assertTrue(isEmpty(allowed)); enterprise.delete(); } @@ -118,9 +119,9 @@ public void testAllowTwiceWorks() { } public void testListLimits() { - List allLimits = enterprise.listLimits(); + Iterable allLimits = enterprise.listLimits(); assertNotNull(allLimits); - assertEquals(allLimits.size(), 1); + assertEquals(size(allLimits), 1); } public void testUpdateInvalidLimits() { @@ -146,20 +147,20 @@ public void testUpdateLimits() { } public void testListAllowedDatacenters() { - List allowed = enterprise.listAllowedDatacenters(); + Iterable 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 machines = env.defaultEnterprise.listVirtualMachines(); - assertTrue(machines.size() > 0); + Iterable machines = env.defaultEnterprise.listVirtualMachines(); + assertTrue(size(machines) > 0); } public void testListVirtualAppliances() { - List vapps = env.defaultEnterprise.listVirtualAppliances(); - assertTrue(vapps.size() > 0); + Iterable vapps = env.defaultEnterprise.listVirtualAppliances(); + assertTrue(size(vapps) > 0); } } 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.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 boolean apply(TemplateDefinitionList input) { } public void testListStates() { - List states = list.listStatus(env.datacenter); + Iterable states = list.listStatus(env.datacenter); assertNotNull(states); } 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 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 void testListUser() { users = filter(env.enterprise.listUsers(), nick(env.user.getName() + "FAIL")); assertEquals(size(users), 0); } - - public void testListUserWithOptions() { - Iterable 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(); 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 void testCreateRepeated() { } public void testListLimits() { - List limits = env.datacenter.listLimits(); + Iterable limits = env.datacenter.listLimits(); assertNotNull(limits); - assertTrue(limits.size() > 0); + assertTrue(size(limits) > 0); } } 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.assertTrue; import java.net.URI; -import java.util.List; import javax.ws.rs.core.Response.Status; @@ -115,9 +114,8 @@ public void testGetRack() { } public void testListVirtualMachines() { - List machines = env.machine.listRemoteVirtualMachines(); + Iterable machines = env.machine.listRemoteVirtualMachines(); assertNotNull(machines); - assertTrue(machines.size() >= 0); } public void testReserveMachine() { 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 @@ 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 void testIsAvailable() { } 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 void testCreateRepeated() { public void testListRemoteServices() { Iterable 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); 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 @@ 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 @@ 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"); 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.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 void tearDownNetwork() { } public void testListIps() { - ExternalIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi() - .listExternalIps(externalNetwork.unwrap(), IpOptions.builder().limit(1).build()); + PaginatedCollection ipsDto = env.context.getApiContext().getApi() + .getInfrastructureApi().listExternalIps(externalNetwork.unwrap(), IpOptions.builder().limit(1).build()); int totalIps = ipsDto.getTotalSize(); - List ips = externalNetwork.listIps(); - - assertEquals(ips.size(), totalIps); + Iterable ips = externalNetwork.listIps(); + assertEquals(size(ips), totalIps); } public void testListIpsWithOptions() { - List ips = externalNetwork.listIps(IpOptions.builder().limit(5).build()); - assertEquals(ips.size(), 5); + Iterable 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 ipsDto = env.context.getApiContext().getApi() + .getInfrastructureApi().listExternalIps(externalNetwork.unwrap(), IpOptions.builder().limit(1).build()); int totalIps = ipsDto.getTotalSize(); - List ips = externalNetwork.listUnusedIps(); - assertEquals(ips.size(), totalIps); + Iterable ips = externalNetwork.listUnusedIps(); + assertEquals(size(ips), totalIps); } public void testUpdateBasicInfo() { 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 @@ public class GenericNetworkLiveApiTest extends BaseAbiquoApiLiveApiTest { public void testListDatacenterNetworks() { // Make sure all network types are listed - List> networks = env.datacenter.listNetworks(); + Iterable> networks = env.datacenter.listNetworks(); assertNotNull(networks); - assertEquals(networks.size(), 3); + assertEquals(size(networks), 3); } public void testListPublicNetworks() { - List> networks = env.datacenter.listNetworks(NetworkType.PUBLIC); + Iterable> 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> networks = env.datacenter.listNetworks(NetworkType.EXTERNAL); + Iterable> 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> networks = env.datacenter.listNetworks(NetworkType.UNMANAGED); + Iterable> 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() { 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.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 void tearDownNetwork() { } public void testListIps() { - PrivateIpsDto ipsDto = env.context.getApiContext().getApi().getCloudApi() + PaginatedCollection ipsDto = env.context.getApiContext().getApi().getCloudApi() .listPrivateNetworkIps(privateNetwork.unwrap(), IpOptions.builder().limit(1).build()); int totalIps = ipsDto.getTotalSize(); - List ips = privateNetwork.listIps(); - - assertEquals(ips.size(), totalIps); + Iterable ips = privateNetwork.listIps(); + assertEquals(size(ips), totalIps); } public void testListIpsWithOptions() { - List ips = privateNetwork.listIps(IpOptions.builder().limit(5).build()); - assertEquals(ips.size(), 5); + Iterable ips = privateNetwork.listIps(IpOptions.builder().limit(5).build()); + assertEquals(size(ips), 5); } public void testListUnusedIps() { - PrivateIpsDto ipsDto = env.context.getApiContext().getApi().getCloudApi() + PaginatedCollection ipsDto = env.context.getApiContext().getApi().getCloudApi() .listPrivateNetworkIps(privateNetwork.unwrap(), IpOptions.builder().limit(1).build()); int totalIps = ipsDto.getTotalSize(); - List ips = privateNetwork.listUnusedIps(); - assertEquals(ips.size(), totalIps); + Iterable ips = privateNetwork.listUnusedIps(); + assertEquals(size(ips), totalIps); } public void testUpdateBasicInfo() { 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.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 void tearDownNetwork() { } public void testListIps() { - PublicIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi() - .listPublicIps(publicNetwork.unwrap(), IpOptions.builder().limit(1).build()); + PaginatedCollection ipsDto = env.context.getApiContext().getApi() + .getInfrastructureApi().listPublicIps(publicNetwork.unwrap(), IpOptions.builder().limit(1).build()); int totalIps = ipsDto.getTotalSize(); - List ips = publicNetwork.listIps(); - - assertEquals(ips.size(), totalIps); + Iterable ips = publicNetwork.listIps(); + assertEquals(size(ips), totalIps); } public void testListIpsWithOptions() { - List ips = publicNetwork.listIps(IpOptions.builder().limit(5).build()); - assertEquals(ips.size(), 5); + Iterable 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 ipsDto = env.context.getApiContext().getApi() + .getInfrastructureApi().listPublicIps(publicNetwork.unwrap(), IpOptions.builder().limit(1).build()); int totalIps = ipsDto.getTotalSize(); - List ips = publicNetwork.listUnusedIps(); - assertEquals(ips.size(), totalIps); + Iterable ips = publicNetwork.listUnusedIps(); + assertEquals(size(ips), totalIps); } public void testUpdateBasicInfo() { 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.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.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 void tearDownNetwork() { } public void testListIps() { - UnmanagedIpsDto ipsDto = env.context.getApiContext().getApi().getInfrastructureApi() - .listUnmanagedIps(unmanagedNetwork.unwrap(), IpOptions.builder().limit(1).build()); + PaginatedCollection ipsDto = env.context.getApiContext().getApi() + .getInfrastructureApi().listUnmanagedIps(unmanagedNetwork.unwrap(), IpOptions.builder().limit(1).build()); int totalIps = ipsDto.getTotalSize(); - List ips = unmanagedNetwork.listIps(); - - assertEquals(ips.size(), totalIps); + Iterable ips = unmanagedNetwork.listIps(); + assertEquals(size(ips), totalIps); } public void testListIpsWithOptions() { - List ips = unmanagedNetwork.listIps(IpOptions.builder().limit(5).build()); + Iterable 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 ipsDto = env.context.getApiContext().getApi() + .getInfrastructureApi().listUnmanagedIps(unmanagedNetwork.unwrap(), IpOptions.builder().limit(1).build()); int totalIps = ipsDto.getTotalSize(); - List ips = unmanagedNetwork.listUnusedIps(); - assertEquals(ips.size(), totalIps); + Iterable ips = unmanagedNetwork.listUnusedIps(); + assertEquals(size(ips), totalIps); } public void testUpdateBasicInfo() { 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 @@ 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.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 @@ protected void createVirtualAppliance() { } protected void createVirtualMachine() { - List templates = virtualDatacenter.listAvailableTemplates(); - assertFalse(templates.isEmpty()); - - List sorted = Lists.newArrayList(templates); + Iterable templates = virtualDatacenter.listAvailableTemplates(); + assertFalse(isEmpty(templates)); - // Sort by size to use the smallest one - Collections.sort(sorted, new Ordering() { - @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 @@ protected void deleteVirtualMachine() { virtualMachine.delete(); assertNull(cloudApi.getVirtualMachine(virtualAppliance.unwrap(), idVirtualMachine)); } + } + public static Ordering templateBySize() { + return new Ordering() { + @Override + public int compare(final VirtualMachineTemplate left, final VirtualMachineTemplate right) { + return Longs.compare(left.getDiskFileSize(), right.getDiskFileSize()); + } + }; } } 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.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 UnmanagedNetwork unmanagedNetwork; - public List remoteServices; + public Iterable remoteServices; public Rack rack; @@ -190,7 +190,7 @@ protected void createDatacenter() { assertNotNull(datacenter.getId()); remoteServices = datacenter.listRemoteServices(); - assertEquals(remoteServices.size(), 7); + assertEquals(size(remoteServices), 7); } protected void createMachine() { @@ -237,7 +237,7 @@ protected void createStorageDevice() { String user = Config.get("abiquo.storage.user"); String pass = Config.get("abiquo.storage.pass"); - List devices = datacenter.listSupportedStorageDevices(); + Iterable devices = datacenter.listSupportedStorageDevices(); StorageDeviceMetadata metadata = find(devices, new Predicate() { @Override public boolean apply(StorageDeviceMetadata input) { 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.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 @@ public class CloudApiExpectTest extends BaseAbiquoApiExpectTest { 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 void testListAllVirtualMachinesWhenResponseIs2xx() { .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 result = api.listAllVirtualMachines(); + List 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 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 result = api.listVirtualMachines(vapp); + List 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 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 void testSnapshotVirtualMachineReturns2xx() { 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 publicIps = api.listAvailablePublicIps(vdc); + List 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 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 publicIps = api.listPurchasedPublicIps(vdc); + List 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 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 privateIps = api.listPrivateNetworkIps(vlan); + List 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 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 templates = api.listAvailableTemplates(vdc); + List 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 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 volumes = api.listVolumes(vdc); + List 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 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(); 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.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.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.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 void testDeleteVirtualDatacenter() throws SecurityException, NoSuchMethod /*********************** 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. 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. 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 void testReleasePublicIp() throws SecurityException, NoSuchMethodExceptio /*********************** 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. 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. 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 void testDeletePrivateNetwork() throws SecurityException, NoSuchMethodExc /*********************** 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. 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. 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 void testGetVirtualAppliancePrice() throws SecurityException, NoSuchMetho /*********************** 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. 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. 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 void testDeleteHardDisk() throws SecurityException, NoSuchMethodException /*********************** Volumes ***********************/ - public void testListVolumes() throws SecurityException, NoSuchMethodException, IOException { - Invokable method = method(CloudApi.class, "listVolumes", VirtualDatacenterDto.class); - GeneratedHttpRequest request = processor.apply(Invocation.create(method, - ImmutableList. 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. 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. 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, 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 { - 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 result = api.listUsers(enterprise); + List 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 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 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 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 result = api.listEnterprises(); + List 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(); } - } 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 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.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 @@ public class EnterpriseApiTest extends BaseAbiquoApiTest { /*********************** 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. 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. 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 void testGetUser() throws SecurityException, NoSuchMethodException, IOExc 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. 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(); 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 { + + 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 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 result = api.listEvents(); + List 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 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 { - 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); - } -} 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.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 void testDeleteNetworkServiceTypeReturns2xx() { 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 publicIps = api.listPublicIps(vlan); + List 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 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 publicIps = api.listExternalIps(vlan); + List 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 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 unmanagedIps = api.listUnmanagedIps(vlan); + List 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 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(); 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.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.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 void testCheckTagAvailability() throws SecurityException, NoSuchMethodExc /*********************** 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. 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. 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 void testGetPublicIp() throws SecurityException, NoSuchMethodException, I 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. 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. 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 void testGetExternalIp() throws SecurityException, NoSuchMethodException, 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. 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. 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, 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.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 void testListVirtualMachineTemplatesWithPaginationOptions() { .build()); VirtualMachineTemplateOptions options = VirtualMachineTemplateOptions.builder().limit(1).has("text").build(); - VirtualMachineTemplatesDto result = api.listVirtualMachineTemplates(1, 1, options); + PaginatedCollection 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 result = api.listVirtualMachineTemplates(1, 1); + List 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(); 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 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.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 @@ public class VirtualMachineTemplateApiTest extends BaseAbiquoApiTest { /*********************** 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. 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. 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); 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 @@ 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() { @Override 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 @@ 5 - - target/test-data/jclouds-payloads.log + + target/test-data/jclouds-wire.log true TRACE @@ -72,11 +72,11 @@ - + - + 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 @@ + + + + + + 2 + + + + + + + + + + + + + + + 0 + 0 + 0 + 2 + 0 + 0 + VM + 0 + 0 + + \ No newline at end of file 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 @@ + + + + 2 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 @@ + + + + + + 2 + + + + + + + + + + + + + + 16 + Abiquo KVM + + UNRECOGNIZED + + 1/rs.bcn.abiquo.com/abiport9000/ovf/71/KVM-Recursion.qcow2 + QCOW2_SPARSE + 320798720 + 1 + 1024 + 4294967296 + false + DONE + 0 + 2013-01-16T15:06:14+01:00 + SYSTEM + false + http://rs.bcn.abiquo.com:9000/public/icons/q.png + user + password + E1000 + SCSI + + \ No newline at end of file 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 @@ + + + + + + 2 + + + + + + + + + + + + + + 15 + Abiquo KVM + + UNRECOGNIZED + + 1/rs.bcn.abiquo.com/abiport9000/ovf/71/KVM-Recursion.qcow2 + QCOW2_SPARSE + 320798720 + 1 + 1024 + 4294967296 + false + DONE + 0 + 2013-01-16T15:06:14+01:00 + SYSTEM + false + http://rs.bcn.abiquo.com:9000/public/icons/q.png + user + password + E1000 + SCSI + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/enterprises-lastpage.xml b/abiquo/src/test/resources/payloads/enterprises-lastpage.xml new file mode 100644 index 0000000..77654c9 --- /dev/null +++ b/abiquo/src/test/resources/payloads/enterprises-lastpage.xml @@ -0,0 +1,40 @@ + + + + + + 2 + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + false + Abiquo + 0 + 0 + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/enterprises-page.xml b/abiquo/src/test/resources/payloads/enterprises-page.xml new file mode 100644 index 0000000..c7e9b07 --- /dev/null +++ b/abiquo/src/test/resources/payloads/enterprises-page.xml @@ -0,0 +1,40 @@ + + + + + + 2 + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + false + Abiquo + 0 + 0 + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/events-lastpage.xml b/abiquo/src/test/resources/payloads/events-lastpage.xml new file mode 100644 index 0000000..84e1a73 --- /dev/null +++ b/abiquo/src/test/resources/payloads/events-lastpage.xml @@ -0,0 +1,40 @@ + + + + + 4 + + VOLUME_DELETE + VOLUME + Abiquo + 110 + 1 + 1 + 1 + 1786 + admin + INFO + Deleting volume 'JC-3972c0f8-28b' + 2013-01-23T14:07:14Z + admin + JC-d0cf5cd6-67b + JC-3972c0f8-28b + + + VOLUME_MODIFY + VOLUME + Abiquo + 111 + 1 + 1 + 1 + 1786 + admin + INFO + Updated size of volume 'JC-Event vol' to '32' MB + 2013-01-23T14:07:12Z + admin + JC-d0cf5cd6-67b + JC-3972c0f8-28b + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/events-page.xml b/abiquo/src/test/resources/payloads/events-page.xml new file mode 100644 index 0000000..4ac8d22 --- /dev/null +++ b/abiquo/src/test/resources/payloads/events-page.xml @@ -0,0 +1,40 @@ + + + + + 4 + + VOLUME_DELETE + VOLUME + Abiquo + 109 + 1 + 1 + 1 + 1786 + admin + INFO + Deleting volume 'JC-3972c0f8-28b' + 2013-01-23T14:07:14Z + admin + JC-d0cf5cd6-67b + JC-3972c0f8-28b + + + VOLUME_MODIFY + VOLUME + Abiquo + 108 + 1 + 1 + 1 + 1786 + admin + INFO + Updated size of volume 'JC-Event vol' to '32' MB + 2013-01-23T14:07:12Z + admin + JC-d0cf5cd6-67b + JC-3972c0f8-28b + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/externalips-lastpage.xml b/abiquo/src/test/resources/payloads/externalips-lastpage.xml new file mode 100644 index 0000000..5e9311a --- /dev/null +++ b/abiquo/src/test/resources/payloads/externalips-lastpage.xml @@ -0,0 +1,27 @@ + + + + + + 4 + + + + + 3 + 10.0.0.1 + ExternalNetwork + true + false + + + + + + 4 + 10.0.0.2 + ExternalNetwork + true + false + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/externalips-page.xml b/abiquo/src/test/resources/payloads/externalips-page.xml new file mode 100644 index 0000000..4abe4a8 --- /dev/null +++ b/abiquo/src/test/resources/payloads/externalips-page.xml @@ -0,0 +1,27 @@ + + + + + + 4 + + + + + 1 + 10.0.0.1 + ExternalNetwork + true + false + + + + + + 2 + 10.0.0.2 + ExternalNetwork + true + false + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/privateips-lastpage.xml b/abiquo/src/test/resources/payloads/privateips-lastpage.xml new file mode 100644 index 0000000..d289567 --- /dev/null +++ b/abiquo/src/test/resources/payloads/privateips-lastpage.xml @@ -0,0 +1,17 @@ + + + + + + 2 + + + + + 2 + 192.168.1.1 + 00:50:56:11:d4:a2 + 00505611d4a2_host + JC--privatenetwork-test + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/privateips-page.xml b/abiquo/src/test/resources/payloads/privateips-page.xml new file mode 100644 index 0000000..4a6acb1 --- /dev/null +++ b/abiquo/src/test/resources/payloads/privateips-page.xml @@ -0,0 +1,17 @@ + + + + + + 2 + + + + + 1 + 192.168.1.1 + 00:50:56:11:d4:a2 + 00505611d4a2_host + JC--privatenetwork-test + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/publicips-available-lastpage.xml b/abiquo/src/test/resources/payloads/publicips-available-lastpage.xml new file mode 100644 index 0000000..dec31ec --- /dev/null +++ b/abiquo/src/test/resources/payloads/publicips-available-lastpage.xml @@ -0,0 +1,29 @@ + + + + + + 4 + + + + + + 3 + 8.8.8.1 + publi + true + false + + + + + + + 4 + 8.8.8.3 + publi + true + false + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/publicips-available-page.xml b/abiquo/src/test/resources/payloads/publicips-available-page.xml new file mode 100644 index 0000000..f53c4ac --- /dev/null +++ b/abiquo/src/test/resources/payloads/publicips-available-page.xml @@ -0,0 +1,29 @@ + + + + + + 4 + + + + + + 1 + 8.8.8.1 + publi + true + false + + + + + + + 2 + 8.8.8.3 + publi + true + false + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/publicips-lastpage.xml b/abiquo/src/test/resources/payloads/publicips-lastpage.xml new file mode 100644 index 0000000..04741d3 --- /dev/null +++ b/abiquo/src/test/resources/payloads/publicips-lastpage.xml @@ -0,0 +1,25 @@ + + + + + + 4 + + + + 3 + 80.80.80.1 + JC--publicnetwork-test + true + false + + + + + 4 + 80.80.80.2 + JC--publicnetwork-test + true + false + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/publicips-page.xml b/abiquo/src/test/resources/payloads/publicips-page.xml new file mode 100644 index 0000000..092b403 --- /dev/null +++ b/abiquo/src/test/resources/payloads/publicips-page.xml @@ -0,0 +1,25 @@ + + + + + + 4 + + + + 1 + 80.80.80.1 + JC--publicnetwork-test + true + false + + + + + 2 + 80.80.80.2 + JC--publicnetwork-test + true + false + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/publicips-purchased-lastpage.xml b/abiquo/src/test/resources/payloads/publicips-purchased-lastpage.xml new file mode 100644 index 0000000..077b304 --- /dev/null +++ b/abiquo/src/test/resources/payloads/publicips-purchased-lastpage.xml @@ -0,0 +1,29 @@ + + + + + + 4 + + + + + + 3 + 8.8.8.1 + publi + true + false + + + + + + + 4 + 8.8.8.3 + publi + true + false + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/publicips-purchased-page.xml b/abiquo/src/test/resources/payloads/publicips-purchased-page.xml new file mode 100644 index 0000000..9456946 --- /dev/null +++ b/abiquo/src/test/resources/payloads/publicips-purchased-page.xml @@ -0,0 +1,29 @@ + + + + + + 4 + + + + + + 1 + 8.8.8.1 + publi + true + false + + + + + + + 2 + 8.8.8.3 + publi + true + false + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/templates-lastpage.xml b/abiquo/src/test/resources/payloads/templates-lastpage.xml new file mode 100644 index 0000000..63fa4cb --- /dev/null +++ b/abiquo/src/test/resources/payloads/templates-lastpage.xml @@ -0,0 +1,35 @@ + + + + + + 2 + + + + + + + + + + + + + 152 + Apache Server + Apache Server + 1/apache/ubuntu-910-server-x86_64-vmdk5.vmdk + VMDK_STREAM_OPTIMIZED + 206947328 + 1 + 512 + 734003200 + true + 0 + 2012-04-18T17:42:42+02:00 + SYSTEM + false + http://icons.abiquo.com/apache.jpg + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/templates-page.xml b/abiquo/src/test/resources/payloads/templates-page.xml index 61c53f7..ec98f93 100644 --- a/abiquo/src/test/resources/payloads/templates-page.xml +++ b/abiquo/src/test/resources/payloads/templates-page.xml @@ -1,21 +1,21 @@ - - - + + + 2 - - - - - - - - - + + + + + + + + + - + 151 Apache Server Apache Server diff --git a/abiquo/src/test/resources/payloads/unmanagedips-lastpage.xml b/abiquo/src/test/resources/payloads/unmanagedips-lastpage.xml new file mode 100644 index 0000000..aade3a4 --- /dev/null +++ b/abiquo/src/test/resources/payloads/unmanagedips-lastpage.xml @@ -0,0 +1,29 @@ + + + + + + 4 + + + + + 3 + 10.0.0.1 + UnmanagedNetwork + true + false + true + + + + + + 4 + 10.0.0.2 + UnmanagedNetwork + true + false + true + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/unmanagedips-page.xml b/abiquo/src/test/resources/payloads/unmanagedips-page.xml new file mode 100644 index 0000000..2302218 --- /dev/null +++ b/abiquo/src/test/resources/payloads/unmanagedips-page.xml @@ -0,0 +1,29 @@ + + + + + + 4 + + + + + 1 + 10.0.0.1 + UnmanagedNetwork + true + false + true + + + + + + 2 + 10.0.0.2 + UnmanagedNetwork + true + false + true + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/users-lastpage.xml b/abiquo/src/test/resources/payloads/users-lastpage.xml new file mode 100644 index 0000000..def0a5b --- /dev/null +++ b/abiquo/src/test/resources/payloads/users-lastpage.xml @@ -0,0 +1,24 @@ + + + + + + + 3 + + + + + + 3 + ron + 0371e4dce3c8804f1543c3f0f309cc10 + Ron + Weasley + + ron.weasley@hogwarts.edu + en_EN + ABIQUO + true + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/users-page.xml b/abiquo/src/test/resources/payloads/users-page.xml new file mode 100644 index 0000000..5427878 --- /dev/null +++ b/abiquo/src/test/resources/payloads/users-page.xml @@ -0,0 +1,39 @@ + + + + + + 3 + + + + + + 1 + potter + 0371e4dce3c8804f1543c3f0f309cc10 + Harry + Potter + + harry.potter@hogwarts.edu + en_EN + ABIQUO + true + + + + + + + 2 + granger + 0371e4dce3c8804f1543c3f0f309cc10 + Hermione + Granger + + hermione.granger@hogwarts.edu + en_EN + ABIQUO + true + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/usr-list-page-2.xml b/abiquo/src/test/resources/payloads/usr-list-page-2.xml deleted file mode 100644 index 9f3012e..0000000 --- a/abiquo/src/test/resources/payloads/usr-list-page-2.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - 3 - - - - - - 3 - ron - 0371e4dce3c8804f1543c3f0f309cc10 - Ron - Weasley - - ron.weasley@hogwarts.edu - en_EN - ABIQUO - true - - \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/usr-list.xml b/abiquo/src/test/resources/payloads/usr-list.xml deleted file mode 100644 index 0468815..0000000 --- a/abiquo/src/test/resources/payloads/usr-list.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - 3 - - - - - - 1 - potter - 0371e4dce3c8804f1543c3f0f309cc10 - Harry - Potter - - harry.potter@hogwarts.edu - en_EN - ABIQUO - true - - - - - - - 2 - granger - 0371e4dce3c8804f1543c3f0f309cc10 - Hermione - Granger - - hermione.granger@hogwarts.edu - en_EN - ABIQUO - true - - - - - - - 3 - ron - 0371e4dce3c8804f1543c3f0f309cc10 - Ron - Weasley - - ron.weasley@hogwarts.edu - en_EN - ABIQUO - true - - \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/vms-lastpage.xml b/abiquo/src/test/resources/payloads/vms-lastpage.xml new file mode 100644 index 0000000..889874f --- /dev/null +++ b/abiquo/src/test/resources/payloads/vms-lastpage.xml @@ -0,0 +1,31 @@ + + + + + + 2 + + + + + + + + + + + + + + + 0 + 0 + 0 + 2 + 0 + 0 + VM + 0 + 0 + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/vms-page.xml b/abiquo/src/test/resources/payloads/vms-page.xml new file mode 100644 index 0000000..4535697 --- /dev/null +++ b/abiquo/src/test/resources/payloads/vms-page.xml @@ -0,0 +1,31 @@ + + + + + + 2 + + + + + + + + + + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + VM + 0 + 0 + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/volumes-lastpage.xml b/abiquo/src/test/resources/payloads/volumes-lastpage.xml new file mode 100644 index 0000000..3df58b0 --- /dev/null +++ b/abiquo/src/test/resources/payloads/volumes-lastpage.xml @@ -0,0 +1,18 @@ + + + + + + 2 + + + + + + 1531 + Hawaian volume updated + DETACHED + 32 + 0 + + \ No newline at end of file diff --git a/abiquo/src/test/resources/payloads/volumes-page.xml b/abiquo/src/test/resources/payloads/volumes-page.xml new file mode 100644 index 0000000..d069445 --- /dev/null +++ b/abiquo/src/test/resources/payloads/volumes-page.xml @@ -0,0 +1,18 @@ + + + + + + 2 + + + + + + 1530 + Hawaian volume updated + DETACHED + 32 + 0 + + \ No newline at end of file -- 1.8.1.6