merged
diff --git a/.mailmap b/.mailmap
new file mode 100644
index 0000000..4f3840d
--- /dev/null
+++ b/.mailmap
@@ -0,0 +1,15 @@
+Adrian Cole <adrian.f.cole@3d8758e0-26b5-11de-8745-db77d3ebf521>
+Adrian Cole <acole@.eng.vmware.com>
+Alfredo Morresi <rainbowbreeze@gmx.com>
+Alfredo Morresi <rainbowbreeze@pc-alfredo.(none)>
+Andrea Turli <andrea@bigmac.local>
+Andrea Turli <andrea.turli@.dir.svc.accenture.com>
+Andrea Turli <Andrea_Turli@.dub.emea.dell.com>
+Andrea Turli <andrea.turli@gmail.com>
+Andrea Turli <toor@toor.(none)>
+Andrei Savu <asavu@apache.org>
+Antoni Batchelli <tbatchelli@acm.org>
+Ivan Meredith <ivan@ivan.net.nz@3d8758e0-26b5-11de-8745-db77d3ebf521>
+Seshu Pasam <github@pasam.com>
+Tibor Kiss <tibor.kiss@omixon.com>
+Vijay Kiran <mail@vijaykiran.com>
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/functions/ParseUserMetadataFromHeaders.java b/apis/atmos/src/main/java/org/jclouds/atmos/functions/ParseUserMetadataFromHeaders.java
index c726f2e..79d8886 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/functions/ParseUserMetadataFromHeaders.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/functions/ParseUserMetadataFromHeaders.java
@@ -30,7 +30,7 @@
import org.jclouds.http.HttpResponse;
import com.google.common.base.Function;
-import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -42,23 +42,16 @@
*/
@Singleton
public class ParseUserMetadataFromHeaders implements Function<HttpResponse, UserMetadata> {
- private static final Set<String> sysKeys = ImmutableSet.of("atime", "ctime", "gid", "itime", "mtime", "nlink",
+ private static final Set<String> SYS_KEYS = ImmutableSet.of(
+ "atime", "ctime", "gid", "itime", "mtime", "nlink",
"policyname", "size", "uid", "content-md5", "objectid", "objname", "type");
- private static final Predicate<String> filter = new Predicate<String>() {
-
- @Override
- public boolean apply(String arg0) {
- return !sysKeys.contains(arg0);
- }
-
- };
public UserMetadata apply(HttpResponse from) {
checkNotNull(from, "http response");
Map<String, String> meta = Maps.filterKeys(
getMetaMap(checkNotNull(from.getFirstHeaderOrNull(AtmosHeaders.META), AtmosHeaders.META)),
- filter);
+ Predicates.not(Predicates.in(SYS_KEYS)));
Map<String, String> listableMeta = (from.getFirstHeaderOrNull(AtmosHeaders.LISTABLE_META) != null) ? getMetaMap(from
.getFirstHeaderOrNull(AtmosHeaders.LISTABLE_META)) : ImmutableMap.<String, String> of();
diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/functions/ServerInfoToNodeMetadata.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/functions/ServerInfoToNodeMetadata.java
index 59d2658..887d0f3 100644
--- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/functions/ServerInfoToNodeMetadata.java
+++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/functions/ServerInfoToNodeMetadata.java
@@ -20,7 +20,6 @@
import static com.google.common.base.Preconditions.checkNotNull;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -87,7 +86,6 @@
this.getImageIdFromServer = checkNotNull(getImageIdFromServer, "getImageIdFromServer");
}
- @SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public NodeMetadata apply(ServerInfo from) {
NodeMetadataBuilder builder = new NodeMetadataBuilder();
@@ -105,7 +103,7 @@
}
builder.hardware(new HardwareBuilder().ids(from.getUuid()).hypervisor("kvm")
.processors(ImmutableList.of(new Processor(1, from.getCpu()))).ram(from.getMem())
- .volumes((List) ImmutableList.of(Iterables.transform(from.getDevices().values(), deviceToVolume))).build());
+ .volumes(Iterables.transform(from.getDevices().values(), deviceToVolume)).build());
builder.status(serverStatusToNodeStatus.get(from.getStatus()));
builder.publicAddresses(ImmutableSet.<String> of(from.getNics().get(0).getDhcp()));
builder.privateAddresses(ImmutableSet.<String> of());
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/KeystoneApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/KeystoneApi.java
index 0085f34..125b9ec 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/KeystoneApi.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/KeystoneApi.java
@@ -68,17 +68,17 @@
* Provides synchronous access to Token features
*/
@Delegate
- Optional<TokenApi> getTokenApi();
+ Optional<? extends TokenApi> getTokenApi();
/**
* Provides synchronous access to User features
*/
@Delegate
- Optional<UserApi> getUserApi();
+ Optional<? extends UserApi> getUserApi();
/**
* Provides synchronous access to Tenant features
*/
@Delegate
- Optional<TenantApi> getTenantApi();
+ Optional<? extends TenantApi> getTenantApi();
}
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/KeystoneAsyncApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/KeystoneAsyncApi.java
index 52ac90d..e751a40 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/KeystoneAsyncApi.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/KeystoneAsyncApi.java
@@ -71,17 +71,17 @@
* @see KeystoneApi#getTokenApi()
*/
@Delegate
- Optional<TokenAsyncApi> getTokenApi();
+ Optional<? extends TokenAsyncApi> getTokenApi();
/**
* @see KeystoneApi#getUserApi()
*/
@Delegate
- Optional<UserAsyncApi> getUserApi();
+ Optional<? extends UserAsyncApi> getUserApi();
/**
* @see KeystoneApi#getTenantApi()
*/
@Delegate
- Optional<TenantAsyncApi> getTenantApi();
+ Optional<? extends TenantAsyncApi> getTenantApi();
}
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
index 9987e9b..e3861a5 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
@@ -186,11 +186,11 @@
}
// TODO: what is the timeout of the session token? modify default accordingly
- // PROPERTY_SESSION_INTERVAL is default to 60 seconds, but we have this here at 23 hours for now.
+ // PROPERTY_SESSION_INTERVAL is default to 60 seconds, but we have this here at 11 hours for now.
@Provides
@Singleton
public LoadingCache<Credentials, Access> provideAccessCache(Function<Credentials, Access> getAccess) {
- return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS).build(CacheLoader.from(getAccess));
+ return CacheBuilder.newBuilder().expireAfterWrite(11, TimeUnit.HOURS).build(CacheLoader.from(getAccess));
}
// Temporary conversion of a cache to a supplier until there is a single-element cache
diff --git a/compute/src/main/java/org/jclouds/compute/domain/internal/TemplateBuilderImpl.java b/compute/src/main/java/org/jclouds/compute/domain/internal/TemplateBuilderImpl.java
index bbf3fa8..886ce9d 100644
--- a/compute/src/main/java/org/jclouds/compute/domain/internal/TemplateBuilderImpl.java
+++ b/compute/src/main/java/org/jclouds/compute/domain/internal/TemplateBuilderImpl.java
@@ -1086,7 +1086,7 @@
@Override
public TemplateBuilder from(TemplateBuilderSpec spec) {
- return spec.copyTo(this, options != null ? options : optionsProvider.get());
+ return spec.copyTo(this, options != null ? options : (options = optionsProvider.get()));
}
@Override
diff --git a/compute/src/test/java/org/jclouds/compute/domain/internal/TemplateBuilderImplTest.java b/compute/src/test/java/org/jclouds/compute/domain/internal/TemplateBuilderImplTest.java
index e7fa698..172a1f0 100644
--- a/compute/src/test/java/org/jclouds/compute/domain/internal/TemplateBuilderImplTest.java
+++ b/compute/src/test/java/org/jclouds/compute/domain/internal/TemplateBuilderImplTest.java
@@ -777,4 +777,60 @@
assertEquals(template.getLocation().getId(), "us-east-2");
}
+
+
+
+ @Test
+ public void testFromSpecWithLoginUser() {
+
+ final Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
+ .<Location> of(region));
+ final Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet
+ .<Image> of(
+ new ImageBuilder()
+ .id("us-east-2/ami-ffff")
+ .providerId("ami-ffff")
+ .name("Ubuntu 11.04 x64")
+ .description("Ubuntu 11.04 x64")
+ .location(region2)
+ .status(Status.AVAILABLE)
+ .operatingSystem(
+ OperatingSystem.builder().name("Ubuntu 11.04 x64").description("Ubuntu 11.04 x64")
+ .is64Bit(true).version("11.04").family(OsFamily.UBUNTU).build()).build()));
+
+ final Supplier<Set<? extends Hardware>> hardwares = Suppliers.<Set<? extends Hardware>> ofInstance(ImmutableSet
+ .<Hardware> of(
+ new HardwareBuilder()
+ .ids("m1.small").ram(512)
+ .processors(ImmutableList.of(new Processor(1, 1.0)))
+ .volumes(ImmutableList.<Volume> of(new VolumeImpl((float) 5, true, true))).build()));
+
+ final Provider<TemplateOptions> optionsProvider = new Provider<TemplateOptions>() {
+
+ @Override
+ public TemplateOptions get() {
+ return new TemplateOptions();
+ }
+
+ };
+ Provider<TemplateBuilder> templateBuilderProvider = new Provider<TemplateBuilder>() {
+
+ @Override
+ public TemplateBuilder get() {
+ return createTemplateBuilder(null, locations, images, hardwares, region, optionsProvider, this);
+ }
+
+ };
+
+ TemplateBuilder templateBuilder = templateBuilderProvider.get().from("hardwareId=m1.small,imageId=us-east-2/ami-ffff,loginUser=user:Password01,authenticateSudo=true");
+
+ assertEquals(templateBuilder.toString(), "{imageId=us-east-2/ami-ffff, hardwareId=m1.small}");
+
+ Template template = templateBuilder.build();
+ assertEquals(template.getLocation().getId(), "us-east-2");
+ assertEquals(template.getOptions().getLoginUser(), "user");
+ assertEquals(template.getOptions().getLoginPassword(), "Password01");
+ assertEquals(template.getOptions().getLoginPrivateKey(), null);
+ assertEquals(template.getOptions().shouldAuthenticateSudo(), Boolean.TRUE);
+ }
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/core/src/main/java/org/jclouds/functions/ToLowerCase.java
similarity index 73%
rename from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
rename to core/src/main/java/org/jclouds/functions/ToLowerCase.java
index 2575c00..4883769 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/core/src/main/java/org/jclouds/functions/ToLowerCase.java
@@ -1,4 +1,4 @@
-/*
+/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -16,24 +16,24 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.functions;
-import java.net.URI;
+import static com.google.common.base.Preconditions.checkNotNull;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
-
import com.google.common.base.Function;
/**
- * @author danikov
+ * @author Everett Toews
*/
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
- }
+public class ToLowerCase implements Function<String, String> {
+
+ @Override
+ public String apply(String input) {
+ checkNotNull(input, "input cannot be null");
+ return input.toLowerCase();
+ }
+
}
diff --git a/core/src/main/java/org/jclouds/http/HttpMessage.java b/core/src/main/java/org/jclouds/http/HttpMessage.java
index b9cd845..5c1acb8 100644
--- a/core/src/main/java/org/jclouds/http/HttpMessage.java
+++ b/core/src/main/java/org/jclouds/http/HttpMessage.java
@@ -24,6 +24,7 @@
import java.io.InputStream;
import java.util.Collection;
+import org.jclouds.functions.ToLowerCase;
import org.jclouds.http.internal.PayloadEnclosingImpl;
import org.jclouds.io.Payload;
import org.jclouds.io.Payloads;
@@ -190,8 +191,10 @@
*/
public String getFirstHeaderOrNull(String string) {
Collection<String> values = headers.get(string);
- if (values.size() == 0)
- values = headers.get(string.toLowerCase());
+ if (values.size() == 0) {
+ Multimap<String, String> lowerCaseHeaders = Multimaps2.transformKeys(getHeaders(), new ToLowerCase());
+ values = lowerCaseHeaders.get(string.toLowerCase());
+ }
return (values.size() >= 1) ? values.iterator().next() : null;
}
diff --git a/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java b/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
index e8d4e9e..215821a 100644
--- a/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
+++ b/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
@@ -157,6 +157,7 @@
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.inject.Inject;
import com.google.inject.Injector;
@@ -558,16 +559,12 @@
}
public static Multimap<String, String> filterOutContentHeaders(Multimap<String, String> headers) {
- // TODO make a filter like {@link Maps.filterKeys} instead of this
- ImmutableMultimap.Builder<String, String> headersBuilder = ImmutableMultimap.builder();
// http message usually comes in as a null key header, let's filter it
// out.
- for (String header : Iterables.filter(headers.keySet(), Predicates.notNull())) {
- if (!ContentMetadata.HTTP_HEADERS.contains(header)) {
- headersBuilder.putAll(header, headers.get(header));
- }
- }
- return headersBuilder.build();
+ return ImmutableMultimap.copyOf(Multimaps.filterKeys(headers,
+ Predicates.and(
+ Predicates.notNull(),
+ Predicates.not(Predicates.in(ContentMetadata.HTTP_HEADERS)))));
}
public static final String BOUNDARY = "--JCLOUDS--";
diff --git a/core/src/main/java/org/jclouds/util/Multimaps2.java b/core/src/main/java/org/jclouds/util/Multimaps2.java
index aaabbf8..5d82137 100644
--- a/core/src/main/java/org/jclouds/util/Multimaps2.java
+++ b/core/src/main/java/org/jclouds/util/Multimaps2.java
@@ -22,7 +22,9 @@
import java.util.Map;
import java.util.Set;
+import java.util.Map.Entry;
+import com.google.common.base.Function;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;
@@ -89,4 +91,28 @@
public static <K, V> Multimap<K, V> withoutKeys(Multimap<K, V> fromMultimap, Set<K> keys) {
return Multimaps.<K, V> filterKeys(fromMultimap, Predicates.not(Predicates.in(keys)));
}
+
+ /**
+ * change the keys but keep the values in-tact.
+ *
+ * @param <K1>
+ * input key type
+ * @param <K2>
+ * output key type
+ * @param <V>
+ * value type
+ * @param in
+ * input map to transform
+ * @param fn
+ * how to transform the values
+ * @return immutableMap with the new keys.
+ */
+ public static <K1, K2, V> Multimap<K2, V> transformKeys(Multimap<K1, V> in, Function<K1, K2> fn) {
+ checkNotNull(in, "input map");
+ checkNotNull(fn, "function");
+ Builder<K2, V> returnVal = ImmutableMultimap.builder();
+ for (Entry<K1, V> entry : in.entries())
+ returnVal.put(fn.apply(entry.getKey()), entry.getValue());
+ return returnVal.build();
+ }
}
diff --git a/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java b/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java
index 341dc8c..2d89de9 100644
--- a/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java
+++ b/core/src/main/java/org/jclouds/xml/internal/JAXBParser.java
@@ -43,14 +43,14 @@
*/
@Singleton
public class JAXBParser implements XMLParser {
-
+
/** Boolean indicating if the output must be pretty printed. */
private Boolean prettyPrint;
-
+
@Inject
public JAXBParser(@Named(Constants.PROPERTY_PRETTY_PRINT_PAYLOADS) String prettyPrint) {
- super();
- this.prettyPrint = Boolean.valueOf(prettyPrint);
+ super();
+ this.prettyPrint = Boolean.valueOf(prettyPrint);
}
@Override
@@ -81,7 +81,7 @@
Unmarshaller unmarshaller = context.createUnmarshaller();
return (T) unmarshaller.unmarshal(reader);
} catch (Exception ex) {
- throw new IOException("Could not unmarshall document", ex);
+ throw new IOException("Could not unmarshall document into type: " + type.getSimpleName() + "\n" + xml, ex);
}
}
}
diff --git a/core/src/test/java/org/jclouds/util/Multimaps2Test.java b/core/src/test/java/org/jclouds/util/Multimaps2Test.java
new file mode 100644
index 0000000..101e360
--- /dev/null
+++ b/core/src/test/java/org/jclouds/util/Multimaps2Test.java
@@ -0,0 +1,41 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.util;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.functions.ToLowerCase;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Multimap;
+
+/**
+ * @author Everett Toews
+ */
+@Test(groups = "unit")
+public class Multimaps2Test {
+ public void testTransformKeysToLowerCase() {
+ Multimap<String, String> map = ImmutableMultimap.of("oNe", "1", "TWO", "2", "three", "3", "Three", "3.0");
+ Multimap<String, String> expected = ImmutableMultimap.of("one", "1", "two", "2", "three", "3", "three", "3.0");
+ Multimap<String, String> transformed = Multimaps2.transformKeys(map, new ToLowerCase());
+
+ assertEquals(transformed, expected);
+ }
+}
diff --git a/labs/openstack-quantum/src/main/java/org/jclouds/openstack/quantum/v1_0/domain/Network.java b/labs/openstack-quantum/src/main/java/org/jclouds/openstack/quantum/v1_0/domain/Network.java
index 7aaed3d..97da1eb 100644
--- a/labs/openstack-quantum/src/main/java/org/jclouds/openstack/quantum/v1_0/domain/Network.java
+++ b/labs/openstack-quantum/src/main/java/org/jclouds/openstack/quantum/v1_0/domain/Network.java
@@ -85,7 +85,7 @@
@Override
public int hashCode() {
- return Objects.hashCode(name);
+ return Objects.hashCode(super.hashCode(), name);
}
@Override
diff --git a/labs/vcloud-director/pom.xml b/labs/vcloud-director/pom.xml
index 771379b..0971f57 100644
--- a/labs/vcloud-director/pom.xml
+++ b/labs/vcloud-director/pom.xml
@@ -39,13 +39,19 @@
<test.vcloud-director.build-version>1.5.0.464915</test.vcloud-director.build-version>
<test.vcloud-director.identity>FIXME_USERNAME_WHICH_MIGHT_BE_EMAIL@JClouds</test.vcloud-director.identity>
<test.vcloud-director.credential>FIXME_PASSWORD</test.vcloud-director.credential>
- <test.vcloud-director.template />
- <test.vcloud-director.catalog-id />
- <test.vcloud-director.media-id />
- <test.vcloud-director.vapptemplate-id />
- <test.vcloud-director.network-id />
- <test.vcloud-director.vdc-id />
- <test.vcloud-director.user-id />
+ <test.vcloud-director.template></test.vcloud-director.template>
+ <!-- URN format: ex. urn:vcloud:catalog:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
+ <test.vcloud-director.catalog-id></test.vcloud-director.catalog-id>
+ <!-- URN format: ex. urn:vcloud:media:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
+ <test.vcloud-director.media-id></test.vcloud-director.media-id>
+ <!-- URN format: ex. urn:vcloud:vapptemplate:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
+ <test.vcloud-director.vapptemplate-id></test.vcloud-director.vapptemplate-id>
+ <!-- URN format: ex. urn:vcloud:network:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
+ <test.vcloud-director.network-id></test.vcloud-director.network-id>
+ <!-- URN format: ex. urn:vcloud:vdc:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
+ <test.vcloud-director.vdc-id></test.vcloud-director.vdc-id>
+ <!-- URN format: ex. urn:vcloud:user:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
+ <test.vcloud-director.user-id></test.vcloud-director.user-id>
<jclouds.osgi.export>org.jclouds.vcloud.director.v1_5*;version="${project.version}"</jclouds.osgi.export>
<jclouds.osgi.import>
@@ -58,6 +64,11 @@
<dependencies>
<dependency>
+ <groupId>com.jamesmurty.utils</groupId>
+ <artifactId>java-xmlbuilder</artifactId>
+ <version>0.4</version>
+ </dependency>
+ <dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-compute</artifactId>
<version>${project.version}</version>
@@ -89,7 +100,7 @@
</dependency>
<dependency>
<groupId>org.jclouds.driver</groupId>
- <artifactId>jclouds-log4j</artifactId>
+ <artifactId>jclouds-slf4j</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorException.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorException.java
index cbb1120..b6aa1e1 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorException.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorException.java
@@ -40,6 +40,9 @@
private final Error error;
private final Task task;
+ // TODO: this type wipes out the http response, which often has the data needed to troubleshoot
+ // the issue
+
public VCloudDirectorException(Error error) {
super(message(error, "Error"));
this.error = error;
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java
index d12ed4f..0047453 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java
@@ -225,6 +225,6 @@
TEXT_XML, ADMIN_VDC, NETWORK_POOL, ADMIN_ORG, ENTITY, ADMIN
);
- // NOTE These lists must be updated whenever a new media type constant is added.
+ // NOTE These lists must be edited whenever a new media type constant is added.
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java
index fd56185..4df2d93 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java
@@ -19,6 +19,8 @@
package org.jclouds.vcloud.director.v1_5.admin;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.SkipEncoding;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgAsyncApi;
@@ -26,6 +28,7 @@
import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.GroupAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.UserAsyncApi;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
/**
@@ -34,6 +37,8 @@
* @see VCloudDirectorAdminApi
* @author danikov
*/
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+@SkipEncoding({ '-', ':' })
public interface VCloudDirectorAdminAsyncApi extends VCloudDirectorAsyncApi {
/**
* @return asynchronous access to admin query features
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
index 7eae4e9..d57e0f2 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
@@ -41,56 +41,58 @@
import org.jclouds.rest.config.RestClientModule;
import org.jclouds.rest.internal.RestContextImpl;
import org.jclouds.util.Suppliers2;
-import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
+import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
import org.jclouds.vcloud.director.v1_5.annotations.Login;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
import org.jclouds.vcloud.director.v1_5.domain.Session;
import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken;
-import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
-import org.jclouds.vcloud.director.v1_5.features.MediaAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.MediaApi;
-import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.MediaAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
-import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.NetworkApi;
-import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.OrgApi;
-import org.jclouds.vcloud.director.v1_5.features.QueryAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.QueryApi;
-import org.jclouds.vcloud.director.v1_5.features.TaskAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.QueryAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.TaskApi;
-import org.jclouds.vcloud.director.v1_5.features.UploadAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.TaskAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.UploadApi;
-import org.jclouds.vcloud.director.v1_5.features.VAppAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.UploadAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.VAppApi;
-import org.jclouds.vcloud.director.v1_5.features.VAppTemplateAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.VAppAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.VAppTemplateApi;
-import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.VAppTemplateAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.VdcApi;
-import org.jclouds.vcloud.director.v1_5.features.VmAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.VmApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.VmAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.GroupAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.GroupApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.UserAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.admin.GroupAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.admin.UserApi;
+import org.jclouds.vcloud.director.v1_5.features.admin.UserAsyncApi;
import org.jclouds.vcloud.director.v1_5.functions.LoginUserInOrgWithPassword;
+import org.jclouds.vcloud.director.v1_5.functions.href.ResolveEntity;
import org.jclouds.vcloud.director.v1_5.handlers.InvalidateSessionAndRetryOn401AndLogoutOnClose;
import org.jclouds.vcloud.director.v1_5.handlers.VCloudDirectorErrorHandler;
-import org.jclouds.vcloud.director.v1_5.login.SessionAsyncApi;
import org.jclouds.vcloud.director.v1_5.login.SessionApi;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
+import org.jclouds.vcloud.director.v1_5.login.SessionAsyncApi;
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
+import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
import com.google.common.base.Function;
import com.google.common.base.Supplier;
@@ -227,6 +229,20 @@
@Provides
@Singleton
+ protected Function<String, Entity> makeSureResolveEntityRetriesOnTimeout(ResolveEntity resolveEntity) {
+ // we should retry on timeout exception logging in.
+ return new RetryOnTimeOutExceptionFunction<String, Entity>(resolveEntity);
+ }
+
+ @Provides
+ @Singleton
+ public LoadingCache<String, Entity> resolveEntityCache(Function<String, Entity> getEntity,
+ @Named(Constants.PROPERTY_SESSION_INTERVAL) int seconds) {
+ return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(CacheLoader.from(getEntity));
+ }
+
+ @Provides
+ @Singleton
protected Function<Credentials, SessionWithToken> makeSureFilterRetriesOnTimeout(
LoginUserInOrgWithPassword loginWithPasswordCredentials) {
// we should retry on timeout exception logging in.
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CatalogReference.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CatalogReference.java
index 69b57d7..76904cc 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CatalogReference.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/CatalogReference.java
@@ -53,8 +53,8 @@
super(builder);
}
- public CatalogReference(URI href, String id, String name, String type) {
- super(href, id, name, type);
+ public CatalogReference(URI href, String name, String type) {
+ super(href, name, type);
}
protected CatalogReference() {
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Metadata.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Metadata.java
index bd020be..266cd2b 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Metadata.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Metadata.java
@@ -21,7 +21,8 @@
import static com.google.common.base.Objects.equal;
import static com.google.common.base.Preconditions.checkNotNull;
-import java.util.Collections;
+import java.util.Collection;
+import java.util.Map;
import java.util.Set;
import javax.xml.bind.annotation.XmlElement;
@@ -31,20 +32,22 @@
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
/**
* Represents a set of metadata
* <p/>
+ *
* <pre>
* <xs:complexType name="Metadata">
* </pre>
- *
+ *
* @author danikov
*/
@XmlRootElement(name = "Metadata")
-public class Metadata extends Resource {
+public class Metadata extends Resource implements Map<String, String> {
public static final String MEDIA_TYPE = VCloudDirectorMediaType.METADATA;
@@ -59,7 +62,7 @@
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
}
-
+
public static abstract class Builder<B extends Builder<B>> extends Resource.Builder<B> {
private Set<MetadataEntry> metadataEntries = Sets.newLinkedHashSet();
@@ -99,12 +102,19 @@
this.metadataEntries = ImmutableSet.copyOf(builder.metadataEntries);
}
-
@XmlElement(name = "MetadataEntry")
private Set<MetadataEntry> metadataEntries = Sets.newLinkedHashSet();
public Set<MetadataEntry> getMetadataEntries() {
- return Collections.unmodifiableSet(metadataEntries);
+ return ImmutableSet.copyOf(metadataEntries);
+ }
+
+ protected Map<String, String> toMap() {
+ ImmutableMap.Builder<String, String> builder = ImmutableMap.<String, String> builder();
+ for (MetadataEntry entry : metadataEntries) {
+ builder.put(entry.getKey(), entry.getValue());
+ }
+ return builder.build();
}
@Override
@@ -127,4 +137,64 @@
return super.string().add("metadataEntries", metadataEntries);
}
+ @Override
+ public void clear() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean containsKey(Object arg0) {
+ return toMap().containsKey(arg0);
+ }
+
+ @Override
+ public boolean containsValue(Object arg0) {
+ return toMap().containsValue(arg0);
+ }
+
+ @Override
+ public Set<Map.Entry<String, String>> entrySet() {
+ return toMap().entrySet();
+ }
+
+ @Override
+ public String get(Object arg0) {
+ return toMap().get(arg0);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return getMetadataEntries().size() == 0;
+ }
+
+ @Override
+ public Set<String> keySet() {
+ return toMap().keySet();
+ }
+
+ @Override
+ public String put(String arg0, String arg1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void putAll(Map<? extends String, ? extends String> arg0) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String remove(Object arg0) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public int size() {
+ return getMetadataEntries().size();
+ }
+
+ @Override
+ public Collection<String> values() {
+ return toMap().values();
+ }
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/MetadataEntry.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/MetadataEntry.java
index 0319146..bb93f43 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/MetadataEntry.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/MetadataEntry.java
@@ -42,6 +42,7 @@
*
* @author danikov
*/
+//TODO: this is a ridiculously complicated way of representing Map<String, String>
@XmlRootElement(name = "MetadataEntry")
public class MetadataEntry extends Resource {
@@ -136,7 +137,7 @@
}
- private MetadataEntry() {
+ MetadataEntry() {
// for JAXB
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Reference.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Reference.java
index ee81e06..ba80711 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Reference.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Reference.java
@@ -29,26 +29,24 @@
import javax.xml.bind.annotation.XmlType;
import org.jclouds.logging.Logger;
+import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* A reference to a resource.
- *
+ *
* Contains an href attribute and optional name and type attributes.
* <p>
+ *
* <pre>
* <xs:complexType name="ReferenceType">
* </pre>
- *
+ *
* @author grkvlt@apache.org
*/
-@XmlSeeAlso({
- VAppReference.class,
- CatalogReference.class,
- RoleReference.class
-})
+@XmlSeeAlso({ VAppReference.class, CatalogReference.class, RoleReference.class })
@XmlRootElement(name = "Reference")
@XmlType(name = "ReferenceType")
public class Reference {
@@ -66,14 +64,13 @@
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
}
-
+
public static class Builder<B extends Builder<B>> {
private URI href;
- private String id;
private String name;
private String type;
-
+
@SuppressWarnings("unchecked")
protected B self() {
return (B) this;
@@ -88,14 +85,6 @@
}
/**
- * @see Reference#getId()
- */
- public B id(String id) {
- this.id = id;
- return self();
- }
-
- /**
* @see Reference#getType()
*/
public B type(String type) {
@@ -116,37 +105,33 @@
}
public B fromReference(Reference in) {
- return href(in.getHref()).id(in.getId()).name(in.getName()).type(in.getType());
+ return href(in.getHref()).name(in.getName()).type(in.getType());
}
public B fromEntity(Entity in) {
- return href(in.getHref()).id(in.getId()).name(in.getName()).type(in.getType());
+ return href(in.getHref()).name(in.getName()).type(in.getType());
}
-
+
protected B fromAttributes(Map<String, String> attributes) {
- return href(URI.create(attributes.get("href"))).id(attributes.get("id")).name(attributes.get("name")).type(attributes.get("type"));
+ return href(URI.create(attributes.get("href"))).name(attributes.get("name")).type(attributes.get("type"));
}
}
@XmlAttribute(required = true)
private URI href;
@XmlAttribute
- private String id;
- @XmlAttribute
private String name;
@XmlAttribute
private String type;
protected Reference(Builder<?> builder) {
this.href = builder.href;
- this.id = builder.id;
this.name = builder.name;
this.type = builder.type;
}
- protected Reference(URI href, String id, String name, String type) {
+ protected Reference(URI href, String name, String type) {
this.href = href;
- this.id = id;
this.name = name;
this.type = type;
}
@@ -165,7 +150,7 @@
* particular context. Although URLs have a well-known syntax and a well-understood
* interpretation, a api should treat each href as an opaque string. The rules that govern how
* the server constructs href strings might change in future releases.
- *
+ *
* @return an opaque reference and should never be parsed
*/
public URI getHref() {
@@ -173,21 +158,11 @@
}
/**
- * The resource identifier, expressed in URN format.
- * <p/>
- * The value of this attribute uniquely identifies the resource, persists for the life of the
- * resource, and is never reused.
- */
- public String getId() {
- return id;
- }
-
- /**
* Contains the name of the the entity.
* <p/>
* The object type, specified as a MIME content type, of the object that the link references.
* This attribute is present only for links to objects. It is not present for links to actions.
- *
+ *
* @return type definition, type, expressed as an HTTP Content-Type
*/
public String getName() {
@@ -199,7 +174,7 @@
* <p/>
* The object type, specified as a MIME content type, of the object that the link references.
* This attribute is present only for links to objects. It is not present for links to actions.
- *
+ *
* @return type definition, type, expressed as an HTTP Content-Type
*/
public String getType() {
@@ -213,12 +188,12 @@
if (o == null || getClass() != o.getClass())
return false;
Reference that = Reference.class.cast(o);
- return equal(this.href, that.href) && equal(this.id, that.id) && equal(this.name, that.name) && equal(this.type, that.type);
+ return equal(this.href, that.href) && equal(this.name, that.name) && equal(this.type, that.type);
}
@Override
public int hashCode() {
- return Objects.hashCode(href, id, name, type);
+ return Objects.hashCode(href, name, type);
}
@Override
@@ -227,13 +202,15 @@
}
protected ToStringHelper string() {
- return Objects.toStringHelper("").add("href", href).add("id", id).add("name", name).add("type", type);
+ return Objects.toStringHelper("").add("href", href).add("name", name).add("type", type);
}
-
+
+ /**
+ * @see VCloudDirectorApi#resolveEntity
+ */
+ @Deprecated
public Reference toAdminReference(String endpoint) {
- return toBuilder()
- .type(null)
- .href(URI.create(getHref().toASCIIString().replace(endpoint, endpoint+"/admin")))
- .build();
+ return toBuilder().type(null).href(URI.create(getHref().toASCIIString().replace(endpoint, endpoint + "/admin")))
+ .build();
}
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/RoleReference.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/RoleReference.java
index 2a9e54a..f7850b6 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/RoleReference.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/RoleReference.java
@@ -53,8 +53,8 @@
super(builder);
}
- public RoleReference(URI href, String id, String name, String type) {
- super(href, id, name, type);
+ public RoleReference(URI href, String name, String type) {
+ super(href, name, type);
}
protected RoleReference() {
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Session.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Session.java
index 568c834..fcb93190 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Session.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Session.java
@@ -70,7 +70,7 @@
}
/**
- * @see Session#getOrg()
+ * @see Session#get()
*/
public Builder org(String org) {
this.org = org;
@@ -106,7 +106,7 @@
}
public Builder fromSession(Session in) {
- return user(in.getUser()).org(in.getOrg()).href(in.getHref()).links(in.getLinks());
+ return user(in.getUser()).org(in.get()).href(in.getHref()).links(in.getLinks());
}
}
@@ -144,7 +144,7 @@
/**
* @return is the name of an organization of which the user is a member
*/
- public String getOrg() {
+ public String get() {
return org;
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Task.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Task.java
index 332a375..c734ab2 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Task.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Task.java
@@ -138,7 +138,7 @@
}
/**
- * @see Task#getOrg()
+ * @see Task#get()
*/
public B org(Reference org) {
this.org = org;
@@ -241,7 +241,7 @@
public B fromTask(Task in) {
return fromEntityType(in)
.error(in.getError())
- .org(in.getOrg())
+ .org(in.get())
.progress(in.getProgress())
.owner(in.getOwner())
.user(in.getUser())
@@ -310,7 +310,7 @@
/**
* The organization that started the task.
*/
- public Reference getOrg() {
+ public Reference get() {
return org;
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppReference.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppReference.java
index 06f14d1..19cd924 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppReference.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/VAppReference.java
@@ -53,8 +53,8 @@
super(builder);
}
- public VAppReference(URI href, String id, String name, String type) {
- super(href, id, name, type);
+ public VAppReference(URI href, String name, String type) {
+ super(href, name, type);
}
protected VAppReference() {
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/IpScope.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/IpScope.java
index 5c497b4..26580a0 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/IpScope.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/IpScope.java
@@ -131,7 +131,7 @@
}
}
- private IpScope() {
+ IpScope() {
// For JAXB
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NatRule.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NatRule.java
index 0a84e29..28f8c90 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NatRule.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NatRule.java
@@ -140,7 +140,7 @@
this.vmRule = vmRule;
}
- private NatRule() {
+ NatRule() {
// for JAXB
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkConnection.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkConnection.java
index 74d7b29..9b3b469 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkConnection.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkConnection.java
@@ -227,7 +227,7 @@
this.needsCustomization = needsCustomization;
}
- private NetworkConnection() {
+ NetworkConnection() {
// for JAXB
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkFeatures.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkFeatures.java
index e8d3714..07cd191 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkFeatures.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkFeatures.java
@@ -76,7 +76,7 @@
}
}
- private NetworkFeatures() {
+ NetworkFeatures() {
// for JAXB
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkServiceType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkServiceType.java
index 3de01fb..cd624c8 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkServiceType.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/network/NetworkServiceType.java
@@ -84,7 +84,7 @@
return true;
if (o == null || getClass() != o.getClass())
return false;
- NetworkServiceType that = NetworkServiceType.class.cast(o);
+ NetworkServiceType<?> that = NetworkServiceType.class.cast(o);
return equal(isEnabled, that.isEnabled);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/org/OrgList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/org/OrgList.java
index 716479d..350f659 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/org/OrgList.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/org/OrgList.java
@@ -18,7 +18,6 @@
*/
package org.jclouds.vcloud.director.v1_5.domain.org;
-import static com.google.common.base.Objects.equal;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
@@ -30,7 +29,7 @@
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
-import com.google.common.base.Objects;
+import com.google.common.collect.ForwardingSet;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
@@ -40,7 +39,7 @@
* @author Adrian Cole
*/
@XmlRootElement(name = "OrgList")
-public class OrgList {
+public class OrgList extends ForwardingSet<Reference> {
public static final String MEDIA_TYPE = VCloudDirectorMediaType.ORG_LIST;
@@ -77,7 +76,7 @@
}
public Builder fromOrgList(OrgList in) {
- return orgs(in.getOrgs());
+ return orgs(in.delegate());
}
}
@@ -92,27 +91,9 @@
@XmlElement(name = "Org")
private Set<Reference> orgs = Sets.newLinkedHashSet();
- public Set<Reference> getOrgs() {
+ @Override
+ protected Set<Reference> delegate() {
return Collections.unmodifiableSet(orgs);
}
- @Override
- public boolean equals(Object o) {
- if (this == o)
- return true;
- if (o == null || getClass() != o.getClass())
- return false;
- OrgList that = OrgList.class.cast(o);
- return equal(orgs, that.orgs);
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(orgs);
- }
-
- @Override
- public String toString() {
- return Objects.toStringHelper("").add("orgs", orgs).toString();
- }
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/ControlAccessParams.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/ControlAccessParams.java
index f9b9740..edf0403 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/ControlAccessParams.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/ControlAccessParams.java
@@ -167,7 +167,7 @@
/**
* The access settings to be applied if {@link #isSharedToEveryone()} is false.
*
- * Required on create and modify if {@link #isSharedToEveryone()} is false.
+ * Required on create and edit if {@link #isSharedToEveryone()} is false.
*/
public List<AccessSetting> getAccessSettings() {
return accessSettings == null ? Collections.<AccessSetting>emptyList() : accessSettings;
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/PublishCatalogParams.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/PublishCatalogParams.java
index 1bd9b81..d2e1919 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/PublishCatalogParams.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/PublishCatalogParams.java
@@ -46,6 +46,7 @@
@XmlType(propOrder = {
"isPublished"
})
+//TODO: this is ridiculous
public class PublishCatalogParams {
public static Builder builder() {
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/RecomposeVAppParams.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/RecomposeVAppParams.java
index ba80935..c097649 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/RecomposeVAppParams.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/RecomposeVAppParams.java
@@ -69,7 +69,7 @@
public static abstract class Builder<B extends Builder<B>> extends ComposeVAppParams.Builder<B> {
private List<Vm> createItem;
- private List<Reference> deleteItem;
+ private List<Reference> removeItem;
/**
* @see RecomposeVAppParams#getCreateItem()
@@ -82,8 +82,8 @@
/**
* @see RecomposeVAppParams#getDeleteItem()
*/
- public B deleteItem(List<Reference> deleteItem) {
- this.deleteItem = deleteItem;
+ public B removeItem(List<Reference> removeItem) {
+ this.removeItem = removeItem;
return self();
}
@@ -93,7 +93,7 @@
}
public B fromRecomposeVAppParams(RecomposeVAppParams in) {
- return fromComposeVAppParams(in).createItem(in.getCreateItem()).deleteItem(in.getDeleteItem());
+ return fromComposeVAppParams(in).createItem(in.getCreateItem()).removeItem(in.getDeleteItem());
}
}
@@ -104,13 +104,13 @@
private RecomposeVAppParams(Builder<?> builder) {
super(builder);
this.createItem = builder.createItem;
- this.deleteItem = builder.deleteItem;
+ this.removeItem = builder.removeItem;
}
@XmlElement(name = "CreateItem")
protected List<Vm> createItem;
@XmlElement(name = "DeleteItem")
- protected List<Reference> deleteItem;
+ protected List<Reference> removeItem;
/**
* Gets the value of the createItem property.
@@ -123,13 +123,13 @@
}
/**
- * Gets the value of the deleteItem property.
+ * Gets the value of the removeItem property.
*/
public List<Reference> getDeleteItem() {
- if (deleteItem == null) {
- deleteItem = new ArrayList<Reference>();
+ if (removeItem == null) {
+ removeItem = new ArrayList<Reference>();
}
- return this.deleteItem;
+ return this.removeItem;
}
@Override
@@ -140,17 +140,17 @@
return false;
RecomposeVAppParams that = RecomposeVAppParams.class.cast(o);
return super.equals(that) &&
- equal(this.createItem, that.createItem) && equal(this.deleteItem, that.deleteItem);
+ equal(this.createItem, that.createItem) && equal(this.removeItem, that.removeItem);
}
@Override
public int hashCode() {
- return Objects.hashCode(super.hashCode(), createItem, deleteItem);
+ return Objects.hashCode(super.hashCode(), createItem, removeItem);
}
@Override
public ToStringHelper string() {
- return super.string().add("createItem", createItem).add("deleteItem", deleteItem);
+ return super.string().add("createItem", createItem).add("removeItem", removeItem);
}
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/SourcedCompositionItemParam.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/SourcedCompositionItemParam.java
index e76d24f..b74e4c0 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/SourcedCompositionItemParam.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/params/SourcedCompositionItemParam.java
@@ -147,7 +147,7 @@
this.sourceDelete = sourceDelete;
}
- private SourcedCompositionItemParam() {
+ SourcedCompositionItemParam() {
// for JAXB
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryList.java
index b8949e7..997e458 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryList.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryList.java
@@ -61,7 +61,7 @@
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
}
- private QueryList() {
+ QueryList() {
// for JAXB
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminGroupRecord.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminGroupRecord.java
index 083445a..4880c13 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminGroupRecord.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminGroupRecord.java
@@ -64,7 +64,7 @@
}
/**
- * @see QueryResultAdminGroupRecord#getOrg()
+ * @see QueryResultAdminGroupRecord#get()
*/
public B org(String val) {
this.org = val;
@@ -95,7 +95,7 @@
public B fromQueryResultAdminGroupRecord(QueryResultAdminGroupRecord in) {
return fromQueryResultRecordType(in)
.name(in.getName())
- .org(in.getOrg())
+ .org(in.get())
.roleName(in.getRoleName())
.isReadOnly(in.isReadOnly());
}
@@ -133,7 +133,7 @@
/**
* Organization reference or id
*/
- public String getOrg() {
+ public String get() {
return org;
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminUserRecord.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminUserRecord.java
index cc7c0a9..159ace1 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminUserRecord.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminUserRecord.java
@@ -71,7 +71,7 @@
}
/**
- * @see QueryResultAdminUserRecord#getOrg()
+ * @see QueryResultAdminUserRecord#get()
*/
public B org(String val) {
this.org = val;
@@ -158,7 +158,7 @@
public B fromQueryResultAdminUserRecord(QueryResultAdminUserRecord in) {
return fromQueryResultRecordType(in)
.name(in.getName())
- .org(in.getOrg())
+ .org(in.get())
.fullName(in.getFullName())
.isEnabled(in.isEnabled())
.numberOfDeployedVMs(in.getNumberOfDeployedVMs())
@@ -224,7 +224,7 @@
/**
* Organization reference or id
*/
- public String getOrg() {
+ public String get() {
return org;
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminVdcRecord.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminVdcRecord.java
index a2cb3d9..4f53ebc 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminVdcRecord.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultAdminVdcRecord.java
@@ -186,7 +186,7 @@
}
/**
- * @see QueryResultAdminVdcRecord#getOrg()
+ * @see QueryResultAdminVdcRecord#get()
*/
public B org(String val) {
this.org = val;
@@ -270,7 +270,7 @@
.providerVdcName(in.getProviderVdcName())
.providerVdc(in.getProviderVdc())
.orgName(in.getOrgName())
- .org(in.getOrg())
+ .org(in.get())
.numberOfVApps(in.getNumberOfVApps())
.numberOfMedia(in.getNumberOfMedia())
.numberOfVAppTemplates(in.getNumberOfVAppTemplates())
@@ -458,7 +458,7 @@
/**
* Organization reference or id
*/
- public String getOrg() {
+ public String get() {
return org;
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultMediaRecord.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultMediaRecord.java
index 475484e..a6d32f0 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultMediaRecord.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultMediaRecord.java
@@ -112,7 +112,7 @@
}
/**
- * @see QueryResultMediaRecord#getOrg()
+ * @see QueryResultMediaRecord#get()
*/
public B org(String val) {
this.org = val;
@@ -188,7 +188,7 @@
.name(in.getName())
.vdc(in.getVdc())
.vdcName(in.getVdcName())
- .org(in.getOrg())
+ .org(in.get())
.creationDate(in.getCreationDate())
.isBusy(in.isBusy())
.storageB(in.getStorageB())
@@ -296,7 +296,7 @@
/**
* Organization reference or id
*/
- public String getOrg() {
+ public String get() {
return org;
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultNetworkRecord.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultNetworkRecord.java
index 5f6bd1d..990da38 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultNetworkRecord.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultNetworkRecord.java
@@ -168,7 +168,7 @@
isBusy = builder.isBusy;
}
- private QueryResultNetworkRecord() {
+ QueryResultNetworkRecord() {
// for JAXB
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultVAppTemplateRecord.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultVAppTemplateRecord.java
index ba30b63..04b52b3 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultVAppTemplateRecord.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/query/QueryResultVAppTemplateRecord.java
@@ -119,7 +119,7 @@
}
/**
- * @see QueryResultVAppTemplateRecord#getOrg()
+ * @see QueryResultVAppTemplateRecord#get()
*/
public B org(String val) {
this.org = val;
@@ -187,7 +187,7 @@
.isPublished(in.isPublished())
.vdc(in.getVdc())
.vdcName(in.getVdcName())
- .org(in.getOrg())
+ .org(in.get())
.creationDate(in.getCreationDate())
.isBusy(in.isBusy())
.isGoldMaster(in.isGoldMaster())
@@ -292,7 +292,7 @@
/**
* Organization reference or id
*/
- public String getOrg() {
+ public String get() {
return org;
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java
index c323b05..08e9ff6 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java
@@ -23,89 +23,116 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.vcloud.director.v1_5.domain.Catalog;
import org.jclouds.vcloud.director.v1_5.domain.CatalogItem;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
+import org.jclouds.vcloud.director.v1_5.functions.href.CatalogItemURNToHref;
+import org.jclouds.vcloud.director.v1_5.functions.href.CatalogURNToHref;
/**
* Provides synchronous access to {@link Catalog} objects.
*
* @see CatalogAsyncApi
- * @author grkvlt@apache.org
+ * @author grkvlt@apache.org, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface CatalogApi {
/**
* Retrieves a catalog.
- *
+ *
* <pre>
* GET /catalog/{id}
* </pre>
- *
- * @param catalogUri the reference for the catalog
+ *
+ * @param catalogUri
+ * the reference for the catalog
* @return a catalog
*/
- Catalog getCatalog(URI catalogUri);
+ Catalog get(String catalogUrn);
+
+ Catalog get(URI catalogHref);
/**
* Creates a catalog item in a catalog.
- *
+ *
* <pre>
* POST /catalog/{id}/catalogItems
* </pre>
- *
- * @param catalogUri the URI of the catalog
- * @param item the catalog item to create
- * @return the created catalog item
+ *
+ * @param catalogUri
+ * the URI of the catalog
+ * @param item
+ * the catalog item to add
+ * @return the addd catalog item
*/
- CatalogItem addCatalogItem(URI catalogUri, CatalogItem item);
+ CatalogItem addItem(String catalogUrn, CatalogItem item);
+
+ CatalogItem addItem(URI catalogHref, CatalogItem item);
/**
* Retrieves a catalog item.
- *
+ *
* <pre>
* GET /catalogItem/{id}
* </pre>
*
- * @param catalogItemRef the reference for the catalog item
+ * @param catalogItemRef
+ * the reference for the catalog item
* @return the catalog item
*/
- CatalogItem getCatalogItem(URI catalogItemRef);
+ CatalogItem getItem(String catalogItemUrn);
+
+ CatalogItem getItem(URI catalogItemHref);
/**
* Modifies a catalog item.
- *
+ *
* <pre>
* PUT /catalogItem/{id}
* </pre>
- *
- * @param catalogItemRef the reference for the catalog item
- * @param catalogItem the catalog item
- * @return the updated catalog item
+ *
+ * @param catalogItemRef
+ * the reference for the catalog item
+ * @param catalogItem
+ * the catalog item
+ * @return the edited catalog item
*/
- CatalogItem updateCatalogItem(URI catalogItemRef, CatalogItem catalogItem);
+ CatalogItem editItem(String catalogItemUrn, CatalogItem catalogItem);
+
+ CatalogItem editItem(URI catalogItemHref, CatalogItem catalogItem);
/**
* Deletes a catalog item.
- *
+ *
* <pre>
* DELETE /catalogItem/{id}
* </pre>
- *
- * @param catalogItemRef the reference for the catalog item
+ *
+ * @param catalogItemRef
+ * the reference for the catalog item
*/
- void deleteCatalogItem(URI catalogItemRef);
+ void removeItem(String catalogItemUrn);
+
+ void removeItem(URI catalogItemHref);
/**
* @return synchronous access to {@link Metadata.Readable} features
*/
@Delegate
- MetadataApi.Readable getMetadataApi();
+ MetadataApi.Readable getMetadataApi(@EndpointParam(parser = CatalogURNToHref.class) String catalogUrn);
+
+ @Delegate
+ MetadataApi.Readable getMetadataApi(@EndpointParam URI catalogItemHref);
/**
* @return synchronous access to {@link Metadata.Writeable} features for CatalogItems
*/
@Delegate
- MetadataApi.Writeable getCatalogItemMetadataApi();
+ MetadataApi.Writeable getItemMetadataApi(@EndpointParam(parser = CatalogItemURNToHref.class) String catalogItemUrn);
+
+ @Delegate
+ MetadataApi.Writeable getItemMetadataApi(@EndpointParam URI catalogItemHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
index c7e39b7..6808341 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
@@ -39,73 +39,130 @@
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Catalog;
import org.jclouds.vcloud.director.v1_5.domain.CatalogItem;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.CatalogItemURNToHref;
+import org.jclouds.vcloud.director.v1_5.functions.href.CatalogURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
/**
* @see CatalogApi
- * @author grkvlt@apache.org
+ * @author grkvlt@apache.org, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface CatalogAsyncApi {
/**
- * Retrieves a catalog.
+ * @see CatalogApi#get(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<? extends Catalog> getCatalog(@EndpointParam URI catalogUri);
+ ListenableFuture<? extends Catalog> get(@EndpointParam(parser = CatalogURNToHref.class) String catalogUrn);
/**
- * Creates a catalog item in a catalog.
+ * @see CatalogApi#addItem(String, CatalogItem)
*/
@POST
@Path("/catalogItems")
@Consumes(VCloudDirectorMediaType.CATALOG_ITEM)
@Produces(VCloudDirectorMediaType.CATALOG_ITEM)
@JAXBResponseParser
- ListenableFuture<CatalogItem> addCatalogItem(@EndpointParam URI catalogUri,
- @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
-
+ ListenableFuture<CatalogItem> addItem(@EndpointParam(parser = CatalogURNToHref.class) String catalogUrn,
+ @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
+
/**
- * Retrieves a catalog item.
+ * @see CatalogApi#getItem(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<CatalogItem> getCatalogItem(@EndpointParam URI catalogItemUri);
+ ListenableFuture<CatalogItem> getItem(@EndpointParam(parser = CatalogItemURNToHref.class) String catalogItemUrn);
/**
- * Modifies a catalog item.
+ * @see CatalogApi#editItem(String, CatalogItem)
*/
@PUT
@Consumes(VCloudDirectorMediaType.CATALOG_ITEM)
@Produces(VCloudDirectorMediaType.CATALOG_ITEM)
@JAXBResponseParser
- ListenableFuture<CatalogItem> updateCatalogItem(@EndpointParam URI catalogItemUri,
- @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
+ ListenableFuture<CatalogItem> editItem(@EndpointParam(parser = CatalogItemURNToHref.class) String catalogItemUrn,
+ @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
/**
- * Deletes a catalog item.
+ * @see CatalogApi#removeItem(String)
*/
@DELETE
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> deleteCatalogItem(@EndpointParam URI catalogItemUri);
+ ListenableFuture<Void> removeItem(@EndpointParam(parser = CatalogItemURNToHref.class) String catalogItemUrn);
+
+ /**
+ * @see CatalogApi#get(URI)
+ */
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<? extends Catalog> get(@EndpointParam URI catalogHref);
+
+ /**
+ * @see CatalogApi#addItem(URI, CatalogItem)
+ */
+ @POST
+ @Path("/catalogItems")
+ @Consumes(VCloudDirectorMediaType.CATALOG_ITEM)
+ @Produces(VCloudDirectorMediaType.CATALOG_ITEM)
+ @JAXBResponseParser
+ ListenableFuture<CatalogItem> addItem(@EndpointParam URI catalogHref,
+ @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
+
+ /**
+ * @see CatalogApi#getItem(URI)
+ */
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<CatalogItem> getItem(@EndpointParam URI catalogItemHref);
+
+ /**
+ * @see CatalogApi#editItem(URI, CatalogItem)
+ */
+ @PUT
+ @Consumes(VCloudDirectorMediaType.CATALOG_ITEM)
+ @Produces(VCloudDirectorMediaType.CATALOG_ITEM)
+ @JAXBResponseParser
+ ListenableFuture<CatalogItem> editItem(@EndpointParam URI catalogItemHref,
+ @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
+
+ /**
+ * @see CatalogApi#removeItem(URI)
+ */
+ @DELETE
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> removeItem(@EndpointParam URI catalogItemHref);
/**
* @return asynchronous access to {@link Metadata.Readable} features
*/
@Delegate
- MetadataAsyncApi.Readable getMetadataApi();
+ MetadataAsyncApi.Readable getMetadataApi(@EndpointParam(parser = CatalogURNToHref.class) String catalogUrn);
+
+ @Delegate
+ MetadataAsyncApi.Readable getMetadataApi(@EndpointParam URI catalogItemHref);
/**
- * @return asynchronous access to {@link Metadata.Writeable} features for CatalogItems
+ * @see CatalogApi#getItemMetadataApi
*/
@Delegate
- MetadataAsyncApi.Writeable getCatalogItemMetadataApi();
+ MetadataAsyncApi.Writeable getItemMetadataApi(@EndpointParam(parser = CatalogItemURNToHref.class) String catalogItemUrn);
+
+ @Delegate
+ MetadataAsyncApi.Writeable getItemMetadataApi(@EndpointParam URI catalogItemHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java
index a68719a..d3629e7 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java
@@ -23,16 +23,19 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.vcloud.director.v1_5.domain.Media;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams;
+import org.jclouds.vcloud.director.v1_5.functions.href.MediaURNToHref;
/**
* Provides synchronous access to {@link Media}.
*
* @see MediaAsyncApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface MediaApi {
@@ -42,48 +45,62 @@
*
* @return the media or null if not found
*/
- Media getMedia(URI mediaUri);
-
+ Media get(String mediaUrn);
+
+ Media get(URI mediaHref);
+
/**
* Creates a media (and present upload link for the floppy/iso file).
*
- * @return The response will return a link to transfer site to be able to continue with uploading the media.
+ * @return The response will return a link to transfer site to be able to continue with uploading
+ * the media.
*/
- Media createMedia(URI uploadLink, Media media);
-
+ Media add(URI uploadHref, Media media);
+
/**
- * Clones a media into new one.
- * The status of the returned media is UNRESOLVED(0) until the task for cloning finish.
+ * Clones a media into new one. The status of the returned media is UNRESOLVED(0) until the task
+ * for cloning finish.
*
- * @return a Media resource which will contain a task.
- * The user should monitor the contained task status in order to check when it is completed.
+ * @return a Media resource which will contain a task. The user should monitor the contained task
+ * status in order to check when it is completed.
*/
- Media cloneMedia(URI cloneLink, CloneMediaParams params);
-
+ Media clone(String mediaUrn, CloneMediaParams params);
+
+ Media clone(URI mediaHref, CloneMediaParams params);
+
/**
* Updates the name/description of a media.
*
- * @return a task. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @return a task. This operation is asynchronous and the user should monitor the returned task
+ * status in order to check when it is completed.
*/
- Task updateMedia(URI mediaUri, Media media);
-
+ Task edit(String mediaUrn, Media media);
+
+ Task edit(URI mediaHref, Media media);
+
/**
* Deletes a media.
*/
- Task deleteMedia(URI mediaUri);
-
+ Task remove(String mediaUrn);
+
+ Task remove(URI mediaHref);
+
/**
* Retrieves an owner.
*
* @return the owner or null if not found
*/
- Owner getOwner(URI mediaUri);
-
+ Owner getOwner(String mediaUrn);
+
+ Owner getOwner(URI mediaHref);
+
/**
* @return synchronous access to {@link Metadata.Writeable} features
*/
@Delegate
- MetadataApi.Writeable getMetadataApi();
+ MetadataApi.Writeable getMetadataApi(@EndpointParam(parser = MediaURNToHref.class) String mediaUrn);
+
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam URI mediaHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
index 92490bf..57132b2 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
@@ -38,68 +38,116 @@
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Media;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.MediaURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
/**
* @see MediaApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface MediaAsyncApi {
/**
- * @see MediaApi#getMedia(URI)
+ * @see MediaApi#get(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Media> getMedia(@EndpointParam URI uri);
-
+ ListenableFuture<Media> get(@EndpointParam(parser = MediaURNToHref.class) String mediaUrn);
+
/**
- * @see MediaApi#createMedia(URI, Media)
+ * @see MediaApi#add(URI, Media)
*/
@POST
@Consumes(VCloudDirectorMediaType.MEDIA)
@Produces(VCloudDirectorMediaType.MEDIA)
@JAXBResponseParser
- ListenableFuture<Media> createMedia(@EndpointParam URI link,
- @BinderParam(BindToXMLPayload.class) Media media);
-
-
+ ListenableFuture<Media> add(@EndpointParam URI updateHref, @BinderParam(BindToXMLPayload.class) Media media);
+
/**
- * @see MediaApi#cloneMedia(URI, CloneMediaParams)
+ * @see MediaApi#clone(String, CloneMediaParams)
*/
@POST
@Path("/action/cloneMedia")
@Consumes(VCloudDirectorMediaType.MEDIA)
@Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
@JAXBResponseParser
- ListenableFuture<Media> cloneMedia(@EndpointParam URI vdcRef,
- @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
-
+ ListenableFuture<Media> clone(@EndpointParam(parser = MediaURNToHref.class) String mediaUrn,
+ @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
+
/**
- * @see MediaApi#updateMedia(URI, Media))
+ * @see MediaApi#editMedia(String, Media)
*/
@PUT
@Consumes(VCloudDirectorMediaType.TASK)
@Produces(VCloudDirectorMediaType.MEDIA)
@JAXBResponseParser
- ListenableFuture<Task> updateMedia(@EndpointParam URI uri, @BinderParam(BindToXMLPayload.class) Media media);
-
+ ListenableFuture<Task> edit(@EndpointParam(parser = MediaURNToHref.class) String mediaUrn,
+ @BinderParam(BindToXMLPayload.class) Media media);
+
/**
- * @see MediaApi#deleteMedia(URI))
- */
+ * @see MediaApi#removeMedia(String)
+ */
@DELETE
@Consumes(VCloudDirectorMediaType.TASK)
@JAXBResponseParser
- ListenableFuture<Task> deleteMedia(@EndpointParam URI uri);
-
+ ListenableFuture<Task> remove(@EndpointParam(parser = MediaURNToHref.class) String mediaUrn);
+
+ /**
+ * @see MediaApi#getOwner(String)
+ */
+ @GET
+ @Path("/owner")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Owner> getOwner(@EndpointParam(parser = MediaURNToHref.class) String mediaUrn);
+
+ /**
+ * @see MediaApi#get(URI)
+ */
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Media> get(@EndpointParam URI mediaHref);
+
+ /**
+ * @see MediaApi#clone(URI, CloneMediaParams)
+ */
+ @POST
+ @Path("/action/cloneMedia")
+ @Consumes(VCloudDirectorMediaType.MEDIA)
+ @Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
+ @JAXBResponseParser
+ ListenableFuture<Media> clone(@EndpointParam URI mediaHref,
+ @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
+
+ /**
+ * @see MediaApi#editMedia(URI, Media)
+ */
+ @PUT
+ @Consumes(VCloudDirectorMediaType.TASK)
+ @Produces(VCloudDirectorMediaType.MEDIA)
+ @JAXBResponseParser
+ ListenableFuture<Task> edit(@EndpointParam URI mediaHref, @BinderParam(BindToXMLPayload.class) Media media);
+
+ /**
+ * @see MediaApi#removeMedia(URI)
+ */
+ @DELETE
+ @Consumes(VCloudDirectorMediaType.TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> remove(@EndpointParam URI mediaHref);
+
/**
* @see MediaApi#getOwner(URI)
*/
@@ -108,11 +156,14 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Owner> getOwner(@EndpointParam URI uri);
-
+ ListenableFuture<Owner> getOwner(@EndpointParam URI mediaHref);
+
/**
- * @return asynchronous access to {@link Metadata.Writeable} features
- */
+ * @return asynchronous access to {@link Metadata.Writeable} features
+ */
@Delegate
- MetadataAsyncApi.Writeable getMetadataApi();
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam(parser = MediaURNToHref.class) String mediaUrn);
+
+ @Delegate
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam URI mediaHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java
index 1b4aa4b..18db889 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java
@@ -18,7 +18,6 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
-import java.net.URI;
import java.util.concurrent.TimeUnit;
import org.jclouds.concurrent.Timeout;
@@ -33,51 +32,51 @@
* @author danikov
*/
public interface MetadataApi {
-
+
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public static interface Readable extends MetadataApi {
-
/**
* Retrieves an list of metadata
*
* @return a list of metadata
*/
- Metadata getMetadata(URI uri);
-
+ Metadata get();
+
/**
* Retrieves a metadata value
*
* @return the metadata value, or null if not found
*/
- MetadataValue getMetadataValue(URI uri, String key);
+ MetadataValue getValue(String key);
}
-
+
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public static interface Writeable extends Readable {
-
+
/**
* Merges the metadata for a media with the information provided.
*
- * @return a task. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @return a task. This operation is asynchronous and the user should monitor the returned
+ * task status in order to check when it is completed.
*/
- Task mergeMetadata(URI uri, Metadata metadata);
+ Task merge(Metadata metadata);
/**
- * Sets the metadata for the particular key for the media to the value provided.
- * Note: this will replace any existing metadata information
+ * Sets the metadata for the particular key for the media to the value provided. Note: this
+ * will replace any existing metadata information
*
- * @return a task. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @return a task. This operation is asynchronous and the user should monitor the returned
+ * task status in order to check when it is completed.
*/
- Task setMetadata(URI uri, String key, MetadataValue metadataValue);
-
+ Task putEntry(String key, MetadataValue metadataValue);
+
/**
* Deletes a metadata entry.
*
- * @return a task. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @return a task. This operation is asynchronous and the user should monitor the returned
+ * task status in order to check when it is completed.
*/
- Task deleteMetadataEntry(URI uri, String key);
+ Task removeEntry(String key);
+
}
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
index cd1d98e..dcb9b1b 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
@@ -30,7 +30,6 @@
import javax.ws.rs.Produces;
import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.JAXBResponseParser;
import org.jclouds.rest.annotations.RequestFilters;
@@ -38,6 +37,7 @@
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
+import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry;
import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
@@ -48,64 +48,67 @@
* @see MetadataApi
* @author danikov
*/
+// TODO: take out the endpoint params and supply them in the Delegate calls.
public interface MetadataAsyncApi {
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public static interface Readable extends MetadataAsyncApi {
/**
- * @see MetadataApi.Readable#getMetadata(URISupplier)
+ * @see MetadataApi.Readable#get(URI)
*/
@GET
@Path("/metadata")
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Metadata> getMetadata(@EndpointParam URI metaDataUri);
-
+ ListenableFuture<Metadata> get();
+
/**
- * @see MetadataApi.Readable#getMetadataValue(URI, String)
+ * @see MetadataApi.Readable#getValue(String)
*/
@GET
@Path("/metadata/{key}")
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<MetadataValue> getMetadataValue(@EndpointParam URI metaDataUri, @PathParam("key") String key);
+ ListenableFuture<MetadataValue> getValue(@PathParam("key") String key);
+
}
-
+
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public static interface Writeable extends Readable {
/**
- * @see MetadataApi.Writable#mergeMetadata(URI, Metadata))
+ * @see MetadataApi.Writable#merge(Metadata)
*/
@POST
@Path("/metadata")
@Consumes(VCloudDirectorMediaType.TASK)
@Produces(VCloudDirectorMediaType.METADATA)
@JAXBResponseParser
- ListenableFuture<Task> mergeMetadata(@EndpointParam URI metaDataUri, @BinderParam(BindToXMLPayload.class) Metadata metadata);
-
+ ListenableFuture<Task> merge(@BinderParam(BindToXMLPayload.class) Metadata metadata);
+
/**
- * @see MetadataApi.Writable#setMetadata(URI, String, MetadataEntry))
+ * @see MetadataApi.Writeable#putEntry(String, MetadataEntry)
*/
@PUT
@Path("/metadata/{key}")
@Consumes(VCloudDirectorMediaType.TASK)
@Produces(VCloudDirectorMediaType.METADATA_VALUE)
@JAXBResponseParser
- ListenableFuture<Task> setMetadata(@EndpointParam URI metaDataUri,
- @PathParam("key") String key,
- @BinderParam(BindToXMLPayload.class) MetadataValue metadataValue);
-
+ // TODO: this is rediculous. get rid of the MetadataValue type, as it is only a string!
+ ListenableFuture<Task> putEntry(@PathParam("key") String key,
+ @BinderParam(BindToXMLPayload.class) MetadataValue metadataValue);
+
/**
- * @see MetadataApi.Writable#deleteMetadataEntry(URISupplier, String))
+ * @see MetadataApi.Writable#removeEntry(String)
*/
- @DELETE
- @Path("/metadata/{key}")
- @Consumes(VCloudDirectorMediaType.TASK)
- @JAXBResponseParser
- ListenableFuture<Task> deleteMetadataEntry(@EndpointParam URI metaDataUri, @PathParam("key") String key);
+ @DELETE
+ @Path("/metadata/{key}")
+ @Consumes(VCloudDirectorMediaType.TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> removeEntry(@PathParam("key") String key);
+
}
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java
index 653110a..1de6875 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java
@@ -23,13 +23,16 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
+import org.jclouds.vcloud.director.v1_5.functions.href.NetworkURNToHref;
/**
* Provides synchronous access to {@link Network}.
*
* @see NetworkAsyncApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface NetworkApi {
@@ -39,11 +42,16 @@
*
* @return the network or null if not found
*/
- Network getNetwork(URI networkUri);
+ Network get(String networkUrn);
+
+ Network get(URI networkHref);
/**
* @return synchronous access to {@link Metadata.Readable} features
*/
@Delegate
- MetadataApi.Readable getMetadataApi();
+ MetadataApi.Readable getMetadataApi(@EndpointParam(parser = NetworkURNToHref.class) String networkUrn);
+
+ @Delegate
+ MetadataApi.Readable getMetadataApi(@EndpointParam URI networkHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
index 49de11a..febe0f8 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
@@ -29,8 +29,10 @@
import org.jclouds.rest.annotations.JAXBResponseParser;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.NetworkURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
@@ -42,18 +44,30 @@
public interface NetworkAsyncApi {
/**
- * @see NetworkApi#getNetwork(URI)
+ * @see NetworkApi#get(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<? extends Network> getNetwork(@EndpointParam URI networkUri);
-
+ ListenableFuture<? extends Network> get(@EndpointParam(parser = NetworkURNToHref.class) String networkUrn);
+
+ /**
+ * @see NetworkApi#get(URI)
+ */
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<? extends Network> get(@EndpointParam URI networkHref);
+
/**
* @return asynchronous access to {@link Metadata.Readable} features
*/
@Delegate
- MetadataAsyncApi.Readable getMetadataApi();
-
+ MetadataAsyncApi.Readable getMetadataApi(@EndpointParam(parser = NetworkURNToHref.class) String networkUrn);
+
+ @Delegate
+ MetadataAsyncApi.Readable getMetadataApi(@EndpointParam URI networkHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java
index bf2bc32..b73674e 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java
@@ -23,9 +23,11 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
-import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
+import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToHref;
/**
* Provides synchronous access to {@link Org}.
@@ -38,51 +40,35 @@
/**
* Retrieves a list of organizations.
- *
+ *
* <pre>
- * GET /org
+ * GET / org
* </pre>
*
* @return a list of organizations
*/
- OrgList getOrgList();
+ OrgList list();
/**
* Retrieves an organization.
- *
+ *
* <pre>
* GET /org/{id}
* </pre>
*
* @return the org or null if not found
*/
- Org getOrg(URI orgRef);
+ Org get(String orgUrn);
- /**
- * Modifies a catalog control access.
- *
- * <pre>
- * POST /org/{id}/catalog/{catalogId}/action/controlAccess
- * </pre>
- *
- * @return the control access information
- */
- ControlAccessParams modifyControlAccess(URI orgRef, String catalogId, ControlAccessParams params);
+ Org get(URI orgHref);
/**
- * Retrieves the catalog control access information.
- *
- * <pre>
- * GET /org/{id}/catalog/{catalogId}/controlAccess
- * </pre>
- *
- * @return the control access information
- */
- ControlAccessParams getControlAccess(URI orgRef, String catalogId);
-
- /**
* @return synchronous access to {@link Metadata.Readable} features
*/
@Delegate
- MetadataApi.Readable getMetadataApi();
+ MetadataApi.Readable getMetadataApi(@EndpointParam(parser = OrgURNToHref.class) String orgUrn);
+
+ @Delegate
+ MetadataApi.Readable getMetadataApi(@EndpointParam URI orgHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java
index eb776ac..7b2ef31 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java
@@ -18,29 +18,23 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CONTROL_ACCESS;
-
import java.net.URI;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
-import javax.ws.rs.POST;
import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Delegate;
import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.JAXBResponseParser;
import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
-import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
@@ -52,49 +46,39 @@
public interface OrgAsyncApi {
/**
- * @see OrgApi#getOrgList()
+ * @see OrgApi#list()
*/
@GET
@Path("/org/")
@Consumes
@JAXBResponseParser
- ListenableFuture<OrgList> getOrgList();
+ ListenableFuture<OrgList> list();
/**
- * @see OrgApi#getOrg(URI)
+ * @see OrgApi#get(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<? extends Org> getOrg(@EndpointParam URI orgUri);
+ ListenableFuture<? extends Org> get(@EndpointParam(parser = OrgURNToHref.class) String orgUrn);
/**
- * @see OrgApi#modifyControlAccess(URI, URI, ControlAccessParams)
- */
- @POST
- @Path("/catalog/{catalogId}/action/controlAccess")
- @Produces(CONTROL_ACCESS)
- @Consumes(CONTROL_ACCESS)
- @JAXBResponseParser
- ListenableFuture<ControlAccessParams> modifyControlAccess(@EndpointParam URI orgRef,
- @PathParam("catalogId") String catalogId,
- @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
-
- /**
- * @see OrgApi#getControlAccess(URI, URI, ControlAccessParams)
+ * @see OrgApi#get(URI)
*/
@GET
- @Path("/catalog/{catalogId}/controlAccess")
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<ControlAccessParams> getControlAccess(@EndpointParam URI orgRef,
- @PathParam("catalogId") String catalogId);
+ ListenableFuture<? extends Org> get(@EndpointParam URI orgHref);
/**
* @return asynchronous access to {@link Metadata.Readable} features
*/
@Delegate
- MetadataAsyncApi.Readable getMetadataApi();
+ MetadataAsyncApi.Readable getMetadataApi(@EndpointParam(parser = OrgURNToHref.class) String orgUrn);
+
+ @Delegate
+ MetadataAsyncApi.Readable getMetadataApi(@EndpointParam URI orgHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java
index 9c3e763..14997e4 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java
@@ -21,9 +21,10 @@
import java.util.concurrent.TimeUnit;
import org.jclouds.concurrent.Timeout;
+import org.jclouds.vcloud.director.v1_5.domain.Catalog;
import org.jclouds.vcloud.director.v1_5.domain.CatalogReference;
-import org.jclouds.vcloud.director.v1_5.domain.Entity;
import org.jclouds.vcloud.director.v1_5.domain.Link;
+import org.jclouds.vcloud.director.v1_5.domain.Media;
import org.jclouds.vcloud.director.v1_5.domain.VApp;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.Vm;
@@ -41,15 +42,6 @@
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface QueryApi {
- /**
- * Redirects to the URL of an entity with the given VCD ID.
- *
- * <pre>
- * GET /entity/{id}
- * </pre>
- */
- Entity entity(String id);
-
// TODO Add a typed object for filter syntax, or at least a fluent builder
/**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
index 235de87..3fb5e58 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
@@ -21,16 +21,13 @@
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
-import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.JAXBResponseParser;
import org.jclouds.rest.annotations.QueryParams;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.SkipEncoding;
-import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
-import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.domain.Catalog;
import org.jclouds.vcloud.director.v1_5.domain.VApp;
import org.jclouds.vcloud.director.v1_5.domain.query.CatalogReferences;
import org.jclouds.vcloud.director.v1_5.domain.query.QueryList;
@@ -49,16 +46,6 @@
public interface QueryAsyncApi {
/**
- * @see QueryApi#entity(String)
- */
- @GET
- @Path("/entity/{id}")
- @Consumes
- @JAXBResponseParser
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Entity> entity(@PathParam("id") String id);
-
- /**
* REST API General queries handler.
*/
@GET
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java
index 55357e5..78087c9 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java
@@ -22,47 +22,56 @@
import java.util.concurrent.TimeUnit;
import org.jclouds.concurrent.Timeout;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Link;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
+import org.jclouds.vcloud.director.v1_5.domain.org.Org;
/**
* Provides synchronous access to {@link Task} objects.
*
* @see TaskAsyncApi
- * @author grkvlt@apache.org
+ * @author grkvlt@apache.org, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface TaskApi {
/**
* Retrieves a list of tasks.
- *
+ *
* <pre>
* GET /tasksList/{id}
* </pre>
*
- * @param orgURI the URI of the organization
+ * @param tasksListUrn
+ * from {@link Org#getLinks()} where {@link Link#getType} is
+ * {@link VCloudDirectorMediaType#TASKS_LIST}
* @return a list of tasks
*/
- TasksList getTaskList(URI orgURI);
+ TasksList getTasksList(URI tasksListHref);
/**
* Retrieves a task.
- *
+ *
* <pre>
* GET /task/{id}
* </pre>
*
* @return the task or null if not found
*/
- Task getTask(URI taskUri);
+ Task get(String taskUrn);
+
+ Task get(URI taskHref);
/**
* Cancels a task.
- *
+ *
* <pre>
* POST /task/{id}/action/cancel
* </pre>
*/
- void cancelTask(URI taskUri);
+ void cancel(String taskUrn);
+
+ void cancel(URI taskHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
index ee112d5..e8f7a16 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
@@ -33,41 +33,59 @@
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.OrgReferenceToTaskListEndpoint;
+import org.jclouds.vcloud.director.v1_5.functions.href.TaskURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
/**
* @see TaskApi
- * @author grkvlt@apache.org
+ * @author grkvlt@apache.org, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface TaskAsyncApi {
-
+
/**
- * @see TaskApi#getTaskList(URISupplier)
+ * @see TaskApi#getTasksList(URI)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<TasksList> getTaskList(@EndpointParam(parser = OrgReferenceToTaskListEndpoint.class) URI orgURI);
+ ListenableFuture<TasksList> getTasksList(@EndpointParam URI tasksListHref);
/**
- * @see TaskApi#getTask(URI)
+ * @see TaskApi#get(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Task> getTask(@EndpointParam URI taskURI);
-
+ ListenableFuture<Task> get(@EndpointParam(parser = TaskURNToHref.class) String taskUrn);
+
/**
- * @see TaskApi#cancelTask(URI)
+ * @see TaskApi#get(URI)
+ */
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Task> get(@EndpointParam URI taskURI);
+
+ /**
+ * @see TaskApi#cancel(String)
*/
@POST
@Path("/action/cancel")
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> cancelTask(@EndpointParam URI taskURI);
+ ListenableFuture<Void> cancel(@EndpointParam(parser = TaskURNToHref.class) String taskUrn);
+
+ /**
+ * @see TaskApi#cancel(URI)
+ */
+ @POST
+ @Path("/action/cancel")
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> cancel(@EndpointParam URI taskURI);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java
index 5d8bbb0..00bb708 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java
@@ -25,6 +25,7 @@
import org.jclouds.dmtf.ovf.NetworkSection;
import org.jclouds.dmtf.ovf.StartupSection;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
@@ -36,11 +37,12 @@
import org.jclouds.vcloud.director.v1_5.domain.params.UndeployVAppParams;
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
+import org.jclouds.vcloud.director.v1_5.functions.href.VAppURNToHref;
/**
* Provides synchronous access to {@link VApp} objects.
- *
- * @author grkvlt@apache.org
+ *
+ * @author grkvlt@apache.org, Adrian Cole
* @see VAppAsyncApi
* @version 1.5
*/
@@ -49,390 +51,456 @@
/**
* Retrieves a {@link VApp}.
- *
+ *
* The {@link VApp} could be in one of these statuses:
* <ul>
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#FAILED_CREATION FAILED_CREATION(-1)} -
- * Transient entity state, e.g., model object is created but the corresponding VC backing does not
- * exist yet. This is further sub-categorized in the respective entities.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED UNRESOLVED(0)} -
- * Entity is whole, e.g., VM creation is complete and all the required model objects and VC backings are
- * created.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#RESOLVED RESOLVED(1)} -
- * Entity is resolved.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#DEPLOYED DEPLOYED(2)} -
- * Entity is deployed.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#SUSPENDED SUSPENDED(3)} -
- * All VMs of the vApp are suspended.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_ON POWERED_ON(4)} -
- * All VMs of the vApp are powered on.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#WAITING_FOR_INPUT WAITING_FOR_INPUT(5)} -
- * VM is pending response on a question.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNKNOWN UNKNOWN(6)} -
- * Entity state could not be retrieved from the inventory, e.g., VM power state is null.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRECOGNIZED UNRECOGNIZED(7)} -
- * Entity state was retrieved from the inventory but could not be mapped to an internal state.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_OFF POWERED_OFF(8)} -
- * All VMs of the vApp are powered off.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#INCONSISTENT_STATE INCONSISTENT_STATE(9)} -
- * Apply to VM status, if a vm is {@code POWERED_ON}, or {@code WAITING_FOR_INPUT}, but is
- * undeployed, it is in an inconsistent state.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#MIXED MIXED(10)} -
- * vApp status is set to {@code MIXED} when the VMs in the vApp are in different power states
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#FAILED_CREATION
+ * FAILED_CREATION(-1)} - Transient entity state, e.g., model object is addd but the
+ * corresponding VC backing does not exist yet. This is further sub-categorized in the respective
+ * entities.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED
+ * UNRESOLVED(0)} - Entity is whole, e.g., VM creation is complete and all the required model
+ * objects and VC backings are created.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#RESOLVED
+ * RESOLVED(1)} - Entity is resolved.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#DEPLOYED
+ * DEPLOYED(2)} - Entity is deployed.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#SUSPENDED
+ * SUSPENDED(3)} - All VMs of the vApp are suspended.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_ON
+ * POWERED_ON(4)} - All VMs of the vApp are powered on.
+ * <li>
+ * {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#WAITING_FOR_INPUT
+ * WAITING_FOR_INPUT(5)} - VM is pending response on a question.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNKNOWN
+ * UNKNOWN(6)} - Entity state could not be retrieved from the inventory, e.g., VM power state is
+ * null.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRECOGNIZED
+ * UNRECOGNIZED(7)} - Entity state was retrieved from the inventory but could not be mapped to an
+ * internal state.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_OFF
+ * POWERED_OFF(8)} - All VMs of the vApp are powered off.
+ * <li>
+ * {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#INCONSISTENT_STATE
+ * INCONSISTENT_STATE(9)} - Apply to VM status, if a vm is {@code POWERED_ON}, or
+ * {@code WAITING_FOR_INPUT}, but is undeployed, it is in an inconsistent state.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#MIXED MIXED(10)}
+ * - vApp status is set to {@code MIXED} when the VMs in the vApp are in different power states
* </ul>
- *
+ *
* <pre>
* GET /vApp/{id}
* </pre>
- *
+ *
* @since 0.9
*/
- VApp getVApp(URI vAppURI);
+ VApp get(String vAppUrn);
+
+ VApp get(URI vAppHref);
/**
* Modifies the name/description of a {@link VApp}.
- *
+ *
* <pre>
* PUT /vApp/{id}
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyVApp(URI vAppURI, VApp vApp);
+ Task edit(String vAppUrn, VApp vApp);
+
+ Task edit(URI vAppHref, VApp vApp);
/**
* Deletes a {@link VApp}.
- *
+ *
* <pre>
* DELETE /vApp/{id}
* </pre>
- *
+ *
* @since 0.9
*/
- Task deleteVApp(URI vAppURI);
+ Task remove(String vAppUrn);
+
+ Task remove(URI vAppHref);
/**
* Modifies the control access of a {@link VApp}.
- *
+ *
* <pre>
* POST /vApp/{id}/action/controlAccess
* </pre>
- *
+ *
* @since 0.9
*/
- ControlAccessParams modifyControlAccess(URI vAppURI, ControlAccessParams params);
+ ControlAccessParams editControlAccess(String vAppUrn, ControlAccessParams params);
+
+ ControlAccessParams editControlAccess(URI vAppHref, ControlAccessParams params);
/**
* Deploys a {@link VApp}.
- *
- * Deployment means allocation of all resource for a vApp/VM like CPU and memory
- * from a vDC resource pool. Deploying a vApp automatically deploys all of the
- * virtual machines it contains. As of version 1.5 the operation supports force
- * customization passed with {@link DeployVAppParamsType#setForceCustomization(Boolean)}
- * parameter.
- *
+ *
+ * Deployment means allocation of all resource for a vApp/VM like CPU and memory from a vDC
+ * resource pool. Deploying a vApp automatically deploys all of the virtual machines it contains.
+ * As of version 1.5 the operation supports force customization passed with
+ * {@link DeployVAppParamsType#setForceCustomization(Boolean)} parameter.
+ *
* <pre>
* POST /vApp/{id}/action/deploy
* </pre>
- *
+ *
* @since 0.9
*/
- Task deploy(URI vAppURI, DeployVAppParams params);
+ Task deploy(String vAppUrn, DeployVAppParams params);
+
+ Task deploy(URI vAppHref, DeployVAppParams params);
/**
* Discard suspended state of a {@link VApp}.
- *
- * Discarding suspended state of a vApp automatically discarded suspended
- * states of all of the virtual machines it contains.
- *
+ *
+ * Discarding suspended state of a vApp automatically discarded suspended states of all of the
+ * virtual machines it contains.
+ *
* <pre>
* POST /vApp/{id}/action/discardSuspendedState
* </pre>
- *
+ *
* @since 0.9
*/
- Task discardSuspendedState(URI vAppURI);
+ Task discardSuspendedState(String vAppUrn);
+
+ Task discardSuspendedState(URI vAppHref);
/**
* Place the {@link VApp} into maintenance mode.
- *
- * While in maintenance mode, a system admin can operate on the vApp as
- * usual, but end users are restricted to read-only operations. Any
- * user-initiated tasks running when the vApp enters maintenance mode will
- * continue.
- *
+ *
+ * While in maintenance mode, a system admin can operate on the vApp as usual, but end users are
+ * restricted to read-only operations. Any user-initiated tasks running when the vApp enters
+ * maintenance mode will continue.
+ *
* <pre>
* POST /vApp/{id}/action/enterMaintenanceMode
* </pre>
- *
+ *
* @since 1.5
*/
- void enterMaintenanceMode(URI vAppURI);
+ void enterMaintenanceMode(String vAppUrn);
+
+ void enterMaintenanceMode(URI vAppHref);
/**
* Take the {@link VApp} out of maintenance mode.
- *
+ *
* <pre>
* POST /vApp/{id}/action/exitMaintenanceMode
* </pre>
- *
+ *
* @since 1.5
*/
- void exitMaintenanceMode(URI vAppURI);
+ void exitMaintenanceMode(String vAppUrn);
+
+ void exitMaintenanceMode(URI vAppHref);
/**
- * Recompose a {@link VApp} by removing its own VMs and/or adding new ones from other
- * vApps or vApp templates.
- *
- * To remove VMs you should put their references in elements. The way you add
- * VMs is the same as described in compose vApp operation
- * {@link VdcApi#composeVApp(URI, org.jclouds.vcloud.director.v1_5.domain.ComposeVAppParams)}.
- * The status of vApp will be in {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED}
- * until the recompose task is finished.
- *
+ * Recompose a {@link VApp} by removing its own VMs and/or adding new ones from other vApps or
+ * vApp templates.
+ *
+ * To remove VMs you should put their references in elements. The way you add VMs is the same as
+ * described in compose vApp operation
+ * {@link VdcApi#composeVApp(String, org.jclouds.vcloud.director.v1_5.domain.ComposeVAppParams)}.
+ * The status of vApp will be in
+ * {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED} until the
+ * recompose task is finished.
+ *
* <pre>
* POST /vApp/{id}/action/recomposeVApp
* </pre>
- *
+ *
* @since 1.0
*/
- Task recompose(URI vAppURI, RecomposeVAppParams params);
+ Task recompose(String vAppUrn, RecomposeVAppParams params);
+
+ Task recompose(URI vAppHref, RecomposeVAppParams params);
/**
* Undeploy a {@link VApp}.
- *
- * Undeployment means deallocation of all resources for a vApp/VM like CPU
- * and memory from a vDC resource pool. Undeploying a vApp automatically
- * undeploys all of the virtual machines it contains.
- *
+ *
+ * Undeployment means deallocation of all resources for a vApp/VM like CPU and memory from a vDC
+ * resource pool. Undeploying a vApp automatically undeploys all of the virtual machines it
+ * contains.
+ *
* <pre>
* POST /vApp/{id}/action/undeploy
* </pre>
- *
+ *
* @since 0.9
*/
- Task undeploy(URI vAppURI, UndeployVAppParams params);
+ Task undeploy(String vAppUrn, UndeployVAppParams params);
+
+ Task undeploy(URI vAppHref, UndeployVAppParams params);
/**
* Retrieves the control access information for a {@link VApp}.
- *
- * The vApp could be shared to everyone or could be shared to specific user,
- * by modifying the control access values.
- *
+ *
+ * The vApp could be shared to everyone or could be shared to specific user, by editing the
+ * control access values.
+ *
* <pre>
* GET /vApp/{id}/controlAccess
* </pre>
- *
+ *
* @since 0.9
*/
- ControlAccessParams getControlAccess(URI vAppURI);
+ // TODO: revise
+ ControlAccessParams getAccessControl(String vAppUrn);
+
+ ControlAccessParams getAccessControl(URI vAppHref);
/**
* Powers off a {@link VApp}.
- *
- * If the operation is used over a vApp then all VMs are powered off. This operation is allowed only when the vApp/VM is powered on.
- *
+ *
+ * If the operation is used over a vApp then all VMs are powered off. This operation is allowed
+ * only when the vApp/VM is powered on.
+ *
* <pre>
* POST /vApp/{id}/power/action/powerOff
* </pre>
- *
+ *
* @since 0.9
*/
- Task powerOff(URI vAppURI);
+ Task powerOff(String vAppUrn);
+
+ Task powerOff(URI vAppHref);
/**
* Powers on a {@link VApp}.
- *
- * If the operation is used over a vApp then all VMs are powered on. This
- * operation is allowed only when the vApp/VM is powered off.
- *
+ *
+ * If the operation is used over a vApp then all VMs are powered on. This operation is allowed
+ * only when the vApp/VM is powered off.
+ *
* <pre>
* POST /vApp/{id}/power/action/powerOn
* </pre>
- *
+ *
* @since 0.9
*/
- Task powerOn(URI vAppURI);
+ Task powerOn(String vAppUrn);
+
+ Task powerOn(URI vAppHref);
/**
* Reboots a {@link VApp}.
- *
+ *
* The vApp/VM should be started in order to reboot it.
- *
+ *
* <pre>
* POST /vApp/{id}/power/action/reboot
* </pre>
- *
+ *
* @since 0.9
*/
- Task reboot(URI vAppURI);
+ Task reboot(String vAppUrn);
+
+ Task reboot(URI vAppHref);
/**
* Resets a {@link VApp}.
- *
- * If the operation is used over a vApp then all VMs are reset. This
- * operation is allowed only when the vApp/VM is powered on.
- *
+ *
+ * If the operation is used over a vApp then all VMs are reset. This operation is allowed only
+ * when the vApp/VM is powered on.
+ *
* <pre>
* POST /vApp/{id}/power/action/reset
* </pre>
- *
+ *
* @since 0.9
*/
- Task reset(URI vAppURI);
+ Task reset(String vAppUrn);
+
+ Task reset(URI vAppHref);
/**
* Shuts down a {@link VApp}.
- *
- * If the operation is used over a vApp then all VMs are shutdown. This
- * operation is allowed only when the vApp/VM is powered on.
- *
+ *
+ * If the operation is used over a vApp then all VMs are shutdown. This operation is allowed only
+ * when the vApp/VM is powered on.
+ *
* <pre>
* POST /vApp/{id}/power/action/shutdown
* </pre>
- *
+ *
* @since 0.9
*/
- Task shutdown(URI vAppURI);
+ Task shutdown(String vAppUrn);
+
+ Task shutdown(URI vAppHref);
/**
* Suspends a {@link VApp}.
- *
- * If the operation is used over a vApp then all VMs are suspended. This
- * operation is allowed only when the vApp/VM is powered on.
- *
+ *
+ * If the operation is used over a vApp then all VMs are suspended. This operation is allowed
+ * only when the vApp/VM is powered on.
+ *
* <pre>
* POST /vApp/{id}/power/action/suspend
* </pre>
- *
+ *
* @since 0.9
*/
- Task suspend(URI vAppURI);
+ Task suspend(String vAppUrn);
+
+ Task suspend(URI vAppHref);
/**
* Retrieves the lease settings section of a {@link VApp}.
- *
+ *
* <pre>
* GET /vApp/{id}/leaseSettingsSection
* </pre>
- *
+ *
* @since 0.9
*/
- LeaseSettingsSection getLeaseSettingsSection(URI vAppURI);
+ LeaseSettingsSection getLeaseSettingsSection(String vAppUrn);
+
+ LeaseSettingsSection getLeaseSettingsSection(URI vAppHref);
/**
* Modifies the lease settings section of a {@link VApp}.
- *
+ *
* <pre>
* PUT /vApp/{id}/leaseSettingsSection
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyLeaseSettingsSection(URI vAppURI, LeaseSettingsSection section);
+ Task editLeaseSettingsSection(String vAppUrn, LeaseSettingsSection section);
+
+ Task editLeaseSettingsSection(URI vAppHref, LeaseSettingsSection section);
/**
* Retrieves the network config section of a {@link VApp}.
- *
+ *
* <pre>
* GET /vApp/{id}/networkConfigSection
* </pre>
- *
+ *
* @since 0.9
*/
- NetworkConfigSection getNetworkConfigSection(URI vAppURI);
+ NetworkConfigSection getNetworkConfigSection(String vAppUrn);
+
+ NetworkConfigSection getNetworkConfigSection(URI vAppHref);
/**
* Modifies the network config section of a {@link VApp}.
- *
+ *
* <pre>
* PUT /vApp/{id}/networkConfigSection
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyNetworkConfigSection(URI vAppURI, NetworkConfigSection section);
+ Task editNetworkConfigSection(String vAppUrn, NetworkConfigSection section);
+
+ Task editNetworkConfigSection(URI vAppHref, NetworkConfigSection section);
/**
* Retrieves the network section of a {@link VApp}.
- *
+ *
* <pre>
* GET /vApp/{id}/networkSection
* </pre>
- *
+ *
* @since 0.9
*/
- NetworkSection getNetworkSection(URI vAppURI);
+ NetworkSection getNetworkSection(String vAppUrn);
+
+ NetworkSection getNetworkSection(URI vAppHref);
/**
* Retrieves the owner of a {@link VApp}.
- *
+ *
* <pre>
* GET /vApp/{id}/owner
* </pre>
- *
+ *
* @since 1.5
*/
- Owner getOwner(URI vAppURI);
+ Owner getOwner(String vAppUrn);
+
+ Owner getOwner(URI vAppHref);
/**
* Changes {@link VApp} owner.
- *
+ *
* <pre>
* PUT /vApp/{id}/owner
* </pre>
- *
+ *
* @since 1.5
*/
- void modifyOwner(URI vAppURI, Owner owner);
+ void editOwner(String vAppUrn, Owner owner);
+
+ void editOwner(URI vAppHref, Owner owner);
/**
* Retrieves {@link VApp} product sections.
- *
+ *
* <pre>
* GET /vApp/{id}/productSections
* </pre>
- *
+ *
* @since 1.5
*/
- ProductSectionList getProductSections(URI vAppURI);
+ ProductSectionList getProductSections(String vAppUrn);
+
+ ProductSectionList getProductSections(URI vAppHref);
/**
* Modifies the product section information of a {@link VApp}.
- *
+ *
* <pre>
* PUT /vApp/{id}/productSections
* </pre>
- *
+ *
* @since 1.5
*/
- Task modifyProductSections(URI vAppURI, ProductSectionList sectionList);
+ Task editProductSections(String vAppUrn, ProductSectionList sectionList);
+
+ Task editProductSections(URI vAppHref, ProductSectionList sectionList);
/**
* Retrieves the startup section of a {@link VApp}.
- *
+ *
* <pre>
* GET /vApp/{id}/startupSection
* </pre>
- *
+ *
* @since 0.9
*/
- StartupSection getStartupSection(URI vAppURI);
+ StartupSection getStartupSection(String vAppUrn);
+
+ StartupSection getStartupSection(URI vAppHref);
/**
* Modifies the startup section of a {@link VApp}.
- *
+ *
* <pre>
* PUT /vApp/{id}/startupSection
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyStartupSection(URI vAppURI, StartupSection section);
+ Task editStartupSection(String vAppUrn, StartupSection section);
+
+ Task editStartupSection(URI vAppHref, StartupSection section);
/**
* Synchronous access to {@link VApp} {@link Metadata} features.
*/
@Delegate
- MetadataApi.Writeable getMetadataApi();
+ MetadataApi.Writeable getMetadataApi(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam URI vAppHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
index ac3c112..a62bc84 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
@@ -50,6 +50,7 @@
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.binders.BindToXMLPayload;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
import org.jclouds.vcloud.director.v1_5.domain.Task;
@@ -61,6 +62,7 @@
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.VAppURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
@@ -72,42 +74,320 @@
public interface VAppAsyncApi {
/**
- * @see VAppApi#getVApp(URI)
+ * @see VAppApi#get(String)
*/
@GET
@Consumes(VAPP)
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<VApp> getVApp(@EndpointParam URI vAppURI);
+ ListenableFuture<VApp> get(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
/**
- * @see VAppApi#modifyVApp(URI, VApp)
+ * @see VAppApi#edit(String, VApp)
*/
@PUT
@Produces(VAPP)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVApp(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) VApp vApp);
+ ListenableFuture<Task> edit(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) VApp vApp);
/**
- * @see VAppApi#deleteVApp(URI)
+ * @see VAppApi#remove(String)
*/
@DELETE
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> deleteVApp(@EndpointParam URI vAppURI);
+ ListenableFuture<Task> remove(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
/**
- * @see VAppApi#modifyControlAccess(URI, ControlAccessParams)
+ * @see VAppApi#editControlAccess(String, ControlAccessParams)
*/
@POST
@Path("/action/controlAccess")
@Produces(CONTROL_ACCESS)
@Consumes(CONTROL_ACCESS)
@JAXBResponseParser
- ListenableFuture<ControlAccessParams> modifyControlAccess(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
+ ListenableFuture<ControlAccessParams> editControlAccess(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
+
+ /**
+ * @see VAppApi#deploy(String, DeployVAppParams)
+ */
+ @POST
+ @Path("/action/deploy")
+ @Produces(DEPLOY_VAPP_PARAMS)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> deploy(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
+
+ /**
+ * @see VAppApi#discardSuspendedState(String)
+ */
+ @POST
+ @Path("/action/discardSuspendedState")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> discardSuspendedState(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#enterMaintenanceMode(String)
+ */
+ @POST
+ @Path("/action/enterMaintenanceMode")
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> enterMaintenanceMode(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#exitMaintenanceMode(String)
+ */
+ @POST
+ @Path("/action/exitMaintenanceMode")
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> exitMaintenanceMode(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#recompose(String, RecomposeVAppParams)
+ */
+ @POST
+ @Path("/action/recomposeVApp")
+ @Produces(RECOMPOSE_VAPP_PARAMS)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> recompose(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) RecomposeVAppParams params);
+
+ /**
+ * @see VAppApi#undeploy(String, UndeployVAppParams)
+ */
+ @POST
+ @Path("/action/undeploy")
+ @Produces(UNDEPLOY_VAPP_PARAMS)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> undeploy(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
+
+ /**
+ * @see VAppApi#getAccessControl(String)
+ */
+ @GET
+ @Path("/controlAccess")
+ @Consumes(CONTROL_ACCESS)
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#powerOff(String)
+ */
+ @POST
+ @Path("/power/action/powerOff")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> powerOff(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#powerOn(String)
+ */
+ @POST
+ @Path("/power/action/powerOn")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> powerOn(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#reboot(String)
+ */
+ @POST
+ @Path("/power/action/powerOff")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> reboot(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#reset(String)
+ */
+ @POST
+ @Path("/power/action/reset")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> reset(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#shutdown(String)
+ */
+ @POST
+ @Path("/power/action/shutdown")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> shutdown(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#suspend(String)
+ */
+ @POST
+ @Path("/power/action/suspend")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> suspend(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#getLeaseSettingsSection(String)
+ */
+ @GET
+ @Path("/leaseSettingsSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(
+ @EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#editLeaseSettingsSection(String, LeaseSettingsSection)
+ */
+ @PUT
+ @Path("/leaseSettingsSection")
+ @Produces(LEASE_SETTINGS_SECTION)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editLeaseSettingsSection(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) LeaseSettingsSection section);
+
+ /**
+ * @see VAppApi#getNetworkConfigSection(String)
+ */
+ @GET
+ @Path("/networkConfigSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<NetworkConfigSection> getNetworkConfigSection(
+ @EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#editNetworkConfigSection(String, NetworkConfigSection)
+ */
+ @PUT
+ @Path("/networkConfigSection")
+ @Produces(NETWORK_CONFIG_SECTION)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editNetworkConfigSection(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) NetworkConfigSection section);
+
+ /**
+ * @see VAppApi#getNetworkSection(String)
+ */
+ @GET
+ @Path("/networkSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<NetworkSection> getNetworkSection(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#getOwner(String)
+ */
+ @GET
+ @Path("/owner")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Owner> getOwner(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#editOwner(String, Owner)
+ */
+ @PUT
+ @Path("/owner")
+ @Produces(OWNER)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Void> editOwner(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) Owner owner);
+
+ /**
+ * @see VAppApi#getProductSections(String)
+ */
+ @GET
+ @Path("/productSections")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<ProductSectionList> getProductSections(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#editProductSections(String, ProductSectionList)
+ */
+ @PUT
+ @Path("/productSections")
+ @Produces(PRODUCT_SECTION_LIST)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editProductSections(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
+
+ /**
+ * @see VAppApi#getStartupSection(String)
+ */
+ @GET
+ @Path("/startupSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<StartupSection> getStartupSection(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ /**
+ * @see VAppApi#editStartupSection(String, StartupSection)
+ */
+ @PUT
+ @Path("/startupSection")
+ @Produces(STARTUP_SECTION)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editStartupSection(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn,
+ @BinderParam(BindToXMLPayload.class) StartupSection section);
+
+ /**
+ * @see VAppApi#get(URI)
+ */
+ @GET
+ @Consumes(VAPP)
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<VApp> get(@EndpointParam URI vAppHref);
+
+ /**
+ * @see VAppApi#edit(URI, VApp)
+ */
+ @PUT
+ @Produces(VAPP)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> edit(@EndpointParam URI vAppHref, @BinderParam(BindToXMLPayload.class) VApp vApp);
+
+ /**
+ * @see VAppApi#remove(URI)
+ */
+ @DELETE
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> remove(@EndpointParam URI vAppHref);
+
+ /**
+ * @see VAppApi#editControlAccess(URI, ControlAccessParams)
+ */
+ @POST
+ @Path("/action/controlAccess")
+ @Produces(CONTROL_ACCESS)
+ @Consumes(CONTROL_ACCESS)
+ @JAXBResponseParser
+ ListenableFuture<ControlAccessParams> editControlAccess(@EndpointParam URI vAppHref,
+ @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
/**
* @see VAppApi#deploy(URI, DeployVAppParams)
@@ -117,8 +397,8 @@
@Produces(DEPLOY_VAPP_PARAMS)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> deploy(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
+ ListenableFuture<Task> deploy(@EndpointParam URI vAppHref,
+ @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
/**
* @see VAppApi#discardSuspendedState(URI)
@@ -127,7 +407,7 @@
@Path("/action/discardSuspendedState")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> discardSuspendedState(@EndpointParam URI vAppURI);
+ ListenableFuture<Task> discardSuspendedState(@EndpointParam URI vAppHref);
/**
* @see VAppApi#enterMaintenanceMode(URI)
@@ -136,7 +416,7 @@
@Path("/action/enterMaintenanceMode")
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> enterMaintenanceMode(@EndpointParam URI vAppURI);
+ ListenableFuture<Void> enterMaintenanceMode(@EndpointParam URI vAppHref);
/**
* @see VAppApi#exitMaintenanceMode(URI)
@@ -145,7 +425,7 @@
@Path("/action/exitMaintenanceMode")
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> exitMaintenanceMode(@EndpointParam URI vAppURI);
+ ListenableFuture<Void> exitMaintenanceMode(@EndpointParam URI vAppHref);
/**
* @see VAppApi#recompose(URI, RecomposeVAppParams)
@@ -155,8 +435,8 @@
@Produces(RECOMPOSE_VAPP_PARAMS)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> recompose(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) RecomposeVAppParams params);
+ ListenableFuture<Task> recompose(@EndpointParam URI vAppHref,
+ @BinderParam(BindToXMLPayload.class) RecomposeVAppParams params);
/**
* @see VAppApi#undeploy(URI, UndeployVAppParams)
@@ -166,18 +446,18 @@
@Produces(UNDEPLOY_VAPP_PARAMS)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> undeploy(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
+ ListenableFuture<Task> undeploy(@EndpointParam URI vAppHref,
+ @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
/**
- * @see VAppApi#getControlAccess(URI)
+ * @see VAppApi#getAccessControl(URI)
*/
@GET
@Path("/controlAccess")
@Consumes(CONTROL_ACCESS)
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<ControlAccessParams> getControlAccess(@EndpointParam URI vAppURI);
+ ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam URI vAppHref);
/**
* @see VAppApi#powerOff(URI)
@@ -186,7 +466,7 @@
@Path("/power/action/powerOff")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> powerOff(@EndpointParam URI vAppURI);
+ ListenableFuture<Task> powerOff(@EndpointParam URI vAppHref);
/**
* @see VAppApi#powerOn(URI)
@@ -195,7 +475,7 @@
@Path("/power/action/powerOn")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> powerOn(@EndpointParam URI vAppURI);
+ ListenableFuture<Task> powerOn(@EndpointParam URI vAppHref);
/**
* @see VAppApi#reboot(URI)
@@ -204,7 +484,7 @@
@Path("/power/action/powerOff")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> reboot(@EndpointParam URI vAppURI);
+ ListenableFuture<Task> reboot(@EndpointParam URI vAppHref);
/**
* @see VAppApi#reset(URI)
@@ -213,7 +493,7 @@
@Path("/power/action/reset")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> reset(@EndpointParam URI vAppURI);
+ ListenableFuture<Task> reset(@EndpointParam URI vAppHref);
/**
* @see VAppApi#shutdown(URI)
@@ -222,7 +502,7 @@
@Path("/power/action/shutdown")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> shutdown(@EndpointParam URI vAppURI);
+ ListenableFuture<Task> shutdown(@EndpointParam URI vAppHref);
/**
* @see VAppApi#suspend(URI)
@@ -231,7 +511,7 @@
@Path("/power/action/suspend")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> suspend(@EndpointParam URI vAppURI);
+ ListenableFuture<Task> suspend(@EndpointParam URI vAppHref);
/**
* @see VAppApi#getLeaseSettingsSection(URI)
@@ -241,18 +521,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(@EndpointParam URI vAppURI);
+ ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(@EndpointParam URI vAppHref);
/**
- * @see VAppApi#modifyLeaseSettingsSection(URI, LeaseSettingsSection)
+ * @see VAppApi#editLeaseSettingsSection(URI, LeaseSettingsSection)
*/
@PUT
@Path("/leaseSettingsSection")
@Produces(LEASE_SETTINGS_SECTION)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyLeaseSettingsSection(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) LeaseSettingsSection section);
+ ListenableFuture<Task> editLeaseSettingsSection(@EndpointParam URI vAppHref,
+ @BinderParam(BindToXMLPayload.class) LeaseSettingsSection section);
/**
* @see VAppApi#getNetworkConfigSection(URI)
@@ -262,18 +542,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<NetworkConfigSection> getNetworkConfigSection(@EndpointParam URI vAppURI);
+ ListenableFuture<NetworkConfigSection> getNetworkConfigSection(@EndpointParam URI vAppHref);
/**
- * @see VAppApi#modifyNetworkConfigSection(URI, NetworkConfigSection)
+ * @see VAppApi#editNetworkConfigSection(URI, NetworkConfigSection)
*/
@PUT
@Path("/networkConfigSection")
@Produces(NETWORK_CONFIG_SECTION)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyNetworkConfigSection(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) NetworkConfigSection section);
+ ListenableFuture<Task> editNetworkConfigSection(@EndpointParam URI vAppHref,
+ @BinderParam(BindToXMLPayload.class) NetworkConfigSection section);
/**
* @see VAppApi#getNetworkSection(URI)
@@ -283,7 +563,7 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<NetworkSection> getNetworkSection(@EndpointParam URI vAppURI);
+ ListenableFuture<NetworkSection> getNetworkSection(@EndpointParam URI vAppHref);
/**
* @see VAppApi#getOwner(URI)
@@ -293,18 +573,17 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Owner> getOwner(@EndpointParam URI vAppURI);
+ ListenableFuture<Owner> getOwner(@EndpointParam URI vAppHref);
/**
- * @see VAppApi#modifyOwner(URI, Owner)
+ * @see VAppApi#editOwner(URI, Owner)
*/
@PUT
@Path("/owner")
@Produces(OWNER)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Void> modifyOwner(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) Owner owner);
+ ListenableFuture<Void> editOwner(@EndpointParam URI vAppHref, @BinderParam(BindToXMLPayload.class) Owner owner);
/**
* @see VAppApi#getProductSections(URI)
@@ -314,19 +593,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI vAppURI);
+ ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI vAppHref);
/**
- * @see VAppApi#modifyProductSections(URI, ProductSectionList)
+ * @see VAppApi#editProductSections(URI, ProductSectionList)
*/
@PUT
@Path("/productSections")
@Produces(PRODUCT_SECTION_LIST)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyProductSections(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
-
+ ListenableFuture<Task> editProductSections(@EndpointParam URI vAppHref,
+ @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
/**
* @see VAppApi#getStartupSection(URI)
@@ -336,22 +614,26 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<StartupSection> getStartupSection(@EndpointParam URI vAppURI);
+ ListenableFuture<StartupSection> getStartupSection(@EndpointParam URI vAppHref);
/**
- * @see VAppApi#modifyStartupSection(URI, StartupSection)
+ * @see VAppApi#editStartupSection(URI, StartupSection)
*/
@PUT
@Path("/startupSection")
@Produces(STARTUP_SECTION)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyStartupSection(@EndpointParam URI vAppURI,
- @BinderParam(BindToXMLPayload.class) StartupSection section);
+ ListenableFuture<Task> editStartupSection(@EndpointParam URI vAppHref,
+ @BinderParam(BindToXMLPayload.class) StartupSection section);
/**
* Asynchronous access to {@link VApp} {@link Metadata} features
*/
@Delegate
- MetadataAsyncApi.Writeable getMetadataApi();
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam(parser = VAppURNToHref.class) String vAppUrn);
+
+ @Delegate
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam URI vAppHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java
index 38df0a4..5e962be 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java
@@ -24,56 +24,63 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.dmtf.ovf.NetworkSection;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
import org.jclouds.vcloud.director.v1_5.domain.References;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.dmtf.Envelope;
-import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConnectionSection;
+import org.jclouds.vcloud.director.v1_5.functions.href.VAppTemplateURNToHref;
/**
* Provides synchronous access to {@link VAppTemplate} objects.
*
- * @author Adam Lowe
- * @see org.jclouds.vcloud.director.v1_5.features.VAppTemplateAsyncApi
+ * @author Adam Lowe, Adrian Cole
+ * @see VAppTemplateAsyncApi
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface VAppTemplateApi {
/**
* Retrieves a vApp template (can be used also to retrieve a VM from a vApp Template).
- *
+ *
* The vApp could be in one of these statues:
* <ul>
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#FAILED_CREATION FAILED_CREATION(-1)} -
- * Transient entity state, e.g., model object is created but the corresponding VC backing does not exist yet. This
- * is further sub-categorized in the respective entities.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED UNRESOLVED(0)} -
- * Entity is whole, e.g., VM creation is complete and all the required model objects and VC backings are created.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#RESOLVED RESOLVED(1)} -
- * Entity is resolved.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNKNOWN UNKNOWN(6)} -
- * Entity state could not be retrieved from the inventory, e.g., VM power state is null.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_OFF POWERED_OFF(8)} -
- * All VMs of the vApp template are powered off.
- * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#MIXED MIXED(10)} -
- * vApp template status is set to {@code MIXED} when the VMs in the vApp are in different power states.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#FAILED_CREATION
+ * FAILED_CREATION(-1)} - Transient entity state, e.g., model object is addd but the
+ * corresponding VC backing does not exist yet. This is further sub-categorized in the respective
+ * entities.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED
+ * UNRESOLVED(0)} - Entity is whole, e.g., VM creation is complete and all the required model
+ * objects and VC backings are addd.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#RESOLVED
+ * RESOLVED(1)} - Entity is resolved.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNKNOWN
+ * UNKNOWN(6)} - Entity state could not be retrieved from the inventory, e.g., VM power state is
+ * null.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_OFF
+ * POWERED_OFF(8)} - All VMs of the vApp template are powered off.
+ * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#MIXED MIXED(10)}
+ * - vApp template status is set to {@code MIXED} when the VMs in the vApp are in different power
+ * states.
* </ul>
*
* <pre>
* GET /vAppTemplate/{id}
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return the requested template
*/
- VAppTemplate getVAppTemplate(URI templateUri);
+ VAppTemplate get(String templateUrn);
+
+ VAppTemplate get(URI templateHref);
/**
* Modifies only the name/description of a vApp template.
@@ -82,12 +89,16 @@
* PUT /vAppTemplate/{id}
* </pre>
*
- * @param templateUri the URI of the template
- * @param template the template containing the new name and/or description
- * @return the task performing the action. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @param templateUrn
+ * the String of the template
+ * @param template
+ * the template containing the new name and/or description
+ * @return the task performing the action. This operation is asynchronous and the user should
+ * monitor the returned task status in order to check when it is completed.
*/
- Task modifyVAppTemplate(URI templateUri, VAppTemplate template);
+ Task edit(String templateUrn, VAppTemplate template);
+
+ Task edit(URI templateHref, VAppTemplate template);
/**
* Deletes a vApp template.
@@ -96,24 +107,14 @@
* DELETE /vAppTemplate/{id}
* </pre>
*
- * @param templateUri the URI of the template
- * @return the task performing the action. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @param templateUrn
+ * the String of the template
+ * @return the task performing the action. This operation is asynchronous and the user should
+ * monitor the returned task status in order to check when it is completed.
*/
- Task deleteVappTemplate(URI templateUri);
+ Task remove(String templateUrn);
- /**
- * Consolidates a VM
- *
- * <pre>
- * POST /vAppTemplate/{id}/action/consolidate
- * </pre>
- *
- * @param templateUri the URI of the template
- * @return the task performing the action. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
- */
- Task consolidateVm(URI templateUri);
+ Task remove(URI templateHref);
/**
* Disables the download link to the ovf of a vApp template.
@@ -122,9 +123,12 @@
* POST /vAppTemplate/{id}/action/disableDownload
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
*/
- void disableDownload(URI templateUri);
+ void disableDownload(String templateUrn);
+
+ void disableDownload(URI templateHref);
/**
* Enables downloading of the ovf of a vApp template.
@@ -133,25 +137,14 @@
* POST /vAppTemplate/{id}/action/enableDownload
* </pre>
*
- * @param templateUri the URI of the template
- * @return the task performing the action. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @param templateUrn
+ * the String of the template
+ * @return the task performing the action. This operation is asynchronous and the user should
+ * monitor the returned task status in order to check when it is completed.
*/
- Task enableDownload(URI templateUri);
+ Task enableDownload(String templateUrn);
- /**
- * Relocates a virtual machine in a vApp template to a different datastore.
- *
- * <pre>
- * POST /vAppTemplate/{id}/action/relocate
- * </pre>
- *
- * @param templateUri the URI of the template
- * @param params contains the reference to the new datastore
- * @return the task performing the action. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
- */
- Task relocateVm(URI templateUri, RelocateParams params);
+ Task enableDownload(URI templateHref);
/**
* Retrieves the customization section of a vApp template.
@@ -160,36 +153,13 @@
* GET /vAppTemplate/{id}/customizationSection
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return the customization section
*/
- CustomizationSection getCustomizationSection(URI templateUri);
+ CustomizationSection getCustomizationSection(String templateUrn);
- /**
- * Retrieves the Guest Customization Section of a VM
- *
- * <pre>
- * GET /vAppTemplate/{id}/guestCustomizationSection
- * </pre>
- *
- * @param templateUri the URI of the template
- * @return the guest customization section
- */
- GuestCustomizationSection getGuestCustomizationSection(URI templateUri);
-
- /**
- * Modifies the guest customization options of a VM.
- *
- * <pre>
- * PUT /vAppTemplate/{id}/guestCustomizationSection
- * </pre>
- *
- * @param templateUri the URI of the template
- * @param section the new configuration to apply
- * @return the task performing the action. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
- */
- Task modifyGuestCustomizationSection(URI templateUri, GuestCustomizationSection section);
+ CustomizationSection getCustomizationSection(URI templateHref);
/**
* Retrieves the lease settings section of a vApp or vApp template
@@ -198,10 +168,13 @@
* GET /vAppTemplate/{id}/leaseSettingsSection
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return the lease settings
*/
- LeaseSettingsSection getLeaseSettingsSection(URI templateUri);
+ LeaseSettingsSection getLeaseSettingsSection(String templateUrn);
+
+ LeaseSettingsSection getLeaseSettingsSection(URI templateHref);
/**
* Modifies the lease settings section of a vApp or vApp template.
@@ -210,12 +183,16 @@
* PUT /vAppTemplate/{id}/leaseSettingsSection
* </pre>
*
- * @param templateUri the URI of the template
- * @param section the new configuration to apply
- * @return the task performing the action. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @param templateUrn
+ * the String of the template
+ * @param section
+ * the new configuration to apply
+ * @return the task performing the action. This operation is asynchronous and the user should
+ * monitor the returned task status in order to check when it is completed.
*/
- Task modifyLeaseSettingsSection(URI templateUri, LeaseSettingsSection section);
+ Task editLeaseSettingsSection(String templateUrn, LeaseSettingsSection section);
+
+ Task editLeaseSettingsSection(URI templateHref, LeaseSettingsSection section);
/**
* Retrieves the network config section of a vApp or vApp template.
@@ -224,22 +201,13 @@
* GET /vAppTemplate/{id}/networkConfigSection
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return the network config section requested
*/
- NetworkConfigSection getNetworkConfigSection(URI templateUri);
+ NetworkConfigSection getNetworkConfigSection(String templateUrn);
- /**
- * Retrieves the network connection section of a VM
- *
- * <pre>
- * GET /vAppTemplate/{id}/networkConnectionSection
- * </pre>
- *
- * @param templateUri the URI of the template
- * @return the network connection section requested
- */
- NetworkConnectionSection getNetworkConnectionSection(URI templateUri);
+ NetworkConfigSection getNetworkConfigSection(URI templateHref);
/**
* Retrieves the network section of a vApp or vApp template.
@@ -248,26 +216,32 @@
* GET /vAppTemplate/{id}/networkSection
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return the network section requested
*/
- NetworkSection getNetworkSection(URI templateUri);
+ NetworkSection getNetworkSection(String templateUrn);
+
+ NetworkSection getNetworkSection(URI templateHref);
/**
* Retrieves an OVF descriptor of a vApp template.
- *
- * This OVF represents the vApp template as it is, with all vCloud specific information (like mac address, parent
- * networks, etc). The OVF which could be downloaded by enabling for download will not contain this information.
- * There are no specific states bound to this entity.
+ *
+ * This OVF represents the vApp template as it is, with all vCloud specific information (like mac
+ * address, parent networks, etc). The OVF which could be downloaded by enabling for download
+ * will not contain this information. There are no specific states bound to this entity.
*
* <pre>
* GET /vAppTemplate/{id}/ovf
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return the ovf envelope
*/
- Envelope getOvf(URI templateUri);
+ Envelope getOvf(String templateUrn);
+
+ Envelope getOvf(URI templateHref);
/**
* Retrieves vApp template owner.
@@ -276,10 +250,13 @@
* GET /vAppTemplate/{id}/owner
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return the owner of the vApp template
*/
- Owner getOwner(URI templateUri);
+ Owner getOwner(String templateUrn);
+
+ Owner getOwner(URI templateHref);
/**
* Retrieves VAppTemplate/VM product sections
@@ -288,10 +265,13 @@
* GET /vAppTemplate/{id}/productSections
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return the product sections
*/
- ProductSectionList getProductSections(URI templateUri);
+ ProductSectionList getProductSections(String templateUrn);
+
+ ProductSectionList getProductSections(URI templateHref);
/**
* Modifies the product sections of a vApp or vApp template.
@@ -300,25 +280,35 @@
* PUT /vAppTemplate/{id}/productSections
* </pre>
*
- * @param templateUri the URI of the template
- * @return the task performing the action. This operation is asynchronous and the user should monitor the returned
- * task status in order to check when it is completed.
+ * @param templateUrn
+ * the String of the template
+ * @return the task performing the action. This operation is asynchronous and the user should
+ * monitor the returned task status in order to check when it is completed.
*/
- Task modifyProductSections(URI templateUri, ProductSectionList sections);
+ Task editProductSections(String templateUrn, ProductSectionList sections);
+
+ Task editProductSections(URI templateHref, ProductSectionList sections);
/**
* <pre>
* GET /vAppTemplate/{id}/shadowVms
* </pre>
*
- * @param templateUri the URI of the template
+ * @param templateUrn
+ * the String of the template
* @return shadowVM references
*/
- References getShadowVms(URI templateUri);
+ References getShadowVms(String templateUrn);
+
+ References getShadowVms(URI templateHref);
/**
* @return synchronous access to {@link Metadata} features
*/
@Delegate
- MetadataApi.Writeable getMetadataApi();
+ MetadataApi.Writeable getMetadataApi(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam URI templateHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
index ff643b0..9804c3b 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
@@ -19,14 +19,11 @@
package org.jclouds.vcloud.director.v1_5.features;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CUSTOMIZATION_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.GUEST_CUSTOMIZATION_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.LEASE_SETTINGS_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONFIG_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONNECTION_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OWNER;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PRODUCT_SECTION_LIST;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.RELOCATE_TEMPLATE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP_TEMPLATE;
@@ -49,65 +46,206 @@
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.binders.BindToXMLPayload;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
import org.jclouds.vcloud.director.v1_5.domain.References;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.dmtf.Envelope;
-import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConnectionSection;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.VAppTemplateURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
/**
- * @author Adam Lowe
- * @see org.jclouds.vcloud.director.v1_5.features.VAppTemplateApi
+ * @author Adam Lowe, Adrian Cole
+ * @see VAppTemplateApi
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface VAppTemplateAsyncApi {
/**
- * @see VAppTemplateApi#getVAppTemplate(URI)
+ * @see VAppTemplateApi#get(String)
*/
@GET
@Consumes(VAPP_TEMPLATE)
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<VAppTemplate> getVAppTemplate(@EndpointParam URI reference);
-
+ ListenableFuture<VAppTemplate> get(@EndpointParam(parser = VAppTemplateURNToHref.class) String reference);
/**
- * @see VAppTemplateApi#modifyVAppTemplate(URI, VAppTemplate)
+ * @see VAppTemplateApi#edit(String, VAppTemplate)
*/
@PUT
@Produces(VAPP_TEMPLATE)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVAppTemplate(@EndpointParam URI templateURI,
- @BinderParam(BindToXMLPayload.class) VAppTemplate template);
+ ListenableFuture<Task> edit(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn,
+ @BinderParam(BindToXMLPayload.class) VAppTemplate template);
/**
- * @see VAppTemplateApi#deleteVappTemplate(URI)
+ * @see VAppTemplateApi#remove(String)
*/
@DELETE
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> deleteVappTemplate(@EndpointParam URI templateUri);
+ ListenableFuture<Task> remove(@EndpointParam String templateUri);
/**
- * @see VAppTemplateApi#consolidateVm(URI)
+ * @see VAppTemplateApi#disableDownload(String)
+ */
+ @POST
+ @Path("/action/disableDownload")
+ @JAXBResponseParser
+ ListenableFuture<Void> disableDownload(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#enableDownload(String)
*/
@POST
@Consumes(TASK)
- @Path("/action/consolidate")
+ @Path("/action/enableDownload")
@JAXBResponseParser
- ListenableFuture<Task> consolidateVm(@EndpointParam URI templateURI);
+ ListenableFuture<Task> enableDownload(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#getCustomizationSection(String)
+ */
+ @GET
+ @Consumes(CUSTOMIZATION_SECTION)
+ @Path("/customizationSection")
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<CustomizationSection> getCustomizationSection(
+ @EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#getLeaseSettingsSection(String)
+ */
+ @GET
+ @Consumes(LEASE_SETTINGS_SECTION)
+ @Path("/leaseSettingsSection")
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(
+ @EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#editLeaseSettingsSection(String, LeaseSettingsSection)
+ */
+ @PUT
+ @Produces(LEASE_SETTINGS_SECTION)
+ @Consumes(TASK)
+ @Path("/leaseSettingsSection")
+ @JAXBResponseParser
+ ListenableFuture<Task> editLeaseSettingsSection(
+ @EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn,
+ @BinderParam(BindToXMLPayload.class) LeaseSettingsSection settingsSection);
+
+ /**
+ * @see VAppTemplateApi#getNetworkConfigSection(String)
+ */
+ @GET
+ @Consumes(NETWORK_CONFIG_SECTION)
+ @Path("/networkConfigSection")
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<NetworkConfigSection> getNetworkConfigSection(
+ @EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#getNetworkSection(String)
+ */
+ @GET
+ @Consumes(NETWORK_SECTION)
+ @Path("/networkSection")
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<NetworkSection> getNetworkSection(
+ @EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#getOvf(String)
+ */
+ @GET
+ @Consumes
+ @Path("/ovf")
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Envelope> getOvf(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#getOwnerOfVAppTemplate(String)
+ */
+ @GET
+ @Consumes(OWNER)
+ @Path("/owner")
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Owner> getOwner(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#getProductSectionsForVAppTemplate(String)
+ */
+ @GET
+ @Consumes(PRODUCT_SECTION_LIST)
+ @Path("/productSections")
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<ProductSectionList> getProductSections(
+ @EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#editProductSections(String, ProductSectionList)
+ */
+ @PUT
+ @Produces(PRODUCT_SECTION_LIST)
+ @Consumes(TASK)
+ @Path("/productSections")
+ @JAXBResponseParser
+ ListenableFuture<Task> editProductSections(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn,
+ @BinderParam(BindToXMLPayload.class) ProductSectionList sections);
+
+ /**
+ * @see VAppTemplateApi#getShadowVms(String)
+ */
+ @GET
+ @Consumes
+ @Path("/shadowVms")
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<References> getShadowVms(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ /**
+ * @see VAppTemplateApi#get(URI)
+ */
+ @GET
+ @Consumes(VAPP_TEMPLATE)
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<VAppTemplate> get(@EndpointParam URI reference);
+
+ /**
+ * @see VAppTemplateApi#edit(URI, VAppTemplate)
+ */
+ @PUT
+ @Produces(VAPP_TEMPLATE)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> edit(@EndpointParam URI templateHref,
+ @BinderParam(BindToXMLPayload.class) VAppTemplate template);
+
+ /**
+ * @see VAppTemplateApi#remove(URI)
+ */
+ @DELETE
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> remove(@EndpointParam URI templateUri);
/**
* @see VAppTemplateApi#disableDownload(URI)
@@ -115,27 +253,16 @@
@POST
@Path("/action/disableDownload")
@JAXBResponseParser
- ListenableFuture<Void> disableDownload(@EndpointParam URI templateURI);
+ ListenableFuture<Void> disableDownload(@EndpointParam URI templateHref);
/**
- * @see VAppTemplateApi#enableDownloadVappTemplate(URI)
+ * @see VAppTemplateApi#enableDownload(URI)
*/
@POST
@Consumes(TASK)
@Path("/action/enableDownload")
@JAXBResponseParser
- ListenableFuture<Task> enableDownload(@EndpointParam URI templateURI);
-
- /**
- * @see VAppTemplateApi#relocateVm(URI, RelocateParams)
- */
- @POST
- @Produces(RELOCATE_TEMPLATE)
- @Consumes(TASK)
- @Path("/action/relocate")
- @JAXBResponseParser
- ListenableFuture<Task> relocateVm(@EndpointParam URI templateURI,
- @BinderParam(BindToXMLPayload.class) RelocateParams params);
+ ListenableFuture<Task> enableDownload(@EndpointParam URI templateHref);
/**
* @see VAppTemplateApi#getCustomizationSection(URI)
@@ -145,28 +272,7 @@
@Path("/customizationSection")
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<CustomizationSection> getCustomizationSection(@EndpointParam URI templateURI);
-
- /**
- * @see VAppTemplateApi#getGuestCustomizationSection(URI)
- */
- @GET
- @Consumes(GUEST_CUSTOMIZATION_SECTION)
- @Path("/guestCustomizationSection")
- @JAXBResponseParser
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<GuestCustomizationSection> getGuestCustomizationSection(@EndpointParam URI templateURI);
-
- /**
- * @see VAppTemplateApi#modifyGuestCustomizationSection(URI, org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection)
- */
- @PUT
- @Produces(GUEST_CUSTOMIZATION_SECTION)
- @Consumes(TASK)
- @Path("/guestCustomizationSection")
- @JAXBResponseParser
- ListenableFuture<Task> modifyGuestCustomizationSection(@EndpointParam URI templateURI,
- @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section);
+ ListenableFuture<CustomizationSection> getCustomizationSection(@EndpointParam URI templateHref);
/**
* @see VAppTemplateApi#getLeaseSettingsSection(URI)
@@ -176,28 +282,18 @@
@Path("/leaseSettingsSection")
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(@EndpointParam URI templateURI);
+ ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(@EndpointParam URI templateHref);
/**
- * @see VAppTemplateApi#modifyLeaseSettingsSection(URI, LeaseSettingsSection)
+ * @see VAppTemplateApi#editLeaseSettingsSection(URI, LeaseSettingsSection)
*/
@PUT
@Produces(LEASE_SETTINGS_SECTION)
@Consumes(TASK)
@Path("/leaseSettingsSection")
@JAXBResponseParser
- ListenableFuture<Task> modifyLeaseSettingsSection(@EndpointParam URI templateURI,
- @BinderParam(BindToXMLPayload.class) LeaseSettingsSection settingsSection);
-
- /**
- * @see VAppTemplateApi#getNetworkConnectionSection(URI)
- */
- @GET
- @Consumes(NETWORK_CONNECTION_SECTION)
- @Path("/networkConnectionSection")
- @JAXBResponseParser
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<NetworkConnectionSection> getNetworkConnectionSection(@EndpointParam URI templateURI);
+ ListenableFuture<Task> editLeaseSettingsSection(@EndpointParam URI templateHref,
+ @BinderParam(BindToXMLPayload.class) LeaseSettingsSection settingsSection);
/**
* @see VAppTemplateApi#getNetworkConfigSection(URI)
@@ -207,17 +303,7 @@
@Path("/networkConfigSection")
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<NetworkConfigSection> getNetworkConfigSection(@EndpointParam URI templateURI);
-
- /**
- * @see VAppTemplateApi#getNetworkConnectionSection(URI)
- */
- @GET
- @Consumes(NETWORK_CONNECTION_SECTION)
- @Path("/networkConnectionSection")
- @JAXBResponseParser
- @ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<NetworkConnectionSection> getVAppTemplateNetworkConnectionSection(@EndpointParam URI templateURI);
+ ListenableFuture<NetworkConfigSection> getNetworkConfigSection(@EndpointParam URI templateHref);
/**
* @see VAppTemplateApi#getNetworkSection(URI)
@@ -227,7 +313,7 @@
@Path("/networkSection")
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<NetworkSection> getNetworkSection(@EndpointParam URI templateURI);
+ ListenableFuture<NetworkSection> getNetworkSection(@EndpointParam URI templateHref);
/**
* @see VAppTemplateApi#getOvf(URI)
@@ -237,7 +323,7 @@
@Path("/ovf")
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Envelope> getOvf(@EndpointParam URI templateURI);
+ ListenableFuture<Envelope> getOvf(@EndpointParam URI templateHref);
/**
* @see VAppTemplateApi#getOwnerOfVAppTemplate(URI)
@@ -247,7 +333,7 @@
@Path("/owner")
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Owner> getOwner(@EndpointParam URI templateURI);
+ ListenableFuture<Owner> getOwner(@EndpointParam URI templateHref);
/**
* @see VAppTemplateApi#getProductSectionsForVAppTemplate(URI)
@@ -257,19 +343,19 @@
@Path("/productSections")
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI templateURI);
+ ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI templateHref);
/**
- * @see VAppTemplateApi#modifyProductSections(URI, ProductSectionList)
+ * @see VAppTemplateApi#editProductSections(URI, ProductSectionList)
*/
@PUT
@Produces(PRODUCT_SECTION_LIST)
@Consumes(TASK)
@Path("/productSections")
@JAXBResponseParser
- ListenableFuture<Task> modifyProductSections(@EndpointParam URI templateURI,
- @BinderParam(BindToXMLPayload.class) ProductSectionList sections);
-
+ ListenableFuture<Task> editProductSections(@EndpointParam URI templateHref,
+ @BinderParam(BindToXMLPayload.class) ProductSectionList sections);
+
/**
* @see VAppTemplateApi#getShadowVms(URI)
*/
@@ -278,11 +364,15 @@
@Path("/shadowVms")
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<References> getShadowVms(@EndpointParam URI templateURI);
+ ListenableFuture<References> getShadowVms(@EndpointParam URI templateHref);
/**
* @return asynchronous access to {@link Metadata} features
*/
@Delegate
- MetadataAsyncApi.Writeable getMetadataApi();
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam(parser = VAppTemplateURNToHref.class) String templateUrn);
+
+ @Delegate
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam URI templateHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java
index 5a04955..1c680fd 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java
@@ -23,6 +23,7 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.vcloud.director.v1_5.domain.Media;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.VApp;
@@ -35,13 +36,13 @@
import org.jclouds.vcloud.director.v1_5.domain.params.ComposeVAppParams;
import org.jclouds.vcloud.director.v1_5.domain.params.InstantiateVAppParams;
import org.jclouds.vcloud.director.v1_5.domain.params.UploadVAppTemplateParams;
+import org.jclouds.vcloud.director.v1_5.functions.href.VdcURNToHref;
/**
* Provides synchronous access to a vDC.
*
* @see VdcAsyncApi
- * @see <a href= "http://support.theenterprisecloud.com/kb/default.asp?id=984&Lang=1&SID=" />
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface VdcApi {
@@ -51,7 +52,9 @@
*
* @return the vdc or null if not found
*/
- Vdc getVdc(URI vdcUri);
+ Vdc get(String vdcUrn);
+
+ Vdc get(URI vdcHref);
/**
* Captures a vApp into vApp template.
@@ -63,8 +66,10 @@
* @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
* to use the vApp.
*/
- VAppTemplate captureVApp(URI vdcUri, CaptureVAppParams params);
+ VAppTemplate captureVApp(String vdcUrn, CaptureVAppParams params);
+ VAppTemplate captureVApp(URI vdcHref, CaptureVAppParams params);
+
/**
* Clones a media into new one.
*
@@ -75,8 +80,10 @@
* @return a Media resource which will contain a task. The user should monitor the contained task status in order to
* check when it is completed.
*/
- Media cloneMedia(URI vdcUri, CloneMediaParams params);
+ Media cloneMedia(String vdcUrn, CloneMediaParams params);
+ Media cloneMedia(URI vdcHref, CloneMediaParams params);
+
/**
* Clones a vApp into new one.
*
@@ -86,8 +93,10 @@
* @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
* to use the vApp.
*/
- VApp cloneVApp(URI vdcUri, CloneVAppParams params);
+ VApp cloneVApp(String vdcUrn, CloneVAppParams params);
+ VApp cloneVApp(URI vdcHref, CloneVAppParams params);
+
/**
* Clones a vApp template into new one.
*
@@ -98,8 +107,10 @@
* @return a VAppTemplate resource which will contain a task. The user should should wait for this task to finish to
* be able to use the VAppTemplate.
*/
- VAppTemplate cloneVAppTemplate(URI vdcUri, CloneVAppTemplateParams params);
+ VAppTemplate cloneVAppTemplate(String vdcUrn, CloneVAppTemplateParams params);
+ VAppTemplate cloneVAppTemplate(URI vdcHref, CloneVAppTemplateParams params);
+
/**
* Composes a new vApp using VMs from other vApps or vApp templates.
*
@@ -130,8 +141,10 @@
* @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
* to use the vApp.
*/
- VApp composeVApp(URI vdcUri, ComposeVAppParams params);
+ VApp composeVApp(String vdcUrn, ComposeVAppParams params);
+ VApp composeVApp(URI vdcHref, ComposeVAppParams params);
+
/**
* Instantiate a vApp template into a new vApp.
*
@@ -145,8 +158,10 @@
* @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
* to use the vApp.
*/
- VApp instantiateVApp(URI vdcUri, InstantiateVAppParams params);
+ VApp instantiateVApp(String vdcUrn, InstantiateVAppParams params);
+ VApp instantiateVApp(URI vdcHref, InstantiateVAppParams params);
+
/**
* Uploading vApp template to a vDC.
*
@@ -166,18 +181,26 @@
* @return a VAppTemplate resource which will contain a task. The user should should wait for this task to finish to
* be able to use the VAppTemplate.
*/
- VAppTemplate uploadVAppTemplate(URI vdcUri, UploadVAppTemplateParams params);
+ VAppTemplate uploadVAppTemplate(String vdcUrn, UploadVAppTemplateParams params);
+ VAppTemplate uploadVAppTemplate(URI vdcHref, UploadVAppTemplateParams params);
+
/**
* Creates a media (and present upload link for the floppy/iso file).
*
* @return The response will return a link to transfer site to be able to continue with uploading the media.
*/
- Media createMedia(URI vdcUri, Media media);
+ Media addMedia(String vdcUrn, Media media);
+ Media addMedia(URI vdcHref, Media media);
+
/**
* @return synchronous access to {@link Metadata.Readable} features
*/
@Delegate
- MetadataApi.Readable getMetadataApi();
+ MetadataApi.Readable getMetadataApi(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn);
+
+ @Delegate
+ MetadataApi.Readable getMetadataApi(@EndpointParam URI vdcHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
index 9e0cdaa..221fc78 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
@@ -36,6 +36,7 @@
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Media;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.VApp;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
@@ -47,25 +48,124 @@
import org.jclouds.vcloud.director.v1_5.domain.params.InstantiateVAppParams;
import org.jclouds.vcloud.director.v1_5.domain.params.UploadVAppTemplateParams;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.VdcURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
-
+
/**
* @see VdcApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface VdcAsyncApi {
-
+
/**
- * @see VdcApi#getVdc(URI)
+ * @see VdcApi#get(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<? extends Vdc> getVdc(@EndpointParam URI vdcURI);
-
+ ListenableFuture<? extends Vdc> get(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn);
+
+ /**
+ * @see VdcApi#captureVApp(String, CaptureVAppParams)
+ */
+ @POST
+ @Path("/action/captureVApp")
+ @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
+ @Produces(VCloudDirectorMediaType.CAPTURE_VAPP_PARAMS)
+ @JAXBResponseParser
+ ListenableFuture<VAppTemplate> captureVApp(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
+ @BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
+
+ /**
+ * @see VdcApi#cloneMedia(String, CloneMediaParams)
+ */
+ @POST
+ @Path("/action/cloneMedia")
+ @Consumes(VCloudDirectorMediaType.MEDIA)
+ @Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
+ @JAXBResponseParser
+ ListenableFuture<Media> cloneMedia(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
+ @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
+
+ /**
+ * @see VdcApi#cloneVApp(String, CloneVAppParams)
+ */
+ @POST
+ @Path("/action/cloneVApp")
+ @Consumes(VCloudDirectorMediaType.VAPP)
+ @Produces(VCloudDirectorMediaType.CLONE_VAPP_PARAMS)
+ // TODO fix these etc.
+ @JAXBResponseParser
+ ListenableFuture<VApp> cloneVApp(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
+ @BinderParam(BindToXMLPayload.class) CloneVAppParams params);
+
+ /**
+ * @see VdcApi#cloneVAppTemplate(String, CloneVAppTemplateParams)
+ */
+ @POST
+ @Path("/action/cloneVAppTemplate")
+ @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
+ @Produces(VCloudDirectorMediaType.CLONE_VAPP_TEMPLATE_PARAMS)
+ @JAXBResponseParser
+ ListenableFuture<VAppTemplate> cloneVAppTemplate(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
+ @BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
+
+ /**
+ * @see VdcApi#composeVApp(String, ComposeVAppParams)
+ */
+ @POST
+ @Path("/action/composeVApp")
+ @Consumes(VCloudDirectorMediaType.VAPP)
+ @Produces(VCloudDirectorMediaType.COMPOSE_VAPP_PARAMS)
+ @JAXBResponseParser
+ ListenableFuture<VApp> composeVApp(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
+ @BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
+
+ /**
+ * @see VdcApi#instantiateVApp(String, InstantiateVAppParamsType)
+ */
+ @POST
+ @Path("/action/instantiateVAppTemplate")
+ @Consumes(VCloudDirectorMediaType.VAPP)
+ @Produces(VCloudDirectorMediaType.INSTANTIATE_VAPP_TEMPLATE_PARAMS)
+ @JAXBResponseParser
+ ListenableFuture<VApp> instantiateVApp(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
+ @BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
+
+ /**
+ * @see VdcApi#uploadVAppTemplate(String, UploadVAppTemplateParams)
+ */
+ @POST
+ @Path("/action/uploadVAppTemplate")
+ @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
+ @Produces(VCloudDirectorMediaType.UPLOAD_VAPP_TEMPLATE_PARAMS)
+ @JAXBResponseParser
+ ListenableFuture<VAppTemplate> uploadVAppTemplate(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
+ @BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
+
+ /**
+ * @see VdcApi#addMedia(String, Media)
+ */
+ @POST
+ @Path("/media")
+ @Consumes(VCloudDirectorMediaType.MEDIA)
+ @Produces(VCloudDirectorMediaType.MEDIA)
+ @JAXBResponseParser
+ ListenableFuture<Media> addMedia(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn,
+ @BinderParam(BindToXMLPayload.class) Media media);
+
+ /**
+ * @see VdcApi#get(URI)
+ */
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<? extends Vdc> get(@EndpointParam URI vdcHref);
+
/**
* @see VdcApi#captureVApp(URI, CaptureVAppParams)
*/
@@ -74,9 +174,9 @@
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
@Produces(VCloudDirectorMediaType.CAPTURE_VAPP_PARAMS)
@JAXBResponseParser
- ListenableFuture<VAppTemplate> captureVApp(@EndpointParam URI vdcURI,
- @BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
-
+ ListenableFuture<VAppTemplate> captureVApp(@EndpointParam URI vdcHref,
+ @BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
+
/**
* @see VdcApi#cloneMedia(URI, CloneMediaParams)
*/
@@ -85,20 +185,21 @@
@Consumes(VCloudDirectorMediaType.MEDIA)
@Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
@JAXBResponseParser
- ListenableFuture<Media> cloneMedia(@EndpointParam URI vdcURI,
- @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
-
+ ListenableFuture<Media> cloneMedia(@EndpointParam URI vdcHref,
+ @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
+
/**
* @see VdcApi#cloneVApp(URI, CloneVAppParams)
*/
@POST
@Path("/action/cloneVApp")
@Consumes(VCloudDirectorMediaType.VAPP)
- @Produces(VCloudDirectorMediaType.CLONE_VAPP_PARAMS) //TODO fix these etc.
+ @Produces(VCloudDirectorMediaType.CLONE_VAPP_PARAMS)
+ // TODO fix these etc.
@JAXBResponseParser
- ListenableFuture<VApp> cloneVApp(@EndpointParam URI vdcURI,
- @BinderParam(BindToXMLPayload.class) CloneVAppParams params);
-
+ ListenableFuture<VApp> cloneVApp(@EndpointParam URI vdcHref,
+ @BinderParam(BindToXMLPayload.class) CloneVAppParams params);
+
/**
* @see VdcApi#cloneVAppTemplate(URI, CloneVAppTemplateParams)
*/
@@ -107,9 +208,9 @@
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
@Produces(VCloudDirectorMediaType.CLONE_VAPP_TEMPLATE_PARAMS)
@JAXBResponseParser
- ListenableFuture<VAppTemplate> cloneVAppTemplate(@EndpointParam URI vdcURI,
- @BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
-
+ ListenableFuture<VAppTemplate> cloneVAppTemplate(@EndpointParam URI vdcHref,
+ @BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
+
/**
* @see VdcApi#composeVApp(URI, ComposeVAppParams)
*/
@@ -118,9 +219,9 @@
@Consumes(VCloudDirectorMediaType.VAPP)
@Produces(VCloudDirectorMediaType.COMPOSE_VAPP_PARAMS)
@JAXBResponseParser
- ListenableFuture<VApp> composeVApp(@EndpointParam URI vdcURI,
- @BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
-
+ ListenableFuture<VApp> composeVApp(@EndpointParam URI vdcHref,
+ @BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
+
/**
* @see VdcApi#instantiateVApp(URI, InstantiateVAppParamsType)
*/
@@ -129,9 +230,9 @@
@Consumes(VCloudDirectorMediaType.VAPP)
@Produces(VCloudDirectorMediaType.INSTANTIATE_VAPP_TEMPLATE_PARAMS)
@JAXBResponseParser
- ListenableFuture<VApp> instantiateVApp(@EndpointParam URI vdcURI,
- @BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
-
+ ListenableFuture<VApp> instantiateVApp(@EndpointParam URI vdcHref,
+ @BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
+
/**
* @see VdcApi#uploadVAppTemplate(URI, UploadVAppTemplateParams)
*/
@@ -140,24 +241,26 @@
@Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
@Produces(VCloudDirectorMediaType.UPLOAD_VAPP_TEMPLATE_PARAMS)
@JAXBResponseParser
- ListenableFuture<VAppTemplate> uploadVAppTemplate(@EndpointParam URI vdcURI,
- @BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
-
+ ListenableFuture<VAppTemplate> uploadVAppTemplate(@EndpointParam URI vdcHref,
+ @BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
+
/**
- * @see VdcApi#createMedia(URI, Media)
+ * @see VdcApi#addMedia(URI, Media)
*/
@POST
@Path("/media")
@Consumes(VCloudDirectorMediaType.MEDIA)
@Produces(VCloudDirectorMediaType.MEDIA)
@JAXBResponseParser
- ListenableFuture<Media> createMedia(@EndpointParam URI vdcURI,
- @BinderParam(BindToXMLPayload.class) Media media);
-
+ ListenableFuture<Media> addMedia(@EndpointParam URI vdcHref, @BinderParam(BindToXMLPayload.class) Media media);
+
/**
* @return asynchronous access to {@link Metadata.Readable} features
*/
@Delegate
- MetadataAsyncApi.Readable getMetadataApi();
-
+ MetadataAsyncApi.Readable getMetadataApi(@EndpointParam(parser = VdcURNToHref.class) String vdcUrn);
+
+ @Delegate
+ MetadataAsyncApi.Readable getMetadataApi(@EndpointParam URI vdcHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java
index ba213cd..afbd3b4 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java
@@ -23,6 +23,8 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList;
import org.jclouds.vcloud.director.v1_5.domain.ScreenTicket;
@@ -41,11 +43,12 @@
import org.jclouds.vcloud.director.v1_5.domain.section.OperatingSystemSection;
import org.jclouds.vcloud.director.v1_5.domain.section.RuntimeInfoSection;
import org.jclouds.vcloud.director.v1_5.domain.section.VirtualHardwareSection;
+import org.jclouds.vcloud.director.v1_5.functions.href.VmURNToHref;
/**
* Provides synchronous access to {@link Vm} objects.
- *
- * @author grkvlt@apache.org
+ *
+ * @author grkvlt@apache.org, Adrian Cole
* @see VmAsyncApi
* @version 1.5
*/
@@ -54,465 +57,561 @@
/**
* Retrieves a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#getVApp(URI)
+ * @see VAppApi#get(String)
*/
- Vm getVm(URI vmURI);
+ Vm get(String vmUrn);
+
+ Vm get(URI vmHref);
/**
* Modifies the name/description of a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#modifyVApp(URI, VApp)
+ * @see VAppApi#edit(String, VApp)
*/
- Task modifyVm(URI vmURI, Vm vm);
+ Task edit(String vmUrn, Vm vm);
+
+ Task edit(URI vmHref, Vm vm);
/**
* Deletes a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#deleteVApp(URI)
+ * @see VAppApi#remove(String)
*/
- Task deleteVm(URI vmURI);
+ Task remove(String vmUrn);
+
+ Task remove(URI vmHref);
/**
* Consolidates a {@link Vm}.
- *
+ *
* <pre>
* POST /vApp/{id}/action/consolidate
* </pre>
- *
+ *
* @since 1.5
*/
- Task consolidateVm(URI vmURI);
+ Task consolidate(String vmUrn);
+
+ Task consolidate(URI vmHref);
/**
* Deploys a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#deploy(URI, DeployVAppParams)
+ * @see VAppApi#deploy(String, DeployVAppParams)
*/
- Task deploy(URI vmURI, DeployVAppParams params);
+ Task deploy(String vmUrn, DeployVAppParams params);
+
+ Task deploy(URI vmHref, DeployVAppParams params);
/**
* Discard suspended state of a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#discardSuspendedState(URI)
+ * @see VAppApi#discardSuspendedState(String)
*/
- Task discardSuspendedState(URI vmURI);
+ Task discardSuspendedState(String vmUrn);
+
+ Task discardSuspendedState(URI vmHref);
/**
* Installs VMware tools to the virtual machine.
- *
+ *
* It should be running in order for them to be installed.
- *
+ *
* <pre>
* POST /vApp/{id}/action/installVMwareTools
* </pre>
- *
+ *
* @since 1.5
*/
- Task installVMwareTools(URI vmURI);
+ Task installVMwareTools(String vmUrn);
+
+ Task installVMwareTools(URI vmHref);
/**
* Relocates a {@link Vm}.
- *
+ *
* <pre>
* POST /vApp/{id}/action/relocate
* </pre>
- *
+ *
* @since 1.5
*/
- Task relocateVm(URI vmURI, RelocateParams params);
+ Task relocate(String vmUrn, RelocateParams params);
+
+ Task relocate(URI vmHref, RelocateParams params);
/**
* Undeploy a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#undeploy(URI, UndeployVAppParams)
+ * @see VAppApi#undeploy(String, UndeployVAppParams)
*/
- Task undeploy(URI vmURI, UndeployVAppParams params);
+ Task undeploy(String vmUrn, UndeployVAppParams params);
+
+ Task undeploy(URI vmHref, UndeployVAppParams params);
/**
- * Upgrade virtual hardware version of a VM to the highest supported virtual
- * hardware version of provider vDC where the VM locates.
- *
+ * Upgrade virtual hardware version of a VM to the highest supported virtual hardware version of
+ * provider vDC where the VM locates.
+ *
* <pre>
* POST /vApp/{id}/action/upgradeHardwareVersion
* </pre>
- *
+ *
* @since 1.5
*/
- Task upgradeHardwareVersion(URI vmURI);
+ Task upgradeHardwareVersion(String vmUrn);
+
+ Task upgradeHardwareVersion(URI vmHref);
/**
* Powers off a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#powerOff(URI)
+ * @see VAppApi#powerOff(String)
*/
- Task powerOff(URI vmURI);
+ Task powerOff(String vmUrn);
+
+ Task powerOff(URI vmHref);
/**
* Powers on a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#powerOn(URI)
+ * @see VAppApi#powerOn(String)
*/
- Task powerOn(URI vmURI);
+ Task powerOn(String vmUrn);
+
+ Task powerOn(URI vmHref);
/**
* Reboots a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#reboot(URI)
+ * @see VAppApi#reboot(String)
*/
- Task reboot(URI vmURI);
+ Task reboot(String vmUrn);
+
+ Task reboot(URI vmHref);
/**
* Resets a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#reset(URI)
+ * @see VAppApi#reset(String)
*/
- Task reset(URI vmURI);
+ Task reset(String vmUrn);
+
+ Task reset(URI vmHref);
/**
* Shuts down a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#shutdown(URI)
+ * @see VAppApi#shutdown(String)
*/
- Task shutdown(URI vmURI);
+ Task shutdown(String vmUrn);
+
+ Task shutdown(URI vmHref);
/**
* Suspends a {@link Vm}.
- *
+ *
* @since 0.9
- * @see VAppApi#suspend(URI)
+ * @see VAppApi#suspend(String)
*/
- Task suspend(URI vmURI);
+ Task suspend(String vmUrn);
+
+ Task suspend(URI vmHref);
/**
* Retrieves the guest customization section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/guestCustomizationSection
* </pre>
- *
+ *
* @since 1.0
- * @see VAppApi#
*/
- GuestCustomizationSection getGuestCustomizationSection(URI vmURI);
+ GuestCustomizationSection getGuestCustomizationSection(String vmUrn);
+
+ GuestCustomizationSection getGuestCustomizationSection(URI vmHref);
/**
* Modifies the guest customization section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/guestCustomizationSection
* </pre>
- *
+ *
* @since 1.0
*/
- Task modifyGuestCustomizationSection(URI vmURI, GuestCustomizationSection section);
+ Task editGuestCustomizationSection(String vmUrn, GuestCustomizationSection section);
+
+ Task editGuestCustomizationSection(URI vmHref, GuestCustomizationSection section);
/**
* Ejects media from a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/media/action/ejectMedia
* </pre>
- *
+ *
* @since 0.9
*/
- Task ejectMedia(URI vmURI, MediaInsertOrEjectParams mediaParams);
+ Task ejectMedia(String vmUrn, MediaInsertOrEjectParams mediaParams);
+
+ Task ejectMedia(URI vmHref, MediaInsertOrEjectParams mediaParams);
/**
* Insert media into a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/media/action/insertMedia
* </pre>
- *
+ *
* @since 0.9
*/
- Task insertMedia(URI vmURI, MediaInsertOrEjectParams mediaParams);
+ Task insertMedia(String vmUrn, MediaInsertOrEjectParams mediaParams);
+
+ Task insertMedia(URI vmHref, MediaInsertOrEjectParams mediaParams);
/**
* Retrieves the network connection section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/networkConnectionSection
* </pre>
- *
+ *
* @since 0.9
*/
- NetworkConnectionSection getNetworkConnectionSection(URI vmURI);
+ NetworkConnectionSection getNetworkConnectionSection(String vmUrn);
+
+ NetworkConnectionSection getNetworkConnectionSection(URI vmHref);
/**
* Modifies the network connection section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/networkConnectionSection
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyNetworkConnectionSection(URI vmURI, NetworkConnectionSection section);
+ Task editNetworkConnectionSection(String vmUrn, NetworkConnectionSection section);
+
+ Task editNetworkConnectionSection(URI vmHref, NetworkConnectionSection section);
/**
* Retrieves the operating system section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/operatingSystemSection
* </pre>
- *
+ *
* @since 0.9
*/
- OperatingSystemSection getOperatingSystemSection(URI vmURI);
+ OperatingSystemSection getOperatingSystemSection(String vmUrn);
+
+ OperatingSystemSection getOperatingSystemSection(URI vmHref);
/**
* Modifies the operating system section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/operatingSystemSection
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyOperatingSystemSection(URI vmURI, OperatingSystemSection section);
+ Task editOperatingSystemSection(String vmUrn, OperatingSystemSection section);
+
+ Task editOperatingSystemSection(URI vmHref, OperatingSystemSection section);
/**
* Retrieves {@link Vm} product sections.
- *
+ *
* @since 1.5
- * @see VAppApi#getProductSections(URI)
+ * @see VAppApi#getProductSections(String)
*/
- ProductSectionList getProductSections(URI vmURI);
+ ProductSectionList getProductSections(String vmUrn);
+
+ ProductSectionList getProductSections(URI vmHref);
/**
* Modifies the product section information of a {@link Vm}.
- *
+ *
* @since 1.5
- * @see VAppApi#modifyProductSections(URI, ProductSectionList)
+ * @see VAppApi#editProductSections(String, ProductSectionList)
*/
- Task modifyProductSections(URI vmURI, ProductSectionList sectionList);
+ Task editProductSections(String vmUrn, ProductSectionList sectionList);
+
+ Task editProductSections(URI vmHref, ProductSectionList sectionList);
/**
* Retrieves a pending question for a {@link Vm}.
- *
- * The user should answer to the question by operation {@link #answerQuestion(URI, VmQuestionAnswer)}.
- * Usually questions will be asked when the VM is powering on.
- *
+ *
+ * The user should answer to the question by operation
+ * {@link #answerQuestion(String, VmQuestionAnswer)}. Usually questions will be asked when the VM
+ * is powering on.
+ *
* <pre>
* GET /vApp/{id}/question
* </pre>
- *
+ *
* @since 0.9
*/
- VmPendingQuestion getPendingQuestion(URI vmURI);
+ VmPendingQuestion getPendingQuestion(String vmUrn);
+
+ VmPendingQuestion getPendingQuestion(URI vmHref);
/**
* Answer a pending question on a {@link Vm}.
- *
- * The answer IDs of choice and question should match the ones returned from operation {@link #getPendingQuestion(URI)}.
- *
+ *
+ * The answer IDs of choice and question should match the ones returned from operation
+ * {@link #getPendingQuestion(String)}.
+ *
* <pre>
* POST /vApp/{id}/question/action/answer
* </pre>
- *
+ *
* @since 0.9
*/
- void answerQuestion(URI vmURI, VmQuestionAnswer answer);
+ void answerQuestion(String vmUrn, VmQuestionAnswer answer);
+
+ void answerQuestion(URI vmHref, VmQuestionAnswer answer);
/**
* Retrieves the runtime info section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/runtimeInfoSection
* </pre>
- *
+ *
* @since 1.5
*/
- RuntimeInfoSection getRuntimeInfoSection(URI vmURI);
+ RuntimeInfoSection getRuntimeInfoSection(String vmUrn);
+
+ RuntimeInfoSection getRuntimeInfoSection(URI vmHref);
/**
* Retrieves the thumbnail of the screen of a {@link Vm}.
- *
+ *
* The content type of the response may vary (e.g. {@code image/png}, {@code image/gif}).
- *
+ *
* <pre>
* GET /vApp/{id}/screen
* </pre>
- *
+ *
* @since 0.9
*/
- byte[] getScreenImage(URI vmURI);
+ byte[] getScreenImage(String vmUrn);
+
+ byte[] getScreenImage(URI vmHref);
/**
* Retrieve a screen ticket for remote console connection to a {@link Vm}.
- *
- * A screen ticket is a string that includes the virtual machine's IP address, its managed object reference, and a string
- * that has been encoded as described in RFC 2396. Each VM element in a vApp includes a link where rel="screen:acquireTicket".
- * You can use that link to request a screen ticket that you can use with the vmware-vmrc utility to open a VMware Remote
- * Console for the virtual machine represented by that VM element. The vApp should be running to get a valid screen ticket.
- *
+ *
+ * A screen ticket is a string that includes the virtual machine's IP address, its managed object
+ * reference, and a string that has been encoded as described in RFC 2396. Each VM element in a
+ * vApp includes a link where rel="screen:acquireTicket". You can use that link to request a
+ * screen ticket that you can use with the vmware-vmrc utility to open a VMware Remote Console
+ * for the virtual machine represented by that VM element. The vApp should be running to get a
+ * valid screen ticket.
+ *
* <pre>
* GET /vApp/{id}/screen/action/acquireTicket
* </pre>
- *
+ *
* @since 0.9
*/
- ScreenTicket getScreenTicket(URI vmURI);
+ ScreenTicket getScreenTicket(String vmUrn);
+
+ ScreenTicket getScreenTicket(URI vmHref);
/**
* Retrieves the virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/virtualHardwareSection
* </pre>
- *
+ *
* @since 0.9
*/
- VirtualHardwareSection getVirtualHardwareSection(URI vmURI);
+ VirtualHardwareSection getVirtualHardwareSection(String vmUrn);
+
+ VirtualHardwareSection getVirtualHardwareSection(URI vmHref);
/**
* Modifies the virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/virtualHardwareSection
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyVirtualHardwareSection(URI vmURI, VirtualHardwareSection section);
+ Task editVirtualHardwareSection(String vmUrn, VirtualHardwareSection section);
+
+ Task editVirtualHardwareSection(URI vmHref, VirtualHardwareSection section);
/**
* Retrieves the CPU properties in virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/virtualHardwareSection/cpu
* </pre>
- *
+ *
* @since 0.9
*/
- RasdItem getVirtualHardwareSectionCpu(URI vmURI);
+ RasdItem getVirtualHardwareSectionCpu(String vmUrn);
+
+ RasdItem getVirtualHardwareSectionCpu(URI vmHref);
/**
* Modifies the CPU properties in virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/virtualHardwareSection/cpu
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyVirtualHardwareSectionCpu(URI vmURI, RasdItem rasd);
+ Task editVirtualHardwareSectionCpu(String vmUrn, RasdItem rasd);
+
+ Task editVirtualHardwareSectionCpu(URI vmHref, RasdItem rasd);
/**
* Retrieves a list of items for disks from virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/virtualHardwareSection/disks
* </pre>
- *
+ *
* @since 0.9
*/
- RasdItemsList getVirtualHardwareSectionDisks(URI vmURI);
+ RasdItemsList getVirtualHardwareSectionDisks(String vmUrn);
+
+ RasdItemsList getVirtualHardwareSectionDisks(URI vmHref);
/**
* Modifies the disks list in virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/virtualHardwareSection/disks
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyVirtualHardwareSectionDisks(URI vmURI, RasdItemsList rasdItemsList);
+ Task editVirtualHardwareSectionDisks(String vmUrn, RasdItemsList rasdItemsList);
+
+ Task editVirtualHardwareSectionDisks(URI vmHref, RasdItemsList rasdItemsList);
/**
* Retrieves the list of items that represents the floppies and CD/DVD drives in a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/virtualHardwareSection/media
* </pre>
- *
+ *
* @since 0.9
*/
- RasdItemsList getVirtualHardwareSectionMedia(URI vmURI);
+ RasdItemsList getVirtualHardwareSectionMedia(String vmUrn);
+
+ RasdItemsList getVirtualHardwareSectionMedia(URI vmHref);
/**
- * Retrieves the item that contains memory information from virtual hardware section of a {@link Vm}.
- *
+ * Retrieves the item that contains memory information from virtual hardware section of a
+ * {@link Vm}.
+ *
* <pre>
* GET /vApp/{id}/virtualHardwareSection/memory
* </pre>
- *
+ *
* @since 0.9
*/
- RasdItem getVirtualHardwareSectionMemory(URI vmURI);
+ RasdItem getVirtualHardwareSectionMemory(String vmUrn);
+
+ RasdItem getVirtualHardwareSectionMemory(URI vmHref);
/**
* Modifies the memory properties in virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/virtualHardwareSection/memory
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyVirtualHardwareSectionMemory(URI vmURI, RasdItem rasd);
+ Task editVirtualHardwareSectionMemory(String vmUrn, RasdItem rasd);
+
+ Task editVirtualHardwareSectionMemory(URI vmHref, RasdItem rasd);
/**
* Retrieves a list of items for network cards from virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/virtualHardwareSection/networkCards
* </pre>
- *
+ *
* @since 0.9
*/
- RasdItemsList getVirtualHardwareSectionNetworkCards(URI vmURI);
+ RasdItemsList getVirtualHardwareSectionNetworkCards(String vmUrn);
+
+ RasdItemsList getVirtualHardwareSectionNetworkCards(URI vmHref);
/**
* Modifies the network cards list in virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/virtualHardwareSection/networkCards
* </pre>
- *
+ *
* @since 0.9
*/
- Task modifyVirtualHardwareSectionNetworkCards(URI vmURI, RasdItemsList rasdItemsList);
+ Task editVirtualHardwareSectionNetworkCards(String vmUrn, RasdItemsList rasdItemsList);
+
+ Task editVirtualHardwareSectionNetworkCards(URI vmHref, RasdItemsList rasdItemsList);
/**
* Retrieves a list of items for serial ports from virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* GET /vApp/{id}/virtualHardwareSection/serialPorts
* </pre>
- *
+ *
* @since 1.5
*/
- RasdItemsList getVirtualHardwareSectionSerialPorts(URI vmURI);
+ RasdItemsList getVirtualHardwareSectionSerialPorts(String vmUrn);
+
+ RasdItemsList getVirtualHardwareSectionSerialPorts(URI vmHref);
/**
* Modifies the serial ports list in virtual hardware section of a {@link Vm}.
- *
+ *
* <pre>
* PUT /vApp/{id}/virtualHardwareSection/serialPorts
* </pre>
- *
+ *
* @since 1.5
*/
- Task modifyVirtualHardwareSectionSerialPorts(URI vmURI, RasdItemsList rasdItemsList);
+ Task editVirtualHardwareSectionSerialPorts(String vmUrn, RasdItemsList rasdItemsList);
+
+ Task editVirtualHardwareSectionSerialPorts(URI vmHref, RasdItemsList rasdItemsList);
/**
* Synchronous access to {@link Vm} {@link Metadata} features.
*/
@Delegate
- MetadataApi.Writeable getMetadataApi();
+ MetadataApi.Writeable getMetadataApi(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam URI vmHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
index 0e958a1..efb6cd3 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
@@ -44,6 +44,7 @@
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import org.jclouds.dmtf.cim.ResourceAllocationSettingData;
import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Delegate;
import org.jclouds.rest.annotations.EndpointParam;
@@ -53,6 +54,7 @@
import org.jclouds.rest.annotations.ResponseParser;
import org.jclouds.rest.binders.BindToXMLPayload;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList;
import org.jclouds.vcloud.director.v1_5.domain.ScreenTicket;
@@ -72,51 +74,504 @@
import org.jclouds.vcloud.director.v1_5.domain.section.VirtualHardwareSection;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
import org.jclouds.vcloud.director.v1_5.functions.ReturnPayloadBytes;
+import org.jclouds.vcloud.director.v1_5.functions.href.VmURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
/**
- * @author grkvlt@apache.org
+ * @author grkvlt@apache.org, Adrian Cole
* @see VmApi
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface VmAsyncApi {
/**
- * @see VmApi#getVm(URI)
+ * @see VmApi#get(String)
*/
@GET
@Consumes(VM)
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Vm> getVm(@EndpointParam URI vmURI);
+ ListenableFuture<Vm> get(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
/**
- * @see VmApi#modifyVm(URI, Vm)
+ * @see VmApi#edit(String, Vm)
*/
@PUT
@Produces(VM)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVm(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) Vm vApp);
+ ListenableFuture<Task> edit(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) Vm vApp);
/**
- * @see VmApi#deleteVm(URI)
+ * @see VmApi#remove(String)
*/
@DELETE
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> deleteVm(@EndpointParam URI vmURI);
+ ListenableFuture<Task> remove(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
/**
- * @see VmApi#consolidateVm(URI)
+ * @see VmApi#consolidate(String)
*/
@POST
@Path("/action/consolidate")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> consolidateVm(@EndpointParam URI vmURI);
+ ListenableFuture<Task> consolidate(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#deploy(String, DeployVAppParams)
+ */
+ @POST
+ @Path("/action/deploy")
+ @Produces(DEPLOY_VAPP_PARAMS)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> deploy(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
+
+ /**
+ * @see VmApi#discardSuspendedState(String)
+ */
+ @POST
+ @Path("/action/discardSuspendedState")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> discardSuspendedState(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#installVMwareTools(String)
+ */
+ @POST
+ @Path("/action/installVMwareTools")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> installVMwareTools(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#relocate(String, RelocateParams)
+ */
+ @POST
+ @Path("/action/relocate")
+ @Produces(RELOCATE_VM_PARAMS)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> relocate(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) RelocateParams params);
+
+ /**
+ * @see VmApi#undeploy(String, UndeployVAppParams)
+ */
+ @POST
+ @Path("/action/undeploy")
+ @Produces(UNDEPLOY_VAPP_PARAMS)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> undeploy(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
+
+ /**
+ * @see VmApi#upgradeHardwareVersion(String)
+ */
+ @POST
+ @Path("/action/upgradeHardwareVersion")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> upgradeHardwareVersion(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#powerOff(String)
+ */
+ @POST
+ @Path("/power/action/powerOff")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> powerOff(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#powerOn(String)
+ */
+ @POST
+ @Path("/power/action/powerOn")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> powerOn(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#reboot(String)
+ */
+ @POST
+ @Path("/power/action/powerOff")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> reboot(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#reset(String)
+ */
+ @POST
+ @Path("/power/action/reset")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> reset(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#shutdown(String)
+ */
+ @POST
+ @Path("/power/action/shutdown")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> shutdown(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#suspend(String)
+ */
+ @POST
+ @Path("/power/action/suspend")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> suspend(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#getGuestCustomizationSection(String)
+ */
+ @GET
+ @Path("/guestCustomizationSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<GuestCustomizationSection> getGuestCustomizationSection(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editGuestCustomizationSection(String, GuestCustomizationSection)
+ */
+ @PUT
+ @Path("/guestCustomizationSection")
+ @Produces(GUEST_CUSTOMIZATION_SECTION)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editGuestCustomizationSection(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section);
+
+ /**
+ * @see VmApi#ejectMedia(String, MediaInsertOrEjectParams)
+ */
+ @POST
+ @Path("/media/action/ejectMedia")
+ @Produces(MEDIA_PARAMS)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> ejectMedia(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
+
+ /**
+ * @see VmApi#insertMedia(String, MediaInsertOrEjectParams)
+ */
+ @POST
+ @Path("/media/action/insertMedia")
+ @Produces(MEDIA_PARAMS)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> insertMedia(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
+
+ /**
+ * @see VmApi#getNetworkConnectionSection(String)
+ */
+ @GET
+ @Path("/networkConnectionSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<NetworkConnectionSection> getNetworkConnectionSection(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editNetworkConnectionSection(String, NetworkConnectionSection)
+ */
+ @PUT
+ @Path("/networkConnectionSection")
+ @Produces(NETWORK_CONNECTION_SECTION)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editNetworkConnectionSection(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) NetworkConnectionSection section);
+
+ /**
+ * @see VmApi#getOperatingSystemSection(String)
+ */
+ @GET
+ @Path("/operatingSystemSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<OperatingSystemSection> getOperatingSystemSection(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editOperatingSystemSection(String, OperatingSystemSection)
+ */
+ @PUT
+ @Path("/operatingSystemSection")
+ @Produces(OPERATING_SYSTEM_SECTION)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editOperatingSystemSection(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) OperatingSystemSection section);
+
+ /**
+ * @see VmApi#getProductSections(String)
+ */
+ @GET
+ @Path("/productSections")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<ProductSectionList> getProductSections(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editProductSections(String, ProductSectionList)
+ */
+ @PUT
+ @Path("/productSections")
+ @Produces(PRODUCT_SECTION_LIST)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editProductSections(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
+
+ /**
+ * @see VmApi#getPendingQuestion(String)
+ */
+ @GET
+ @Path("/question")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<VmPendingQuestion> getPendingQuestion(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#answerQuestion(String, VmQuestionAnswer)
+ */
+ @POST
+ @Path("/question/action/answer")
+ @Produces(VM_PENDING_ANSWER)
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> answerQuestion(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) VmQuestionAnswer answer);
+
+ /**
+ * @see VmApi#getRuntimeInfoSection(String)
+ */
+ @GET
+ @Path("/runtimeInfoSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<RuntimeInfoSection> getRuntimeInfoSection(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#getScreenImage(String)
+ */
+ @GET
+ @Path("/screen")
+ @Consumes(ANY_IMAGE)
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ @ResponseParser(ReturnPayloadBytes.class)
+ ListenableFuture<byte[]> getScreenImage(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#getScreenTicket(String)
+ */
+ @POST
+ @Path("/screen/action/acquireTicket")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<ScreenTicket> getScreenTicket(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#getVirtualHardwareSection(String)
+ */
+ @GET
+ @Path("/virtualHardwareSection")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<VirtualHardwareSection> getVirtualHardwareSection(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editVirtualHardwareSection(String, VirtualHardwareSection)
+ */
+ @PUT
+ @Path("/virtualHardwareSection")
+ @Produces(VIRTUAL_HARDWARE_SECTION)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editVirtualHardwareSection(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) VirtualHardwareSection section);
+
+ /**
+ * @see VmApi#getVirtualHardwareSectionCpu(String)
+ */
+ @GET
+ @Path("/virtualHardwareSection/cpu")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<RasdItem> getVirtualHardwareSectionCpu(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editVirtualHardwareSectionCpu(String, ResourceAllocationSettingData)
+ */
+ @PUT
+ @Path("/virtualHardwareSection/cpu")
+ @Produces(OVF_RASD_ITEM)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editVirtualHardwareSectionCpu(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) RasdItem rasd);
+
+ /**
+ * @see VmApi#getVirtualHardwareSectionDisks(String)
+ */
+ @GET
+ @Path("/virtualHardwareSection/disks")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<RasdItemsList> getVirtualHardwareSectionDisks(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editVirtualHardwareSectionDisks(String, RasdItemsList)
+ */
+ @PUT
+ @Path("/virtualHardwareSection/disks")
+ @Produces(OVF_RASD_ITEMS_LIST)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editVirtualHardwareSectionDisks(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+
+ /**
+ * @see VmApi#getVirtualHardwareSectionMedia(String)
+ */
+ @GET
+ @Path("/virtualHardwareSection/media")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<RasdItemsList> getVirtualHardwareSectionMedia(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#getVirtualHardwareSectionMemory(String)
+ */
+ @GET
+ @Path("/virtualHardwareSection/memory")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<RasdItem> getVirtualHardwareSectionMemory(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editVirtualHardwareSectionMemory(String, ResourceAllocationSettingData)
+ */
+ @PUT
+ @Path("/virtualHardwareSection/memory")
+ @Produces(OVF_RASD_ITEM)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editVirtualHardwareSectionMemory(@EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) RasdItem rasd);
+
+ /**
+ * @see VmApi#getVirtualHardwareSectionNetworkCards(String)
+ */
+ @GET
+ @Path("/virtualHardwareSection/networkCards")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<RasdItemsList> getVirtualHardwareSectionNetworkCards(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editVirtualHardwareSectionNetworkCards(String, RasdItemsList)
+ */
+ @PUT
+ @Path("/virtualHardwareSection/networkCards")
+ @Produces(OVF_RASD_ITEMS_LIST)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editVirtualHardwareSectionNetworkCards(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+
+ /**
+ * @see VmApi#getVirtualHardwareSectionSerialPorts(String)
+ */
+ @GET
+ @Path("/virtualHardwareSection/serialPorts")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<RasdItemsList> getVirtualHardwareSectionSerialPorts(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ /**
+ * @see VmApi#editVirtualHardwareSectionSerialPorts(String, RasdItemsList)
+ */
+ @PUT
+ @Path("/virtualHardwareSection/serialPorts")
+ @Produces(OVF_RASD_ITEMS_LIST)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> editVirtualHardwareSectionSerialPorts(
+ @EndpointParam(parser = VmURNToHref.class) String vmUrn,
+ @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+
+ /**
+ * @see VmApi#get(URI)
+ */
+ @GET
+ @Consumes(VM)
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Vm> get(@EndpointParam URI vmHref);
+
+ /**
+ * @see VmApi#edit(URI, Vm)
+ */
+ @PUT
+ @Produces(VM)
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> edit(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) Vm vApp);
+
+ /**
+ * @see VmApi#remove(URI)
+ */
+ @DELETE
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> remove(@EndpointParam URI vmHref);
+
+ /**
+ * @see VmApi#consolidate(URI)
+ */
+ @POST
+ @Path("/action/consolidate")
+ @Consumes(TASK)
+ @JAXBResponseParser
+ ListenableFuture<Task> consolidate(@EndpointParam URI vmHref);
/**
* @see VmApi#deploy(URI, DeployVAppParams)
@@ -126,8 +581,7 @@
@Produces(DEPLOY_VAPP_PARAMS)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> deploy(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
+ ListenableFuture<Task> deploy(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
/**
* @see VmApi#discardSuspendedState(URI)
@@ -136,7 +590,7 @@
@Path("/action/discardSuspendedState")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> discardSuspendedState(@EndpointParam URI vmURI);
+ ListenableFuture<Task> discardSuspendedState(@EndpointParam URI vmHref);
/**
* @see VmApi#installVMwareTools(URI)
@@ -145,18 +599,17 @@
@Path("/action/installVMwareTools")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> installVMwareTools(@EndpointParam URI vmURI);
+ ListenableFuture<Task> installVMwareTools(@EndpointParam URI vmHref);
/**
- * @see VmApi#relocateVm(URI, RelocateParams)
+ * @see VmApi#relocate(URI, RelocateParams)
*/
@POST
@Path("/action/relocate")
@Produces(RELOCATE_VM_PARAMS)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> relocateVm(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) RelocateParams params);
+ ListenableFuture<Task> relocate(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) RelocateParams params);
/**
* @see VmApi#undeploy(URI, UndeployVAppParams)
@@ -166,8 +619,8 @@
@Produces(UNDEPLOY_VAPP_PARAMS)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> undeploy(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
+ ListenableFuture<Task> undeploy(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
/**
* @see VmApi#upgradeHardwareVersion(URI)
@@ -176,7 +629,7 @@
@Path("/action/upgradeHardwareVersion")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> upgradeHardwareVersion(@EndpointParam URI vmURI);
+ ListenableFuture<Task> upgradeHardwareVersion(@EndpointParam URI vmHref);
/**
* @see VmApi#powerOff(URI)
@@ -185,7 +638,7 @@
@Path("/power/action/powerOff")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> powerOff(@EndpointParam URI vmURI);
+ ListenableFuture<Task> powerOff(@EndpointParam URI vmHref);
/**
* @see VmApi#powerOn(URI)
@@ -194,7 +647,7 @@
@Path("/power/action/powerOn")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> powerOn(@EndpointParam URI vmURI);
+ ListenableFuture<Task> powerOn(@EndpointParam URI vmHref);
/**
* @see VmApi#reboot(URI)
@@ -203,7 +656,7 @@
@Path("/power/action/powerOff")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> reboot(@EndpointParam URI vmURI);
+ ListenableFuture<Task> reboot(@EndpointParam URI vmHref);
/**
* @see VmApi#reset(URI)
@@ -212,7 +665,7 @@
@Path("/power/action/reset")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> reset(@EndpointParam URI vmURI);
+ ListenableFuture<Task> reset(@EndpointParam URI vmHref);
/**
* @see VmApi#shutdown(URI)
@@ -221,7 +674,7 @@
@Path("/power/action/shutdown")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> shutdown(@EndpointParam URI vmURI);
+ ListenableFuture<Task> shutdown(@EndpointParam URI vmHref);
/**
* @see VmApi#suspend(URI)
@@ -230,7 +683,7 @@
@Path("/power/action/suspend")
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> suspend(@EndpointParam URI vmURI);
+ ListenableFuture<Task> suspend(@EndpointParam URI vmHref);
/**
* @see VmApi#getGuestCustomizationSection(URI)
@@ -240,18 +693,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<GuestCustomizationSection> getGuestCustomizationSection(@EndpointParam URI vmURI);
+ ListenableFuture<GuestCustomizationSection> getGuestCustomizationSection(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyGuestCustomizationSection(URI, GuestCustomizationSection)
+ * @see VmApi#editGuestCustomizationSection(URI, GuestCustomizationSection)
*/
@PUT
@Path("/guestCustomizationSection")
@Produces(GUEST_CUSTOMIZATION_SECTION)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyGuestCustomizationSection(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section);
+ ListenableFuture<Task> editGuestCustomizationSection(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section);
/**
* @see VmApi#ejectMedia(URI, MediaInsertOrEjectParams)
@@ -261,8 +714,8 @@
@Produces(MEDIA_PARAMS)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> ejectMedia(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
+ ListenableFuture<Task> ejectMedia(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
/**
* @see VmApi#insertMedia(URI, MediaInsertOrEjectParams)
@@ -272,8 +725,8 @@
@Produces(MEDIA_PARAMS)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> insertMedia(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
+ ListenableFuture<Task> insertMedia(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
/**
* @see VmApi#getNetworkConnectionSection(URI)
@@ -283,18 +736,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<NetworkConnectionSection> getNetworkConnectionSection(@EndpointParam URI vmURI);
+ ListenableFuture<NetworkConnectionSection> getNetworkConnectionSection(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyNetworkConnectionSection(URI, NetworkConnectionSection)
+ * @see VmApi#editNetworkConnectionSection(URI, NetworkConnectionSection)
*/
@PUT
@Path("/networkConnectionSection")
@Produces(NETWORK_CONNECTION_SECTION)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyNetworkConnectionSection(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) NetworkConnectionSection section);
+ ListenableFuture<Task> editNetworkConnectionSection(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) NetworkConnectionSection section);
/**
* @see VmApi#getOperatingSystemSection(URI)
@@ -304,18 +757,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<OperatingSystemSection> getOperatingSystemSection(@EndpointParam URI vmURI);
+ ListenableFuture<OperatingSystemSection> getOperatingSystemSection(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyOperatingSystemSection(URI, OperatingSystemSection)
+ * @see VmApi#editOperatingSystemSection(URI, OperatingSystemSection)
*/
@PUT
@Path("/operatingSystemSection")
@Produces(OPERATING_SYSTEM_SECTION)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyOperatingSystemSection(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) OperatingSystemSection section);
+ ListenableFuture<Task> editOperatingSystemSection(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) OperatingSystemSection section);
/**
* @see VmApi#getProductSections(URI)
@@ -325,18 +778,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI vmURI);
+ ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyProductSections(URI, ProductSectionList)
+ * @see VmApi#editProductSections(URI, ProductSectionList)
*/
@PUT
@Path("/productSections")
@Produces(PRODUCT_SECTION_LIST)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyProductSections(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
+ ListenableFuture<Task> editProductSections(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
/**
* @see VmApi#getPendingQuestion(URI)
@@ -346,7 +799,7 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<VmPendingQuestion> getPendingQuestion(@EndpointParam URI vmURI);
+ ListenableFuture<VmPendingQuestion> getPendingQuestion(@EndpointParam URI vmHref);
/**
* @see VmApi#answerQuestion(URI, VmQuestionAnswer)
@@ -356,8 +809,8 @@
@Produces(VM_PENDING_ANSWER)
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> answerQuestion(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) VmQuestionAnswer answer);
+ ListenableFuture<Void> answerQuestion(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) VmQuestionAnswer answer);
/**
* @see VmApi#getRuntimeInfoSection(URI)
@@ -367,7 +820,7 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<RuntimeInfoSection> getRuntimeInfoSection(@EndpointParam URI vmURI);
+ ListenableFuture<RuntimeInfoSection> getRuntimeInfoSection(@EndpointParam URI vmHref);
/**
* @see VmApi#getScreenImage(URI)
@@ -377,7 +830,7 @@
@Consumes(ANY_IMAGE)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
@ResponseParser(ReturnPayloadBytes.class)
- ListenableFuture<byte[]> getScreenImage(@EndpointParam URI vmURI);
+ ListenableFuture<byte[]> getScreenImage(@EndpointParam URI vmHref);
/**
* @see VmApi#getScreenTicket(URI)
@@ -387,7 +840,7 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<ScreenTicket> getScreenTicket(@EndpointParam URI vmURI);
+ ListenableFuture<ScreenTicket> getScreenTicket(@EndpointParam URI vmHref);
/**
* @see VmApi#getVirtualHardwareSection(URI)
@@ -397,18 +850,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<VirtualHardwareSection> getVirtualHardwareSection(@EndpointParam URI vmURI);
+ ListenableFuture<VirtualHardwareSection> getVirtualHardwareSection(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyVirtualHardwareSection(URI, VirtualHardwareSection)
+ * @see VmApi#editVirtualHardwareSection(URI, VirtualHardwareSection)
*/
@PUT
@Path("/virtualHardwareSection")
@Produces(VIRTUAL_HARDWARE_SECTION)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVirtualHardwareSection(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) VirtualHardwareSection section);
+ ListenableFuture<Task> editVirtualHardwareSection(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) VirtualHardwareSection section);
/**
* @see VmApi#getVirtualHardwareSectionCpu(URI)
@@ -418,18 +871,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<RasdItem> getVirtualHardwareSectionCpu(@EndpointParam URI vmURI);
+ ListenableFuture<RasdItem> getVirtualHardwareSectionCpu(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyVirtualHardwareSectionCpu(URI, ResourceAllocationSettingData)
+ * @see VmApi#editVirtualHardwareSectionCpu(URI, ResourceAllocationSettingData)
*/
@PUT
@Path("/virtualHardwareSection/cpu")
@Produces(OVF_RASD_ITEM)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVirtualHardwareSectionCpu(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) RasdItem rasd);
+ ListenableFuture<Task> editVirtualHardwareSectionCpu(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) RasdItem rasd);
/**
* @see VmApi#getVirtualHardwareSectionDisks(URI)
@@ -439,18 +892,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<RasdItemsList> getVirtualHardwareSectionDisks(@EndpointParam URI vmURI);
+ ListenableFuture<RasdItemsList> getVirtualHardwareSectionDisks(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyVirtualHardwareSectionDisks(URI, RasdItemsList)
+ * @see VmApi#editVirtualHardwareSectionDisks(URI, RasdItemsList)
*/
@PUT
@Path("/virtualHardwareSection/disks")
@Produces(OVF_RASD_ITEMS_LIST)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVirtualHardwareSectionDisks(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+ ListenableFuture<Task> editVirtualHardwareSectionDisks(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
/**
* @see VmApi#getVirtualHardwareSectionMedia(URI)
@@ -460,7 +913,7 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<RasdItemsList> getVirtualHardwareSectionMedia(@EndpointParam URI vmURI);
+ ListenableFuture<RasdItemsList> getVirtualHardwareSectionMedia(@EndpointParam URI vmHref);
/**
* @see VmApi#getVirtualHardwareSectionMemory(URI)
@@ -470,18 +923,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<RasdItem> getVirtualHardwareSectionMemory(@EndpointParam URI vmURI);
+ ListenableFuture<RasdItem> getVirtualHardwareSectionMemory(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyVirtualHardwareSectionMemory(URI, ResourceAllocationSettingData)
+ * @see VmApi#editVirtualHardwareSectionMemory(URI, ResourceAllocationSettingData)
*/
@PUT
@Path("/virtualHardwareSection/memory")
@Produces(OVF_RASD_ITEM)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVirtualHardwareSectionMemory(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) RasdItem rasd);
+ ListenableFuture<Task> editVirtualHardwareSectionMemory(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) RasdItem rasd);
/**
* @see VmApi#getVirtualHardwareSectionNetworkCards(URI)
@@ -491,18 +944,18 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<RasdItemsList> getVirtualHardwareSectionNetworkCards(@EndpointParam URI vmURI);
+ ListenableFuture<RasdItemsList> getVirtualHardwareSectionNetworkCards(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyVirtualHardwareSectionNetworkCards(URI, RasdItemsList)
+ * @see VmApi#editVirtualHardwareSectionNetworkCards(URI, RasdItemsList)
*/
@PUT
@Path("/virtualHardwareSection/networkCards")
@Produces(OVF_RASD_ITEMS_LIST)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVirtualHardwareSectionNetworkCards(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+ ListenableFuture<Task> editVirtualHardwareSectionNetworkCards(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
/**
* @see VmApi#getVirtualHardwareSectionSerialPorts(URI)
@@ -512,22 +965,26 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<RasdItemsList> getVirtualHardwareSectionSerialPorts(@EndpointParam URI vmURI);
+ ListenableFuture<RasdItemsList> getVirtualHardwareSectionSerialPorts(@EndpointParam URI vmHref);
/**
- * @see VmApi#modifyVirtualHardwareSectionSerialPorts(URI, RasdItemsList)
+ * @see VmApi#editVirtualHardwareSectionSerialPorts(URI, RasdItemsList)
*/
@PUT
@Path("/virtualHardwareSection/serialPorts")
@Produces(OVF_RASD_ITEMS_LIST)
@Consumes(TASK)
@JAXBResponseParser
- ListenableFuture<Task> modifyVirtualHardwareSectionSerialPorts(@EndpointParam URI vmURI,
- @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+ ListenableFuture<Task> editVirtualHardwareSectionSerialPorts(@EndpointParam URI vmHref,
+ @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
/**
* Asynchronous access to {@Vm} {@link Metadata} features.
*/
@Delegate
- MetadataAsyncApi.Writeable getMetadataApi();
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam(parser = VmURNToHref.class) String vmUrn);
+
+ @Delegate
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam URI vmHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java
index 7625050..45937d9 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java
@@ -23,68 +23,83 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
+import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
+import org.jclouds.vcloud.director.v1_5.functions.href.CatalogURNToAdminHref;
/**
* Provides synchronous access to {@link AdminCatalog} objects.
*
* @see AdminCatalogAsyncApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface AdminCatalogApi extends CatalogApi {
-
-
+
/**
- * Creates a catalog in an organization. The catalog will always be created in unpublished state.
- *
+ * Creates a catalog in an organization. The catalog will always be addd in unpublished state.
+ *
* <pre>
* POST /admin/org/{id}/catalogs
* </pre>
- *
- * @param orgRef the reference for the org
+ *
+ * @param orgUrn
+ * the urn for the org
* @return contains a , which will point to the running asynchronous creation operation.
*/
- AdminCatalog createCatalog(URI orgRef, AdminCatalog catalog);
+ AdminCatalog addCatalogToOrg(AdminCatalog catalog, String orgUrn);
+
+ AdminCatalog addCatalogToOrg(AdminCatalog catalog, URI catalogAdminHref);
/**
* Retrieves a catalog.
- *
+ *
* <pre>
* GET /admin/catalog/{id}
* </pre>
- *
- * @param catalogRef the reference for the catalog
+ *
+ * @param catalogUrn
+ * the urn for the catalog
* @return a catalog
*/
@Override
- AdminCatalog getCatalog(URI catalogRef);
+ AdminCatalog get(String catalogUrn);
+ @Override
+ AdminCatalog get(URI catalogAdminHref);
+
/**
- * Modifies a catalog. A catalog could be published or unpublished. The IsPublished property is treated as a
- * read only value by the server. In order to control publishing settings use the 'publish' action must be used.
+ * Modifies a catalog. A catalog could be published or unpublished. The IsPublished property is
+ * treated as a read only value by the server. In order to control publishing settings use the
+ * 'publish' action must be used.
*
* <pre>
* PUT /admin/catalog/{id}
* </pre>
*
- * @return the updated catalog
+ * @return the edited catalog
*/
- AdminCatalog updateCatalog(URI catalogRef, AdminCatalog catalog);
-
+ AdminCatalog edit(String catalogUrn, AdminCatalog catalog);
+
+ AdminCatalog edit(URI catalogAdminHref, AdminCatalog catalog);
+
/**
- * Deletes a catalog. The catalog could be deleted if it is either published or unpublished.
+ * Deletes a catalog. The catalog could be removed if it is either published or unpublished.
*
* <pre>
* DELETE /admin/catalog/{id}
* </pre>
*/
- void deleteCatalog(URI catalogRef);
-
+ void remove(String catalogUrn);
+
+ void remove(URI catalogAdminHref);
+
/**
* Retrieves the owner of a catalog.
*
@@ -94,8 +109,10 @@
*
* @return the owner or null if not found
*/
- Owner getOwner(URI catalogRef);
-
+ Owner getOwner(String catalogUrn);
+
+ Owner getOwner(URI catalogAdminHref);
+
/**
* Changes owner for catalog.
*
@@ -103,20 +120,58 @@
* PUT /admin/catalog/{id}/owner
* </pre>
*/
- void setOwner(URI catalogRef, Owner newOwner);
+ void setOwner(String catalogUrn, Owner newOwner);
+
+ void setOwner(URI catalogAdminHref, Owner newOwner);
+
+ // TODO: lot of work to pass in a single boolean, would like to polymorphically include something
+ // like:
+ // void publishCatalog(String catalogUrn)
/**
- * Publish a catalog. Publishing a catalog makes the catalog visible to all organizations in a vCloud.
+ * Publish a catalog. Publishing a catalog makes the catalog visible to all organizations in a
+ * vCloud.
+ * @param orgUrn
*/
- void publishCatalog(URI catalogRef, PublishCatalogParams params);
+ void publish(String catalogUrn, PublishCatalogParams params);
+
+ void publish(URI catalogAdminHref, PublishCatalogParams params);
+
+ /**
+ * Modifies a catalog control access.
+ *
+ * <pre>
+ * POST /org/{id}/catalog/{catalogId}/action/controlAccess
+ * </pre>
+ *
+ * @return the control access information
+ */
+ ControlAccessParams editAccessControl(String catalogUrn, ControlAccessParams params);
+
+ ControlAccessParams editAccessControl(URI catalogAdminHref, ControlAccessParams params);
+
+ /**
+ * Retrieves the catalog control access information.
+ *
+ * <pre>
+ * GET /org/{id}/catalog/{catalogId}/controlAccess
+ * </pre>
+ *
+ * @return the control access information
+ */
+ ControlAccessParams getAccessControl(String catalogUrn);
- //TODO: lot of work to pass in a single boolean, would like to polymorphically include something like:
- //void publishCatalog(URI catalogRef)
+ ControlAccessParams getAccessControl(URI catalogAdminHref);
/**
* @return synchronous access to {@link Metadata.Writeable} features
*/
@Override
@Delegate
- MetadataApi.Writeable getMetadataApi();
+ MetadataApi.Writeable getMetadataApi(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn);
+
+ @Override
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam URI catalogAdminHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
index 239a6a1..7c42a91 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
@@ -18,6 +18,8 @@
*/
package org.jclouds.vcloud.director.v1_5.features.admin;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CONTROL_ACCESS;
+
import java.net.URI;
import javax.ws.rs.Consumes;
@@ -38,97 +40,218 @@
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
+import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
+import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.CatalogURNToAdminHref;
+import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToAdminHref;
import com.google.common.util.concurrent.ListenableFuture;
/**
* @see AdminCatalogApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface AdminCatalogAsyncApi extends CatalogAsyncApi {
-
+
/**
- * @see AdminApi#createCatalog(URI, AdminCatalog)
+ * @see AdminCatalogApi#addCatalogToOrg(AdminCatalog, String)
*/
@POST
@Path("/catalogs")
@Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
@Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
@JAXBResponseParser
- ListenableFuture<AdminCatalog> createCatalog(@EndpointParam URI orgRef,
- @BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
+ ListenableFuture<AdminCatalog> addCatalogToOrg(@BinderParam(BindToXMLPayload.class) AdminCatalog catalog,
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
/**
- * @see AdminApi#getCatalog(URI)
+ * @see AdminCatalogApi#addCatalogToOrg(AdminCatalog, URI)
+ */
+ @POST
+ @Path("/catalogs")
+ @Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
+ @Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
+ @JAXBResponseParser
+ ListenableFuture<AdminCatalog> addCatalogToOrg(@BinderParam(BindToXMLPayload.class) AdminCatalog catalog,
+ @EndpointParam URI orgHref);
+
+ /**
+ * @see AdminCatalogApi#get(String)
*/
@Override
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<AdminCatalog> getCatalog(@EndpointParam URI catalogRef);
+ ListenableFuture<AdminCatalog> get(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn);
/**
- * @see AdminApi#getCatalog(URI)
+ * @see AdminCatalogApi#get(URI)
+ */
+ @Override
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<AdminCatalog> get(@EndpointParam URI orgHref);
+
+ /**
+ * @see AdminCatalogApi#edit(String, AdminCatalog)
*/
@PUT
@Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
@Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
@JAXBResponseParser
- ListenableFuture<AdminCatalog> updateCatalog(@EndpointParam URI catalogRef,
- @BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
-
+ ListenableFuture<AdminCatalog> edit(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn,
+ @BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
+
/**
- * @see AdminApi#deleteCatalog(URI)
+ * @see AdminCatalogApi#edit(URI, AdminCatalog)
+ */
+ @PUT
+ @Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
+ @Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
+ @JAXBResponseParser
+ ListenableFuture<AdminCatalog> edit(@EndpointParam URI catalogAdminHref,
+ @BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
+
+ /**
+ * @see AdminCatalogApi#remove(String)
*/
@DELETE
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> deleteCatalog(@EndpointParam URI catalogRef);
-
+ ListenableFuture<Void> remove(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn);
+
/**
- * @see AdminApi#getOwner(URI)
+ * @see AdminCatalogApi#remove(URI)
+ */
+ @DELETE
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> remove(@EndpointParam URI catalogAdminHref);
+
+ /**
+ * @see AdminCatalogApi#getOwner(String)
*/
@GET
@Path("/owner")
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Owner> getOwner(@EndpointParam URI catalogRef);
-
+ ListenableFuture<Owner> getOwner(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn);
+
/**
- * @see AdminApi#setOwner(URI, Owner)
+ * @see AdminCatalogApi#getOwner(URI)
+ */
+ @GET
+ @Path("/owner")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Owner> getOwner(@EndpointParam URI catalogAdminHref);
+
+ /**
+ * @see AdminCatalogApi#setOwner(String, Owner)
*/
@PUT
@Path("/owner")
@Consumes
@Produces(VCloudDirectorMediaType.OWNER)
@JAXBResponseParser
- ListenableFuture<Void> setOwner(@EndpointParam URI catalogRef,
- @BinderParam(BindToXMLPayload.class) Owner newOwner);
-
+ ListenableFuture<Void> setOwner(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn,
+ @BinderParam(BindToXMLPayload.class) Owner newOwner);
+
/**
- * @see AdminApi#AdminApi(URI, PublishCatalogParams)
+ * @see AdminCatalogApi#setOwner(URI, Owner)
+ */
+ @PUT
+ @Path("/owner")
+ @Consumes
+ @Produces(VCloudDirectorMediaType.OWNER)
+ @JAXBResponseParser
+ ListenableFuture<Void> setOwner(@EndpointParam URI catalogAdminHref,
+ @BinderParam(BindToXMLPayload.class) Owner newOwner);
+
+ /**
+ * @see AdminCatalogApi#publish(String, PublishCatalogParams)
*/
@POST
@Path("/action/publish")
@Consumes
@Produces(VCloudDirectorMediaType.PUBLISH_CATALOG_PARAMS)
@JAXBResponseParser
- ListenableFuture<Void> publishCatalog(@EndpointParam URI catalogRef,
- @BinderParam(BindToXMLPayload.class) PublishCatalogParams params);
+ ListenableFuture<Void> publish(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn,
+ @BinderParam(BindToXMLPayload.class) PublishCatalogParams params);
/**
+ * @see AdminCatalogApi#publish(URI, PublishCatalogParams)
+ */
+ @POST
+ @Path("/action/publish")
+ @Consumes
+ @Produces(VCloudDirectorMediaType.PUBLISH_CATALOG_PARAMS)
+ @JAXBResponseParser
+ ListenableFuture<Void> publish(@EndpointParam URI catalogAdminHref,
+ @BinderParam(BindToXMLPayload.class) PublishCatalogParams params);
+
+ /**
+ * @see AdminCatalogApi#editAccessControl(String, ControlAccessParams)
+ */
+ @POST
+ @Path("/action/controlAccess")
+ @Produces(CONTROL_ACCESS)
+ @Consumes(CONTROL_ACCESS)
+ @JAXBResponseParser
+ ListenableFuture<ControlAccessParams> editAccessControl(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn,
+ @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
+
+ /**
+ * @see AdminCatalogApi#editAccessControl(URI, ControlAccessParams)
+ */
+ @POST
+ @Path("/action/controlAccess")
+ @Produces(CONTROL_ACCESS)
+ @Consumes(CONTROL_ACCESS)
+ @JAXBResponseParser
+ ListenableFuture<ControlAccessParams> editAccessControl(@EndpointParam URI catalogAdminHref,
+ @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
+
+ /**
+ * @see AdminCatalogApi#getAccessControl(String)
+ */
+ @GET
+ @Path("/controlAccess")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn);
+
+ /**
+ * @see AdminCatalogApi#getAccessControl(URI)
+ */
+ @GET
+ @Path("/controlAccess")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam URI catalogAdminHref);
+
+ /**
* @return synchronous access to {@link Metadata.Writeable} features
*/
@Override
@Delegate
- MetadataAsyncApi.Writeable getMetadataApi();
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn);
+
+ @Override
+ @Delegate
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam URI catalogAdminHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java
index 241e5b2..4b9a4eb 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java
@@ -23,73 +23,86 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
import org.jclouds.vcloud.director.v1_5.features.NetworkApi;
+import org.jclouds.vcloud.director.v1_5.functions.href.NetworkURNToAdminHref;
/**
* Provides synchronous access to admin {@link Network} objects.
*
* @see AdminNetworkAsyncApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface AdminNetworkApi extends NetworkApi {
-
+
/**
- * Gets admin representation of network. This operation could return admin
- * representation of organization network or external network. vApp networks
- * do not have admin representation.
- *
+ * Gets admin representation of network. This operation could return admin representation of
+ * organization network or external network. vApp networks do not have admin representation.
+ *
* <pre>
* GET /admin/network/{id}
* </pre>
- *
- * @param networkRef the reference for the network
+ *
+ * @param networkUrn
+ * the reference for the network
* @return the network
*/
@Override
- Network getNetwork(URI networkRef);
-
+ Network get(String networkUrn);
+
+ @Override
+ Network get(URI networkAdminHref);
+
/**
* Modifies an org network
- *
+ *
* <pre>
* PUT /admin/network/{id}
* </pre>
- *
- * @param networkRef the reference for the network
- * @param network the updated network
- * @return a task. This operation is asynchronous and the user should monitor the
- * returned task status in order to check when it is completed.
+ *
+ * @param networkUrn
+ * the reference for the network
+ * @param network
+ * the edited network
+ * @return a task. This operation is asynchronous and the user should monitor the returned task
+ * status in order to check when it is completed.
*/
- Task updateNetwork(URI networkRef, OrgNetwork network);
-
+ Task edit(String networkUrn, OrgNetwork network);
+
+ Task edit(URI networkAdminHref, OrgNetwork network);
+
/**
- * Reset(undeploy & redeploy) networking services on a logical network.
- * The reset operation can be performed on:
- * - external networks
- * - organization networks
- * - vApp networks
- * The reset operation can be performed only on deployed networks.
- *
+ * Reset(undeploy & redeploy) networking services on a logical network. The reset operation can
+ * be performed on: - external networks - organization networks - vApp networks The reset
+ * operation can be performed only on deployed networks.
+ *
* <pre>
* POST /admin/network/{id}/action/reset
* </pre>
- *
- * @param networkRef the reference for the network
- * @return a task. This operation is asynchronous and the user should monitor the
- * returned task status in order to check when it is completed.
+ *
+ * @param networkUrn
+ * the reference for the network
+ * @return a task. This operation is asynchronous and the user should monitor the returned task
+ * status in order to check when it is completed.
*/
- Task resetNetwork(URI networkRef);
+ Task reset(String networkUrn);
+ Task reset(URI networkAdminHref);
+
/**
- * @return synchronous access to admin {@link MetadataApi.Writeable} features
- */
+ * @return synchronous access to admin {@link MetadataApi.Writeable} features
+ */
@Override
@Delegate
- MetadataApi.Writeable getMetadataApi();
+ MetadataApi.Writeable getMetadataApi(@EndpointParam(parser = NetworkURNToAdminHref.class) String networkUrn);
+
+ @Override
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam URI networkAdminHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
index 76afd03..5d42274 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
@@ -37,11 +37,12 @@
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.network.ExternalNetwork;
+import org.jclouds.vcloud.director.v1_5.domain.network.Network;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.NetworkURNToAdminHref;
import com.google.common.util.concurrent.ListenableFuture;
@@ -51,40 +52,74 @@
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface AdminNetworkAsyncApi extends NetworkAsyncApi {
-
+
/**
- * @see AdminNetworkApi#getNetwork(URI)
+ * @see AdminNetworkApi#get(String)
*/
@Override
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<ExternalNetwork> getNetwork(@EndpointParam URI networkRef);
-
+ ListenableFuture<? extends Network> get(@EndpointParam(parser = NetworkURNToAdminHref.class) String networkUrn);
+
/**
- * @see AdminNetworkApi#updateNetwork(URI, OrgNetwork)
+ * @see AdminNetworkApi#get(URI)
+ */
+ @Override
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<? extends Network> get(@EndpointParam URI networkAdminHref);
+
+ /**
+ * @see AdminNetworkApi#edit(String, OrgNetwork)
*/
@PUT
@Consumes(VCloudDirectorMediaType.TASK)
@Produces(VCloudDirectorMediaType.ADMIN_ORG_NETWORK)
@JAXBResponseParser
- ListenableFuture<Task> updateNetwork(@EndpointParam URI networkRef,
- @BinderParam(BindToXMLPayload.class) OrgNetwork network);
-
+ ListenableFuture<Task> edit(@EndpointParam(parser = NetworkURNToAdminHref.class) String networkUrn,
+ @BinderParam(BindToXMLPayload.class) OrgNetwork network);
+
/**
- * @see AdminNetworkApi#resetNetwork(URI)
+ * @see AdminNetworkApi#edit(URI, OrgNetwork)
+ */
+ @PUT
+ @Consumes(VCloudDirectorMediaType.TASK)
+ @Produces(VCloudDirectorMediaType.ADMIN_ORG_NETWORK)
+ @JAXBResponseParser
+ ListenableFuture<Task> edit(@EndpointParam URI networkAdminHref,
+ @BinderParam(BindToXMLPayload.class) OrgNetwork network);
+
+ /**
+ * @see AdminNetworkApi#reset(String)
*/
@POST
@Path("/action/reset")
@Consumes
@JAXBResponseParser
- ListenableFuture<Task> resetNetwork(@EndpointParam URI networkRef);
-
+ ListenableFuture<Task> reset(@EndpointParam(parser = NetworkURNToAdminHref.class) String networkUrn);
+
+ /**
+ * @see AdminNetworkApi#reset(URI)
+ */
+ @POST
+ @Path("/action/reset")
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Task> reset(@EndpointParam URI networkAdminHref);
+
/**
* @return asynchronous access to admin {@link MetadataAsyncApi.Writeable} features
*/
@Override
@Delegate
- MetadataAsyncApi.Writeable getMetadataApi();
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam(parser = NetworkURNToAdminHref.class) String networkUrn);
+
+ @Override
+ @Delegate
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam URI networkAdminHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java
index 93610f8..3622e29 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java
@@ -23,7 +23,9 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.vcloud.director.v1_5.domain.org.AdminOrg;
+import org.jclouds.vcloud.director.v1_5.domain.org.Org;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgEmailSettings;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgGeneralSettings;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgLdapSettings;
@@ -33,197 +35,251 @@
import org.jclouds.vcloud.director.v1_5.domain.org.OrgVAppTemplateLeaseSettings;
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
import org.jclouds.vcloud.director.v1_5.features.OrgApi;
+import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToAdminHref;
/**
* Provides synchronous access to {@link Org} objects.
*
- * @see GroupAsyncApi
- * @author danikov
+ * @see AdminOrgAsyncApi
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface AdminOrgApi extends OrgApi {
-
+
/**
- * Retrieves an admin view of an organization.
- * The organization might be enabled or disabled.
- * If enabled, the organization allows login and all other operations.
- *
+ * Retrieves an admin view of an organization. The organization might be enabled or disabled. If
+ * enabled, the organization allows login and all other operations.
+ *
* <pre>
* GET /admin/org/{id}
* </pre>
- *
- * @param orgRef the reference for the admin org
+ *
+ * @param orgUrn
+ * the reference for the admin org
* @return the admin org
*/
@Override
- AdminOrg getOrg(URI orgRef);
-
+ AdminOrg get(String orgUrn);
+
+ @Override
+ AdminOrg get(URI orgAdminHref);
+
/**
* Gets organizational settings for this organization.
- *
+ *
* <pre>
* GET /admin/org/{id}/settings
* </pre>
- *
- * @param orgRef the reference for the admin org
+ *
+ * @param orgUrn
+ * the reference for the admin org
* @return the settings
*/
- OrgSettings getSettings(URI orgRef);
-
+ OrgSettings getSettings(String orgUrn);
+
+ OrgSettings getSettings(URI orgAdminHref);
+
/**
* Updates organizational settings for this organization.
*
* <pre>
* PUT /admin/org/{id}/settings
* </pre>
- * @param orgRef the reference for the admin org
- * @param newSettings the requested updated settings
+ *
+ * @param orgUrn
+ * the reference for the admin org
+ * @param newSettings
+ * the requested edited settings
* @return the resultant settings
*/
- OrgSettings updateSettings(URI orgRef, OrgSettings newSettings);
-
+ OrgSettings editSettings(String orgUrn, OrgSettings newSettings);
+
+ OrgSettings editSettings(URI orgAdminHref, OrgSettings newSettings);
+
/**
* Retrieves email settings for an organization.
- *
+ *
* <pre>
* GET /admin/org/{id}/settings/email
* </pre>
- *
- * @param orgRef the reference for the admin org
+ *
+ * @param orgUrn
+ * the reference for the admin org
* @return the email settings
*/
- OrgEmailSettings getEmailSettings(URI orgRef);
-
+ OrgEmailSettings getEmailSettings(String orgUrn);
+
+ OrgEmailSettings getEmailSettings(URI orgAdminHref);
+
/**
* Updates email policy settings for organization.
*
* <pre>
* PUT /admin/org/{id}/settings/email
* </pre>
- * @param orgRef the reference for the admin org
- * @param newSettings the requested updated settings
+ *
+ * @param orgUrn
+ * the reference for the admin org
+ * @param newSettings
+ * the requested edited settings
* @return the resultant settings
*/
- OrgEmailSettings updateEmailSettings(URI orgRef,
- OrgEmailSettings newSettings);
-
+ OrgEmailSettings editEmailSettings(String orgUrn, OrgEmailSettings newSettings);
+
+ OrgEmailSettings editEmailSettings(URI orgAdminHref, OrgEmailSettings newSettings);
+
/**
* Gets general organization settings.
- *
+ *
* <pre>
* GET /admin/org/{id}/settings/general
* </pre>
- *
- * @param orgRef the reference for the admin org
+ *
+ * @param orgUrn
+ * the reference for the admin org
* @return the lease settings
*/
- OrgGeneralSettings getGeneralSettings(URI orgRef);
-
+ OrgGeneralSettings getGeneralSettings(String orgUrn);
+
+ OrgGeneralSettings getGeneralSettings(URI orgAdminHref);
+
/**
* Updates general organization settings.
*
* <pre>
* PUT /admin/org/{id}/settings/general
* </pre>
- * @param orgRef the reference for the admin org
- * @param newSettings the requested updated settings
+ *
+ * @param orgUrn
+ * the reference for the admin org
+ * @param newSettings
+ * the requested edited settings
* @return the resultant settings
*/
- OrgGeneralSettings updateGeneralSettings(URI orgRef,
- OrgGeneralSettings newSettings);
-
+ OrgGeneralSettings editGeneralSettings(String orgUrn, OrgGeneralSettings newSettings);
+
+ OrgGeneralSettings editGeneralSettings(URI orgAdminHref, OrgGeneralSettings newSettings);
+
/**
* Retrieves LDAP settings for an organization.
- *
+ *
* <pre>
* GET /admin/org/{id}/settings/ldap
* </pre>
- *
- * @param orgRef the reference for the admin org
+ *
+ * @param orgUrn
+ * the reference for the admin org
* @return the ldap settings
*/
- OrgLdapSettings getLdapSettings(URI orgRef);
-
+ OrgLdapSettings getLdapSettings(String orgUrn);
+
+ OrgLdapSettings getLdapSettings(URI orgAdminHref);
+
/**
* Retrieves password policy settings for an organization.
- *
+ *
* <pre>
* GET /admin/org/{id}/settings/passwordPolicy
* </pre>
- *
- * @param orgRef the reference for the admin org
+ *
+ * @param orgUrn
+ * the reference for the admin org
* @return the lease settings
*/
- OrgPasswordPolicySettings getPasswordPolicy(URI orgRef);
-
+ OrgPasswordPolicySettings getPasswordPolicy(String orgUrn);
+
+ OrgPasswordPolicySettings getPasswordPolicy(URI orgAdminHref);
+
/**
* Updates password policy settings for organization.
*
* <pre>
* PUT /admin/org/{id}/settings/passwordPolicy
* </pre>
- * @param orgRef the reference for the admin org
- * @param newSettings the requested updated settings
+ *
+ * @param orgUrn
+ * the reference for the admin org
+ * @param newSettings
+ * the requested edited settings
* @return the resultant settings
*/
- OrgPasswordPolicySettings updatePasswordPolicy(URI orgRef,
- OrgPasswordPolicySettings newSettings);
-
+ OrgPasswordPolicySettings editPasswordPolicy(String orgUrn, OrgPasswordPolicySettings newSettings);
+
+ OrgPasswordPolicySettings editPasswordPolicy(URI orgAdminHref, OrgPasswordPolicySettings newSettings);
+
/**
* Gets organization resource cleanup settings on the level of vApp.
- *
+ *
* <pre>
* GET /admin/org/{id}/settings/vAppLeaseSettings
* </pre>
- *
- * @param orgRef the reference for the admin org
+ *
+ * @param orgUrn
+ * the reference for the admin org
* @return the lease settings
*/
- OrgLeaseSettings getVAppLeaseSettings(URI orgRef);
-
+ OrgLeaseSettings getVAppLeaseSettings(String orgUrn);
+
+ OrgLeaseSettings getVAppLeaseSettings(URI orgAdminHref);
+
/**
* Updates organization resource cleanup settings on the level of vApp.
*
* <pre>
* PUT /admin/org/{id}/settings/vAppLeaseSettings
* </pre>
- * @param orgRef the reference for the admin org
- * @param newSettings the requested updated settings
+ *
+ * @param orgUrn
+ * the reference for the admin org
+ * @param newSettings
+ * the requested edited settings
* @return the resultant settings
*/
- OrgLeaseSettings updateVAppLeaseSettings(URI orgRef,
- OrgLeaseSettings newSettings);
-
+ OrgLeaseSettings editVAppLeaseSettings(String orgUrn, OrgLeaseSettings newSettings);
+
+ OrgLeaseSettings editVAppLeaseSettings(URI orgAdminHref, OrgLeaseSettings newSettings);
+
/**
* Retrieves expiration and storage policy for vApp templates in an organization.
- *
+ *
* <pre>
* GET /admin/org/{id}/settings/vAppTemplateLeaseSettings
* </pre>
- *
- * @param orgRef the reference for the admin org
+ *
+ * @param orgUrn
+ * the reference for the admin org
* @return the lease settings
*/
- OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(URI orgRef);
-
+ OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(String orgUrn);
+
+ OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(URI orgAdminHref);
+
/**
* Updates vApp template policy settings for organization.
*
* <pre>
* PUT /admin/org/{id}/settings/vAppTemplateLeaseSettings
* </pre>
- * @param orgRef the reference for the admin org
- * @param newSettings the requested updated settings
+ *
+ * @param orgUrn
+ * the reference for the admin org
+ * @param newSettings
+ * the requested edited settings
* @return the resultant settings
*/
- OrgVAppTemplateLeaseSettings updateVAppTemplateLeaseSettings(URI orgRef,
- OrgVAppTemplateLeaseSettings newSettings);
-
+ OrgVAppTemplateLeaseSettings editVAppTemplateLeaseSettings(String orgUrn, OrgVAppTemplateLeaseSettings newSettings);
+
+ OrgVAppTemplateLeaseSettings editVAppTemplateLeaseSettings(URI orgAdminHref, OrgVAppTemplateLeaseSettings newSettings);
+
/**
* @return synchronous access to admin {@link MetadataApi.Writeable} features
*/
- @Override
- @Delegate
- MetadataApi.Writeable getMetadataApi();
+ @Override
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
+ @Override
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam URI orgAdminHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
index 2cdc111..bc7be01 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
@@ -46,26 +46,47 @@
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToAdminHref;
import com.google.common.util.concurrent.ListenableFuture;
/**
* @see AdminOrgApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface AdminOrgAsyncApi extends OrgAsyncApi {
-
+
/**
- * @see AdminOrgApi#getOrg(URI)
+ * @see AdminOrgApi#get(String)
*/
@Override
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<AdminOrg> getOrg(@EndpointParam URI orgRef);
-
+ ListenableFuture<AdminOrg> get(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
+ /**
+ * @see AdminOrgApi#get(URI)
+ */
+ @Override
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<AdminOrg> get(@EndpointParam URI adminOrgHref);
+
+ /**
+ * @see AdminOrgApi#getSettings(String)
+ */
+ @GET
+ @Path("/settings")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<OrgSettings> getSettings(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
/**
* @see AdminOrgApi#getSettings(URI)
*/
@@ -74,19 +95,40 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<OrgSettings> getSettings(@EndpointParam URI orgRef);
+ ListenableFuture<OrgSettings> getSettings(@EndpointParam URI adminOrgHref);
/**
- * @see AdminOrgApi#updateSettings(URI, OrgSettings)
+ * @see AdminOrgApi#editSettings(String, OrgSettings)
*/
@PUT
@Path("/settings")
@Consumes(VCloudDirectorMediaType.ORG_SETTINGS)
@Produces(VCloudDirectorMediaType.ORG_SETTINGS)
@JAXBResponseParser
- ListenableFuture<OrgSettings> updateSettings(@EndpointParam URI orgRef,
- @BinderParam(BindToXMLPayload.class) OrgSettings settings);
-
+ ListenableFuture<OrgSettings> editSettings(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
+ @BinderParam(BindToXMLPayload.class) OrgSettings settings);
+
+ /**
+ * @see AdminOrgApi#editSettings(URI, OrgSettings)
+ */
+ @PUT
+ @Path("/settings")
+ @Consumes(VCloudDirectorMediaType.ORG_SETTINGS)
+ @Produces(VCloudDirectorMediaType.ORG_SETTINGS)
+ @JAXBResponseParser
+ ListenableFuture<OrgSettings> editSettings(@EndpointParam URI adminOrgHref,
+ @BinderParam(BindToXMLPayload.class) OrgSettings settings);
+
+ /**
+ * @see AdminOrgApi#getEmailSettings(String)
+ */
+ @GET
+ @Path("/settings/email")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<OrgEmailSettings> getEmailSettings(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
/**
* @see AdminOrgApi#getEmailSettings(URI)
*/
@@ -95,19 +137,42 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<OrgEmailSettings> getEmailSettings(@EndpointParam URI orgRef);
+ ListenableFuture<OrgEmailSettings> getEmailSettings(@EndpointParam URI adminOrgHref);
/**
- * @see AdminOrgApi#updateEmailSettings(URI, OrgEmailSettings)
+ * @see AdminOrgApi#editEmailSettings(String, OrgEmailSettings)
*/
@PUT
@Path("/settings/email")
@Consumes(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
@Produces(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
@JAXBResponseParser
- ListenableFuture<OrgEmailSettings> updateEmailSettings(@EndpointParam URI orgRef,
- @BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
-
+ ListenableFuture<OrgEmailSettings> editEmailSettings(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
+ @BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
+
+ /**
+ * @see AdminOrgApi#editEmailSettings(URI, OrgEmailSettings)
+ */
+ @PUT
+ @Path("/settings/email")
+ @Consumes(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
+ @Produces(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
+ @JAXBResponseParser
+ ListenableFuture<OrgEmailSettings> editEmailSettings(@EndpointParam URI adminOrgHref,
+ @BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
+
+ /**
+ * @see AdminOrgApi#getGeneralSettings(String)
+ */
+ @GET
+ @Path("/settings/general")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<OrgGeneralSettings> getGeneralSettings(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
/**
* @see AdminOrgApi#getGeneralSettings(URI)
*/
@@ -116,20 +181,41 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<OrgGeneralSettings> getGeneralSettings(@EndpointParam URI orgRef);
+ ListenableFuture<OrgGeneralSettings> getGeneralSettings(@EndpointParam URI adminOrgHref);
/**
- * @see AdminOrgApi#updateGeneralSettings(URI, OrgGeneralSettings)
+ * @see AdminOrgApi#editGeneralSettings(String, OrgGeneralSettings)
*/
@PUT
@Path("/settings/general")
@Consumes(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
@Produces(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
@JAXBResponseParser
- ListenableFuture<OrgGeneralSettings> updateGeneralSettings(
- @EndpointParam URI orgRef,
- @BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
-
+ ListenableFuture<OrgGeneralSettings> editGeneralSettings(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
+ @BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
+
+ /**
+ * @see AdminOrgApi#editGeneralSettings(URI, OrgGeneralSettings)
+ */
+ @PUT
+ @Path("/settings/general")
+ @Consumes(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
+ @Produces(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
+ @JAXBResponseParser
+ ListenableFuture<OrgGeneralSettings> editGeneralSettings(@EndpointParam URI adminOrgHref,
+ @BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
+
+ /**
+ * @see AdminOrgApi#getPasswordPolicy(String)
+ */
+ @GET
+ @Path("/settings/ldap")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<OrgLdapSettings> getLdapSettings(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
/**
* @see AdminOrgApi#getPasswordPolicy(URI)
*/
@@ -138,8 +224,19 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<OrgLdapSettings> getLdapSettings(@EndpointParam URI orgRef);
-
+ ListenableFuture<OrgLdapSettings> getLdapSettings(@EndpointParam URI adminOrgHref);
+
+ /**
+ * @see AdminOrgApi#getPasswordPolicy(String)
+ */
+ @GET
+ @Path("/settings/passwordPolicy")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<OrgPasswordPolicySettings> getPasswordPolicy(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
/**
* @see AdminOrgApi#getPasswordPolicy(URI)
*/
@@ -148,19 +245,42 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<OrgPasswordPolicySettings> getPasswordPolicy(@EndpointParam URI orgRef);
+ ListenableFuture<OrgPasswordPolicySettings> getPasswordPolicy(@EndpointParam URI adminOrgHref);
/**
- * @see AdminOrgApi#updatePasswordPolicy(URI, OrgPasswordPolicySettings)
+ * @see AdminOrgApi#editPasswordPolicy(String, OrgPasswordPolicySettings)
*/
@PUT
@Path("/settings/passwordPolicy")
@Consumes(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
@Produces(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
@JAXBResponseParser
- ListenableFuture<OrgPasswordPolicySettings> updatePasswordPolicy(@EndpointParam URI orgRef,
- @BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
-
+ ListenableFuture<OrgPasswordPolicySettings> editPasswordPolicy(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
+ @BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
+
+ /**
+ * @see AdminOrgApi#editPasswordPolicy(URI, OrgPasswordPolicySettings)
+ */
+ @PUT
+ @Path("/settings/passwordPolicy")
+ @Consumes(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
+ @Produces(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
+ @JAXBResponseParser
+ ListenableFuture<OrgPasswordPolicySettings> editPasswordPolicy(@EndpointParam URI adminOrgHref,
+ @BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
+
+ /**
+ * @see AdminOrgApi#getVAppLeaseSettings(String)
+ */
+ @GET
+ @Path("/settings/vAppLeaseSettings")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<OrgLeaseSettings> getVAppLeaseSettings(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
/**
* @see AdminOrgApi#getVAppLeaseSettings(URI)
*/
@@ -169,19 +289,42 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<OrgLeaseSettings> getVAppLeaseSettings(@EndpointParam URI orgRef);
+ ListenableFuture<OrgLeaseSettings> getVAppLeaseSettings(@EndpointParam URI adminOrgHref);
/**
- * @see AdminOrgApi#updateVAppLeaseSettings(URI, OrgVAppLeaseSettings)
+ * @see AdminOrgApi#editVAppLeaseSettings(String, OrgVAppLeaseSettings)
*/
@PUT
@Path("/settings/vAppLeaseSettings")
@Consumes(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
@Produces(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
@JAXBResponseParser
- ListenableFuture<OrgLeaseSettings> updateVAppLeaseSettings(@EndpointParam URI orgRef,
- @BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
-
+ ListenableFuture<OrgLeaseSettings> editVAppLeaseSettings(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
+ @BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
+
+ /**
+ * @see AdminOrgApi#editVAppLeaseSettings(URI, OrgVAppLeaseSettings)
+ */
+ @PUT
+ @Path("/settings/vAppLeaseSettings")
+ @Consumes(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
+ @Produces(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
+ @JAXBResponseParser
+ ListenableFuture<OrgLeaseSettings> editVAppLeaseSettings(@EndpointParam URI adminOrgHref,
+ @BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
+
+ /**
+ * @see AdminOrgApi#getVAppTemplateLeaseSettings(String)
+ */
+ @GET
+ @Path("/settings/vAppTemplateLeaseSettings")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<OrgVAppTemplateLeaseSettings> getVAppTemplateLeaseSettings(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
/**
* @see AdminOrgApi#getVAppTemplateLeaseSettings(URI)
*/
@@ -190,23 +333,40 @@
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<OrgVAppTemplateLeaseSettings> getVAppTemplateLeaseSettings(@EndpointParam URI orgRef);
+ ListenableFuture<OrgVAppTemplateLeaseSettings> getVAppTemplateLeaseSettings(@EndpointParam URI adminOrgHref);
/**
- * @see AdminOrgApi#updateVAppTemplateLeaseSettings(URI, OrgVAppTemplateLeaseSettings)
+ * @see AdminOrgApi#editVAppTemplateLeaseSettings(String, OrgVAppTemplateLeaseSettings)
*/
@PUT
@Path("/settings/vAppTemplateLeaseSettings")
@Consumes(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
@Produces(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
@JAXBResponseParser
- ListenableFuture<OrgVAppTemplateLeaseSettings> updateVAppTemplateLeaseSettings(@EndpointParam URI orgRef,
- @BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
-
+ ListenableFuture<OrgVAppTemplateLeaseSettings> editVAppTemplateLeaseSettings(
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
+ @BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
+
+ /**
+ * @see AdminOrgApi#editVAppTemplateLeaseSettings(URI, OrgVAppTemplateLeaseSettings)
+ */
+ @PUT
+ @Path("/settings/vAppTemplateLeaseSettings")
+ @Consumes(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
+ @Produces(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
+ @JAXBResponseParser
+ ListenableFuture<OrgVAppTemplateLeaseSettings> editVAppTemplateLeaseSettings(@EndpointParam URI adminOrgHref,
+ @BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
+
/**
* @return asynchronous access to admin {@link MetadataAsyncApi.Writeable} features
*/
@Override
@Delegate
- MetadataAsyncApi.Writeable getMetadataApi();
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
+ @Override
+ @Delegate
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam URI adminOrgHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java
index 334002f..14e0c83 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java
@@ -27,13 +27,15 @@
import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
+import org.jclouds.vcloud.director.v1_5.features.MetadataApi.Writeable;
import org.jclouds.vcloud.director.v1_5.features.VdcApi;
+import org.jclouds.vcloud.director.v1_5.functions.href.VdcURNToAdminHref;
/**
* Provides synchronous access to {@link AdminVdc}.
*
* @see AdminVdcAsyncApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface AdminVdcApi extends VdcApi {
@@ -42,43 +44,58 @@
* Retrieves an admin view of virtual data center. The redwood admin can disable an
* organization vDC. This will prevent any further allocation to be used by the organization.
* Changing the state will not affect allocations already used. For example, if an organization
- * vDC is disabled, an organization user cannot deploy or create a new virtual machine in the
- * vDC (deploy uses memory and cpu allocations, and create uses storage allocation).
+ * vDC is disabled, an organization user cannot deploy or add a new virtual machine in the
+ * vDC (deploy uses memory and cpu allocations, and add uses storage allocation).
*
* @return the admin vDC or null if not found
*/
@Override
- AdminVdc getVdc(URI vdcRef);
+ AdminVdc get(String vdcUrn);
+
+ @Override
+ AdminVdc get(URI vdcAdminHref);
/**
* Modifies a Virtual Data Center. Virtual Data Center could be enabled or disabled.
* Additionally it could have one of these states FAILED_CREATION(-1), NOT_READY(0),
* READY(1), UNKNOWN(1) and UNRECOGNIZED(3).
*/
- Task editVdc(URI vdcRef, AdminVdc vdc);
+ Task edit(String vdcUrn, AdminVdc vdc);
+ Task edit(URI vdcAdminHref, AdminVdc vdc);
+
/**
- * Deletes a Virtual Data Center. The Virtual Data Center should be disabled when delete is issued.
+ * Deletes a Virtual Data Center. The Virtual Data Center should be disabled when remove is issued.
* Otherwise error code 400 Bad Request is returned.
*/
// TODO Saw what exception, instead of 400
- Task deleteVdc(URI vdcRef);
-
+ Task remove(String vdcUrn);
+
+ Task remove(URI vdcAdminHref);
+
/**
* Enables a Virtual Data Center. This operation enables disabled Virtual Data Center.
* If it is already enabled this operation has no effect.
*/
- void enableVdc(@EndpointParam URI vdcRef);
+ void enable(String vdcUrn);
+ void enable(URI vdcAdminHref);
+
/**
* Disables a Virtual Data Center. If the Virtual Data Center is disabled this operation does not
* have an effect.
*/
- void disableVdc(URI vdcRef);
-
+ void disable(String vdcUrn);
+
+ void disable(URI vdcAdminHref);
+
/**
* @return synchronous access to {@link Writeable} features
*/
@Delegate
- MetadataApi.Writeable getMetadataApi();
+ MetadataApi.Writeable getMetadataApi(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
+
+ @Delegate
+ MetadataApi.Writeable getMetadataApi(@EndpointParam URI vdcAdminHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
index 1d3778b..5f192f5 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
@@ -38,52 +38,118 @@
import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
+import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi.Writeable;
import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.VdcURNToAdminHref;
import com.google.common.util.concurrent.ListenableFuture;
/**
* @see AdminVdcApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface AdminVdcAsyncApi extends VdcAsyncApi {
-
+ /**
+ * @see AdminVdcApi#get(String)
+ */
@Override
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<AdminVdc> getVdc(@EndpointParam URI vdcRef);
-
+ ListenableFuture<AdminVdc> get(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
+
+ /**
+ * @see AdminVdcApi#edit(String, AdminVdc)
+ */
@PUT
@Consumes
@Produces(VCloudDirectorMediaType.ADMIN_VDC)
@JAXBResponseParser
- ListenableFuture<Task> editVdc(@EndpointParam URI vdcRef, AdminVdc vdc);
-
+ ListenableFuture<Task> edit(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn, AdminVdc vdc);
+
+ /**
+ * @see AdminVdcApi#remove(String)
+ */
@DELETE
@Consumes
@JAXBResponseParser
- ListenableFuture<Task> deleteVdc(@EndpointParam URI vdcRef);
-
+ ListenableFuture<Task> remove(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
+
+ /**
+ * @see AdminVdcApi#enable(String)
+ */
@POST
@Consumes
@Path("/action/enable")
@JAXBResponseParser
- ListenableFuture<Void> enableVdc(@EndpointParam URI vdcRef);
-
+ ListenableFuture<Void> enable(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
+
+ /**
+ * @see AdminVdcApi#disable(String)
+ */
@POST
@Consumes
@Path("/action/disable")
@JAXBResponseParser
- ListenableFuture<Void> disableVdc(@EndpointParam URI vdcRef);
-
+ ListenableFuture<Void> disable(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
+
+ /**
+ * @see AdminVdcApi#get(URI)
+ */
+ @Override
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<AdminVdc> get(@EndpointParam URI vdcAdminHref);
+
+ /**
+ * @see AdminVdcApi#edit(URI, AdminVdc)
+ */
+ @PUT
+ @Consumes
+ @Produces(VCloudDirectorMediaType.ADMIN_VDC)
+ @JAXBResponseParser
+ ListenableFuture<Task> edit(@EndpointParam URI vdcAdminHref, AdminVdc vdc);
+
+ /**
+ * @see AdminVdcApi#remove(URI)
+ */
+ @DELETE
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Task> remove(@EndpointParam URI vdcAdminHref);
+
+ /**
+ * @see AdminVdcApi#enable(URI)
+ */
+ @POST
+ @Consumes
+ @Path("/action/enable")
+ @JAXBResponseParser
+ ListenableFuture<Void> enable(@EndpointParam URI vdcAdminHref);
+
+ /**
+ * @see AdminVdcApi#disable(URI)
+ */
+ @POST
+ @Consumes
+ @Path("/action/disable")
+ @JAXBResponseParser
+ ListenableFuture<Void> disable(@EndpointParam URI vdcAdminHref);
+
/**
* @return asynchronous access to {@link Writeable} features
*/
@Override
@Delegate
- MetadataAsyncApi.Writeable getMetadataApi();
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam(parser = VdcURNToAdminHref.class) String vdcUrn);
+
+ @Override
+ @Delegate
+ MetadataAsyncApi.Writeable getMetadataApi(@EndpointParam URI vdcAdminHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java
index da83f71..bb2a6a1 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java
@@ -28,7 +28,7 @@
* Provides synchronous access to {@link Group} objects.
*
* @see GroupAsyncApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface GroupApi {
@@ -40,11 +40,13 @@
* POST /admin/org/{id}/groups
* </pre>
*
- * @param orgUri the admin org to create the group in
- * @return the created group
+ * @param orgUrn the admin org to add the group in
+ * @return the addd group
*/
- Group createGroup(URI adminOrgUri, Group group);
+ Group addGroupToOrg(Group group, String orgUrn);
+ Group addGroupToOrg(Group group, URI orgHref);
+
/**
* Retrieves a group.
*
@@ -52,10 +54,12 @@
* GET /admin/group/{id}
* </pre>
*
- * @param groupURI the reference for the group
+ * @param groupString the reference for the group
* @return a group
*/
- Group getGroup(URI groupUri);
+ Group get(String groupUrn);
+
+ Group get(URI groupHref);
/**
* Modifies a group.
@@ -64,9 +68,11 @@
* PUT /admin/group/{id}
* </pre>
*
- * @return the updated group
+ * @return the edited group
*/
- Group updateGroup(URI groupRef, Group group);
+ Group edit(String groupUrn, Group group);
+
+ Group edit(URI groupHref, Group group);
/**
* Deletes a group.
@@ -75,5 +81,8 @@
* DELETE /admin/group/{id}
* </pre>
*/
- void deleteGroup(URI groupRef);
+ void remove(String groupUrn);
+
+ void remove(URI groupHref);
+
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
index f9653c7..cf2435b 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
@@ -38,48 +38,89 @@
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Group;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.GroupURNToHref;
+import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToAdminHref;
import com.google.common.util.concurrent.ListenableFuture;
-
+
/**
* @see GroupApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface GroupAsyncApi {
-
+
+ /**
+ * @see GroupApi#addGroupToOrg(Group, String)
+ */
@POST
@Path("/groups")
@Consumes(VCloudDirectorMediaType.GROUP)
@Produces(VCloudDirectorMediaType.GROUP)
@JAXBResponseParser
- ListenableFuture<Group> createGroup(@EndpointParam URI adminOrgUri,
- @BinderParam(BindToXMLPayload.class) Group group);
+ ListenableFuture<Group> addGroupToOrg(@BinderParam(BindToXMLPayload.class) Group group,
+ @EndpointParam(parser = OrgURNToAdminHref.class) String adminUrn);
/**
- * @see GroupApi#getGroup(URI)
+ * @see GroupApi#get(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<Group> getGroup(@EndpointParam URI groupUri);
+ ListenableFuture<Group> get(@EndpointParam(parser = GroupURNToHref.class) String groupUri);
/**
- * @see GroupApi#updateGroup(URI, Group)
+ * @see GroupApi#edit(String, Group)
*/
@PUT
@Consumes(VCloudDirectorMediaType.GROUP)
@Produces(VCloudDirectorMediaType.GROUP)
@JAXBResponseParser
- ListenableFuture<Group> updateGroup(@EndpointParam URI groupRef,
- @BinderParam(BindToXMLPayload.class) Group group);
+ ListenableFuture<Group> edit(@EndpointParam(parser = GroupURNToHref.class) String groupUrn,
+ @BinderParam(BindToXMLPayload.class) Group group);
/**
- * @see GroupApi#deleteGroup(URI)
+ * @see GroupApi#remove(String)
*/
@DELETE
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> deleteGroup(@EndpointParam URI groupRef);
+ ListenableFuture<Void> remove(@EndpointParam(parser = GroupURNToHref.class) String groupUrn);
+
+ /**
+ * @see GroupApi#addGroupToOrg(Group, URI)
+ */
+ @POST
+ @Path("/groups")
+ @Consumes(VCloudDirectorMediaType.GROUP)
+ @Produces(VCloudDirectorMediaType.GROUP)
+ @JAXBResponseParser
+ ListenableFuture<Group> addGroupToOrg(@BinderParam(BindToXMLPayload.class) Group group, @EndpointParam URI adminUrn);
+
+ /**
+ * @see GroupApi#get(URI)
+ */
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Group> get(@EndpointParam URI groupUri);
+
+ /**
+ * @see GroupApi#edit(URI, Group)
+ */
+ @PUT
+ @Consumes(VCloudDirectorMediaType.GROUP)
+ @Produces(VCloudDirectorMediaType.GROUP)
+ @JAXBResponseParser
+ ListenableFuture<Group> edit(@EndpointParam URI groupUrn, @BinderParam(BindToXMLPayload.class) Group group);
+
+ /**
+ * @see GroupApi#remove(URI)
+ */
+ @DELETE
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> remove(@EndpointParam URI groupUrn);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java
index 4c9299a..36b2452 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java
@@ -25,60 +25,71 @@
import org.jclouds.vcloud.director.v1_5.domain.User;
/**
- * Provides synchronous access to {@link Group} objects.
+ * Provides synchronous access to {@link User} objects.
*
- * @see GroupAsyncApi
- * @author danikov
+ * @see UserAsyncApi
+ * @author danikov, Adrian Cole
*/
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface UserApi {
/**
* Creates or imports a user in an organization. The user could be enabled or disabled.
- *
+ *
* <pre>
* POST /admin/org/{id}/users
* </pre>
- *
- * @param orgRef the reference for the org
- * @return the created user
+ *
+ * @param orgUrn
+ * the urn for the org
+ * @return the addd user
*/
- User createUser(URI orgRef, User user);
-
+ User addUserToOrg(User user, String orgUrn);
+
+ User addUserToOrg(User user, URI orgAdminHref);
+
/**
* Retrieves a user. This entity could be enabled or disabled.
- *
+ *
* <pre>
* GET /admin/user/{id}
* </pre>
- *
- * @param userRef the reference for the user
+ *
+ * @param userUrn
+ * the reference for the user
* @return a user
*/
- User getUser(URI userRef);
-
+ User get(String userUrn);
+
+ User get(URI userHref);
+
/**
- * Modifies a user. The user object could be enabled or disabled.
- * Note: the lock status cannot be changed using this call: use unlockUser.
- *
+ * Modifies a user. The user object could be enabled or disabled. Note: the lock status cannot be
+ * changed using this call: use unlockUser.
+ *
* <pre>
* PUT /admin/user/{id}
* </pre>
- *
- * @param userRef the reference for the user
+ *
+ * @param userUrn
+ * the reference for the user
* @return the modified user
*/
- User updateUser(URI userRef, User user);
+ User edit(String userUrn, User user);
+ User edit(URI userHref, User user);
+
/**
- * Deletes a user. Enabled and disabled users could be deleted.
+ * Deletes a user. Enabled and disabled users could be removed.
*
* <pre>
* DELETE /admin/catalog/{id}
* </pre>
*/
- void deleteUser(URI userRef);
+ void remove(String userUrn);
+ void remove(URI userHref);
+
/**
* Unlocks a user.
*
@@ -86,5 +97,7 @@
* POST /admin/user/{id}/action/unlock
* </pre>
*/
- void unlockUser(URI userRef);
+ void unlock(String userUrn);
+
+ void unlock(URI userHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
index c59c8b7..eeed709 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
@@ -38,60 +38,108 @@
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.User;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToAdminHref;
+import org.jclouds.vcloud.director.v1_5.functions.href.UserURNToHref;
import com.google.common.util.concurrent.ListenableFuture;
-
+
/**
* @see UserApi
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
public interface UserAsyncApi {
/**
- * @see UserApi#createUser(URI, User)
+ * @see UserApi#addUserToOrg(User, String)
*/
@POST
@Path("/users")
@Consumes(VCloudDirectorMediaType.USER)
@Produces(VCloudDirectorMediaType.USER)
@JAXBResponseParser
- ListenableFuture<User> createUser(@EndpointParam URI userRef,
- @BinderParam(BindToXMLPayload.class) User user);
-
+ ListenableFuture<User> addUserToOrg(@BinderParam(BindToXMLPayload.class) User user,
+ @EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
+
/**
- * @see UserApi#getUser(URI)
+ * @see UserApi#addUserToOrg(User, URI)
+ */
+ @POST
+ @Path("/users")
+ @Consumes(VCloudDirectorMediaType.USER)
+ @Produces(VCloudDirectorMediaType.USER)
+ @JAXBResponseParser
+ ListenableFuture<User> addUserToOrg(@BinderParam(BindToXMLPayload.class) User user,
+ @EndpointParam URI orgAdminHref);
+
+ /**
+ * @see UserApi#get(String)
*/
@GET
@Consumes
@JAXBResponseParser
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
- ListenableFuture<User> getUser(@EndpointParam URI userRef);
-
+ ListenableFuture<User> get(@EndpointParam(parser = UserURNToHref.class) String userUrn);
+
/**
- * @see UserApi#updateUser(URI, User)
+ * @see UserApi#get(URI)
+ */
+ @GET
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<User> get(@EndpointParam URI userHref);
+
+ /**
+ * @see UserApi#edit(String, User)
*/
@PUT
@Consumes(VCloudDirectorMediaType.USER)
@Produces(VCloudDirectorMediaType.USER)
@JAXBResponseParser
- ListenableFuture<User> updateUser(@EndpointParam URI userRef,
- @BinderParam(BindToXMLPayload.class) User user);
-
+ ListenableFuture<User> edit(@EndpointParam(parser = UserURNToHref.class) String userUrn,
+ @BinderParam(BindToXMLPayload.class) User user);
+
/**
- * @see UserApi#deleteUser(URI)
+ * @see UserApi#edit(URI, User)
+ */
+ @PUT
+ @Consumes(VCloudDirectorMediaType.USER)
+ @Produces(VCloudDirectorMediaType.USER)
+ @JAXBResponseParser
+ ListenableFuture<User> edit(@EndpointParam URI userHref, @BinderParam(BindToXMLPayload.class) User user);
+
+ /**
+ * @see UserApi#remove(String)
*/
@DELETE
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> deleteUser(@EndpointParam URI userRef);
-
+ ListenableFuture<Void> remove(@EndpointParam(parser = UserURNToHref.class) String userUrn);
+
/**
- * @see UserApi#unlockUser(URI)
+ * @see UserApi#remove(URI)
+ */
+ @DELETE
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> remove(@EndpointParam URI userHref);
+
+ /**
+ * @see UserApi#unlock(String)
*/
@POST
@Path("/action/unlock")
@Consumes
@JAXBResponseParser
- ListenableFuture<Void> unlockUser(@EndpointParam URI userRef);
+ ListenableFuture<Void> unlock(@EndpointParam(parser = UserURNToHref.class) String userUrn);
+
+ /**
+ * @see UserApi#unlock(URI)
+ */
+ @POST
+ @Path("/action/unlock")
+ @Consumes
+ @JAXBResponseParser
+ ListenableFuture<Void> unlock(@EndpointParam URI userHref);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllCatalogItemsInCatalog.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllCatalogItemsInCatalog.java
index 603fa2a..f05f2b9 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllCatalogItemsInCatalog.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllCatalogItemsInCatalog.java
@@ -71,7 +71,7 @@
@Override
public Future<CatalogItem> apply(Reference from) {
- return aapi.getCatalogApi().getCatalogItem(from.getHref());
+ return aapi.getCatalogApi().getItem(from.getHref());
}
}, executor, null, logger, "catalogItems in " + from.getHref());
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllCatalogsInOrg.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllCatalogsInOrg.java
index aba519a..2b74256 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllCatalogsInOrg.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllCatalogsInOrg.java
@@ -59,7 +59,7 @@
new Function<Reference, Future<? extends Catalog>>() {
@Override
public Future<? extends Catalog> apply(Reference from) {
- return aapi.getCatalogApi().getCatalog(from.getHref());
+ return aapi.getCatalogApi().get(from.getHref());
}
}, executor, null, logger, "catalogs in " + org.getName());
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllVdcsInOrg.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllVdcsInOrg.java
index a1385c2..82b12da 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllVdcsInOrg.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/AllVdcsInOrg.java
@@ -61,7 +61,7 @@
new Function<Reference, Future<? extends Vdc>>() {
@Override
public Future<? extends Vdc> apply(Reference from) {
- return aapi.getVdcApi().getVdc(from.getHref());
+ return aapi.getVdcApi().get(from.getHref());
}
}, executor, null, logger, "vdcs in org " + org.getName());
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgReferenceToTaskListEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgReferenceToTaskListEndpoint.java
deleted file mode 100644
index 4131b3c..0000000
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgReferenceToTaskListEndpoint.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to jclouds, Inc. (jclouds) under one or more
- * contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions;
-
-import java.net.URI;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.rest.ResourceNotFoundException;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Link;
-import org.jclouds.vcloud.director.v1_5.domain.org.Org;
-import org.jclouds.vcloud.director.v1_5.features.OrgApi;
-
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-
-/**
- * @author grkvlt@apache.org
- */
-@Singleton
-public class OrgReferenceToTaskListEndpoint implements Function<Object, URI> {
- private final OrgApi api;
-
- @Inject
- public OrgReferenceToTaskListEndpoint(OrgApi api) {
- this.api = api;
- }
-
- @Override
- public URI apply(Object input) {
- Preconditions.checkNotNull(input);
- Preconditions.checkArgument(input instanceof URI);
- URI reference = (URI) input;
- Org org = api.getOrg(reference);
- if (org == null) {
- throw new ResourceNotFoundException();
- }
- for (Link link : org.getLinks()) {
- if (link.getType().equals(VCloudDirectorMediaType.TASKS_LIST)) {
- return link.getHref();
- }
- }
- throw new RuntimeException(String.format("Could not find a link of type %s", VCloudDirectorMediaType.TASKS_LIST));
- };
-}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgsForLocations.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgsForLocations.java
index 52346bd..334c9c5 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgsForLocations.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgsForLocations.java
@@ -18,75 +18,52 @@
*/
package org.jclouds.vcloud.director.v1_5.functions;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.transform;
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
-
-import java.net.URI;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-
-import javax.annotation.Resource;
import javax.inject.Inject;
-import javax.inject.Named;
import javax.inject.Singleton;
-import org.jclouds.Constants;
import org.jclouds.domain.Location;
-import org.jclouds.domain.LocationScope;
-import org.jclouds.logging.Logger;
+import org.jclouds.location.predicates.LocationPredicates;
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
+import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Sets;
+import static com.google.common.collect.FluentIterable.*;
/**
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Singleton
public class OrgsForLocations implements Function<Iterable<Location>, Iterable<? extends Org>> {
- @Resource
- public Logger logger = Logger.NULL;
- private final VCloudDirectorAsyncApi aapi;
- private final ExecutorService executor;
+
+ private final VCloudDirectorApi api;
@Inject
- OrgsForLocations(VCloudDirectorAsyncApi aapi, @Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
- this.aapi = aapi;
- this.executor = executor;
+ OrgsForLocations(VCloudDirectorApi api) {
+ this.api = api;
}
/**
- * Zones are assignable, but we want regions. so we look for zones, whose
- * parent is region. then, we use a set to extract the unique set.
+ * Zones are assignable, but we want regions. so we look for zones, whose parent is region. then,
+ * we use a set to extract the unique set.
*/
@Override
public Iterable<? extends Org> apply(Iterable<Location> from) {
-
- return transformParallel(Sets.newLinkedHashSet(transform(filter(from, new Predicate<Location>() {
-
- @Override
- public boolean apply(Location input) {
- return input.getScope() == LocationScope.ZONE;
- }
-
- }), new Function<Location, URI>() {
-
- @Override
- public URI apply(Location from) {
- return URI.create(from.getParent().getId());
- }
-
- })), new Function<URI, Future<? extends Org>>() {
-
- @Override
- public Future<? extends Org> apply(URI from) {
- return aapi.getOrgApi().getOrg(from);
- }
-
- }, executor, null, logger, "organizations for uris");
+ return from(from)
+ .filter(LocationPredicates.isZone())
+ .transform(new Function<Location, String>() {
+ @Override
+ public String apply(Location from) {
+ return from.getParent().getId();
+ }
+ })
+ .transform(new Function<String, Org>() {
+
+ @Override
+ public Org apply(String from) {
+ return api.getOrgApi().get(from);
+ }
+
+ });
}
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgsForNames.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgsForNames.java
index d5bf6b2..5f307be 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgsForNames.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/OrgsForNames.java
@@ -18,26 +18,17 @@
*/
package org.jclouds.vcloud.director.v1_5.functions;
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
-import static org.jclouds.vcloud.director.v1_5.predicates.ReferencePredicates.nameEquals;
+import static com.google.common.collect.FluentIterable.from;
-import java.util.Set;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-
-import javax.annotation.Resource;
import javax.inject.Inject;
-import javax.inject.Named;
import javax.inject.Singleton;
-import org.jclouds.Constants;
-import org.jclouds.logging.Logger;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
import com.google.common.base.Function;
+import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
/**
@@ -45,33 +36,28 @@
*/
@Singleton
public class OrgsForNames implements Function<Iterable<String>, Iterable<? extends Org>> {
- @Resource
- public Logger logger = Logger.NULL;
- private final VCloudDirectorAsyncApi aapi;
- private final VCloudDirectorApi sapi;
- private final ExecutorService executor;
+ private final VCloudDirectorApi api;
@Inject
- OrgsForNames(VCloudDirectorAsyncApi aapi,
- VCloudDirectorApi sapi,
- @Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
- this.aapi = aapi;
- this.sapi = sapi;
- this.executor = executor;
+ OrgsForNames(VCloudDirectorApi api) {
+ this.api = api;
}
@Override
- public Iterable<? extends Org> apply(Iterable<String> from) {
- final Set<Reference> orgs = sapi.getOrgApi().getOrgList().getOrgs();
-
- return transformParallel(from, new Function<String, Future<? extends Org>>() {
-
+ public Iterable<? extends Org> apply(final Iterable<String> from) {
+ return from(api.getOrgApi().list()).filter(new Predicate<Reference>() {
@Override
- public Future<? extends Org> apply(String from) {
- return aapi.getOrgApi().getOrg(Iterables.find(orgs, nameEquals(from)).getHref());
+ public boolean apply(Reference in) {
+ return Iterables.contains(from, in.getName());
+ }
+ }).transform(new Function<Reference, Org>() {
+
+ @Override
+ public Org apply(Reference in) {
+ return api.getOrgApi().get(in.getHref());
}
- }, executor, null, logger, "organizations for names");
+ });
}
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToHref.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToHref.java
new file mode 100644
index 0000000..e7eecbe
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToHref.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.net.URI;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.domain.Link;
+import org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates;
+
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.Iterables;
+
+/**
+ * Resolves URN to its HREF via the entity Resolver
+ *
+ * @author Adrian Cole
+ */
+@Singleton
+public abstract class URNToHref implements Function<Object, URI> {
+ private final LoadingCache<String, Entity> resolveEntityCache;
+
+ @Inject
+ public URNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ this.resolveEntityCache = checkNotNull(resolveEntityCache, "resolveEntityCache");
+ }
+
+ /**
+ * media type to search for.
+ *
+ * @see VCloudDirectorMediaType
+ */
+ protected abstract String type();
+
+ @Override
+ public URI apply(@Nullable Object from) {
+ checkArgument(checkNotNull(from, "urn") instanceof String, "urn is a String argument");
+ Entity entity = resolveEntityCache.getUnchecked(from.toString());
+ Optional<Link> link = Iterables.tryFind(entity.getLinks(), LinkPredicates.typeEquals(type()));
+ checkArgument(link.isPresent(), "no link for type %s found for entity %s", type(), entity);
+ return link.get().getHref();
+ }
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/VAppTemplatesForCatalogItems.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/VAppTemplatesForCatalogItems.java
index dbe94a2..2548d3d 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/VAppTemplatesForCatalogItems.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/VAppTemplatesForCatalogItems.java
@@ -90,7 +90,7 @@
@Override
public Future<? extends VAppTemplate> apply(CatalogItem from) {
return new ExceptionParsingListenableFuture<VAppTemplate>(Futures.makeListenable(VCloudDirectorAsyncApi.class
- .cast(aapi).getVAppTemplateApi().getVAppTemplate(from.getEntity().getHref()), executor),
+ .cast(aapi).getVAppTemplateApi().get(from.getEntity().getHref()), executor),
returnNullOnAuthorizationException);
}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogItemURNToHref.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogItemURNToHref.java
new file mode 100644
index 0000000..f8ba342
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogItemURNToHref.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions.href;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
+
+import com.google.common.cache.LoadingCache;
+
+@Singleton
+public class CatalogItemURNToHref extends URNToHref {
+
+ @Inject
+ public CatalogItemURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
+ }
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.CATALOG_ITEM;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogURNToAdminHref.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogURNToAdminHref.java
new file mode 100644
index 0000000..b6d2680
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogURNToAdminHref.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions.href;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
+
+import com.google.common.cache.LoadingCache;
+
+@Singleton
+public class CatalogURNToAdminHref extends URNToHref {
+
+ @Inject
+ public CatalogURNToAdminHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
+ }
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.ADMIN_CATALOG;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogURNToHref.java
index 2575c00..2629ccb 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/CatalogURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class CatalogURNToHref extends URNToHref {
+
+ @Inject
+ public CatalogURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.CATALOG;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/GroupURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/GroupURNToHref.java
index 2575c00..b952baa 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/GroupURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class GroupURNToHref extends URNToHref {
+
+ @Inject
+ public GroupURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.GROUP;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/MediaURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/MediaURNToHref.java
index 2575c00..929e6dc 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/MediaURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class MediaURNToHref extends URNToHref {
+
+ @Inject
+ public MediaURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.MEDIA;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/NetworkURNToAdminHref.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/NetworkURNToAdminHref.java
new file mode 100644
index 0000000..bc5309c
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/NetworkURNToAdminHref.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions.href;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
+
+import com.google.common.cache.LoadingCache;
+
+@Singleton
+public class NetworkURNToAdminHref extends URNToHref {
+
+ @Inject
+ public NetworkURNToAdminHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
+ }
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.ADMIN_NETWORK;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/NetworkURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/NetworkURNToHref.java
index 2575c00..076056f 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/NetworkURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class NetworkURNToHref extends URNToHref {
+
+ @Inject
+ public NetworkURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.NETWORK;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/OrgURNToAdminHref.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/OrgURNToAdminHref.java
new file mode 100644
index 0000000..eca7e6b
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/OrgURNToAdminHref.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions.href;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
+
+import com.google.common.cache.LoadingCache;
+
+@Singleton
+public class OrgURNToAdminHref extends URNToHref {
+
+ @Inject
+ public OrgURNToAdminHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
+ }
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.ADMIN_ORG;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/OrgURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/OrgURNToHref.java
index 2575c00..3f998ae 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/OrgURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class OrgURNToHref extends URNToHref {
+
+ @Inject
+ public OrgURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.ORG;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/ResolveEntity.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/ResolveEntity.java
new file mode 100644
index 0000000..a7791bd
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/ResolveEntity.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions.href;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
+
+import com.google.common.base.Function;
+
+@Singleton
+public class ResolveEntity implements Function<String, Entity> {
+ private final VCloudDirectorApi api;
+
+ @Inject
+ public ResolveEntity(VCloudDirectorApi api) {
+ this.api = checkNotNull(api, "api");
+ }
+
+ @Override
+ public Entity apply(String input) {
+ return api.resolveEntity(checkNotNull(input, "urn"));
+ }
+
+ @Override
+ public String toString() {
+ return "resolveEntity()";
+ }
+}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/TaskURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/TaskURNToHref.java
index 2575c00..5d28e2e 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/TaskURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class TaskURNToHref extends URNToHref {
+
+ @Inject
+ public TaskURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.TASK;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/TasksListURNToHref.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/TasksListURNToHref.java
new file mode 100644
index 0000000..5af7295
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/TasksListURNToHref.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions.href;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
+
+import com.google.common.cache.LoadingCache;
+
+@Singleton
+public class TasksListURNToHref extends URNToHref {
+
+ @Inject
+ public TasksListURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
+ }
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.TASKS_LIST;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/UserURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/UserURNToHref.java
index 2575c00..cf830fb 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/UserURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class UserURNToHref extends URNToHref {
+
+ @Inject
+ public UserURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.USER;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VAppTemplateURNToHref.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VAppTemplateURNToHref.java
new file mode 100644
index 0000000..eb6c831
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VAppTemplateURNToHref.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions.href;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
+
+import com.google.common.cache.LoadingCache;
+
+@Singleton
+public class VAppTemplateURNToHref extends URNToHref {
+
+ @Inject
+ public VAppTemplateURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
+ }
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.VAPP_TEMPLATE;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VAppURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VAppURNToHref.java
index 2575c00..85ac172 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VAppURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class VAppURNToHref extends URNToHref {
+
+ @Inject
+ public VAppURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.VAPP;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VdcURNToAdminHref.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VdcURNToAdminHref.java
new file mode 100644
index 0000000..6fbd12ab
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VdcURNToAdminHref.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5.functions.href;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
+
+import com.google.common.cache.LoadingCache;
+
+@Singleton
+public class VdcURNToAdminHref extends URNToHref {
+
+ @Inject
+ public VdcURNToAdminHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
+ }
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.ADMIN_VDC;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VdcURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VdcURNToHref.java
index 2575c00..72b427a 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VdcURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class VdcURNToHref extends URNToHref {
+
+ @Inject
+ public VdcURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.VDC;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VmURNToHref.java
similarity index 60%
copy from labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
copy to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VmURNToHref.java
index 2575c00..0aa18ef 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/ReferenceToEndpoint.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/href/VmURNToHref.java
@@ -16,24 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jclouds.vcloud.director.v1_5.functions;
+package org.jclouds.vcloud.director.v1_5.functions.href;
-import java.net.URI;
-
+import javax.inject.Inject;
import javax.inject.Singleton;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
-/**
- * @author danikov
- */
@Singleton
-public class ReferenceToEndpoint implements Function<Reference, URI> {
-
- @Override
- public URI apply(Reference from) {
- return from.getHref();
+public class VmURNToHref extends URNToHref {
+
+ @Inject
+ public VmURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
+ super(resolveEntityCache);
}
-}
+
+ @Override
+ protected String type() {
+ return VCloudDirectorMediaType.VM;
+ }
+
+}
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/EntityPredicates.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/EntityPredicates.java
index bdd71dc..aedf381 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/EntityPredicates.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/EntityPredicates.java
@@ -30,9 +30,32 @@
/**
* Predicates for working with {@link EntityType} collections.
*
- * @author grkvlt@apache.org
+ * @author grkvlt@apache.org, Adrian Cole
*/
public class EntityPredicates {
+
+ /**
+ * Matches {@link EntityType entities} with the given id.
+ *
+ * @param T type of the entity, for example {@link Vm}
+ * @param id value of the id attribute of the entity
+ * @return predicate that will match entities of the given id
+ */
+ public static <T extends Entity> Predicate<T> idEquals(final String id) {
+ checkNotNull(id, "id must be defined");
+
+ return new Predicate<T>() {
+ @Override
+ public boolean apply(T entity) {
+ return id.equals(entity.getId());
+ }
+
+ @Override
+ public String toString() {
+ return "idEquals(" + id + ")";
+ }
+ };
+ }
/**
* Matches {@link EntityType entities} with the given name.
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/LinkPredicates.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/LinkPredicates.java
index 91187b4..a2af20f 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/LinkPredicates.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/LinkPredicates.java
@@ -39,7 +39,7 @@
/**
* matches links of the given relation
*
- * @param rel from {@code context.getApi().getCurrentSession().getOrg().getLinks()}
+ * @param rel from {@code context.getApi().getCurrentSession().get().getLinks()}
* @return predicate that will match links of the given rel
*/
public static Predicate<Link> relEquals(final String rel) {
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/TaskStatusEquals.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/TaskStatusEquals.java
index 2cd1304..15cf442 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/TaskStatusEquals.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/TaskStatusEquals.java
@@ -67,7 +67,7 @@
logger.trace("looking for status on task %s", task);
// TODO shouldn't we see if it's already done before getting it from API server?
- task = taskApi.getTask(task.getHref());
+ task = taskApi.get(task.getHref());
// perhaps task isn't available, yet
if (task == null) return false;
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/TaskSuccess.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/TaskSuccess.java
index 6456529..e1059c5 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/TaskSuccess.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/predicates/TaskSuccess.java
@@ -58,7 +58,7 @@
logger.trace("looking for status on task %s", task.getOperationName());
// TODO shouldn't we see if it's already done before getting it from API server?
- task = taskApi.getTask(task.getHref());
+ task = taskApi.get(task.getHref());
// perhaps task isn't available, yet
if (task == null) return false;
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java
index 44ec9a6..cdbe899 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java
@@ -22,6 +22,7 @@
import org.jclouds.concurrent.Timeout;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
import org.jclouds.vcloud.director.v1_5.domain.Session;
import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
import org.jclouds.vcloud.director.v1_5.features.MediaApi;
@@ -40,11 +41,21 @@
/**
* Provides synchronous access to VCloudDirector.
*
- * @see VCloudDirectorAdminAsyncApi
+ * @see VCloudDirectorAsyncApi
* @author danikov
*/
@Timeout(duration = 60, timeUnit = TimeUnit.SECONDS)
public interface VCloudDirectorApi {
+
+ /**
+ * Redirects to the URL of an entity with the given VCD ID.
+ *
+ * <pre>
+ * GET /entity/{id}
+ * </pre>
+ */
+ Entity resolveEntity(String urn);
+
/**
* @return the current login session
*/
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorAsyncApi.java
index f91b234..a1eb5b2 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorAsyncApi.java
@@ -18,8 +18,28 @@
*/
package org.jclouds.vcloud.director.v1_5.user;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.rest.annotations.ExceptionParser;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.SkipEncoding;
+import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
+import org.jclouds.vcloud.director.v1_5.domain.Catalog;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.domain.Media;
import org.jclouds.vcloud.director.v1_5.domain.Session;
+import org.jclouds.vcloud.director.v1_5.domain.Task;
+import org.jclouds.vcloud.director.v1_5.domain.VApp;
+import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
+import org.jclouds.vcloud.director.v1_5.domain.Vdc;
+import org.jclouds.vcloud.director.v1_5.domain.Vm;
+import org.jclouds.vcloud.director.v1_5.domain.network.Network;
+import org.jclouds.vcloud.director.v1_5.domain.org.Org;
import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi;
@@ -30,7 +50,9 @@
import org.jclouds.vcloud.director.v1_5.features.VAppTemplateAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
import org.jclouds.vcloud.director.v1_5.features.VmAsyncApi;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import com.google.common.util.concurrent.ListenableFuture;
import com.google.inject.Provides;
/**
@@ -39,7 +61,20 @@
* @see VCloudDirectorApi
* @author Adrian Cole
*/
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+@SkipEncoding({ '-', ':' })
public interface VCloudDirectorAsyncApi {
+
+ /**
+ * @see VCloudDirectorApi#resolveEntity(String)
+ */
+ @GET
+ @Path("/entity/{id}")
+ @Consumes
+ @JAXBResponseParser
+ @ExceptionParser(ReturnNullOnNotFoundOr404.class)
+ ListenableFuture<Entity> resolveEntity(@PathParam("id") String id);
+
/**
*
* @return the current login session
@@ -58,31 +93,31 @@
*/
@Delegate
OrgAsyncApi getOrgApi();
-
+
/**
* @return asynchronous access to {@link Task} features
*/
@Delegate
TaskAsyncApi getTaskApi();
-
+
/**
* @return asynchronous access to {@link Network} features
*/
@Delegate
NetworkAsyncApi getNetworkApi();
-
+
/**
* @return asynchronous access to {@link Catalog} features
*/
@Delegate
CatalogAsyncApi getCatalogApi();
-
+
/**
* @return asynchronous access to {@link Media} features
*/
@Delegate
CatalogAsyncApi getMediaApi();
-
+
/**
* @return asynchronous access to {@link Vdc} features
*/
@@ -94,7 +129,7 @@
*/
@Delegate
UploadAsyncApi getUploadApi();
-
+
/**
* @return asynchronous access to {@link VApp} features
*/
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java
index d80d907..1be4816 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java
@@ -107,8 +107,8 @@
protected Vm vm;
protected VApp vApp;
protected VAppTemplate vAppTemplate;
- protected URI vmURI;
- protected URI vAppURI;
+ protected String vmUrn;
+ protected String vAppUrn;
/**
* Retrieves the required apis from the REST API context
@@ -134,39 +134,38 @@
@BeforeClass(alwaysRun = true, description = "Retrieves the required apis from the REST API context")
protected void setupEnvironment() {
// Get the configured Vdc for the tests
- vdc = vdcApi.getVdc(vdcURI);
- assertNotNull(vdc, String.format(ENTITY_NON_NULL, VDC));
+ vdc = lazyGetVdc();
// Get the configured VAppTemplate for the tests
- vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
+ vAppTemplate = vAppTemplateApi.get(vAppTemplateUrn);
assertNotNull(vAppTemplate, String.format(ENTITY_NON_NULL, VAPP_TEMPLATE));
// Instantiate a new VApp
VApp vAppInstantiated = instantiateVApp();
assertNotNull(vAppInstantiated, String.format(ENTITY_NON_NULL, VAPP));
- vAppURI = vAppInstantiated.getHref();
+ vAppUrn = vAppInstantiated.getId();
// Wait for the task to complete
Task instantiateTask = Iterables.getOnlyElement(vAppInstantiated.getTasks());
assertTrue(retryTaskSuccessLong.apply(instantiateTask), String.format(TASK_COMPLETE_TIMELY, "instantiateTask"));
// Get the instantiated VApp
- vApp = vAppApi.getVApp(vAppURI);
+ vApp = vAppApi.get(vAppUrn);
// Get the Vm
List<Vm> vms = vApp.getChildren().getVms();
vm = Iterables.getOnlyElement(vms);
- vmURI = vm.getHref();
+ vmUrn = vm.getId();
assertFalse(vms.isEmpty(), "The VApp must have a Vm");
}
- protected void getGuestCustomizationSection(final Function<URI, GuestCustomizationSection> getGuestCustomizationSection) {
+ protected void getGuestCustomizationSection(final Function<String, GuestCustomizationSection> getGuestCustomizationSection) {
// Get URI for child VM
- URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
+ String vmUrn = Iterables.getOnlyElement(vApp.getChildren().getVms()).getId();
// The method under test
try {
- GuestCustomizationSection section = getGuestCustomizationSection.apply(vmURI);
+ GuestCustomizationSection section = getGuestCustomizationSection.apply(vmUrn);
// Check the retrieved object is well formed
checkGuestCustomizationSection(section);
@@ -175,13 +174,13 @@
}
}
- protected void getNetworkConnectionSection(final Function<URI, NetworkConnectionSection> getNetworkConnectionSection) {
+ protected void getNetworkConnectionSection(final Function<String, NetworkConnectionSection> getNetworkConnectionSection) {
// Get URI for child VM
- URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
+ String vmUrn = Iterables.getOnlyElement(vApp.getChildren().getVms()).getId();
// The method under test
try {
- NetworkConnectionSection section = getNetworkConnectionSection.apply(vmURI);
+ NetworkConnectionSection section = getNetworkConnectionSection.apply(vmUrn);
// Check the retrieved object is well formed
checkNetworkConnectionSection(section);
@@ -190,18 +189,18 @@
}
}
- @AfterClass(alwaysRun = true, description = "Cleans up the environment by deleting created VApps")
+ @AfterClass(alwaysRun = true, description = "Cleans up the environment by deleting addd VApps")
protected void cleanUpEnvironment() {
- vdc = vdcApi.getVdc(vdcURI); // Refresh
+ vdc = vdcApi.get(vdcUrn); // Refresh
// Find references in the Vdc with the VApp type and in the list of instantiated VApp names
Iterable<Reference> vApps = Iterables.filter(vdc.getResourceEntities(),
Predicates.and(ReferencePredicates.<Reference> typeEquals(VCloudDirectorMediaType.VAPP), ReferencePredicates.<Reference> nameIn(vAppNames)));
- // If we found any references, delete the VApp they point to
+ // If we found any references, remove the VApp they point to
if (!Iterables.isEmpty(vApps)) {
for (Reference ref : vApps) {
- cleanUpVApp(ref.getHref()); // NOTE may fail, but should continue deleting
+ cleanUpVApp(context.getApi().getVAppApi().get(ref.getHref())); // NOTE may fail, but should continue deleting
}
} else {
logger.warn("No VApps in list found in Vdc %s (%s)", vdc.getName(), Iterables.toString(vAppNames));
@@ -249,14 +248,14 @@
/**
* Power on a {@link VApp}.
*/
- protected VApp powerOnVApp(final URI testVAppURI) {
- VApp test = vAppApi.getVApp(testVAppURI);
+ protected VApp powerOnVApp(String vAppUrn) {
+ VApp test = vAppApi.get(vAppUrn);
Status status = test.getStatus();
if (status != Status.POWERED_ON) {
- Task powerOn = vAppApi.powerOn(vm.getHref());
+ Task powerOn = vAppApi.powerOn(vAppUrn);
assertTaskSucceedsLong(powerOn);
}
- test = vAppApi.getVApp(testVAppURI);
+ test = vAppApi.get(vAppUrn);
assertStatus(VAPP, test, Status.POWERED_ON);
return test;
}
@@ -264,14 +263,14 @@
/**
* Power on a {@link Vm}.
*/
- protected Vm powerOnVm(final URI testVmURI) {
- Vm test = vmApi.getVm(testVmURI);
+ protected Vm powerOnVm(String vmUrn) {
+ Vm test = vmApi.get(vmUrn);
Status status = test.getStatus();
if (status != Status.POWERED_ON) {
- Task powerOn = vmApi.powerOn(vm.getHref());
+ Task powerOn = vmApi.powerOn(vmUrn);
assertTaskSucceedsLong(powerOn);
}
- test = vmApi.getVm(testVmURI);
+ test = vmApi.get(vmUrn);
assertStatus(VM, test, Status.POWERED_ON);
return test;
}
@@ -279,14 +278,14 @@
/**
* Power off a {@link VApp}.
*/
- protected VApp powerOffVApp(final URI testVAppURI) {
- VApp test = vAppApi.getVApp(testVAppURI);
+ protected VApp powerOffVApp(String vAppUrn) {
+ VApp test = vAppApi.get(vAppUrn);
Status status = test.getStatus();
if (status != Status.POWERED_OFF) {
- Task powerOff = vAppApi.powerOff(vm.getHref());
+ Task powerOff = vAppApi.powerOff(vAppUrn);
assertTaskSucceedsLong(powerOff);
}
- test = vAppApi.getVApp(testVAppURI);
+ test = vAppApi.get(vAppUrn);
assertStatus(VAPP, test, Status.POWERED_OFF);
return test;
}
@@ -294,15 +293,15 @@
/**
* Power off a {@link Vm}.
*/
- protected Vm powerOffVm(final URI testVmURI) {
- Vm test = vmApi.getVm(testVmURI);
+ protected Vm powerOffVm(String vmUrn) {
+ Vm test = vmApi.get(vmUrn);
Status status = test.getStatus();
if (status != Status.POWERED_OFF || test.isDeployed()) {
UndeployVAppParams undeployParams = UndeployVAppParams.builder().build();
- Task shutdownVapp = vAppApi.undeploy(test.getHref(), undeployParams);
+ Task shutdownVapp = vAppApi.undeploy(vmUrn, undeployParams);
assertTaskSucceedsLong(shutdownVapp);
}
- test = vmApi.getVm(testVmURI);
+ test = vmApi.get(vmUrn);
assertStatus(VM, test, Status.POWERED_OFF);
return test;
}
@@ -310,14 +309,14 @@
/**
* Suspend a {@link VApp}.
*/
- protected VApp suspendVApp(final URI testVAppURI) {
- VApp test = vAppApi.getVApp(testVAppURI);
+ protected VApp suspendVApp(String vAppUrn) {
+ VApp test = vAppApi.get(vAppUrn);
Status status = test.getStatus();
if (status != Status.SUSPENDED) {
- Task suspend = vAppApi.suspend(vm.getHref());
+ Task suspend = vAppApi.suspend(vAppUrn);
assertTaskSucceedsLong(suspend);
}
- test = vAppApi.getVApp(testVAppURI);
+ test = vAppApi.get(vAppUrn);
assertStatus(VAPP, test, Status.SUSPENDED);
return test;
}
@@ -325,14 +324,14 @@
/**
* Suspend a {@link Vm}.
*/
- protected Vm suspendVm(final URI testVmURI) {
- Vm test = vmApi.getVm(testVmURI);
+ protected Vm suspendVm(String vmUrn) {
+ Vm test = vmApi.get(vmUrn);
Status status = test.getStatus();
if (status != Status.SUSPENDED) {
- Task suspend = vmApi.suspend(vm.getHref());
+ Task suspend = vmApi.suspend(vmUrn);
assertTaskSucceedsLong(suspend);
}
- test = vmApi.getVm(testVmURI);
+ test = vmApi.get(vmUrn);
assertStatus(VM, test, Status.SUSPENDED);
return test;
}
@@ -340,16 +339,16 @@
/**
* Check the {@link VApp}s current status.
*/
- protected void assertVAppStatus(final URI testVAppURI, final Status status) {
- VApp testVApp = vAppApi.getVApp(testVAppURI);
+ protected void assertVAppStatus(final String vAppUrn, final Status status) {
+ VApp testVApp = vAppApi.get(vAppUrn);
assertStatus(VAPP, testVApp, status);
}
/**
* Check the {@link Vm}s current status.
*/
- protected void assertVmStatus(final URI testVmURI, final Status status) {
- Vm testVm = vmApi.getVm(testVmURI);
+ protected void assertVmStatus(String vmUrn, final Status status) {
+ Vm testVm = vmApi.get(vmUrn);
assertStatus(VM, testVm, status);
}
@@ -377,7 +376,7 @@
}
protected VAppNetworkConfiguration getVAppNetworkConfig(VApp vApp) {
- Set<VAppNetworkConfiguration> vAppNetworkConfigs = vAppApi.getNetworkConfigSection(vApp.getHref()).getNetworkConfigs();
+ Set<VAppNetworkConfiguration> vAppNetworkConfigs = vAppApi.getNetworkConfigSection(vApp.getId()).getNetworkConfigs();
return Iterables.tryFind(vAppNetworkConfigs, Predicates.notNull()).orNull();
}
@@ -390,11 +389,11 @@
}
protected Set<NetworkConnection> listNetworkConnections(Vm vm) {
- return vmApi.getNetworkConnectionSection(vm.getHref()).getNetworkConnections();
+ return vmApi.getNetworkConnectionSection(vm.getId()).getNetworkConnections();
}
protected Set<VAppNetworkConfiguration> listVappNetworkConfigurations(VApp vApp) {
- Set<VAppNetworkConfiguration> vAppNetworkConfigs = vAppApi.getNetworkConfigSection(vApp.getHref()).getNetworkConfigs();
+ Set<VAppNetworkConfiguration> vAppNetworkConfigs = vAppApi.getNetworkConfigSection(vApp.getId()).getNetworkConfigs();
return vAppNetworkConfigs;
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java
index b7d66ea..427db4a 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java
@@ -79,15 +79,15 @@
sessionWithToken = SessionWithToken.builder().session(session).token(response.getFirstHeaderOrNull("x-vcloud-authorization")).build();
assertEquals(sessionWithToken.getSession().getUser(), user);
- assertEquals(sessionWithToken.getSession().getOrg(), org);
+ assertEquals(sessionWithToken.getSession().get(), org);
assertTrue(sessionWithToken.getSession().getLinks().size() > 0);
assertNotNull(sessionWithToken.getToken());
OrgList orgList = parser.fromXML(Strings2.toString(response.getPayload()), OrgList.class);
- assertTrue(orgList.getOrgs().size() > 0, "must have orgs");
+ assertTrue(orgList.size() > 0, "must have orgs");
- context.getApi().getOrgApi().getOrg(Iterables.getLast(orgList.getOrgs()).getHref());
+ context.getApi().getOrgApi().get(Iterables.getLast(orgList).getHref());
}
@Test(description = "GET /schema/{schemaFileName}", dependsOnMethods = { "testPostLogin", "testGetLogin" })
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiExpectTest.java
index 343746d..7b5e238 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiExpectTest.java
@@ -31,6 +31,8 @@
@Test(groups = "unit", testName = "VCloudDirectorApi")
public class VCloudDirectorApiExpectTest extends VCloudDirectorAdminApiExpectTest {
+ //TODO: this inheritance is all wrong!! the base client shouldn't inherit from the admin client tests!!
+
public void testRestClientModuleWorksProperly() throws Exception {
VCloudDirectorApi apiWhenSessionsExist = requestSendsResponse(loginRequest, sessionResponse);
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiLiveTest.java
new file mode 100644
index 0000000..b2e86fd
--- /dev/null
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiLiveTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.vcloud.director.v1_5;
+
+import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkEntityType;
+
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.domain.org.Org;
+import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
+import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+/**
+ * Tests live behavior of {@link VCloudDirectorApi}.
+ *
+ * @author Adrian Cole
+ */
+@Test(groups = { "live", "user" }, singleThreaded = true, testName = "VCloudDirectorApiLiveTest")
+public class VCloudDirectorApiLiveTest extends BaseVCloudDirectorApiLiveTest {
+
+ @Test(description = "GET /entity/{id}")
+ public void testResolveEntity() {
+ for (Reference orgRef : context.getApi().getOrgApi().list()) {
+ Org org = context.getApi().getOrgApi().get(orgRef.getHref());
+ Entity entity = context.getApi().resolveEntity(org.getId());
+ checkEntityType(entity);
+ }
+ }
+
+ @Override
+ @BeforeClass(alwaysRun = true)
+ public void setupRequiredApis() {
+ }
+}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorLiveTestConstants.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorLiveTestConstants.java
index c1ee58d..f6f2ec0 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorLiveTestConstants.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorLiveTestConstants.java
@@ -33,7 +33,7 @@
/* Error codes from 100 to 199 reflect parsing and other errors in domain object fields and attributes. */
- public static final String REF_REQ_LIVE = "ERR-101: %s reference required to perform live tests";
+ public static final String URN_REQ_LIVE = "ERR-101: %s urn required to perform live tests";
public static final String OBJ_REQ_LIVE = "ERR-102: %s instance required to perform live tests";
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java
index 6d4bcb3..fa1e6d1 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java
@@ -165,8 +165,6 @@
assertNotNull(reference.getHref(), String.format(NOT_NULL_OBJ_FIELD_FMT, "Href", "ReferenceType"));
// Check optional fields
- String id = reference.getId();
- if (id != null) checkId(id);
String type = reference.getType();
if (type != null) checkType(type, validTypes);
// NOTE name cannot be checked
@@ -257,7 +255,7 @@
if (error != null) checkError(error);
Reference user = task.getUser();
if (user != null) checkReferenceType(user);
- Reference org = task.getOrg();
+ Reference org = task.get();
if (org != null) checkReferenceType(org);
Integer progress = task.getProgress();
if (progress != null) checkProgress(progress);
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
index d5a9718..365a90c 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
@@ -18,6 +18,13 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_CATALOG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG_ITEM;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_VALUE;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
import static org.testng.Assert.assertEquals;
import java.net.URI;
@@ -25,7 +32,6 @@
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorApiExpectTest;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Catalog;
import org.jclouds.vcloud.director.v1_5.domain.CatalogItem;
import org.jclouds.vcloud.director.v1_5.domain.Link;
@@ -43,379 +49,406 @@
/**
* Test the {@link CatalogApi} by observing its side effects.
*
- * @author grkvlt@apache.org
+ * @author grkvlt@apache.org, Adrian Cole
*/
@Test(groups = { "unit", "user" }, singleThreaded = true, testName = "CatalogApiExpectTest")
public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
+ static String catalog = "7212e451-76e1-4631-b2de-ba1dfd8080e4";
+ static String catalogUrn = "urn:vcloud:catalog:" + catalog;
+ static URI catalogHref = URI.create(endpoint + "/catalog/" + catalog);
+
+ HttpRequest get = HttpRequest.builder()
+ .method("GET")
+ .endpoint(catalogHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+ HttpResponse getResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/catalog.xml", CATALOG + ";version=1.5"))
+ .build();
+
@Test
- public void testGetCatalog() {
- HttpRequest catalogRequest = HttpRequest.builder()
- .method("GET")
- .endpoint(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
- .build();
-
- HttpResponse catalogResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/catalog.xml", VCloudDirectorMediaType.CATALOG + ";version=1.5"))
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogRequest, catalogResponse);
-
- Catalog expected = catalog();
-
- URI catalogURI = URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4");
- assertEquals(api.getCatalogApi().getCatalog(catalogURI), expected);
+ public void testGetCatalogHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
+ assertEquals(api.getCatalogApi().get(catalogHref), catalog());
}
-
+
+ HttpRequest resolveCatalog = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + catalogUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String catalogEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", catalogUrn)
+ .a("id", catalogUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + catalogUrn)
+ .e("Link").a("rel", "alternate").a("type", CATALOG).a("href", catalogHref.toString()).up()
+ // TODO: remove this when VCloudDirectorApiExpectTest no longer inherits from VCloudDirectorAdminApiExpectTest
+ .e("Link").a("rel", "alternate").a("type", ADMIN_CATALOG).a("href", catalogHref.toString()).up());
+
+ HttpResponse resolveCatalogResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(catalogEntity, ENTITY + ";version=1.5"))
+ .build();
+
@Test
- public void testAddCatalogItem() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testGetCatalogUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog, resolveCatalogResponse, get, getResponse);
+ assertEquals(api.getCatalogApi().get(catalogUrn), catalog());
+ }
+
+ HttpRequest add = HttpRequest.builder()
.method("POST")
- .endpoint(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/catalogItems")
+ .endpoint(catalogHref + "/catalogItems")
.addHeader("Accept", "application/vnd.vmware.vcloud.catalogItem+xml")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
- .payload(payloadFromResourceWithContentType("/catalog/newCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM))
+ .payload(payloadFromResourceWithContentType("/catalog/newCatalogItem.xml", CATALOG_ITEM))
.build();
- HttpResponse catalogItemResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/createdCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM + ";version=1.5"))
+ HttpResponse addResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/adddCatalogItem.xml", CATALOG_ITEM + ";version=1.5"))
.build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogURI = URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4");
-
- CatalogItem newItem = CatalogItem.builder()
+
+ CatalogItem newItem = CatalogItem.builder()
.name("newCatalogItem")
.description("New Catalog Item")
.entity(ubuntuVappTemplateReference())
.build();
- CatalogItem expected = createdCatalogItem();
-
- assertEquals(api.getCatalogApi().addCatalogItem(catalogURI, newItem), expected);
- }
-
@Test
- public void testGetCatalogMetadata() {
- HttpRequest catalogRequest = HttpRequest.builder()
- .method("GET")
- .endpoint(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse catalogResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/catalogMetadata.xml", VCloudDirectorMediaType.METADATA))
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogRequest, catalogResponse);
-
- URI catalogURI = URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4");
-
- Metadata expected = Metadata.builder()
- .type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata"))
- .link(Link.builder()
- .rel("up")
- .type("application/vnd.vmware.vcloud.catalog+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
- .build())
- .entries(ImmutableSet.of(metadataEntry()))
- .build();
-
- assertEquals(api.getCatalogApi().getMetadataApi().getMetadata(catalogURI), expected);
- }
-
- @Test
- public void testGetCatalogMetadataEntry() {
- HttpRequest catalogRequest = HttpRequest.builder()
- .method("GET")
- .endpoint(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata/KEY")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse catalogResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/catalogMetadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE))
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogRequest, catalogResponse);
-
- URI catalogURI = URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4");
-
- MetadataValue expected = metadataValue();
-
- assertEquals(api.getCatalogApi().getMetadataApi().getMetadataValue(catalogURI, "KEY"), expected);
+ public void testAddCatalogItemHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, add, addResponse);
+ assertEquals(api.getCatalogApi().addItem(catalogHref, newItem), adddCatalogItem());
}
@Test
- public void testGetCatalogItem() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testAddCatalogItemUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog, resolveCatalogResponse, add, addResponse);
+ assertEquals(api.getCatalogApi().addItem(catalogUrn, newItem), adddCatalogItem());
+ }
+
+ HttpRequest getMetadata = HttpRequest.builder()
.method("GET")
- .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")
+ .endpoint(catalogHref + "/metadata")
.addHeader("Accept", "*/*")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
- HttpResponse catalogItemResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/catalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM))
+ HttpResponse getMetadataResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/catalogMetadata.xml", METADATA))
.build();
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogItemURI = URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df");
-
- CatalogItem expected = catalogItem();
-
- assertEquals(api.getCatalogApi().getCatalogItem(catalogItemURI), expected);
+ @Test
+ public void testGetCatalogMetadataHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadata, getMetadataResponse);
+ assertEquals(api.getCatalogApi().getMetadataApi(catalogHref).get(), metadata());
}
+ static Metadata metadata() {
+ return Metadata.builder()
+ .type("application/vnd.vmware.vcloud.metadata+xml")
+ .href(URI.create(endpoint + "/catalog/" + catalog + "/metadata"))
+ .link(Link.builder()
+ .rel("up")
+ .type("application/vnd.vmware.vcloud.catalog+xml")
+ .href(catalogHref)
+ .build())
+ .entries(ImmutableSet.of(metadataEntry()))
+ .build();
+ }
+
+ HttpRequest getMetadataValue = HttpRequest.builder()
+ .method("GET")
+ .endpoint(catalogHref + "/metadata/KEY")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+
+ HttpResponse getMetadataValueResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/catalogMetadataValue.xml", METADATA_VALUE))
+ .build();
+
@Test
- public void testUpdateCatalogItem() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testGetCatalogMetadataEntryHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse);
+ assertEquals(api.getCatalogApi().getMetadataApi(catalogHref).getValue("KEY"), metadataValue());
+ }
+
+ static String item = "a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df";
+ static URI itemHref = URI.create(endpoint + "/catalogItem/" + item);
+ static String itemUrn = "urn:vcloud:catalogitem:" + item;
+
+ HttpRequest resolveItem = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + itemUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String itemEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", itemUrn)
+ .a("id", itemUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + itemUrn)
+ .e("Link").a("rel", "alternate").a("type", CATALOG_ITEM).a("href", itemHref.toString()).up());
+
+ HttpResponse resolveItemResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(itemEntity, ENTITY + ";version=1.5"))
+ .build();
+
+ HttpRequest getItem = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/catalogItem/" + item)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+
+ HttpResponse getItemResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/catalogItem.xml", CATALOG_ITEM))
+ .build();
+
+ @Test
+ public void testGetCatalogItemHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getItem, getItemResponse);
+ assertEquals(api.getCatalogApi().getItem(itemHref), catalogItem());
+ }
+
+ @Test
+ public void testGetCatalogItemUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveItem, resolveItemResponse, getItem, getItemResponse);
+ assertEquals(api.getCatalogApi().getItem(itemUrn), catalogItem());
+ }
+
+ HttpRequest editItem = HttpRequest.builder()
.method("PUT")
- .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")
+ .endpoint(endpoint + "/catalogItem/" + item)
.addHeader("Accept", "application/vnd.vmware.vcloud.catalogItem+xml")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
- .payload(payloadFromResourceWithContentType("/catalog/updateCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM))
+ .payload(payloadFromResourceWithContentType("/catalog/editCatalogItem.xml", CATALOG_ITEM))
.build();
- HttpResponse catalogItemResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/updateCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM + ";version=1.5"))
+ HttpResponse editItemResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/editCatalogItem.xml", CATALOG_ITEM + ";version=1.5"))
.build();
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogItemURI = URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df");
- CatalogItem expected = catalogItem();
-
- assertEquals(api.getCatalogApi().updateCatalogItem(catalogItemURI, expected), expected);
+ @Test
+ public void testEditCatalogItemHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, editItem, editItemResponse);
+ assertEquals(api.getCatalogApi().editItem(itemHref, catalogItem()), catalogItem());
}
@Test
- public void testDeleteCatalogItem() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testEditCatalogItemUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveItem, resolveItemResponse, editItem, editItemResponse);
+ assertEquals(api.getCatalogApi().editItem(itemUrn, catalogItem()), catalogItem());
+ }
+
+ HttpRequest removeItem = HttpRequest.builder()
.method("DELETE")
- .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")
+ .endpoint(endpoint + "/catalogItem/" + item)
.addHeader("Accept", "*/*")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
- HttpResponse catalogItemResponse = HttpResponse.builder()
+ HttpResponse removeItemResponse = HttpResponse.builder()
.statusCode(200)
.build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogItemURI = URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df");
-
- api.getCatalogApi().deleteCatalogItem(catalogItemURI);
+
+ @Test
+ public void testRemoveCatalogItemHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, removeItem, removeItemResponse);
+ api.getCatalogApi().removeItem(itemHref);
}
@Test
- public void testGetCatalogItemMetadata() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testRemoveCatalogItemUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveItem, resolveItemResponse, removeItem, removeItemResponse);
+ api.getCatalogApi().removeItem(itemUrn);
+ }
+
+ HttpRequest getItemMetadata = HttpRequest.builder()
.method("GET")
- .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")
+ .endpoint(endpoint + "/catalogItem/" + item + "/metadata")
.addHeader("Accept", "*/*")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
- HttpResponse catalogItemResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/catalogItemMetadata.xml", VCloudDirectorMediaType.METADATA))
+ HttpResponse getItemMetadataResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/catalogItemMetadata.xml", METADATA))
.build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogItemURI = URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df");
- Metadata expected = Metadata.builder()
+ Metadata expected = Metadata.builder()
.type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata"))
+ .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata"))
.link(Link.builder()
.rel("up")
.type("application/vnd.vmware.vcloud.catalogItem+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.entries(ImmutableSet.of(itemMetadataEntry()))
.build();
-
- assertEquals(api.getCatalogApi().getMetadataApi().getMetadata(catalogItemURI), expected);
- }
@Test
- public void testMergeCatalogItemMetadata() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testGetCatalogItemMetadataHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getItemMetadata, getItemMetadataResponse);
+ assertEquals(api.getCatalogApi().getMetadataApi(itemHref).get(), expected);
+ }
+
+ HttpRequest mergeItemMetadata = HttpRequest.builder()
.method("POST")
- .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")
+ .endpoint(endpoint + "/catalogItem/" + item + "/metadata")
.addHeader("Accept", "application/vnd.vmware.vcloud.task+xml")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
- .payload(payloadFromResourceWithContentType("/catalog/mergeCatalogItemMetadata.xml", VCloudDirectorMediaType.METADATA))
+ .payload(payloadFromResourceWithContentType("/catalog/mergeCatalogItemMetadata.xml", METADATA))
.build();
- HttpResponse catalogItemResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/mergeMetadataTask.xml", VCloudDirectorMediaType.TASK + ";version=1.5"))
+ HttpResponse mergeItemMetadataResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/mergeMetadataTask.xml", TASK + ";version=1.5"))
.build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogItemURI = URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df");
-
- Metadata metadata = Metadata.builder().entry(MetadataEntry.builder().entry("KEY", "VALUE").build()).build();
- Task expected = mergeMetadataTask();
-
- assertEquals(api.getCatalogApi().getCatalogItemMetadataApi().mergeMetadata(catalogItemURI, metadata), expected);
- }
-
@Test
- public void testGetCatalogItemMetadataEntry() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testMergeCatalogItemMetadataHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, mergeItemMetadata, mergeItemMetadataResponse);
+ // TODO: horrendous way of representing Map<String,String>
+ Metadata metadata = Metadata.builder().entry(MetadataEntry.builder().entry("KEY", "VALUE").build()).build();
+ assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).merge(metadata), mergeMetadataTask());
+ }
+
+ HttpRequest getItemMetadataValue = HttpRequest.builder()
.method("GET")
- .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")
+ .endpoint(endpoint + "/catalogItem/" + item + "/metadata/KEY")
.addHeader("Accept", "*/*")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse catalogItemResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/catalogItemMetadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE + ";version=1.5"))
+
+ HttpResponse getItemMetadataValueResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/catalogItemMetadataValue.xml", METADATA_VALUE + ";version=1.5"))
.build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogItemURI = URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df");
-
- MetadataValue expected = itemMetadataValue();
-
- assertEquals(api.getCatalogApi().getMetadataApi().getMetadataValue(catalogItemURI, "KEY"), expected);
- }
-
+
@Test
- public void testSetCatalogItemMetadataEntry() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testGetCatalogItemMetadataEntryHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getItemMetadataValue, getItemMetadataValueResponse);
+ assertEquals(api.getCatalogApi().getMetadataApi(itemHref).getValue("KEY"), itemMetadataValue());
+ }
+
+ HttpRequest putItemMetadata = HttpRequest.builder()
.method("PUT")
- .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")
+ .endpoint(endpoint + "/catalogItem/" + item + "/metadata/KEY")
.addHeader("Accept", "application/vnd.vmware.vcloud.task+xml")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
- .payload(payloadFromResourceWithContentType("/catalog/setCatalogItemMetadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE))
+ .payload(payloadFromResourceWithContentType("/catalog/setCatalogItemMetadataValue.xml", METADATA_VALUE))
.build();
- HttpResponse catalogItemResponse = HttpResponse.builder()
+ HttpResponse putItemMetadataResponse = HttpResponse.builder()
.statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/setMetadataValueTask.xml", VCloudDirectorMediaType.TASK + ";version=1.5"))
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogItemURI = URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df");
-
- MetadataValue value = MetadataValue.builder().value("KITTENS").build();
-
- Task expected = setMetadataValueTask();
-
- assertEquals(api.getCatalogApi().getCatalogItemMetadataApi().setMetadata(catalogItemURI, "KEY", value), expected);
- }
-
+ .payload(payloadFromResourceWithContentType("/catalog/setMetadataValueTask.xml", TASK + ";version=1.5"))
+ .build();
+
@Test
- public void testDeleteCatalogItemMetadataEntry() {
- HttpRequest catalogItemRequest = HttpRequest.builder()
+ public void testSetCatalogItemMetadataEntryHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, putItemMetadata, putItemMetadataResponse);
+ assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).putEntry("KEY", MetadataValue.builder().value("KITTENS").build()), setMetadataValueTask());
+ }
+
+ HttpRequest removeItemMetadataEntry = HttpRequest.builder()
.method("DELETE")
- .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")
+ .endpoint(endpoint + "/catalogItem/" + item + "/metadata/KEY")
.addHeader("Accept", "application/vnd.vmware.vcloud.task+xml")
.addHeader("x-vcloud-authorization", token)
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
- HttpResponse catalogItemResponse = HttpResponse.builder()
+ HttpResponse removeItemMetadataEntryResponse = HttpResponse.builder()
.statusCode(200)
- .payload(payloadFromResourceWithContentType("/catalog/deleteMetadataEntryTask.xml", VCloudDirectorMediaType.TASK))
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse);
-
- URI catalogItemURI = URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df");
-
- Task expected = deleteMetadataEntryTask();
-
- assertEquals(api.getCatalogApi().getCatalogItemMetadataApi().deleteMetadataEntry(catalogItemURI, "KEY"), expected);
+ .payload(payloadFromResourceWithContentType("/catalog/removeMetadataEntryTask.xml", TASK))
+ .build();
+
+ @Test
+ public void testRemoveCatalogItemMetadataEntryHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, removeItemMetadataEntry, removeItemMetadataEntryResponse);
+ assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).removeEntry("KEY"), removeEntryTask());
}
-
+
public static final Catalog catalog() {
return Catalog.builder()
.name("QunyingTestCatalog")
.type("application/vnd.vmware.vcloud.catalog+xml")
- .id("urn:vcloud:catalog:7212e451-76e1-4631-b2de-ba1dfd8080e4")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
+ .id(catalogUrn)
+ .href(catalogHref)
.link(Link.builder()
.rel("up")
.type("application/vnd.vmware.vcloud.org+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .href(URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
.build())
.link(Link.builder()
.rel("add")
.type("application/vnd.vmware.vcloud.catalogItem+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/catalogItems"))
+ .href(URI.create(endpoint + "/catalog/" + catalog + "/catalogItems"))
.build())
.link(Link.builder()
.rel("down")
.type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata"))
+ .href(URI.create(endpoint + "/catalog/" + catalog + "/metadata"))
.build())
.item(Reference.builder()
.type("application/vnd.vmware.vcloud.catalogItem+xml")
.name("ubuntu10")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.item(Reference.builder()
.type("application/vnd.vmware.vcloud.catalogItem+xml")
.name("imageTesting")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a9e0afdb-a42b-4688-8409-2ac68cf22939"))
+ .href(URI.create(endpoint + "/catalogItem/a9e0afdb-a42b-4688-8409-2ac68cf22939"))
.build())
.description("Testing")
.isPublished(false)
.build();
}
- public static CatalogItem createdCatalogItem() {
+ public static CatalogItem adddCatalogItem() {
return CatalogItem.builder()
.name("newCatalogItem")
- .id("urn:vcloud:catalogitem:a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")
+ .id("urn:vcloud:catalogitem:" + item)
.type("application/vnd.vmware.vcloud.catalogItem+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.link(Link.builder()
.rel("up")
.type("application/vnd.vmware.vcloud.catalog+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
+ .href(catalogHref)
.build())
.link(Link.builder()
.rel("down")
.type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata"))
+ .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata"))
.build())
.link(Link.builder()
.rel("edit")
.type("application/vnd.vmware.vcloud.catalogItem+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.link(Link.builder()
.rel("remove")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.description("New Catalog Item")
.entity(ubuntuVappTemplateReference())
@@ -426,17 +459,17 @@
return Reference.builder()
.type("application/vnd.vmware.vcloud.vAppTemplate+xml")
.name("ubuntu10")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9"))
+ .href(URI.create(endpoint + "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9"))
.build();
}
public static MetadataEntry metadataEntry() {
return MetadataEntry.builder()
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata/KEY"))
+ .href(URI.create(endpoint + "/catalog/" + catalog + "/metadata/KEY"))
.link(Link.builder()
.rel("up")
.type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata"))
+ .href(URI.create(endpoint + "/catalog/" + catalog + "/metadata"))
.build())
.entry("KEY", "VALUE")
.build();
@@ -444,11 +477,11 @@
public static MetadataEntry itemMetadataEntry() {
return MetadataEntry.builder()
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY"))
+ .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata/KEY"))
.link(Link.builder()
.rel("up")
.type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata"))
+ .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata"))
.build())
.entry("KEY", "VALUE")
.build();
@@ -456,11 +489,11 @@
public static MetadataValue metadataValue() {
return MetadataValue.builder()
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata/KEY"))
+ .href(URI.create(endpoint + "/catalog/" + catalog + "/metadata/KEY"))
.link(Link.builder()
.rel("up")
.type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata"))
+ .href(URI.create(endpoint + "/catalog/" + catalog + "/metadata"))
.build())
.value("VALUE")
.build();
@@ -468,11 +501,11 @@
public static MetadataValue itemMetadataValue() {
return MetadataValue.builder()
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY"))
+ .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata/KEY"))
.link(Link.builder()
.rel("up")
.type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata"))
+ .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata"))
.build())
.value("VALUE")
.build();
@@ -481,27 +514,27 @@
public static CatalogItem catalogItem() {
return CatalogItem.builder()
.name("ubuntu10")
- .id("urn:vcloud:catalogitem:a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")
+ .id("urn:vcloud:catalogitem:" + item)
.type("application/vnd.vmware.vcloud.catalogItem+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.link(Link.builder()
.rel("up")
.type("application/vnd.vmware.vcloud.catalog+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
+ .href(catalogHref)
.build())
.link(Link.builder()
.rel("down")
.type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata"))
+ .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata"))
.build())
.link(Link.builder()
.rel("edit")
.type("application/vnd.vmware.vcloud.catalogItem+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.link(Link.builder()
.rel("remove")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.description("For testing")
.entity(ubuntuVappTemplateReference())
@@ -513,30 +546,30 @@
.name("task")
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
.type("application/vnd.vmware.vcloud.task+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c"))
+ .href(URI.create(endpoint + "/task/c6dca927-eab4-41fa-ad6a-3ac58602541c"))
.status("running")
.startTime(dateService.iso8601DateParse("2012-02-13T06:35:08.011-05:00"))
.expiryTime(dateService.iso8601DateParse("2012-05-13T06:35:08.011-04:00"))
.operationName("metadataUpdate")
- .operation("Updating metadata for Catalog Item (a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df)")
+ .operation("Updating metadata for Catalog Item (" + item + ")")
.link(Link.builder()
.rel("task:cancel")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel"))
+ .href(URI.create(endpoint + "/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel"))
.build())
.owner(Reference.builder()
.type("application/vnd.vmware.vcloud.catalogItem+xml")
.name("")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.user(Reference.builder()
.type("application/vnd.vmware.admin.user+xml")
.name("adk@cloudsoftcorp.com")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
+ .href(URI.create(endpoint + "/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
.build())
.org(Reference.builder()
.type("application/vnd.vmware.vcloud.org+xml")
.name("JClouds")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .href(URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
.build())
.build();
}
@@ -546,63 +579,63 @@
.name("task")
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
.type("application/vnd.vmware.vcloud.task+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c"))
+ .href(URI.create(endpoint + "/task/c6dca927-eab4-41fa-ad6a-3ac58602541c"))
.status("running")
.startTime(dateService.iso8601DateParse("2012-02-13T06:35:08.011-05:00"))
.expiryTime(dateService.iso8601DateParse("2012-05-13T06:35:08.011-04:00"))
.operationName("metadataSet")
- .operation("Setting metadata for Catalog Item (a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df)")
+ .operation("Setting metadata for Catalog Item (" + item + ")")
.link(Link.builder()
.rel("task:cancel")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel"))
+ .href(URI.create(endpoint + "/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel"))
.build())
.owner(Reference.builder()
.type("application/vnd.vmware.vcloud.catalogItem+xml")
.name("")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.user(Reference.builder()
.type("application/vnd.vmware.admin.user+xml")
.name("adk@cloudsoftcorp.com")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
+ .href(URI.create(endpoint + "/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
.build())
.org(Reference.builder()
.type("application/vnd.vmware.vcloud.org+xml")
.name("JClouds")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .href(URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
.build())
.build();
}
- public static Task deleteMetadataEntryTask() {
+ public static Task removeEntryTask() {
return Task.builder()
.name("task")
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
.type("application/vnd.vmware.vcloud.task+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c"))
+ .href(URI.create(endpoint + "/task/c6dca927-eab4-41fa-ad6a-3ac58602541c"))
.status("running")
.startTime(dateService.iso8601DateParse("2012-02-13T06:35:08.011-05:00"))
.expiryTime(dateService.iso8601DateParse("2012-05-13T06:35:08.011-04:00"))
.operationName("metadataDelete")
- .operation("Deleting metadata for Catalog Item (a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df)")
+ .operation("Deleting metadata for Catalog Item (" + item + ")")
.link(Link.builder()
.rel("task:cancel")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel"))
+ .href(URI.create(endpoint + "/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel"))
.build())
.owner(Reference.builder()
.type("application/vnd.vmware.vcloud.catalogItem+xml")
.name("")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"))
+ .href(itemHref)
.build())
.user(Reference.builder()
.type("application/vnd.vmware.admin.user+xml")
.name("adk@cloudsoftcorp.com")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
+ .href(URI.create(endpoint + "/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
.build())
.org(Reference.builder()
.type("application/vnd.vmware.vcloud.org+xml")
.name("JClouds")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .href(URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
.build())
.build();
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java
index cae8017..50075aa 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java
@@ -1,5 +1,5 @@
/*
- * Licensed to jclouds, Inc. (jclouds) under one or more
+x * Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
@@ -21,8 +21,6 @@
import static com.google.common.base.Predicates.and;
import static com.google.common.collect.Iterables.find;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CORRECT_VALUE_OBJECT_FMT;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkCatalogItem;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
@@ -48,6 +46,7 @@
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
+import org.jclouds.vcloud.director.v1_5.domain.org.Org;
import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogApi;
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
import org.testng.annotations.AfterClass;
@@ -76,57 +75,54 @@
private Media media;
private CatalogItem catalogItem;
- private Reference catalogRef;
-
@Override
protected void setupRequiredApis() {
// TODO why do I need a guard clause here?
- if (adminCatalog != null) return;
+ if (adminCatalog != null)
+ return;
catalogApi = context.getApi().getCatalogApi();
- Reference orgRef = Iterables.getFirst(context.getApi().getOrgApi().getOrgList().getOrgs(), null).toAdminReference(endpoint);
-
+ Org org = context.getApi().getOrgApi().get(Iterables.get(context.getApi().getOrgApi().list(), 0).getHref());
+
if (adminContext != null) {
- AdminCatalog newCatalog = AdminCatalog.builder()
- .name(name("Test Catalog "))
- .description("created by CatalogApiLiveTest")
- .build();
-
+ AdminCatalog newCatalog = AdminCatalog.builder().name(name("Test Catalog "))
+ .description("created by CatalogApiLiveTest").build();
+
AdminCatalogApi adminCatalogApi = adminContext.getApi().getCatalogApi();
- adminCatalog = adminCatalogApi.createCatalog(orgRef.getHref(), newCatalog);
- catalogRef = find(adminCatalog.getLinks(), and(relEquals("alternate"), typeEquals(VCloudDirectorMediaType.CATALOG)));
-
- Metadata newMetadata = Metadata.builder()
- .entry(MetadataEntry.builder().entry("KEY", "MARMALADE").build())
- .build();
-
- Task mergeCatalogMetadata = adminCatalogApi.getMetadataApi().mergeMetadata(adminCatalog.getHref(), newMetadata);
+ adminCatalog = adminCatalogApi.addCatalogToOrg(newCatalog, org.getId());
+ catalogUrn = catalogApi.get(
+ find(adminCatalog.getLinks(),
+ and(relEquals("alternate"), typeEquals(VCloudDirectorMediaType.CATALOG))).getHref()).getId();
+
+ Metadata newMetadata = Metadata.builder().entry(MetadataEntry.builder().entry("KEY", "MARMALADE").build())
+ .build();
+
+ Task mergeCatalogMetadata = adminCatalogApi.getMetadataApi(adminCatalog.getId()).merge(newMetadata);
checkTask(mergeCatalogMetadata);
- assertTrue(retryTaskSuccess.apply(mergeCatalogMetadata), String.format(TASK_COMPLETE_TIMELY, "setupRequiredApis"));
- } else {
- catalogRef = Reference.builder().href(catalogURI).build();
+ assertTrue(retryTaskSuccess.apply(mergeCatalogMetadata),
+ String.format(TASK_COMPLETE_TIMELY, "setupRequiredApis"));
}
}
-
+
@AfterClass(alwaysRun = true)
public void tearDown() {
if (catalogItem != null) {
try {
- catalogApi.deleteCatalogItem(catalogItem.getHref());
+ catalogApi.removeItem(catalogItem.getId());
} catch (Exception e) {
logger.warn(e, "Error when deleting catalog item '%s'", catalogItem.getName());
}
}
if (media != null) {
try {
- Task delete = context.getApi().getMediaApi().deleteMedia(media.getHref());
- taskDoneEventually(delete);
+ Task remove = context.getApi().getMediaApi().remove(media.getId());
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn(e, "Error when deleting media '%s'", media.getName());
}
}
if (adminContext != null && adminCatalog != null) {
try {
- adminContext.getApi().getCatalogApi().deleteCatalog(adminCatalog.getHref());
+ adminContext.getApi().getCatalogApi().remove(adminCatalog.getId());
} catch (Exception e) {
logger.warn(e, "Error when deleting catalog '%s'", adminCatalog.getName());
}
@@ -136,125 +132,116 @@
@Test(description = "GET /catalog/{id}")
public void testGetCatalog() {
- Catalog catalog = catalogApi.getCatalog(catalogRef.getHref());
+ Catalog catalog = lazyGetCatalog();
assertNotNull(catalog);
// Double check it's pointing at the correct catalog
- assertEquals(catalog.getHref(), catalogRef.getHref());
+ assertEquals(catalog.getId(), catalogUrn);
}
@Test(description = "GET /catalogItem/{id}", dependsOnMethods = "testAddCatalogItem")
public void testGetCatalogItem() {
- CatalogItem catalogItem = catalogApi.getCatalogItem(this.catalogItem.getHref());
+ CatalogItem catalogItem = catalogApi.getItem(this.catalogItem.getId());
checkCatalogItem(catalogItem);
assertEquals(catalogItem.getEntity().getHref(), this.catalogItem.getEntity().getHref());
}
@Test(description = "POST /catalog/{id}/catalogItems")
public void testAddCatalogItem() {
- assertNotNull(vdcURI, String.format(REF_REQ_LIVE, VDC));
-
byte[] iso = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
- Vdc vdc = context.getApi().getVdcApi().getVdc(vdcURI);
- assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
+ Vdc vdc = lazyGetVdc();
Link addMedia = find(vdc.getLinks(), and(relEquals("add"), typeEquals(VCloudDirectorMediaType.MEDIA)));
-
- Media sourceMedia = Media.builder()
- .type(VCloudDirectorMediaType.MEDIA)
- .name("Test media 1")
- .size(iso.length)
- .imageType(Media.ImageType.ISO)
- .description("Test media generated by testCreateMedia()")
- .build();
- media = context.getApi().getMediaApi().createMedia(addMedia.getHref(), sourceMedia);
+
+ Media sourceMedia = Media.builder().type(VCloudDirectorMediaType.MEDIA).name("Test media 1").size(iso.length)
+ .imageType(Media.ImageType.ISO).description("Test media generated by testAddMedia()").build();
+ media = context.getApi().getMediaApi().add(addMedia.getHref(), sourceMedia);
Checks.checkMediaFor(VCloudDirectorMediaType.MEDIA, media);
- CatalogItem editedCatalogItem = CatalogItem.builder()
- .name("newitem")
- .description("New Item")
- .type(VCloudDirectorMediaType.CATALOG_ITEM)
- .entity(Reference.builder().href(media.getHref()).build())
- .build();
- catalogItem = catalogApi.addCatalogItem(catalogRef.getHref(), editedCatalogItem);
+ CatalogItem editedCatalogItem = CatalogItem.builder().name("newitem").description("New Item")
+ .type(VCloudDirectorMediaType.CATALOG_ITEM).entity(Reference.builder().href(media.getHref()).build())
+ .build();
+ catalogItem = catalogApi.addItem(catalogUrn, editedCatalogItem);
checkCatalogItem(catalogItem);
assertEquals(catalogItem.getName(), "newitem");
assertEquals(catalogItem.getDescription(), "New Item");
}
@Test(description = "PUT /catalogItem/{id}", dependsOnMethods = "testAddCatalogItem")
- public void testUpdateCatalogItem() {
- CatalogItem updatedCatalogItem = CatalogItem.builder().fromCatalogItem(catalogItem).name("UPDATEDNAME").build();
- catalogItem = catalogApi.updateCatalogItem(catalogItem.getHref(), updatedCatalogItem);
+ public void testEditCatalogItem() {
+ CatalogItem editedCatalogItem = CatalogItem.builder().fromCatalogItem(catalogItem).name("UPDATEDNAME").build();
+ catalogItem = catalogApi.editItem(catalogItem.getId(), editedCatalogItem);
checkCatalogItem(catalogItem);
assertEquals(catalogItem.getName(), "UPDATEDNAME");
}
// Note this runs after all the metadata tests
- @Test(description = "DELETE /catalogItem/{id}", dependsOnMethods = "testDeleteCatalogItemMetadataValue")
- public void testDeleteCatalogItem() {
- catalogApi.deleteCatalogItem(catalogItem.getHref());
- catalogItem = catalogApi.getCatalogItem(catalogItem.getHref());
+ @Test(description = "DELETE /catalogItem/{id}", dependsOnMethods = "testRemoveCatalogItemMetadataValue")
+ public void testRemoveCatalogItem() {
+ catalogApi.removeItem(catalogItem.getId());
+ catalogItem = catalogApi.getItem(catalogItem.getId());
assertNull(catalogItem);
}
@Test(description = "GET /catalog/{id}/metadata")
public void testGetCatalogMetadata() {
- Metadata catalogMetadata = catalogApi.getMetadataApi().getMetadata(catalogRef.getHref());
+ Metadata catalogMetadata = catalogApi.getMetadataApi(catalogUrn).get();
checkMetadata(catalogMetadata);
}
@Test(description = "GET /catalog/{id}/metadata/{key}")
public void testGetCatalogMetadataValue() {
- Metadata catalogMetadata = catalogApi.getMetadataApi().getMetadata(catalogRef.getHref());
- MetadataEntry existingMetadataEntry = Iterables.find(catalogMetadata.getMetadataEntries(), new Predicate<MetadataEntry>() {
- @Override
- public boolean apply(MetadataEntry input) {
- return input.getKey().equals("KEY");
- }
- });
- MetadataValue metadataValue = catalogApi.getMetadataApi().getMetadataValue(catalogRef.getHref(), "KEY");
- assertEquals(metadataValue.getValue(), existingMetadataEntry.getValue(),
- String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", existingMetadataEntry.getValue(), metadataValue.getValue()));
+ Metadata catalogMetadata = catalogApi.getMetadataApi(catalogUrn).get();
+ MetadataEntry existingMetadataEntry = Iterables.find(catalogMetadata.getMetadataEntries(),
+ new Predicate<MetadataEntry>() {
+ @Override
+ public boolean apply(MetadataEntry input) {
+ return input.getKey().equals("KEY");
+ }
+ });
+ MetadataValue metadataValue = catalogApi.getMetadataApi(catalogApi.get(existingMetadataEntry.getHref()).getId())
+ .getValue("KEY");
+ assertEquals(metadataValue.getValue(), existingMetadataEntry.getValue(), String.format(CORRECT_VALUE_OBJECT_FMT,
+ "Value", "MetadataValue", existingMetadataEntry.getValue(), metadataValue.getValue()));
checkMetadataValue(metadataValue);
}
@Test(description = "GET /catalogItem/{id}/metadata", dependsOnMethods = "testAddCatalogItem")
public void testGetCatalogItemMetadata() {
- Metadata catalogItemMetadata = catalogApi.getCatalogItemMetadataApi().getMetadata(catalogItem.getHref());
+ Metadata catalogItemMetadata = catalogApi.getItemMetadataApi(catalogItem.getId()).get();
checkMetadata(catalogItemMetadata);
}
@Test(description = "POST /catalogItem/{id}/metadata", dependsOnMethods = "testAddCatalogItem")
public void testMergeCatalogItemMetadata() {
- Metadata newMetadata = Metadata.builder()
- .entry(MetadataEntry.builder().entry("KEY", "MARMALADE").build())
- .entry(MetadataEntry.builder().entry("VEGIMITE", "VALUE").build())
- .build();
+ Metadata newMetadata = Metadata.builder().entry(MetadataEntry.builder().entry("KEY", "MARMALADE").build())
+ .entry(MetadataEntry.builder().entry("VEGIMITE", "VALUE").build()).build();
- Metadata before = catalogApi.getCatalogItemMetadataApi().getMetadata(catalogItem.getHref());
-
- Task mergeCatalogItemMetadata = catalogApi.getCatalogItemMetadataApi().mergeMetadata(catalogItem.getHref(), newMetadata);
+ Metadata before = catalogApi.getItemMetadataApi(catalogItem.getId()).get();
+
+ Task mergeCatalogItemMetadata = catalogApi.getItemMetadataApi(catalogItem.getId()).merge(newMetadata);
checkTask(mergeCatalogItemMetadata);
assertTrue(retryTaskSuccess.apply(mergeCatalogItemMetadata),
- String.format(TASK_COMPLETE_TIMELY, "mergeCatalogItemMetadata"));
- Metadata mergedCatalogItemMetadata = catalogApi.getCatalogItemMetadataApi().getMetadata(catalogItem.getHref());
+ String.format(TASK_COMPLETE_TIMELY, "mergeCatalogItemMetadata"));
+ Metadata mergedCatalogItemMetadata = catalogApi.getItemMetadataApi(catalogItem.getId()).get();
assertTrue(mergedCatalogItemMetadata.getMetadataEntries().size() > before.getMetadataEntries().size(),
- "Should have added at least one other MetadataEntry to the CatalogItem");
-
- MetadataValue keyMetadataValue = catalogApi.getCatalogItemMetadataApi().getMetadataValue(catalogItem.getHref(), "KEY");
- assertEquals(keyMetadataValue.getValue(), "MARMALADE", "The Value of the MetadataValue for KEY should have changed");
- checkMetadataValue(keyMetadataValue);
-
- MetadataValue newKeyMetadataValue = catalogApi.getCatalogItemMetadataApi().getMetadataValue(catalogItem.getHref(), "VEGIMITE");
+ "Should have added at least one other MetadataEntry to the CatalogItem");
- assertEquals(newKeyMetadataValue.getValue(), "VALUE", "The Value of the MetadataValue for NEW_KEY should have been set");
+ MetadataValue keyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY");
+ assertEquals(keyMetadataValue.getValue(), "MARMALADE",
+ "The Value of the MetadataValue for KEY should have changed");
+ checkMetadataValue(keyMetadataValue);
+
+ MetadataValue newKeyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("VEGIMITE");
+
+ assertEquals(newKeyMetadataValue.getValue(), "VALUE",
+ "The Value of the MetadataValue for NEW_KEY should have been set");
checkMetadataValue(newKeyMetadataValue);
}
@Test(description = "GET /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testSetCatalogItemMetadataValue")
- public void testGetCatalogItemMetadataValue() {
- MetadataValue metadataValue = catalogApi.getCatalogItemMetadataApi().getMetadataValue(catalogItem.getHref(), "KEY");
+ public void testGetCatalogItemMetadataValue() {
+ MetadataValue metadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY");
checkMetadataValue(metadataValue);
}
@@ -262,24 +249,25 @@
public void testSetCatalogItemMetadataValue() {
MetadataValue newMetadataValue = MetadataValue.builder().value("NEW").build();
- Task setCatalogItemMetadataValue = catalogApi.getCatalogItemMetadataApi().setMetadata(catalogItem.getHref(), "KEY", newMetadataValue);
+ Task setCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).putEntry("KEY",
+ newMetadataValue);
checkTask(setCatalogItemMetadataValue);
- assertTrue(retryTaskSuccess.apply(setCatalogItemMetadataValue),
- String.format(TASK_COMPLETE_TIMELY, "setCatalogItemMetadataValue"));
-
- MetadataValue updatedMetadataValue = catalogApi.getCatalogItemMetadataApi().getMetadataValue(catalogItem.getHref(), "KEY");
- assertEquals(updatedMetadataValue.getValue(), newMetadataValue.getValue(),
- String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", newMetadataValue.getValue(), updatedMetadataValue.getValue()));
- checkMetadataValue(updatedMetadataValue);
+ assertTrue(retryTaskSuccess.apply(setCatalogItemMetadataValue),
+ String.format(TASK_COMPLETE_TIMELY, "setCatalogItemMetadataValue"));
+
+ MetadataValue editedMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY");
+ assertEquals(editedMetadataValue.getValue(), newMetadataValue.getValue(), String.format(CORRECT_VALUE_OBJECT_FMT,
+ "Value", "MetadataValue", newMetadataValue.getValue(), editedMetadataValue.getValue()));
+ checkMetadataValue(editedMetadataValue);
}
@Test(description = "DELETE /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testGetCatalogItemMetadataValue")
- public void testDeleteCatalogItemMetadataValue() {
- Task deleteCatalogItemMetadataValue = catalogApi.getCatalogItemMetadataApi().deleteMetadataEntry(catalogItem.getHref(), "KEY");
- checkTask(deleteCatalogItemMetadataValue);
- assertTrue(retryTaskSuccess.apply(deleteCatalogItemMetadataValue),
- String.format(TASK_COMPLETE_TIMELY, "deleteCatalogItemMetadataValue"));
- MetadataValue deleted = catalogApi.getMetadataApi().getMetadataValue(catalogItem.getHref(), "KEY");
- assertNull(deleted);
+ public void testRemoveCatalogItemMetadataValue() {
+ Task removeCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).removeEntry("KEY");
+ checkTask(removeCatalogItemMetadataValue);
+ assertTrue(retryTaskSuccess.apply(removeCatalogItemMetadataValue),
+ String.format(TASK_COMPLETE_TIMELY, "removeCatalogItemMetadataValue"));
+ MetadataValue removed = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY");
+ assertNull(removed);
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java
index 7938bbe..3fbe284 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java
@@ -53,17 +53,17 @@
public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
@Test
- public void testCreateMedia() {
+ public void testAddMedia() {
URI uploadLink = URI.create(endpoint + "/vdc/e9cd3387-ac57-4d27-a481-9bee75e0690f/media");
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("POST", "/vdc/e9cd3387-ac57-4d27-a481-9bee75e0690f/media")
.acceptMedia(VCloudDirectorMediaType.MEDIA)
- .xmlFilePayload("/media/createMediaSource.xml", VCloudDirectorMediaType.MEDIA)
+ .xmlFilePayload("/media/addMediaSource.xml", VCloudDirectorMediaType.MEDIA)
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/media/createMedia.xml", VCloudDirectorMediaType.MEDIA)
+ .xmlFilePayload("/media/addMedia.xml", VCloudDirectorMediaType.MEDIA)
.httpResponseBuilder().statusCode(201).build());
Media source = Media.builder()
@@ -73,9 +73,9 @@
.type("application/vnd.vmware.vcloud.media+xml")
.description("Test media generated by testCreateMedia()")
.build();
- Media expected = createMedia();
+ Media expected = addMedia();
- assertEquals(api.getMediaApi().createMedia(uploadLink, source), expected);
+ assertEquals(api.getMediaApi().add(uploadLink, source), expected);
}
@Test
@@ -98,14 +98,13 @@
.source(Reference.builder()
.type("application/vnd.vmware.vcloud.media+xml")
.name("copied test media")
- .id("urn:vcloud:media:da8361af-cccd-4103-a71c-493513c49094")
.href(URI.create("https://mycloud.greenhousedata.com/api/media/da8361af-cccd-4103-a71c-493513c49094"))
.build())
.isSourceDelete(false)
.build();
Media expected = cloneMedia();
- assertEquals(api.getMediaApi().cloneMedia(vdcURI, params), expected);
+ assertEquals(api.getMediaApi().clone(vdcURI, params), expected);
}
@Test
@@ -122,7 +121,7 @@
.httpResponseBuilder().build());
Media expected = getMedia();
- assertEquals(api.getMediaApi().getMedia(mediaUri), expected);
+ assertEquals(api.getMediaApi().get(mediaUri), expected);
}
@Test
@@ -145,12 +144,12 @@
.build();
try {
- api.getMediaApi().getMedia(mediaUri);
+ api.getMediaApi().get(mediaUri);
fail("Should give HTTP 400 error");
} catch (VCloudDirectorException vde) {
assertEquals(vde.getError(), expected);
} catch (Exception e) {
- fail("Should have thrown a VCloudDirectorException");
+ fail("Should have thrown a VCloudDirectorException", e);
}
}
@@ -167,7 +166,7 @@
.xmlFilePayload("/media/error403-catalog.xml", VCloudDirectorMediaType.ERROR)
.httpResponseBuilder().statusCode(403).build());
- assertNull(api.getMediaApi().getMedia(mediaUri));
+ assertNull(api.getMediaApi().get(mediaUri));
}
@Test
@@ -183,31 +182,31 @@
.xmlFilePayload("/media/error403-fake.xml", VCloudDirectorMediaType.ERROR)
.httpResponseBuilder().statusCode(403).build());
- assertNull(api.getMediaApi().getMedia(mediaUri));
+ assertNull(api.getMediaApi().get(mediaUri));
}
@Test
- public void testUpdateMedia() {
+ public void testEditMedia() {
URI mediaUri = URI.create(endpoint + "/media/794eb334-754e-4917-b5a0-5df85cbd61d1");
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", "/media/794eb334-754e-4917-b5a0-5df85cbd61d1")
- .xmlFilePayload("/media/updateMedia.xml", VCloudDirectorMediaType.MEDIA)
+ .xmlFilePayload("/media/editMedia.xml", VCloudDirectorMediaType.MEDIA)
.acceptMedia(VCloudDirectorMediaType.TASK)
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/media/updateMediaTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/media/editMediaTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
- Media update = updateMedia();
- Task expected = updateMediaTask();
+ Media edit = editMedia();
+ Task expected = editMediaTask();
- assertEquals(api.getMediaApi().updateMedia(mediaUri, update), expected);
+ assertEquals(api.getMediaApi().edit(mediaUri, edit), expected);
}
@Test
- public void testDeleteMedia() {
+ public void testRemoveMedia() {
URI mediaUri = URI.create(endpoint + "/media/794eb334-754e-4917-b5a0-5df85cbd61d1");
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
@@ -216,12 +215,12 @@
.acceptMedia(VCloudDirectorMediaType.TASK)
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/media/deleteMediaTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/media/removeMediaTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
- Task expected = deleteMediaTask();
+ Task expected = removeMediaTask();
- assertEquals(api.getMediaApi().deleteMedia(mediaUri), expected);
+ assertEquals(api.getMediaApi().remove(mediaUri), expected);
}
@Test
@@ -240,7 +239,7 @@
Metadata expected = metadata();
- assertEquals(api.getMediaApi().getMetadataApi().getMetadata(mediaUri), expected);
+ assertEquals(api.getMediaApi().getMetadataApi(mediaUri).get(), expected);
}
@Test
@@ -260,7 +259,7 @@
Metadata inputMetadata = metadata();
Task expectedTask = mergeMetadataTask();
- assertEquals(api.getMediaApi().getMetadataApi().mergeMetadata(mediaUri, inputMetadata), expectedTask);
+ assertEquals(api.getMediaApi().getMetadataApi(mediaUri).merge(inputMetadata), expectedTask);
}
public void testGetMetadataValue() {
@@ -278,7 +277,7 @@
MetadataValue expected = metadataValue();
- assertEquals(api.getMediaApi().getMetadataApi().getMetadataValue(mediaUri, "key"), expected);
+ assertEquals(api.getMediaApi().getMetadataApi(mediaUri).getValue("key"), expected);
}
@Test
@@ -299,11 +298,11 @@
Task expectedTask = setMetadataEntryTask();
- assertEquals(api.getMediaApi().getMetadataApi().setMetadata(mediaUri, "key", inputMetadataValue), expectedTask);
+ assertEquals(api.getMediaApi().getMetadataApi(mediaUri).putEntry("key", inputMetadataValue), expectedTask);
}
@Test
- public void testDeleteMetadataValue() {
+ public void testRemoveMetadataValue() {
URI mediaUri = URI.create("https://vcloudbeta.bluelock.com/api/media/794eb334-754e-4917-b5a0-5df85cbd61d1");
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
@@ -312,12 +311,12 @@
.acceptMedia(VCloudDirectorMediaType.TASK)
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/media/deleteMetadataEntryTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/media/removeMetadataEntryTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
- Task expectedTask = deleteMetadataEntryTask();
+ Task expectedTask = removeEntryTask();
- assertEquals(api.getMediaApi().getMetadataApi().deleteMetadataEntry(mediaUri, "key"), expectedTask);
+ assertEquals(api.getMediaApi().getMetadataApi(mediaUri).removeEntry("key"), expectedTask);
}
@Test
@@ -344,7 +343,7 @@
assertEquals(api.getMediaApi().getOwner(mediaUri), expected);
}
- static Media createMedia() {
+ static Media addMedia() {
return Media.builder()
.size(0)
.imageType(ImageType.ISO)
@@ -352,6 +351,7 @@
.name("Test media 1")
.id("urn:vcloud:media:d51b0b9d-099c-499f-97f8-4fbe40ba06d7")
.type("application/vnd.vmware.vcloud.media+xml")
+ .description("Test media generated by testCreateMedia()")
.href(URI.create("https://mycloud.greenhousedata.com/api/media/d51b0b9d-099c-499f-97f8-4fbe40ba06d7"))
.link(Link.builder()
.rel("up")
@@ -362,7 +362,6 @@
.rel("remove")
.href(URI.create("https://mycloud.greenhousedata.com/api/media/d51b0b9d-099c-499f-97f8-4fbe40ba06d7"))
.build())
- .description("Test media generated by testCreateMedia()")
.files(ImmutableSet.of(File.builder()
.size(0l)
.bytesTransferred(0l)
@@ -474,7 +473,7 @@
.build();
}
- private static Media updateMedia() {
+ private static Media editMedia() {
return Media.builder()
.size(175163392)
.imageType(ImageType.ISO)
@@ -524,7 +523,7 @@
.build();
}
- private static Task updateMediaTask() {
+ private static Task editMediaTask() {
return Task.builder()
.name("task")
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
@@ -557,7 +556,7 @@
.build();
}
- public static Task deleteMediaTask() {
+ public static Task removeMediaTask() {
return Task.builder()
.name("task")
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
@@ -723,7 +722,7 @@
.build();
}
- public static Task deleteMetadataEntryTask() {
+ public static Task removeEntryTask() {
return Task.builder()
.name("task")
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
index 7bc33c6..66d611d 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
@@ -35,7 +35,6 @@
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ_LIVE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals;
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.typeEquals;
@@ -89,7 +88,7 @@
*/
protected VdcApi vdcApi;
protected MediaApi mediaApi;
-
+
/*
* Shared state between dependent tests.
*/
@@ -105,296 +104,282 @@
vdcApi = context.getApi().getVdcApi();
mediaApi = context.getApi().getMediaApi();
}
-
+
@AfterClass(alwaysRun = true)
protected void tidyUp() {
if (media != null) {
try {
- Task delete = mediaApi.deleteMedia(media.getHref());
- taskDoneEventually(delete);
+ Task remove = mediaApi.remove(media.getId());
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn(e, "Error when deleting media '%s': %s", media.getName());
}
}
if (oldMedia != null) {
try {
- Task delete = mediaApi.deleteMedia(oldMedia.getHref());
- taskDoneEventually(delete);
+ Task remove = mediaApi.remove(oldMedia.getId());
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn(e, "Error when deleting media '%s': %s", oldMedia.getName());
}
}
}
-
+
@Test(description = "POST /vdc/{id}/media")
- public void testCreateMedia() throws URISyntaxException {
- assertNotNull(vdcURI, String.format(REF_REQ_LIVE, VDC));
- Vdc vdc = vdcApi.getVdc(vdcURI);
- assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
+ public void testAddMedia() throws URISyntaxException {
+ Vdc vdc = lazyGetVdc();
Link addMedia = find(vdc.getLinks(), and(relEquals("add"), typeEquals(VCloudDirectorMediaType.MEDIA)));
-
+
// TODO: generate an iso
byte[] iso = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
-
- Media sourceMedia = Media.builder()
- .type(VCloudDirectorMediaType.MEDIA)
- .name("Test media "+random.nextInt())
- .size(iso.length)
- .imageType(Media.ImageType.ISO)
- .description("Test media generated by testCreateMedia()")
- .build();
- media = mediaApi.createMedia(addMedia.getHref(), sourceMedia);
-
+
+ Media sourceMedia = Media.builder().type(VCloudDirectorMediaType.MEDIA).name("Test media " + random.nextInt())
+ .size(iso.length).imageType(Media.ImageType.ISO).description("Test media generated by testAddMedia()")
+ .build();
+ media = mediaApi.add(addMedia.getHref(), sourceMedia);
+
Checks.checkMediaFor(MEDIA, media);
-
+
assertNotNull(media.getFiles(), String.format(OBJ_FIELD_REQ, MEDIA, "files"));
- assertTrue(media.getFiles().size() == 1, String.format(OBJ_FIELD_LIST_SIZE_EQ, MEDIA, "files", 1, media.getFiles().size()));
+ assertTrue(media.getFiles().size() == 1,
+ String.format(OBJ_FIELD_LIST_SIZE_EQ, MEDIA, "files", 1, media.getFiles().size()));
File uploadFile = getFirst(media.getFiles(), null);
assertNotNull(uploadFile, String.format(OBJ_FIELD_REQ, MEDIA, "files.first"));
assertEquals(uploadFile.getSize(), Long.valueOf(iso.length));
assertEquals(uploadFile.getSize().longValue(), sourceMedia.getSize(),
- String.format(OBJ_FIELD_EQ, MEDIA, "uploadFile.size()", sourceMedia.getSize(), uploadFile.getSize()));
-
+ String.format(OBJ_FIELD_EQ, MEDIA, "uploadFile.size()", sourceMedia.getSize(), uploadFile.getSize()));
+
Set<Link> links = uploadFile.getLinks();
assertNotNull(links, String.format(OBJ_FIELD_REQ, MEDIA, "uploadFile.links"));
assertTrue(links.size() >= 1, String.format(OBJ_FIELD_LIST_SIZE_GE, MEDIA, "uploadfile.links", 1, links.size()));
- assertTrue(Iterables.all(links, Predicates.or(LinkPredicates.relEquals(Link.Rel.UPLOAD_DEFAULT), LinkPredicates.relEquals(Link.Rel.UPLOAD_ALTERNATE))),
- String.format(OBJ_FIELD_REQ, MEDIA, "uploadFile.links.first"));
+ assertTrue(
+ Iterables.all(
+ links,
+ Predicates.or(LinkPredicates.relEquals(Link.Rel.UPLOAD_DEFAULT),
+ LinkPredicates.relEquals(Link.Rel.UPLOAD_ALTERNATE))),
+ String.format(OBJ_FIELD_REQ, MEDIA, "uploadFile.links.first"));
Link uploadLink = Iterables.find(links, LinkPredicates.relEquals(Link.Rel.UPLOAD_DEFAULT));
context.getApi().getUploadApi().upload(uploadLink.getHref(), Payloads.newByteArrayPayload(iso));
-
- media = mediaApi.getMedia(media.getHref());
+
+ media = mediaApi.get(media.getId());
if (media.getTasks().size() == 1) {
Task uploadTask = Iterables.getOnlyElement(media.getTasks());
Checks.checkTask(uploadTask);
assertEquals(uploadTask.getStatus(), Task.Status.RUNNING);
assertTrue(retryTaskSuccess.apply(uploadTask), String.format(TASK_COMPLETE_TIMELY, "uploadTask"));
- media = mediaApi.getMedia(media.getHref());
+ media = mediaApi.get(media.getId());
}
}
-
- @Test(description = "GET /media/{id}", dependsOnMethods = { "testCreateMedia" })
+
+ @Test(description = "GET /media/{id}", dependsOnMethods = { "testAddMedia" })
public void testGetMedia() {
- media = mediaApi.getMedia(media.getHref());
+ media = mediaApi.get(media.getId());
assertNotNull(media, String.format(OBJ_REQ_LIVE, MEDIA));
-
+
owner = media.getOwner();
assertNotNull(owner, String.format(OBJ_FIELD_REQ_LIVE, MEDIA, "owner"));
Checks.checkResourceType(media.getOwner());
-
+
Checks.checkMediaFor(MEDIA, media);
}
-
+
@Test(description = "GET /media/{id}/owner", dependsOnMethods = { "testGetMedia" })
public void testGetMediaOwner() {
- Owner directOwner = mediaApi.getOwner(media.getHref());
- assertEquals(owner.toBuilder()
- .user(owner.getUser().toBuilder().id(null).build())
- .build(),
- directOwner.toBuilder().links(Collections.<Link>emptySet()).build(),
- String.format(GETTER_RETURNS_SAME_OBJ,
- "getOwner()", "owner", "media.getOwner()", owner.toString(), directOwner.toString()));
-
+ Owner directOwner = mediaApi.getOwner(media.getId());
+ assertEquals(owner.toBuilder().user(owner.getUser()).build(),
+ directOwner.toBuilder().links(Collections.<Link> emptySet()).build(), String.format(
+ GETTER_RETURNS_SAME_OBJ, "getOwner()", "owner", "media.getOwner()", owner.toString(),
+ directOwner.toString()));
+
// parent type
Checks.checkResourceType(directOwner);
-
+
// required
assertNotNull(directOwner.getUser(), String.format(OBJ_FIELD_REQ, "Owner", "user"));
Checks.checkReferenceType(directOwner.getUser());
}
-
+
@Test(description = "POST /vdc/{id}/action/cloneMedia", dependsOnMethods = { "testGetMediaOwner" })
public void testCloneMedia() {
oldMedia = media;
- media = vdcApi.cloneMedia(vdcURI, CloneMediaParams.builder()
- .source(Reference.builder().fromEntity(media).build())
- .name("copied "+media.getName())
- .description("copied by testCloneMedia()")
- .build());
-
+ media = vdcApi.cloneMedia(
+ vdcUrn,
+ CloneMediaParams.builder().source(Reference.builder().fromEntity(media).build())
+ .name("copied " + media.getName()).description("copied by testCloneMedia()").build());
+
Checks.checkMediaFor(VDC, media);
-
+
if (media.getTasks() != null) {
Task copyTask = getFirst(media.getTasks(), null);
if (copyTask != null) {
Checks.checkTask(copyTask);
assertTrue(retryTaskSuccess.apply(copyTask), String.format(TASK_COMPLETE_TIMELY, "copyTask"));
- media = mediaApi.getMedia(media.getHref());
+ media = mediaApi.get(media.getId());
}
}
-
+
Checks.checkMediaFor(MEDIA, media);
- assertTrue(media.clone(oldMedia), String.format(OBJ_FIELD_CLONE, MEDIA, "copied media",
- media.toString(), oldMedia.toString()));
-
- mediaApi.getMetadataApi().setMetadata(media.getHref(), "key", MetadataValue.builder().value("value").build());
-
- media = vdcApi.cloneMedia(vdcURI, CloneMediaParams.builder()
- .source(Reference.builder().fromEntity(media).build())
- .name("moved test media")
- .description("moved by testCloneMedia()")
- .isSourceDelete(true)
- .build());
-
+ assertTrue(media.clone(oldMedia),
+ String.format(OBJ_FIELD_CLONE, MEDIA, "copied media", media.toString(), oldMedia.toString()));
+
+ mediaApi.getMetadataApi(media.getId()).putEntry("key", MetadataValue.builder().value("value").build());
+
+ media = vdcApi
+ .cloneMedia(vdcUrn, CloneMediaParams.builder().source(Reference.builder().fromEntity(media).build())
+ .name("moved test media").description("moved by testCloneMedia()").isSourceDelete(true).build());
+
Checks.checkMediaFor(VDC, media);
-
+
if (media.getTasks() != null) {
Task copyTask = getFirst(media.getTasks(), null);
if (copyTask != null) {
Checks.checkTask(copyTask);
assertTrue(retryTaskSuccess.apply(copyTask), String.format(TASK_COMPLETE_TIMELY, "copyTask"));
- media = mediaApi.getMedia(media.getHref());
+ media = mediaApi.get(media.getId());
}
}
-
+
Checks.checkMediaFor(MEDIA, media);
- assertTrue(media.clone(oldMedia), String.format(OBJ_FIELD_CLONE, MEDIA, "moved media",
- media.toString(), oldMedia.toString()));
+ assertTrue(media.clone(oldMedia),
+ String.format(OBJ_FIELD_CLONE, MEDIA, "moved media", media.toString(), oldMedia.toString()));
}
-
+
@Test(description = "PUT /media/{id}", dependsOnMethods = { "testCloneMedia" })
public void testSetMedia() {
String oldName = media.getName();
- String newName = "new "+oldName;
+ String newName = "new " + oldName;
String oldDescription = media.getDescription();
- String newDescription = "new "+oldDescription;
+ String newDescription = "new " + oldDescription;
media = media.toBuilder().name(newName).description(newDescription).build();
-
- Task updateMedia = mediaApi.updateMedia(media.getHref(), media);
- Checks.checkTask(updateMedia);
- assertTrue(retryTaskSuccess.apply(updateMedia), String.format(TASK_COMPLETE_TIMELY, "updateMedia"));
- media = mediaApi.getMedia(media.getHref());
-
+
+ Task editMedia = mediaApi.edit(media.getId(), media);
+ Checks.checkTask(editMedia);
+ assertTrue(retryTaskSuccess.apply(editMedia), String.format(TASK_COMPLETE_TIMELY, "editMedia"));
+ media = mediaApi.get(media.getId());
+
assertTrue(equal(media.getName(), newName), String.format(OBJ_FIELD_UPDATABLE, MEDIA, "name"));
assertTrue(equal(media.getDescription(), newDescription),
- String.format(OBJ_FIELD_UPDATABLE, MEDIA, "description"));
-
- //TODO negative tests?
-
+ String.format(OBJ_FIELD_UPDATABLE, MEDIA, "description"));
+
+ // TODO negative tests?
+
Checks.checkMediaFor(MEDIA, media);
-
+
media = media.toBuilder().name(oldName).description(oldDescription).build();
-
- updateMedia = mediaApi.updateMedia(media.getHref(), media);
- Checks.checkTask(updateMedia);
- assertTrue(retryTaskSuccess.apply(updateMedia), String.format(TASK_COMPLETE_TIMELY, "updateMedia"));
- media = mediaApi.getMedia(media.getHref());
+
+ editMedia = mediaApi.edit(media.getId(), media);
+ Checks.checkTask(editMedia);
+ assertTrue(retryTaskSuccess.apply(editMedia), String.format(TASK_COMPLETE_TIMELY, "editMedia"));
+ media = mediaApi.get(media.getId());
}
-
+
@Test(description = "GET /media/{id}/metadata", dependsOnMethods = { "testSetMetadataValue" })
public void testGetMetadata() {
- metadata = mediaApi.getMetadataApi().getMetadata(media.getHref());
+ metadata = mediaApi.getMetadataApi(media.getId()).get();
// required for testing
- assertFalse(isEmpty(metadata.getMetadataEntries()),
- String.format(OBJ_FIELD_REQ_LIVE, MEDIA, "metadata.entries"));
-
+ assertFalse(isEmpty(metadata.getMetadataEntries()), String.format(OBJ_FIELD_REQ_LIVE, MEDIA, "metadata.entries"));
+
Checks.checkMetadataFor(MEDIA, metadata);
}
-
+
@Test(description = "POST /media/{id}/metadata", dependsOnMethods = { "testGetMedia" })
public void testMergeMetadata() {
// test new
Set<MetadataEntry> inputEntries = ImmutableSet.of(MetadataEntry.builder().entry("testKey", "testValue").build());
- Metadata inputMetadata = Metadata.builder()
- .entries(inputEntries)
- .build();
-
- Task mergeMetadata = mediaApi.getMetadataApi().mergeMetadata(media.getHref(), inputMetadata);
+ Metadata inputMetadata = Metadata.builder().entries(inputEntries).build();
+
+ Task mergeMetadata = mediaApi.getMetadataApi(media.getId()).merge(inputMetadata);
Checks.checkTask(mergeMetadata);
assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(new)"));
- metadata = mediaApi.getMetadataApi().getMetadata(media.getHref());
+ metadata = mediaApi.getMetadataApi(media.getId()).get();
Checks.checkMetadataFor(MEDIA, metadata);
checkMetadataContainsEntries(metadata, inputEntries);
-
- media = mediaApi.getMedia(media.getHref());
+
+ media = mediaApi.get(media.getId());
Checks.checkMediaFor(MEDIA, media);
-
- // test modify
+
+ // test edit
inputEntries = ImmutableSet.of(MetadataEntry.builder().entry("testKey", "new testValue").build());
- inputMetadata = Metadata.builder()
- .entries(inputEntries)
- .build();
-
- mergeMetadata = mediaApi.getMetadataApi().mergeMetadata(media.getHref(), inputMetadata);
+ inputMetadata = Metadata.builder().entries(inputEntries).build();
+
+ mergeMetadata = mediaApi.getMetadataApi(media.getId()).merge(inputMetadata);
Checks.checkTask(mergeMetadata);
- assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(modify)"));
- metadata = mediaApi.getMetadataApi().getMetadata(media.getHref());
+ assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(edit)"));
+ metadata = mediaApi.getMetadataApi(media.getId()).get();
Checks.checkMetadataFor(MEDIA, metadata);
checkMetadataContainsEntries(metadata, inputEntries);
-
- media = mediaApi.getMedia(media.getHref());
+
+ media = mediaApi.get(media.getId());
Checks.checkMediaFor(MEDIA, media);
}
-
+
private void checkMetadataContainsEntries(Metadata metadata, Set<MetadataEntry> entries) {
for (MetadataEntry inputEntry : entries) {
boolean found = false;
for (MetadataEntry entry : metadata.getMetadataEntries()) {
if (equal(inputEntry.getKey(), entry.getKey())) {
- found = true; break;
+ found = true;
+ break;
}
}
-
+
if (!found) {
- String.format(OBJ_FIELD_CONTAINS, MEDIA, "metadata",
- Iterables.toString(metadata.getMetadataEntries()),
- Iterables.toString(entries));
+ String.format(OBJ_FIELD_CONTAINS, MEDIA, "metadata", Iterables.toString(metadata.getMetadataEntries()),
+ Iterables.toString(entries));
}
}
}
-
+
@Test(description = "GET /media/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
public void testGetMetadataValue() {
- metadataValue = mediaApi.getMetadataApi().getMetadataValue(media.getHref(), "key");
+ metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("key");
Checks.checkMetadataValueFor(MEDIA, metadataValue);
}
-
+
@Test(description = "PUT /media/{id}/metadata/{key}", dependsOnMethods = { "testMergeMetadata" })
public void testSetMetadataValue() {
metadataEntryValue = "value";
MetadataValue newValue = MetadataValue.builder().value(metadataEntryValue).build();
-
- Task setMetadataEntry = mediaApi.getMetadataApi().setMetadata(media.getHref(), "key", newValue);
+
+ Task setMetadataEntry = mediaApi.getMetadataApi(media.getId()).putEntry("key", newValue);
Checks.checkTask(setMetadataEntry);
- assertTrue(retryTaskSuccess.apply(setMetadataEntry),
- String.format(TASK_COMPLETE_TIMELY, "setMetadataEntry"));
- metadataValue = mediaApi.getMetadataApi().getMetadataValue(media.getHref(), "key");
+ assertTrue(retryTaskSuccess.apply(setMetadataEntry), String.format(TASK_COMPLETE_TIMELY, "setMetadataEntry"));
+ metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("key");
Checks.checkMetadataValueFor(MEDIA, metadataValue);
}
-
- @Test(description = "DELETE /media/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata", "testGetMetadataValue" } )
- public void testDeleteMetadata() {
- Task deleteMetadataEntry = mediaApi.getMetadataApi().deleteMetadataEntry(media.getHref(), "testKey");
- Checks.checkTask(deleteMetadataEntry);
- assertTrue(retryTaskSuccess.apply(deleteMetadataEntry),
- String.format(TASK_COMPLETE_TIMELY, "deleteMetadataEntry"));
-
- metadataValue = mediaApi.getMetadataApi().getMetadataValue(media.getHref(), "testKey");
- assertNull(metadataValue, String.format(OBJ_FIELD_ATTRB_DEL, MEDIA,
- "Metadata", metadataValue != null ? metadataValue.toString() : "",
- "MetadataEntry", metadataValue != null ? metadataValue.toString() : ""));
-
- metadataValue = mediaApi.getMetadataApi().getMetadataValue(media.getHref(), "key");
+
+ @Test(description = "DELETE /media/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata",
+ "testGetMetadataValue" })
+ public void testRemoveMetadata() {
+ Task removeEntry = mediaApi.getMetadataApi(media.getId()).removeEntry("testKey");
+ Checks.checkTask(removeEntry);
+ assertTrue(retryTaskSuccess.apply(removeEntry), String.format(TASK_COMPLETE_TIMELY, "removeEntry"));
+
+ metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("testKey");
+ assertNull(metadataValue, String.format(OBJ_FIELD_ATTRB_DEL, MEDIA, "Metadata",
+ metadataValue != null ? metadataValue.toString() : "", "MetadataEntry",
+ metadataValue != null ? metadataValue.toString() : ""));
+
+ metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("key");
Checks.checkMetadataValueFor(MEDIA, metadataValue);
-
- media = mediaApi.getMedia(media.getHref());
+
+ media = mediaApi.get(media.getId());
Checks.checkMediaFor(MEDIA, media);
}
-
- @Test(description = "DELETE /media/{id}", dependsOnMethods = { "testDeleteMetadata" } )
- public void testDeleteMedia() {
- Task deleteMedia = mediaApi.deleteMedia(media.getHref());
- Checks.checkTask(deleteMedia);
- assertTrue(retryTaskSuccess.apply(deleteMedia),
- String.format(TASK_COMPLETE_TIMELY, "deleteMedia"));
-
- media = mediaApi.getMedia(media.getHref());
+
+ @Test(description = "DELETE /media/{id}", dependsOnMethods = { "testRemoveMetadata" })
+ public void testRemoveMedia() {
+ Task removeMedia = mediaApi.remove(media.getId());
+ Checks.checkTask(removeMedia);
+ assertTrue(retryTaskSuccess.apply(removeMedia), String.format(TASK_COMPLETE_TIMELY, "removeMedia"));
+
+ media = mediaApi.get(media.getId());
assertNull(media, String.format(OBJ_DEL, MEDIA, media != null ? media.toString() : ""));
-
- deleteMedia = mediaApi.deleteMedia(oldMedia.getHref());
- Checks.checkTask(deleteMedia);
- assertTrue(retryTaskSuccess.apply(deleteMedia), String.format(TASK_COMPLETE_TIMELY, "deleteMedia"));
+
+ removeMedia = mediaApi.remove(oldMedia.getId());
+ Checks.checkTask(removeMedia);
+ assertTrue(retryTaskSuccess.apply(removeMedia), String.format(TASK_COMPLETE_TIMELY, "removeMedia"));
oldMedia = null;
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java
index 23f0d70..5458c81 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java
@@ -18,14 +18,22 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_NETWORK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ERROR;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_VALUE;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.fail;
import java.net.URI;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Error;
import org.jclouds.vcloud.director.v1_5.domain.Link;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
@@ -36,7 +44,6 @@
import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
import org.jclouds.vcloud.director.v1_5.domain.network.IpRanges;
import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
-import org.jclouds.vcloud.director.v1_5.domain.network.Network;
import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkFeatures;
@@ -47,6 +54,7 @@
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
+import com.google.common.net.HttpHeaders;
/**
* Test the {@link NetworkApi} via its side effects.
@@ -55,37 +63,40 @@
*/
@Test(groups = { "unit", "user" }, singleThreaded = true, testName = "NetworkApiExpectTest")
public class NetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
-
- @Test
- public void testGetNetwork() {
- URI networkUri = URI.create(endpoint + "/network/f3ba8256-6f48-4512-aad6-600e85b4dc38");
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/network/f3ba8256-6f48-4512-aad6-600e85b4dc38")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/network.xml", VCloudDirectorMediaType.ORG_NETWORK)
- .httpResponseBuilder().build());
-
- OrgNetwork expected = orgNetwork();
- assertEquals(Network.<OrgNetwork>toSubType(api.getNetworkApi().getNetwork(networkUri)), expected);
+ static String network = "55a677cf-ab3f-48ae-b880-fab90421980c";
+ static String networkUrn = "urn:vcloud:network:" + network;
+ static URI networkHref = URI.create(endpoint + "/network/" + network);
+
+ HttpRequest get = HttpRequest.builder()
+ .method("GET")
+ .endpoint(networkHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ HttpResponse getResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/network/network.xml", ORG + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testGetNetworkHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
+ assertEquals(api.getNetworkApi().get(networkHref), network());
}
-
- @Test
- public void testGetNetworkWithInvalidId() {
- URI networkUri = URI.create(endpoint + "/network/NOTAUUID");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/network/NOTAUUID")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/error400.xml", VCloudDirectorMediaType.ERROR)
- .httpResponseBuilder().statusCode(400).build());
+ @Test
+ public void testGetNetworkHrefInvalidId() {
+
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
+ get.toBuilder().endpoint(endpoint + "/network/NOTAUUID").build(),
+ HttpResponse.builder()
+ .statusCode(400)
+ .payload(payloadFromResourceWithContentType("/network/error400.xml", ERROR + ";version=1.5"))
+ .build());
+
Error expected = Error.builder()
.message("validation error : EntityRef has incorrect type, expected type is com.vmware.vcloud.entity.network.")
.majorErrorCode(400)
@@ -93,7 +104,7 @@
.build();
try {
- api.getNetworkApi().getNetwork(networkUri);
+ api.getNetworkApi().get(URI.create(endpoint + "/network/NOTAUUID"));
fail("Should give HTTP 400 error");
} catch (VCloudDirectorException vde) {
assertEquals(vde.getError(), expected);
@@ -103,91 +114,125 @@
}
@Test
- public void testGetNetworkWithCatalogId() {
- URI networkUri = URI.create(endpoint + "/network/9e08c2f6-077a-42ce-bece-d5332e2ebb5c");
-
+ public void testGetNetworkHrefCatalogId() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/network/9e08c2f6-077a-42ce-bece-d5332e2ebb5c")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/error403-catalog.xml", VCloudDirectorMediaType.ERROR)
- .httpResponseBuilder().statusCode(403).build());
+ get.toBuilder().endpoint(endpoint + "/network/9e08c2f6-077a-42ce-bece-d5332e2ebb5c").build(),
+ HttpResponse.builder()
+ .statusCode(403)
+ .payload(payloadFromResourceWithContentType("/network/error403-catalog.xml", ERROR + ";version=1.5"))
+ .build());
- assertNull(api.getNetworkApi().getNetwork(networkUri));
+ assertNull(api.getNetworkApi().get(URI.create(endpoint + "/network/9e08c2f6-077a-42ce-bece-d5332e2ebb5c")));
}
@Test
- public void testGetNetworkWithFakeId() {
- URI networkUri = URI.create(endpoint + "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
-
+ public void testGetNetworkHrefFakeId() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/error403-fake.xml", VCloudDirectorMediaType.ERROR)
- .httpResponseBuilder().statusCode(403).build());
+ get.toBuilder().endpoint(endpoint + "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee").build(),
+ HttpResponse.builder()
+ .statusCode(403)
+ .payload(payloadFromResourceWithContentType("/network/error403-fake.xml", ERROR + ";version=1.5"))
+ .build());
- assertNull(api.getNetworkApi().getNetwork(networkUri));
+ assertNull(api.getNetworkApi().get(URI.create(endpoint + "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
}
+ HttpRequest resolveNetwork = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + networkUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String networkEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", networkUrn)
+ .a("id", networkUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + networkUrn)
+ .e("Link").a("rel", "alternate").a("type", NETWORK).a("href", networkHref.toString()).up()
+ // TODO: remove this when VCloudDirectorApiExpectTest no longer inherits from VCloudDirectorAdminApiExpectTest
+ .e("Link").a("rel", "alternate").a("type", ADMIN_NETWORK).a("href", networkHref.toString()).up());
+
+ HttpResponse resolveNetworkResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(networkEntity, ENTITY + ";version=1.5"))
+ .build();
+
@Test
- public void testGetMetadata() {
- URI networkUri = URI.create(endpoint + "/network/55a677cf-ab3f-48ae-b880-fab90421980c");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/metadata.xml", VCloudDirectorMediaType.METADATA)
- .httpResponseBuilder().build());
-
- Metadata expected = Metadata.builder()
- .type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata"))
- .link(Link.builder()
- .rel("up")
- .type("application/vnd.vmware.vcloud.network+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c"))
- .build())
- .entries(ImmutableSet.of(MetadataEntry.builder().entry("key", "value").build()))
- .build();
-
- assertEquals(api.getNetworkApi().getMetadataApi().getMetadata(networkUri), expected);
+ public void testGetNetworkUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, get, getResponse);
+ assertEquals(api.getNetworkApi().get(networkUrn), network());
}
- @Test
- public void testGetMetadataValue() {
- URI networkUri = URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata/KEY")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/metadataValue.xml", VCloudDirectorMediaType.METADATA_ENTRY)
- .httpResponseBuilder().build());
-
- MetadataValue expected = MetadataValue.builder()
- .href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata/key"))
- .link(Link.builder()
- .rel("up")
- .type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata"))
- .build())
- .value("value")
- .build();
- assertEquals(api.getNetworkApi().getMetadataApi().getMetadataValue(networkUri, "KEY"), expected);
+ HttpRequest getMetadata = HttpRequest.builder()
+ .method("GET")
+ .endpoint(networkHref + "/metadata")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/network/metadata.xml", METADATA))
+ .build();
+
+ @Test
+ public void testGetNetworkMetadataHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadata, getMetadataResponse);
+ assertEquals(api.getNetworkApi().getMetadataApi(networkHref).get(), metadata());
+ }
+
+ static Metadata metadata() {
+ return Metadata.builder()
+ .type("application/vnd.vmware.vcloud.metadata+xml")
+ .href(URI.create(endpoint + "/network/" + network + "/metadata"))
+ .link(Link.builder()
+ .rel("up")
+ .type("application/vnd.vmware.vcloud.network+xml")
+ .href(networkHref)
+ .build())
+ .entries(ImmutableSet.of(metadataEntry()))
+ .build();
}
- public static OrgNetwork orgNetwork() {
+ private static MetadataEntry metadataEntry() {
+ return MetadataEntry.builder().entry("key", "value").build();
+ }
+
+ HttpRequest getMetadataValue = HttpRequest.builder()
+ .method("GET")
+ .endpoint(networkHref + "/metadata/KEY")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+
+ HttpResponse getMetadataValueResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/network/metadataValue.xml", METADATA_VALUE))
+ .build();
+
+ @Test
+ public void testGetNetworkMetadataEntryHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse);
+ assertEquals(api.getNetworkApi().getMetadataApi(networkHref).getValue("KEY"), metadataValue());
+ }
+
+ private MetadataValue metadataValue() {
+ return MetadataValue.builder()
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata/key"))
+ .link(Link.builder()
+ .rel("up")
+ .type("application/vnd.vmware.vcloud.metadata+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata"))
+ .build())
+ .value("value")
+ .build();
+ }
+
+
+ public static OrgNetwork network() {
return OrgNetwork.builder()
.name("ilsolation01-Jclouds")
.id("urn:vcloud:network:f3ba8256-6f48-4512-aad6-600e85b4dc38")
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java
index c1d0967..40dc0f0 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java
@@ -22,8 +22,8 @@
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_EQ;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ_LIVE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REQUIRED_VALUE_OBJECT_FMT;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkResourceType;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
@@ -51,94 +51,92 @@
*/
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "NetworkApiLiveTest")
public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
-
+
public static final String NETWORK = "network";
-
+
/*
* Convenience reference to API api.
*/
protected NetworkApi networkApi;
-
+
private boolean metadataSet = false;
-
+
@Override
@BeforeClass(alwaysRun = true)
public void setupRequiredApis() {
networkApi = context.getApi().getNetworkApi();
}
-
+
@AfterClass(alwaysRun = true)
public void cleanUp() {
if (metadataSet) {
try {
- Task delete = adminContext.getApi().getNetworkApi().getMetadataApi().deleteMetadataEntry(toAdminUri(networkURI), "key");
- taskDoneEventually(delete);
+ Task remove = adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn).removeEntry("key");
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn(e, "Error when deleting metadata");
}
}
}
-
+
@Test(description = "GET /network/{id}")
public void testGetNetwork() {
// required for testing
- assertNotNull(networkURI, String.format(REF_REQ_LIVE, NETWORK));
-
- Network abstractNetwork = networkApi.getNetwork(networkURI);
- assertTrue(abstractNetwork instanceof OrgNetwork, String.format(REQUIRED_VALUE_OBJECT_FMT,
- ".class", NETWORK, abstractNetwork.getClass(),"OrgNetwork"));
+ assertNotNull(networkUrn, String.format(URN_REQ_LIVE, NETWORK));
+
+ Network abstractNetwork = networkApi.get(networkUrn);
+ assertTrue(abstractNetwork instanceof OrgNetwork,
+ String.format(REQUIRED_VALUE_OBJECT_FMT, ".class", NETWORK, abstractNetwork.getClass(), "OrgNetwork"));
OrgNetwork network = Network.toSubType(abstractNetwork);
assertNotNull(network, String.format(OBJ_REQ_LIVE, NETWORK));
assertTrue(!network.getDescription().equals("DO NOT USE"), "Network isn't to be used for testing");
-
+
Checks.checkOrgNetwork(network);
}
-
+
private void setupMetadata() {
- adminContext.getApi().getNetworkApi().getMetadataApi().setMetadata(toAdminUri(networkURI),
- "key", MetadataValue.builder().value("value").build());
+ adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn)
+ .putEntry("key", MetadataValue.builder().value("value").build());
metadataSet = true;
}
-
+
@Test(description = "GET /network/{id}/metadata", dependsOnMethods = { "testGetNetwork" })
public void testGetMetadata() {
if (adminContext != null) {
setupMetadata();
}
-
- Metadata metadata = networkApi.getMetadataApi().getMetadata(networkURI);
+
+ Metadata metadata = networkApi.getMetadataApi(networkUrn).get();
// required for testing
- assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
- String.format(OBJ_FIELD_REQ_LIVE, NETWORK, "metadata.entries"));
-
+ assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
+ String.format(OBJ_FIELD_REQ_LIVE, NETWORK, "metadata.entries"));
+
// parent type
checkResourceType(metadata);
-
+
for (MetadataEntry entry : metadata.getMetadataEntries()) {
// required elements and attributes
- assertNotNull(entry.getKey(),
- String.format(OBJ_FIELD_ATTRB_REQ, networkApi, "MetadataEntry", entry.getKey(), "key"));
- assertNotNull(entry.getValue(),
- String.format(OBJ_FIELD_ATTRB_REQ, networkApi, "MetadataEntry", entry.getValue(), "value"));
-
+ assertNotNull(entry.getKey(),
+ String.format(OBJ_FIELD_ATTRB_REQ, networkApi, "MetadataEntry", entry.getKey(), "key"));
+ assertNotNull(entry.getValue(),
+ String.format(OBJ_FIELD_ATTRB_REQ, networkApi, "MetadataEntry", entry.getValue(), "value"));
+
// parent type
checkResourceType(entry);
}
}
-
+
@Test(description = "GET /network/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
public void testGetMetadataValue() {
- MetadataValue metadataValue = networkApi.getMetadataApi().getMetadataValue(networkURI, "key");
-
+ MetadataValue metadataValue = networkApi.getMetadataApi(networkUrn).getValue("key");
+
// Check parent type
checkResourceType(metadataValue);
-
+
// Check required elements and attributes
String value = metadataValue.getValue();
- assertNotNull(value,
- String.format(OBJ_FIELD_ATTRB_REQ, NETWORK, "MetadataEntry",
- metadataValue.toString(), "value"));
- assertEquals(value, "value",
- String.format(OBJ_FIELD_EQ, NETWORK, "metadataEntry.value", "value", value));
+ assertNotNull(value,
+ String.format(OBJ_FIELD_ATTRB_REQ, NETWORK, "MetadataEntry", metadataValue.toString(), "value"));
+ assertEquals(value, "value", String.format(OBJ_FIELD_EQ, NETWORK, "metadataEntry.value", "value", value));
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgApiExpectTest.java
index aaf1902..06c6727 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgApiExpectTest.java
@@ -18,15 +18,18 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_ORG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_VALUE;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_LIST;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.fail;
import java.net.URI;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Error;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
import org.jclouds.vcloud.director.v1_5.domain.Link;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry;
@@ -39,7 +42,7 @@
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
+import com.google.common.net.HttpHeaders;
/**
* Allows us to test the {@link OrgApi} via its side effects.
@@ -51,9 +54,21 @@
@Test
public void testGetOrgList() {
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- getStandardRequest("GET", "/org/"),
- getStandardPayloadResponse("/org/orglist.xml", VCloudDirectorMediaType.ORG_LIST));
+ HttpRequest list = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/org/")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ HttpResponse listResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/org/orglist.xml", ORG_LIST + ";version=1.5"))
+ .build();
+
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, list, listResponse);
+
OrgList expected = OrgList.builder()
.org(Reference.builder()
@@ -63,130 +78,110 @@
.build())
.build();
- assertEquals(api.getOrgApi().getOrgList(), expected);
- }
-
- @Test
- public void testGetOrgFromOrgListReference() {
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- getStandardRequest("GET", "/org/"),
- getStandardPayloadResponse("/org/orglist.xml", VCloudDirectorMediaType.ORG_LIST));
-
- Reference org = Iterables.getOnlyElement(api.getOrgApi().getOrgList().getOrgs());
-
- api = requestsSendResponses(loginRequest, sessionResponse,
- getStandardRequest("GET", org.getHref()),
- getStandardPayloadResponse("/org/org.xml", VCloudDirectorMediaType.ORG));
-
- Org expected = org();
-
- assertEquals(api.getOrgApi().getOrg(org.getHref()), expected);
- }
-
- @Test
- public void testGetOrg() {
- URI orgUri = URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- getStandardRequest("GET", "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"),
- getStandardPayloadResponse("/org/org.xml", VCloudDirectorMediaType.ORG));
-
- Org expected = org();
-
- assertEquals(api.getOrgApi().getOrg(orgUri), expected);
- }
-
- @Test
- public void testGetOrgFailOnInvalidOrgId() {
- URI orgUri = URI.create(endpoint + "/org/NOTAUUID");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- getStandardRequest("GET", "/org/NOTAUUID"),
- getStandardPayloadResponse(400, "/org/error400.xml", VCloudDirectorMediaType.ERROR));
-
- Error expected = Error.builder()
- .message("validation error on field 'id': String value has invalid format or length")
- .majorErrorCode(400)
- .minorErrorCode("BAD_REQUEST")
- .build();
-
- try {
- api.getOrgApi().getOrg(orgUri);
- fail("Should give HTTP 400 error");
- } catch (VCloudDirectorException vde) {
- assertEquals(vde.getError(), expected);
- } catch (Exception e) {
- fail("Should have thrown a VCloudDirectorException");
- }
- }
-
- @Test
- public void testGetOrgFailOnWrongOrgId() {
- URI orgUri = URI.create(endpoint + "/org/9e08c2f6-077a-42ce-bece-d5332e2ebb5c");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- getStandardRequest("GET", "/org/9e08c2f6-077a-42ce-bece-d5332e2ebb5c"),
- getStandardPayloadResponse(403, "/org/error403-catalog.xml", VCloudDirectorMediaType.ERROR));
-
- assertNull(api.getOrgApi().getOrg(orgUri));
- }
-
- @Test
- public void testGetOrgFailOnFakeOrgId() {
- URI orgUri = URI.create(endpoint + "/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- getStandardRequest("GET", "/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"),
- getStandardPayloadResponse(403, "/org/error403-fake.xml", VCloudDirectorMediaType.ERROR));
-
- assertNull(api.getOrgApi().getOrg(orgUri));
+ assertEquals(api.getOrgApi().list(), expected);
}
- @Test
- public void testGetOrgMetadata() {
- URI orgUri = URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/orgMetadata.xml", VCloudDirectorMediaType.METADATA)
- .httpResponseBuilder().build());
-
- Metadata expected = Metadata.builder()
- .type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata"))
- .link(Link.builder()
- .rel("up")
- .type("application/vnd.vmware.vcloud.org+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build())
- .entries(ImmutableSet.of(metadataEntry()))
+ static String org = "6f312e42-cd2b-488d-a2bb-97519cd57ed0";
+ static String orgUrn = "urn:vcloud:org:" + org;
+ static URI orgHref = URI.create(endpoint + "/org/" + org);
+
+ HttpRequest get = HttpRequest.builder()
+ .method("GET")
+ .endpoint(orgHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
.build();
-
- assertEquals(api.getOrgApi().getMetadataApi().getMetadata(orgUri), expected);
+
+ HttpResponse getResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/org/org.xml", ORG + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testGetOrgHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
+ assertEquals(api.getOrgApi().get(orgHref), org());
}
+ HttpRequest resolveOrg = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + orgUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String orgEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", orgUrn)
+ .a("id", orgUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + orgUrn)
+ .e("Link").a("rel", "alternate").a("type", ORG).a("href", orgHref.toString()).up()
+ // TODO: remove this when VCloudDirectorApiExpectTest no longer inherits from VCloudDirectorAdminApiExpectTest
+ .e("Link").a("rel", "alternate").a("type", ADMIN_ORG).a("href", orgHref.toString()).up());
+
+ HttpResponse resolveOrgResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(orgEntity, ENTITY + ";version=1.5"))
+ .build();
+
@Test
- public void testGetOrgMetadataValue() {
- URI orgUri = URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0");
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata/KEY")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/orgMetadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE)
- .httpResponseBuilder().build());
-
- MetadataValue expected = metadataValue();
+ public void testGetOrgUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveOrg, resolveOrgResponse, get, getResponse);
+ assertEquals(api.getOrgApi().get(orgUrn), org());
+ }
+
- assertEquals(api.getOrgApi().getMetadataApi().getMetadataValue(orgUri, "KEY"), expected);
+ HttpRequest getMetadata = HttpRequest.builder()
+ .method("GET")
+ .endpoint(orgHref + "/metadata")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/org/orgMetadata.xml", METADATA))
+ .build();
+
+ @Test
+ public void testGetOrgMetadataHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadata, getMetadataResponse);
+ assertEquals(api.getOrgApi().getMetadataApi(orgHref).get(), metadata());
}
+ static Metadata metadata() {
+ return Metadata.builder()
+ .type("application/vnd.vmware.vcloud.metadata+xml")
+ .href(URI.create(endpoint + "/org/" + org + "/metadata"))
+ .link(Link.builder()
+ .rel("up")
+ .type("application/vnd.vmware.vcloud.org+xml")
+ .href(orgHref)
+ .build())
+ .entries(ImmutableSet.of(metadataEntry()))
+ .build();
+ }
+
+ HttpRequest getMetadataValue = HttpRequest.builder()
+ .method("GET")
+ .endpoint(orgHref + "/metadata/KEY")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+
+ HttpResponse getMetadataValueResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/org/orgMetadataValue.xml", METADATA_VALUE))
+ .build();
+
+ @Test
+ public void testGetOrgMetadataEntryHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse);
+ assertEquals(api.getOrgApi().getMetadataApi(orgHref).getValue("KEY"), metadataValue());
+ }
+
public static Org org() {
return Org.builder()
.name("JClouds")
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgApiLiveTest.java
index 201c9f0..050e814 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgApiLiveTest.java
@@ -21,7 +21,6 @@
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CONDITION_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CORRECT_VALUE_OBJECT_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.NOT_EMPTY_OBJECT_FMT;
-import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkControlAccessParams;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOrg;
@@ -30,17 +29,13 @@
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
-import java.net.URI;
-
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.org.Org;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
-import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
@@ -49,10 +44,10 @@
import com.google.common.collect.Iterables;
/**
-* Tests live behavior of {@link OrgApi}.
-*
-* @author grkvlt@apache.org
-*/
+ * Tests live behavior of {@link OrgApi}.
+ *
+ * @author grkvlt@apache.org
+ */
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "OrgApiLiveTest")
public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
@@ -61,29 +56,26 @@
*/
private OrgApi orgApi;
- private URI catalogRef;
- private String testCatalogId;
@Override
@BeforeClass(alwaysRun = true)
public void setupRequiredApis() {
orgApi = context.getApi().getOrgApi();
- testCatalogId = catalogId;
}
-
+
@AfterClass(alwaysRun = true)
public void cleanUp() throws Exception {
if (adminMembersSet) {
try {
- Task delete = adminContext.getApi().getOrgApi().getMetadataApi().deleteMetadataEntry(toAdminUri(orgURI), "KEY");
- taskDoneEventually(delete);
+ Task remove = adminContext.getApi().getOrgApi().getMetadataApi(orgUrn).removeEntry("KEY");
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn(e, "Error when deleting metadata entry");
}
try {
- adminContext.getApi().getCatalogApi().deleteCatalog(catalogRef);
+ adminContext.getApi().getCatalogApi().remove(catalogUrn);
} catch (Exception e) {
- logger.warn(e, "Error when deleting catalog'%s': %s", catalogRef);
+ logger.warn(e, "Error when deleting catalog'%s': %s", catalogUrn);
}
}
}
@@ -93,107 +85,87 @@
*/
private OrgList orgList;
- private URI orgURI;
- private Org org;
- private boolean adminMembersSet = false; // track if test entities have been created
+ private boolean adminMembersSet = false; // track if test entities have been addd
@Test(description = "GET /org")
public void testGetOrgList() {
// Call the method being tested
- orgList = orgApi.getOrgList();
-
+ orgList = orgApi.list();
+
// NOTE The environment MUST have at least one organisation configured
-
+
// Check test requirements
- assertFalse(Iterables.isEmpty(orgList.getOrgs()), String.format(NOT_EMPTY_OBJECT_FMT, "Org", "OrgList"));
-
- for (Reference orgRef : orgList.getOrgs()) {
- assertEquals(orgRef.getType(), VCloudDirectorMediaType.ORG, String.format(CONDITION_FMT, "Reference.Type", VCloudDirectorMediaType.ORG, orgRef.getType()));
+ assertFalse(Iterables.isEmpty(orgList), String.format(NOT_EMPTY_OBJECT_FMT, "Org", "OrgList"));
+
+ for (Reference orgRef : orgList) {
+ assertEquals(orgRef.getType(), VCloudDirectorMediaType.ORG,
+ String.format(CONDITION_FMT, "Reference.Type", VCloudDirectorMediaType.ORG, orgRef.getType()));
checkReferenceType(orgRef);
}
}
@Test(description = "GET /org/{id}", dependsOnMethods = { "testGetOrgList" })
public void testGetOrg() {
- Reference orgRef = Iterables.getFirst(orgList.getOrgs(), null);
+ Reference orgRef = Iterables.getFirst(orgList, null);
assertNotNull(orgRef);
-
- orgURI = orgRef.getHref();
-
+
// Call the method being tested
- org = orgApi.getOrg(orgURI);
+ org = orgApi.get(orgUrn);
+
+ assertEquals(orgApi.get(orgUrn), org);
checkOrg(org);
-
+
if (adminContext != null) {
setupAdminMembers();
}
}
-
+
/**
- * If we're running in an admin context, it's cleaner to make temporary entities, plus eliminates the need for configuration
+ * If we're running in an admin context, it's cleaner to make temporary entities, plus eliminates
+ * the need for configuration
*/
private void setupAdminMembers() {
- adminContext.getApi().getOrgApi().getMetadataApi().setMetadata(toAdminUri(orgURI),
- "KEY", MetadataValue.builder().value("VALUE").build());
-
- AdminCatalog newCatalog = AdminCatalog.builder()
- .name("Test Catalog "+getTestDateTimeStamp())
- .description("created by testOrg()")
- .build();
- newCatalog = adminContext.getApi().getCatalogApi().createCatalog(toAdminUri(orgURI), newCatalog);
-
- catalogRef = newCatalog.getHref();
- testCatalogId = newCatalog.getId().substring("urn:vcloud:catalog:".length());
-
+ adminContext.getApi().getOrgApi().getMetadataApi(orgUrn)
+ .putEntry("KEY", MetadataValue.builder().value("VALUE").build());
+
+ AdminCatalog newCatalog = AdminCatalog.builder().name("Test Catalog " + getTestDateTimeStamp())
+ .description("created by testOrg()").build();
+ newCatalog = adminContext.getApi().getCatalogApi().addCatalogToOrg(newCatalog, orgUrn);
+
+ catalogUrn = newCatalog.getId();
+
adminMembersSet = true;
}
-
+
@Test(description = "GET /org/{id}/metadata", dependsOnMethods = { "testGetOrg" })
public void testGetOrgMetadata() {
-
+
// Call the method being tested
- Metadata metadata = orgApi.getMetadataApi().getMetadata(orgURI);
-
+ Metadata metadata = orgApi.getMetadataApi(orgUrn).get();
+
// NOTE The environment MUST have at one metadata entry for the first organisation configured
-
+
checkMetadata(metadata);
-
+
// Check requirements for this test
- assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()), String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "Org"));
+ assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
+ String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "Org"));
}
-
+
@Test(description = "GET /org/{id}/metadata/{key}", dependsOnMethods = { "testGetOrgMetadata" })
public void testGetOrgMetadataValue() {
// Call the method being tested
- MetadataValue value = orgApi.getMetadataApi().getMetadataValue(orgURI, "KEY");
-
- // NOTE The environment MUST have configured the metadata entry as '{ key="KEY", value="VALUE" )'
+ MetadataValue value = orgApi.getMetadataApi(orgUrn).getValue("KEY");
+
+ // NOTE The environment MUST have configured the metadata entry as '{ key="KEY", value="VALUE"
+ // )'
String expected = "VALUE";
checkMetadataValue(value);
- assertEquals(value.getValue(), expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value.getValue()));
+ assertEquals(value.getValue(), expected,
+ String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value.getValue()));
}
- @Test(description = "GET /org/{id}/catalog/{catalogId}/controlAccess", dependsOnMethods = { "testGetOrg" })
- public void testGetControlAccess() {
- // Call the method being tested
- ControlAccessParams params = orgApi.getControlAccess(orgURI, testCatalogId);
-
- // Check params are well formed
- checkControlAccessParams(params);
- }
-
- @Test(description = "POST /org/{id}/catalog/{catalogId}/action/controlAccess", dependsOnMethods = { "testGetControlAccess" })
- public void testModifyControlAccess() {
- // Setup params
- ControlAccessParams params = orgApi.getControlAccess(orgURI, testCatalogId);
-
- // Call the method being tested
- ControlAccessParams modified = orgApi.modifyControlAccess(orgURI, testCatalogId, params);
-
- // Check params are well formed
- checkControlAccessParams(modified);
- }
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiExpectTest.java
index dad3778..782be36 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiExpectTest.java
@@ -156,25 +156,21 @@
.reference(CatalogReference.builder()
.type("application/vnd.vmware.vcloud.catalog+xml")
.name("QunyingTestCatalog")
- .id("urn:vcloud:catalog:7212e451-76e1-4631-b2de-ba1dfd8080e4")
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
.build())
.reference(CatalogReference.builder()
.type("application/vnd.vmware.vcloud.catalog+xml")
.name("Public")
- .id("urn:vcloud:catalog:9e08c2f6-077a-42ce-bece-d5332e2ebb5c")
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/9e08c2f6-077a-42ce-bece-d5332e2ebb5c"))
.build())
.reference(CatalogReference.builder()
.type("application/vnd.vmware.vcloud.catalog+xml")
.name("dantest")
- .id("urn:vcloud:catalog:b542aff4-9f97-4f51-a126-4330fbf62f02")
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/b542aff4-9f97-4f51-a126-4330fbf62f02"))
.build())
.reference(CatalogReference.builder()
.type("application/vnd.vmware.vcloud.catalog+xml")
.name("test")
- .id("urn:vcloud:catalog:b7289d54-4ca4-497f-9a93-2d4afc97e3da")
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/b7289d54-4ca4-497f-9a93-2d4afc97e3da"))
.build())
.build();
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiLiveTest.java
index 158dd76..efccc33 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiLiveTest.java
@@ -18,9 +18,7 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.ENTITY_EQUAL;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.NOT_EMPTY_OBJECT_FMT;
-import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkEntityType;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
@@ -34,8 +32,6 @@
import java.util.Set;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Entity;
-import org.jclouds.vcloud.director.v1_5.domain.Link;
import org.jclouds.vcloud.director.v1_5.domain.Resource;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.VApp;
@@ -49,7 +45,6 @@
import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultVAppTemplateRecord;
import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultVMRecord;
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
-import org.jclouds.vcloud.director.v1_5.predicates.ReferencePredicates;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -57,10 +52,10 @@
import com.google.common.collect.Iterables;
/**
-* Tests live behavior of {@link QueryApi}.
-*
-* @author grkvlt@apache.org
-*/
+ * Tests live behavior of {@link QueryApi}.
+ *
+ * @author grkvlt@apache.org
+ */
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "QueryApiLiveTest")
public class QueryApiLiveTest extends BaseVCloudDirectorApiLiveTest {
@@ -69,104 +64,96 @@
*/
private QueryApi queryApi;
- private VAppTemplateApi vAppTemplateApi;
private VAppApi vAppApi;
private VApp vApp;
-
+
@AfterClass(alwaysRun = true)
public void cleanUp() throws Exception {
- if (vApp != null) cleanUpVApp(vApp);
+ if (vApp != null)
+ cleanUpVApp(vApp);
}
@Override
@BeforeClass(alwaysRun = true)
public void setupRequiredApis() {
queryApi = context.getApi().getQueryApi();
- vAppTemplateApi = context.getApi().getVAppTemplateApi();
vAppApi = context.getApi().getVAppApi();
}
- @Test(description = "GET /entity/{id}")
- public void testEntity() {
- // Get a VAppTemplate to look up as an entity
- VAppTemplate vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
-
- // Method under test
- Entity entity = queryApi.entity(vAppTemplate.getId());
-
- // Check returned entity
- checkEntityType(entity);
-
- // Retrieve and check template using entity link
- Link link = Iterables.find(entity.getLinks(), ReferencePredicates.<Link>typeEquals(VCloudDirectorMediaType.VAPP_TEMPLATE));
- VAppTemplate retrieved = vAppTemplateApi.getVAppTemplate(link.getHref());
- assertEquals(retrieved, vAppTemplate, String.format(ENTITY_EQUAL, "VAppTemplate"));
-
- }
-
@Test(description = "GET /query")
public void testQuery() {
- VAppTemplate vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
- QueryResultRecords queryResult = queryApi.query("vAppTemplate", String.format("name==%s", vAppTemplate.getName()));
+ VAppTemplate vAppTemplate = lazyGetVAppTemplate();
+ QueryResultRecords queryResult = queryApi
+ .query("vAppTemplate", String.format("name==%s", vAppTemplate.getName()));
Set<URI> hrefs = toHrefs(queryResult);
-
- assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP_TEMPLATE, null), QueryResultVAppTemplateRecord.class);
- assertTrue(hrefs.contains(vAppTemplateURI), "VAppTemplates query result should include vAppTemplate "+vAppTemplateURI+"; but only has "+hrefs);
+
+ assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP_TEMPLATE, null),
+ QueryResultVAppTemplateRecord.class);
+ assertTrue(hrefs.contains(vAppTemplate.getHref()), "VAppTemplates query result should include vAppTemplate "
+ + vAppTemplate.getHref() + "; but only has " + hrefs);
}
@Test(description = "GET /catalogs/query")
public void testQueryAllCatalogs() {
QueryResultRecords catalogRecords = queryApi.catalogsQueryAll();
- assertFalse(catalogRecords.getRecords().isEmpty(), String.format(NOT_EMPTY_OBJECT_FMT, "CatalogRecord", "QueryResultRecords"));
+ assertFalse(catalogRecords.getRecords().isEmpty(),
+ String.format(NOT_EMPTY_OBJECT_FMT, "CatalogRecord", "QueryResultRecords"));
}
@Test(description = "GET /catalogs/query?format=references", dependsOnMethods = { "testQueryAllCatalogs" })
public void testQueryAllCatalogReferences() {
CatalogReferences catalogReferences = queryApi.catalogReferencesQueryAll();
- assertFalse(catalogReferences.getReferences().isEmpty(), String.format(NOT_EMPTY_OBJECT_FMT, "CatalogReference", "CatalogReferences"));
+ assertFalse(catalogReferences.getReferences().isEmpty(),
+ String.format(NOT_EMPTY_OBJECT_FMT, "CatalogReference", "CatalogReferences"));
}
-
+
@Test(description = "GET /vAppTemplates/query")
public void testQueryAllVAppTemplates() {
QueryResultRecords queryResult = queryApi.vAppTemplatesQueryAll();
Set<URI> hrefs = toHrefs(queryResult);
-
- assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP_TEMPLATE, null), QueryResultVAppTemplateRecord.class);
- assertTrue(hrefs.contains(vAppTemplateURI), "VAppTemplates query result should include vAppTemplate "+vAppTemplateURI+"; but only has "+hrefs);
+
+ assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP_TEMPLATE, null),
+ QueryResultVAppTemplateRecord.class);
+ assertTrue(hrefs.contains(lazyGetVAppTemplate().getHref()), "VAppTemplates query result should include vAppTemplate "
+ + lazyGetVAppTemplate().getHref() + "; but only has " + hrefs);
}
-
+
@Test(description = "GET /vAppTemplates/query?filter")
public void testQueryVAppTemplatesWithFilter() {
- VAppTemplate vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
+ VAppTemplate vAppTemplate = lazyGetVAppTemplate();
QueryResultRecords queryResult = queryApi.vAppTemplatesQuery(String.format("name==%s", vAppTemplate.getName()));
Set<URI> hrefs = toHrefs(queryResult);
-
- assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP_TEMPLATE, null), QueryResultVAppTemplateRecord.class);
- assertTrue(hrefs.contains(vAppTemplateURI), "VAppTemplates query result should have found vAppTemplate "+vAppTemplateURI);
+
+ assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP_TEMPLATE, null),
+ QueryResultVAppTemplateRecord.class);
+ assertTrue(hrefs.contains(vAppTemplate.getHref()), "VAppTemplates query result should have found vAppTemplate "
+ + vAppTemplate.getHref());
}
@Test(description = "GET /vApps/query")
public void testQueryAllVApps() {
vApp = instantiateVApp();
-
+
QueryResultRecords queryResult = queryApi.vAppsQueryAll();
Set<URI> hrefs = toHrefs(queryResult);
-
+
assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP, null), QueryResultVAppRecord.class);
- assertTrue(hrefs.contains(vApp.getHref()), "VApp query result should include vapp "+vApp.getHref()+"; but only has "+hrefs);
+ assertTrue(hrefs.contains(vApp.getHref()), "VApp query result should include vapp " + vApp.getHref()
+ + "; but only has " + hrefs);
}
-
- @Test(description = "GET /vApps/query?filter", dependsOnMethods = { "testQueryAllVApps" } )
+
+ @Test(description = "GET /vApps/query?filter", dependsOnMethods = { "testQueryAllVApps" })
public void testQueryVAppsWithFilter() {
QueryResultRecords queryResult = queryApi.vAppsQuery(String.format("name==%s", vApp.getName()));
Set<URI> hrefs = toHrefs(queryResult);
-
+
assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP, null), QueryResultVAppRecord.class);
- assertEquals(hrefs, Collections.singleton(vApp.getHref()), "VApps query result should have found vApp "+vApp.getHref());
+ assertEquals(hrefs, Collections.singleton(vApp.getHref()),
+ "VApps query result should have found vApp " + vApp.getHref());
}
-
- @Test(description = "GET /vms/query", dependsOnMethods = { "testQueryAllVApps" } )
+
+ @Test(description = "GET /vms/query", dependsOnMethods = { "testQueryAllVApps" })
public void testQueryAllVms() {
// Wait for vApp to have been entirely instantiated
Task instantiateTask = Iterables.getFirst(vApp.getTasks(), null);
@@ -175,55 +162,60 @@
}
// Start the vApp so that it has VMs
- Task task = vAppApi.powerOn(vApp.getHref());
+ Task task = vAppApi.powerOn(vApp.getId());
assertTaskSucceedsLong(task);
-
- vApp = vAppApi.getVApp(vApp.getHref()); // reload, so it has the VMs
+
+ vApp = vAppApi.get(vApp.getId()); // reload, so it has the VMs
List<Vm> vms = vApp.getChildren().getVms();
Set<URI> vmHrefs = toHrefs(vms);
// Method under test: do the query
QueryResultRecords queryResult = queryApi.vmsQueryAll();
Set<URI> hrefs = toHrefs(queryResult);
-
+
assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VM, null), QueryResultVMRecord.class);
- assertTrue(hrefs.containsAll(vmHrefs), "VMs query result should include vms "+vmHrefs+"; but only has "+hrefs);
+ assertTrue(hrefs.containsAll(vmHrefs), "VMs query result should include vms " + vmHrefs + "; but only has "
+ + hrefs);
}
-
- @Test(description = "GET /vms/query?filter", dependsOnMethods = { "testQueryAllVms" } )
+
+ @Test(description = "GET /vms/query?filter", dependsOnMethods = { "testQueryAllVms" })
public void testQueryAllVmsWithFilter() {
List<Vm> vms = vApp.getChildren().getVms();
Set<URI> vmHrefs = toHrefs(vms);
-
+
QueryResultRecords queryResult = queryApi.vmsQuery(String.format("containerName==%s", vApp.getName()));
Set<URI> hrefs = toHrefs(queryResult);
-
+
assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VM, null), QueryResultVMRecord.class);
- assertEquals(hrefs, vmHrefs, "VMs query result should equal vms of vApp "+vApp.getName()+" ("+vmHrefs+"); but only has "+hrefs);
+ assertEquals(hrefs, vmHrefs, "VMs query result should equal vms of vApp " + vApp.getName() + " (" + vmHrefs
+ + "); but only has " + hrefs);
}
-
+
@Test(description = "GET /mediaList/query")
public void testQueryAllMedia() {
QueryResultRecords queryResult = queryApi.mediaListQueryAll();
-
+
assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP, null), QueryResultMediaRecord.class);
}
-
+
@Test(description = "GET /mediaList/query?filter")
public void testQueryMediaWithFilter() {
String mediaName = "abc";
QueryResultRecords queryResult = queryApi.mediaListQuery(String.format("name==%s", mediaName));
-
+
assertRecordTypes(queryResult, Arrays.asList(VCloudDirectorMediaType.VAPP, null), QueryResultMediaRecord.class);
}
-
- private static void assertRecordTypes(QueryResultRecords queryResult, Collection<String> validTypes, Class<?> validClazz) {
+
+ private static void assertRecordTypes(QueryResultRecords queryResult, Collection<String> validTypes,
+ Class<?> validClazz) {
for (QueryResultRecordType record : queryResult.getRecords()) {
- assertTrue(validTypes.contains(record.getType()), "invalid type for query result record, "+record.getType()+"; valid types are "+validTypes);
- assertEquals(record.getClass(), validClazz, "invalid type for query result record, "+record.getClass()+"; expected "+validClazz);
+ assertTrue(validTypes.contains(record.getType()), "invalid type for query result record, " + record.getType()
+ + "; valid types are " + validTypes);
+ assertEquals(record.getClass(), validClazz, "invalid type for query result record, " + record.getClass()
+ + "; expected " + validClazz);
}
}
-
+
private Set<URI> toHrefs(QueryResultRecords queryResult) {
Set<URI> hrefs = new LinkedHashSet<URI>();
for (QueryResultRecordType record : queryResult.getRecords()) {
@@ -231,7 +223,7 @@
}
return hrefs;
}
-
+
private Set<URI> toHrefs(Iterable<? extends Resource> resources) {
Set<URI> hrefs = new LinkedHashSet<URI>();
for (Resource resource : resources) {
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiExpectTest.java
index 26e3143..a0091c8 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiExpectTest.java
@@ -18,9 +18,10 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASKS_LIST;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.fail;
import java.net.URI;
@@ -28,9 +29,6 @@
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Error;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
@@ -45,183 +43,140 @@
*/
@Test(groups = { "unit", "user" }, singleThreaded = true, testName = "TaskApiExpectTest")
public class TaskApiExpectTest extends VCloudDirectorAdminApiExpectTest {
-
- @Test
- public void testTaskListForValidOrg() {
- HttpRequest taskRequest = HttpRequest.builder()
- .method("GET")
- .endpoint(endpoint + "/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse taskResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/task/taskslist.xml", VCloudDirectorMediaType.TASKS_LIST + ";version=1.5"))
- .build();
-
- HttpRequest orgRequest = HttpRequest.builder().method("GET")
- .endpoint(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")
+ static String tasksList = "6f312e42-cd2b-488d-a2bb-97519cd57ed0";
+ static URI tasksListHref = URI.create(endpoint + "/tasksList/" + tasksList);
+
+ HttpRequest getTasksList = HttpRequest.builder()
+ .method("GET")
+ .endpoint(tasksListHref)
.addHeader("Accept", "*/*")
.addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
- HttpResponse orgResponse = HttpResponse.builder()
+ HttpResponse getTasksListResponse = HttpResponse.builder()
.statusCode(200)
- .payload(payloadFromResourceWithContentType("/org/org.xml", VCloudDirectorMediaType.TASKS_LIST + ";version=1.5"))
+ .payload(payloadFromResourceWithContentType("/task/tasksList.xml", TASKS_LIST + ";version=1.5"))
.build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse, orgRequest, orgResponse);
-
- TasksList expected = TasksList.builder()
- .name("Tasks Lists")
- .type("application/vnd.vmware.vcloud.tasksList+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .task(taskOne())
- .task(taskTwo())
- .build();
-
- assertEquals(api.getTaskApi().getTaskList(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")), expected);
- }
-
+
@Test
- public void testTaskListForInvalidOrgId() {
- HttpRequest taskRequest = HttpRequest.builder().method("GET")
- .endpoint(endpoint + "/tasksList/NOTAUUID")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token).build();
-
- HttpResponse taskResponse = HttpResponse.builder().build();
-
- HttpRequest orgRequest = HttpRequest.builder().method("GET")
- .endpoint(endpoint + "/org/NOTAUUID")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse orgResponse = HttpResponse.builder()
- .statusCode(400)
- .payload(payloadFromResourceWithContentType("/org/error400.xml", VCloudDirectorMediaType.ERROR + ";version=1.5"))
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse, orgRequest, orgResponse);
-
- Error expected = Error.builder()
- .message("validation error on field 'id': String value has invalid format or length")
- .majorErrorCode(400)
- .minorErrorCode("BAD_REQUEST")
- .build();
-
- try {
- api.getTaskApi().getTaskList(URI.create("https://vcloudbeta.bluelock.com/api/org/NOTAUUID"));
- fail("Should give HTTP 400 error");
- } catch (VCloudDirectorException vde) {
- assertEquals(vde.getError(), expected);
- } catch (Exception e) {
- fail("Should have thrown a VCloudDirectorException");
- }
+ public void testGetTasksListHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getTasksList, getTasksListResponse);
+ assertEquals(api.getTaskApi().getTasksList(tasksListHref), tasksList());
}
-
- @Test
- public void testTaskListForNotFoundOrgId() {
- HttpRequest taskRequest = HttpRequest.builder().method("GET")
- .endpoint(endpoint + "/tasksList/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse taskResponse = HttpResponse.builder().build();
-
- HttpRequest orgRequest = HttpRequest.builder().method("GET")
- .endpoint(endpoint + "/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse orgResponse = HttpResponse.builder()
- .statusCode(403)
- .payload(payloadFromResourceWithContentType("/org/error403-fake.xml", VCloudDirectorMediaType.ERROR + ";version=1.5"))
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse, orgRequest, orgResponse);
-
- assertNull(api.getTaskApi().getTaskList(URI.create("https://vcloudbeta.bluelock.com/api/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
- }
-
- @Test
- public void testGetTaskForTaskRef() {
- HttpRequest taskRequest = HttpRequest.builder()
- .method("GET")
- .endpoint(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse taskResponse = HttpResponse.builder()
- .statusCode(200)
- .payload(payloadFromResourceWithContentType("/task/task.xml", VCloudDirectorMediaType.TASK + ";version=1.5"))
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse);
-
- URI taskUri = URI.create(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b");
-
- //TODO: incorrect relationship, as task should not have a nested task container!!
- Task expected = taskOne();
-
- assertEquals(api.getTaskApi().getTask(taskUri), expected);
- }
-
- @Test
- public void testCancelTaskByTaskRef() {
- HttpRequest taskRequest = HttpRequest.builder()
- .method("POST")
- .endpoint(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b/action/cancel")
- .addHeader("Accept", "*/*")
- .addHeader("x-vcloud-authorization", token)
- .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
-
- HttpResponse taskResponse = HttpResponse.builder()
- .statusCode(200)
- .build();
-
- VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse);
-
- URI taskUri = URI.create(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b");
-
- api.getTaskApi().cancelTask(taskUri);
- }
-
- public static Task taskOne() {
- return Task.builder()
- .type("application/vnd.vmware.vcloud.task+xml")
- .name("task")
- .id("urn:vcloud:task:5fcd2af3-d0ec-45ce-9451-8c585a2c766b")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b"))
- .status("success")
- .operation("Created Catalog QunyingTestCatalog(7212e451-76e1-4631-b2de-ba1dfd8080e4)")
- .operationName("catalogCreateCatalog")
- .startTime(dateService.iso8601DateParse("2012-02-07T00:16:28.450-05:00"))
- .endTime(dateService.iso8601DateParse("2012-02-07T00:16:28.867-05:00"))
- .expiryTime(dateService.iso8601DateParse("2012-05-07T00:16:28.450-04:00"))
- .owner(Reference.builder()
- .type("application/vnd.vmware.vcloud.catalog+xml")
- .name("QunyingTestCatalog")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
- .build())
- .user(Reference.builder()
- .type("application/vnd.vmware.admin.user+xml")
- .name("JClouds")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build())
- .org(Reference.builder()
- .type("application/vnd.vmware.vcloud.org+xml")
- .name("JClouds")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build())
- .build();
+
+ private TasksList tasksList() {
+ return TasksList.builder()
+ .name("Tasks Lists")
+ .type("application/vnd.vmware.vcloud.tasksList+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .task(task())
+ .task(taskTwo())
+ .build();
}
+ static String task = "5fcd2af3-d0ec-45ce-9451-8c585a2c766b";
+ static String taskUrn = "urn:vcloud:task:" + task;
+ static URI taskHref = URI.create(endpoint + "/task/" + task);
+
+ HttpRequest get = HttpRequest.builder()
+ .method("GET")
+ .endpoint(taskHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ HttpResponse getResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/task/task.xml", TASK + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testGetTaskHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
+ assertEquals(api.getTaskApi().get(taskHref), task());
+ }
+
+ HttpRequest resolveTask = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + taskUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String taskEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", taskUrn)
+ .a("id", taskUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + taskUrn)
+ .e("Link").a("rel", "alternate").a("type", TASK).a("href", taskHref.toString()).up());
+
+ HttpResponse resolveTaskResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(taskEntity, ENTITY + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testGetTaskUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveTask, resolveTaskResponse, get, getResponse);
+ assertEquals(api.getTaskApi().get(taskUrn), task());
+ }
+
+ public static Task task() {
+ return Task.builder()
+ .type("application/vnd.vmware.vcloud.task+xml")
+ .name("task")
+ .id("urn:vcloud:task:5fcd2af3-d0ec-45ce-9451-8c585a2c766b")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b"))
+ .status("success")
+ .operation("Created Catalog QunyingTestCatalog(7212e451-76e1-4631-b2de-ba1dfd8080e4)")
+ .operationName("catalogCreateCatalog")
+ .startTime(dateService.iso8601DateParse("2012-02-07T00:16:28.450-05:00"))
+ .endTime(dateService.iso8601DateParse("2012-02-07T00:16:28.867-05:00"))
+ .expiryTime(dateService.iso8601DateParse("2012-05-07T00:16:28.450-04:00"))
+ .owner(Reference.builder()
+ .type("application/vnd.vmware.vcloud.catalog+xml")
+ .name("QunyingTestCatalog")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
+ .build())
+ .user(Reference.builder()
+ .type("application/vnd.vmware.admin.user+xml")
+ .name("JClouds")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .build())
+ .org(Reference.builder()
+ .type("application/vnd.vmware.vcloud.org+xml")
+ .name("JClouds")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .build())
+ .build();
+ }
+
+ HttpRequest cancel = HttpRequest.builder()
+ .method("POST")
+ .endpoint(taskHref+ "/action/cancel")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+
+ HttpResponse cancelResponse = HttpResponse.builder()
+ .statusCode(200)
+ .build();
+
+ @Test
+ public void testCancelTaskHref() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, cancel, cancelResponse);
+ api.getTaskApi().cancel(taskHref);
+ }
+
+ @Test
+ public void testCancelTaskUrn() {
+ VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveTask, resolveTaskResponse, cancel, cancelResponse);
+ api.getTaskApi().cancel(taskHref);
+ }
+
public static Task taskTwo() {
return Task.builder()
.type("application/vnd.vmware.vcloud.task+xml")
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiLiveTest.java
index c33c208..8f8db6c 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiLiveTest.java
@@ -25,12 +25,15 @@
import java.net.URI;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
import org.jclouds.vcloud.director.v1_5.domain.VApp;
+import org.jclouds.vcloud.director.v1_5.domain.org.Org;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
+import org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -79,13 +82,17 @@
@Test(description = "GET /tasksList/{id}")
public void testGetTaskList() {
- orgList = orgApi.getOrgList();
- Reference orgRef = Iterables.getFirst(orgList.getOrgs(), null);
+ orgList = orgApi.list();
+ Reference orgRef = Iterables.getFirst(orgList, null);
assertNotNull(orgRef);
orgURI = orgRef.getHref();
+ Org org = orgApi.get(orgURI);
+
+ URI taskListHref = Iterables.find(org.getLinks(), LinkPredicates.typeEquals(VCloudDirectorMediaType.TASKS_LIST)).getHref();
+
// Call the method being tested
- taskList = taskApi.getTaskList(orgURI);
+ taskList = taskApi.getTasksList(taskListHref);
// NOTE The environment MUST have ...
@@ -105,7 +112,7 @@
taskURI = taskRef.getHref();
// Call the method being tested
- task = taskApi.getTask(taskURI);
+ task = taskApi.get(taskURI);
// Check required elements and attributes
checkTask(task);
@@ -122,7 +129,7 @@
assertTaskStatusEventually(task, Task.Status.RUNNING, ImmutableSet.of(Task.Status.ERROR, Task.Status.ABORTED));
// Call the method being tested
- taskApi.cancelTask(taskURI);
+ taskApi.cancel(taskURI);
assertTaskStatusEventually(task, Task.Status.CANCELED, ImmutableSet.of(Task.Status.ERROR, Task.Status.ABORTED, Task.Status.SUCCESS));
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppApiExpectTest.java
index 8c47dd8..3f0a622 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppApiExpectTest.java
@@ -82,15 +82,15 @@
VApp expected = getVApp();
- assertEquals(api.getVAppApi().getVApp(vAppURI), expected);
+ assertEquals(api.getVAppApi().get(vAppURI), expected);
}
@Test(enabled = false)
- public void testModifyVApp() {
+ public void testEditVApp() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vAppId)
- .xmlFilePayload("/vApp/modifyVApp.xml", VCloudDirectorMediaType.VAPP)
+ .xmlFilePayload("/vApp/editVApp.xml", VCloudDirectorMediaType.VAPP)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
@@ -101,25 +101,25 @@
modified.setName("new-name");
modified.setDescription("New Description");
- Task expected = modifyVAppTask();
+ Task expected = editVAppTask();
- assertEquals(api.getVAppApi().modifyVApp(vAppURI, modified), expected);
+ assertEquals(api.getVAppApi().edit(vAppURI, modified), expected);
}
@Test(enabled = false)
- public void testDeleteVApp() {
+ public void testRemoveVApp() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("DELETE", vAppId)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/deleteVAppTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/removeVAppTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
- Task expected = deleteVAppTask();
+ Task expected = removeVAppTask();
- assertEquals(api.getVAppApi().deleteVApp(vAppURI), expected);
+ assertEquals(api.getVAppApi().remove(vAppURI), expected);
}
@Test(enabled = false)
@@ -138,7 +138,7 @@
ControlAccessParams expected = controlAccessParams();
- assertEquals(api.getVAppApi().modifyControlAccess(vAppURI, params), expected);
+ assertEquals(api.getVAppApi().editControlAccess(vAppURI, params), expected);
}
@Test(enabled = false)
@@ -349,12 +349,12 @@
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/getControlAccess.xml", VCloudDirectorMediaType.VAPP)
+ .xmlFilePayload("/vApp/getAccessControl.xml", VCloudDirectorMediaType.VAPP)
.httpResponseBuilder().build());
- ControlAccessParams expected = getControlAccessParams();
+ ControlAccessParams expected = getAccessControlParams();
- assertEquals(api.getVAppApi().getControlAccess(vAppURI), expected);
+ assertEquals(api.getVAppApi().getAccessControl(vAppURI), expected);
}
@Test(enabled = false)
@@ -374,23 +374,23 @@
}
@Test(enabled = false)
- public void testModifyLeaseSettingsSection() {
+ public void testEditLeaseSettingsSection() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vAppId + "/leaseSettingsSection")
- .xmlFilePayload("/vApp/modifyLeaseSettingsSection.xml", VCloudDirectorMediaType.LEASE_SETTINGS_SECTION)
+ .xmlFilePayload("/vApp/editLeaseSettingsSection.xml", VCloudDirectorMediaType.LEASE_SETTINGS_SECTION)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyLeaseSettingsSectionTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editLeaseSettingsSectionTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
LeaseSettingsSection section = getLeaseSettingsSection().toBuilder()
.build();
- Task expected = modifyLeaseSettingsSectionTask();
+ Task expected = editLeaseSettingsSectionTask();
- assertEquals(api.getVAppApi().modifyLeaseSettingsSection(vAppURI, section), expected);
+ assertEquals(api.getVAppApi().editLeaseSettingsSection(vAppURI, section), expected);
}
@Test(enabled = false)
@@ -410,23 +410,23 @@
}
@Test(enabled = false)
- public void testModifyNetworkConfigSection() {
+ public void testEditNetworkConfigSection() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vAppId + "/networkConfigSection")
- .xmlFilePayload("/vApp/modifyNetworkConfigSection.xml", VCloudDirectorMediaType.NETWORK_CONFIG_SECTION)
+ .xmlFilePayload("/vApp/editNetworkConfigSection.xml", VCloudDirectorMediaType.NETWORK_CONFIG_SECTION)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyNetworkConfigSectionTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editNetworkConfigSectionTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
NetworkConfigSection section = getNetworkConfigSection().toBuilder()
.build();
- Task expected = modifyNetworkConfigSectionTask();
+ Task expected = editNetworkConfigSectionTask();
- assertEquals(api.getVAppApi().modifyNetworkConfigSection(vAppURI, section), expected);
+ assertEquals(api.getVAppApi().editNetworkConfigSection(vAppURI, section), expected);
}
@Test(enabled = false)
@@ -462,11 +462,11 @@
}
@Test(enabled = false)
- public void testModifyOwner() {
+ public void testEditOwner() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vAppId + "/owner")
- .xmlFilePayload("/vApp/modifyOwner.xml", VCloudDirectorMediaType.OWNER)
+ .xmlFilePayload("/vApp/editOwner.xml", VCloudDirectorMediaType.OWNER)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
@@ -475,7 +475,7 @@
Owner owner = Owner.builder()
.build();
- api.getVAppApi().modifyOwner(vAppURI, owner);
+ api.getVAppApi().editOwner(vAppURI, owner);
}
@Test(enabled = false)
@@ -495,20 +495,20 @@
}
@Test(enabled = false)
- public void testModifyProductSections() {
+ public void testEditProductSections() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vAppId + "/productSections")
- .xmlFilePayload("/vApp/modifyProductSections.xml", VCloudDirectorMediaType.PRODUCT_SECTION_LIST)
+ .xmlFilePayload("/vApp/editProductSections.xml", VCloudDirectorMediaType.PRODUCT_SECTION_LIST)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyProductSections.xml", VCloudDirectorMediaType.VAPP)
+ .xmlFilePayload("/vApp/editProductSections.xml", VCloudDirectorMediaType.VAPP)
.httpResponseBuilder().build());
- Task expected = modifyProductSectionsTask();
+ Task expected = editProductSectionsTask();
- assertEquals(api.getVAppApi().modifyProductSections(vAppURI, null), expected);
+ assertEquals(api.getVAppApi().editProductSections(vAppURI, null), expected);
}
@Test(enabled = false)
@@ -528,23 +528,23 @@
}
@Test(enabled = false)
- public void testModifyStartupSection() {
+ public void testEditStartupSection() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vAppId + "/startupSection")
- .xmlFilePayload("/vApp/modifyStartupSection.xml", VCloudDirectorMediaType.STARTUP_SECTION)
+ .xmlFilePayload("/vApp/editStartupSection.xml", VCloudDirectorMediaType.STARTUP_SECTION)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyStartupSectionTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editStartupSectionTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
StartupSection section = null; // getStartupSection().toBuilder()
// .build();
- Task expected = modifyStartupSectionTask();
+ Task expected = editStartupSectionTask();
- assertEquals(api.getVAppApi().modifyStartupSection(vAppURI, section), expected);
+ assertEquals(api.getVAppApi().editStartupSection(vAppURI, section), expected);
}
public static VApp getVApp() {
@@ -571,14 +571,14 @@
return vApp;
}
- public static Task modifyVAppTask() {
+ public static Task editVAppTask() {
Task task = Task.builder()
.build();
return task;
}
- public static Task deleteVAppTask() {
+ public static Task removeVAppTask() {
Task task = Task.builder()
.build();
@@ -690,7 +690,7 @@
return task;
}
- public static ControlAccessParams getControlAccessParams() {
+ public static ControlAccessParams getAccessControlParams() {
ControlAccessParams params = ControlAccessParams.builder()
.build();
@@ -704,7 +704,7 @@
return section;
}
- public static Task modifyGuestCustomizationSectionTask() {
+ public static Task editGuestCustomizationSectionTask() {
Task task = Task.builder()
.build();
@@ -718,7 +718,7 @@
return section;
}
- public static Task modifyLeaseSettingsSectionTask() {
+ public static Task editLeaseSettingsSectionTask() {
Task task = Task.builder()
.build();
@@ -746,7 +746,7 @@
return section;
}
- public static Task modifyNetworkConfigSectionTask() {
+ public static Task editNetworkConfigSectionTask() {
Task task = Task.builder()
.build();
@@ -760,7 +760,7 @@
return section;
}
- public static Task modifyNetworkConnectionSectionTask() {
+ public static Task editNetworkConnectionSectionTask() {
Task task = Task.builder()
.build();
@@ -781,7 +781,7 @@
return section;
}
- public static Task modifyOperatingSystemSectionTask() {
+ public static Task editOperatingSystemSectionTask() {
Task task = Task.builder()
.build();
@@ -795,7 +795,7 @@
return owner;
}
- public static Task modifyOwnerTask() {
+ public static Task editOwnerTask() {
Task task = Task.builder()
.build();
@@ -809,7 +809,7 @@
return sectionItems;
}
- public static Task modifyProductSectionsTask() {
+ public static Task editProductSectionsTask() {
Task task = Task.builder()
.build();
@@ -857,7 +857,7 @@
return section;
}
- public static Task modifyStartupSectionTask() {
+ public static Task editStartupSectionTask() {
Task task = Task.builder()
.build();
@@ -871,7 +871,7 @@
return section;
}
- public static Task modifyVirtualHardwareSectionTask() {
+ public static Task editVirtualHardwareSectionTask() {
Task task = Task.builder()
.build();
@@ -885,7 +885,7 @@
return cpu;
}
- public static Task modifyVirtualHardwareSectionCpuTask() {
+ public static Task editVirtualHardwareSectionCpuTask() {
Task task = Task.builder()
.build();
@@ -899,7 +899,7 @@
return disks;
}
- public static Task modifyVirtualHardwareSectionDisksTask() {
+ public static Task editVirtualHardwareSectionDisksTask() {
Task task = Task.builder()
.build();
@@ -920,7 +920,7 @@
return memory;
}
- public static Task modifyVirtualHardwareSectionMemoryTask() {
+ public static Task editVirtualHardwareSectionMemoryTask() {
Task task = Task.builder()
.build();
@@ -934,7 +934,7 @@
return networkCards;
}
- public static Task modifyVirtualHardwareSectionNetworkCardsTask() {
+ public static Task editVirtualHardwareSectionNetworkCardsTask() {
Task task = Task.builder()
.build();
@@ -948,11 +948,11 @@
return serialPorts;
}
- public static Task modifyVirtualHardwareSectionSerialPortsTask() {
+ public static Task editVirtualHardwareSectionSerialPortsTask() {
return task("id", "name", "description", "status", "operation", "operationName", "startTime");
}
- /** Used by other methods to create a custom {@link Task} object. */
+ /** Used by other methods to add a custom {@link Task} object. */
private static Task task(String taskId, String name, String description, String status, String operation, String operationName, String startTime) {
Task task = Task.builder()
.error(Error.builder().build())
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppApiLiveTest.java
index 3d31a13..49030f6 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppApiLiveTest.java
@@ -18,10 +18,6 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
-import static com.google.common.base.Predicates.and;
-import static com.google.common.collect.Iterables.contains;
-import static com.google.common.collect.Iterables.find;
-import static com.google.common.collect.Iterables.getFirst;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CONDITION_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CORRECT_VALUE_OBJECT_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.ENTITY_EQUAL;
@@ -43,12 +39,11 @@
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkProductSectionList;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkStartupSection;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkVApp;
-import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals;
-import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.typeEquals;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import java.net.URI;
import java.util.List;
@@ -60,13 +55,9 @@
import org.jclouds.dmtf.ovf.NetworkSection;
import org.jclouds.dmtf.ovf.ProductSection;
import org.jclouds.dmtf.ovf.StartupSection;
-import org.jclouds.io.Payloads;
import org.jclouds.vcloud.director.v1_5.AbstractVAppApiLiveTest;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.AccessSetting;
import org.jclouds.vcloud.director.v1_5.domain.Checks;
-import org.jclouds.vcloud.director.v1_5.domain.Link;
-import org.jclouds.vcloud.director.v1_5.domain.Media;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry;
import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
@@ -75,12 +66,24 @@
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.ResourceEntity.Status;
import org.jclouds.vcloud.director.v1_5.domain.Task;
+import org.jclouds.vcloud.director.v1_5.domain.User;
import org.jclouds.vcloud.director.v1_5.domain.VApp;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.Vm;
+import org.jclouds.vcloud.director.v1_5.domain.network.DhcpService;
+import org.jclouds.vcloud.director.v1_5.domain.network.FirewallService;
+import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
+import org.jclouds.vcloud.director.v1_5.domain.network.IpRanges;
+import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
+import org.jclouds.vcloud.director.v1_5.domain.network.NatService;
+import org.jclouds.vcloud.director.v1_5.domain.network.Network;
+import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkAssignment;
+import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection.IpAddressAllocationMode;
+import org.jclouds.vcloud.director.v1_5.domain.network.NetworkFeatures;
+import org.jclouds.vcloud.director.v1_5.domain.network.SyslogServerSettings;
import org.jclouds.vcloud.director.v1_5.domain.network.VAppNetworkConfiguration;
import org.jclouds.vcloud.director.v1_5.domain.params.ComposeVAppParams;
import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
@@ -89,8 +92,6 @@
import org.jclouds.vcloud.director.v1_5.domain.params.RecomposeVAppParams;
import org.jclouds.vcloud.director.v1_5.domain.params.SourcedCompositionItemParam;
import org.jclouds.vcloud.director.v1_5.domain.params.UndeployVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecordType;
-import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecords;
import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
@@ -100,8 +101,8 @@
import org.testng.annotations.Test;
import com.google.common.base.CharMatcher;
+import com.google.common.base.Optional;
import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -110,7 +111,7 @@
/**
* Tests behavior of the {@link VAppApi}.
- *
+ *
* @author grkvlt@apache.org
*/
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "VAppApiLiveTest")
@@ -118,69 +119,24 @@
private MetadataValue metadataValue;
private String key;
- private URI testUserURI;
- private boolean mediaCreated = false;
private boolean testUserCreated = false;
-
+ private User user;
+
@BeforeClass(alwaysRun = true)
protected void setupRequiredEntities() {
- Set<Link> links = vdcApi.getVdc(vdcURI).getLinks();
- if (mediaURI == null) {
- Predicate<Link> addMediaLink = and(relEquals(Link.Rel.ADD), typeEquals(VCloudDirectorMediaType.MEDIA));
-
- if (contains(links, addMediaLink)) {
- Link addMedia = find(links, addMediaLink);
- byte[] iso = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
-
- Media sourceMedia = Media.builder()
- .type(VCloudDirectorMediaType.MEDIA)
- .name(name("media"))
- .size(iso.length)
- .imageType(Media.ImageType.ISO)
- .description("Test media generated by VAppApiLiveTest")
- .build();
- Media media = context.getApi().getMediaApi().createMedia(addMedia.getHref(), sourceMedia);
-
- Link uploadLink = getFirst(getFirst(media.getFiles(), null).getLinks(), null);
- context.getApi().getUploadApi().upload(uploadLink.getHref(), Payloads.newByteArrayPayload(iso));
-
- media = context.getApi().getMediaApi().getMedia(media.getHref());
-
- if (media.getTasks().size() == 1) {
- Task uploadTask = Iterables.getOnlyElement(media.getTasks());
- Checks.checkTask(uploadTask);
- assertEquals(uploadTask.getStatus(), Task.Status.RUNNING);
- assertTrue(retryTaskSuccess.apply(uploadTask), String.format(TASK_COMPLETE_TIMELY, "uploadTask"));
- media = context.getApi().getMediaApi().getMedia(media.getHref());
- }
-
- mediaURI = media.getHref();
- mediaCreated = true;
- }
- }
-
if (adminContext != null) {
- Link orgLink = find(links, and(relEquals("up"), typeEquals(VCloudDirectorMediaType.ORG)));
- testUserURI = adminContext.getApi().getUserApi().createUser(toAdminUri(orgLink), randomTestUser("VAppAccessTest")).getHref();
- } else {
- testUserURI = userURI;
+ userUrn = adminContext.getApi().getUserApi().addUserToOrg(randomTestUser("VAppAccessTest"), org.getId())
+ .getId();
}
+ user = lazyGetUser();
}
-
+
@AfterClass(alwaysRun = true, dependsOnMethods = { "cleanUpEnvironment" })
public void cleanUp() {
- if (adminContext != null && mediaCreated && mediaURI != null) {
+ if (adminContext != null && testUserCreated && userUrn != null) {
try {
- Task delete = context.getApi().getMediaApi().deleteMedia(mediaURI);
- taskDoneEventually(delete);
- } catch (Exception e) {
- logger.warn(e, "Error when deleting media");
- }
- }
- if (adminContext != null && testUserCreated && testUserURI != null) {
- try {
- adminContext.getApi().getUserApi().deleteUser(testUserURI);
+ adminContext.getApi().getUserApi().remove(userUrn);
} catch (Exception e) {
logger.warn(e, "Error when deleting user");
}
@@ -188,262 +144,264 @@
}
/**
- * @see VAppApi#getVApp(URI)
+ * @see VAppApi#get(URI)
*/
@Test(description = "GET /vApp/{id}")
public void testGetVApp() {
// The method under test
- vApp = vAppApi.getVApp(vAppURI);
+ vApp = vAppApi.get(vAppUrn);
// Check the retrieved object is well formed
checkVApp(vApp);
// Check the required fields are set
- assertEquals(vApp.isDeployed(), Boolean.FALSE, String.format(OBJ_FIELD_EQ, VAPP, "deployed", "FALSE", vApp.isDeployed().toString()));
- assertTrue(vApp.getName().startsWith("test-vapp-"), String.format(MATCHES_STRING_FMT, "name", "test-vapp-*", vApp.getName()));
- assertEquals(vApp.getDescription(), "Test VApp", String.format(OBJ_FIELD_EQ, VAPP, "Description", "Test VApp", vApp.getDescription()));
+ assertEquals(vApp.isDeployed(), Boolean.FALSE,
+ String.format(OBJ_FIELD_EQ, VAPP, "deployed", "FALSE", vApp.isDeployed().toString()));
+ assertTrue(vApp.getName().startsWith("test-vapp-"),
+ String.format(MATCHES_STRING_FMT, "name", "test-vapp-*", vApp.getName()));
+ assertEquals(vApp.getDescription(), "Test VApp",
+ String.format(OBJ_FIELD_EQ, VAPP, "Description", "Test VApp", vApp.getDescription()));
// TODO instantiationParams instantiationParams()
// TODO source.href vAppTemplateURI
// Check status
- assertVAppStatus(vAppURI, Status.POWERED_OFF);
+ assertVAppStatus(vAppUrn, Status.POWERED_OFF);
}
-
+
@Test(description = "POST /vApp/{id}/action/recomposeVApp")
public void testRecomposeVApp() {
- Set<Vm> vms = getAvailableVMsFromVAppTemplates();
-
- VApp composedVApp = vdcApi.composeVApp(vdcURI, ComposeVAppParams.builder()
- .name(name("composed-"))
- .instantiationParams(instantiationParams())
- .build());
+ VApp composedVApp = vdcApi.composeVApp(vdcUrn, ComposeVAppParams.builder()
+ .name(name("composed-"))
+ .instantiationParams(instantiationParams())
+ .build());
+
+ Set<Vm> vms = getAvailableVMsFromVAppTemplate(vAppTemplate);
+
// get the first vm to be added to vApp
Vm toAddVm = Iterables.get(vms, 0);
- RecomposeVAppParams params = createRecomposeParams(composedVApp, toAddVm);
+
+ // TODO clean up network config of the vm
+ //cleanUpNetworkConnectionSection(toAddVm);
+ RecomposeVAppParams params = addRecomposeParams(composedVApp, toAddVm);
+
// The method under test
- Task recomposeVApp = vAppApi.recompose(composedVApp.getHref(), params);
+ Task recomposeVApp = vAppApi.recompose(composedVApp.getId(), params);
assertTaskSucceedsLong(recomposeVApp);
-
- // add another vm instance to vApp
- params = createRecomposeParams(composedVApp, toAddVm);
- recomposeVApp = vAppApi.recompose(composedVApp.getHref(), params);
- assertTaskSucceedsLong(recomposeVApp);
-
- // delete a vm
- VApp configured = vAppApi.getVApp(composedVApp.getHref());
+
+ // remove a vm
+ VApp configured = vAppApi.get(composedVApp.getId());
List<Vm> vmsToBeDeleted = configured.getChildren().getVms();
- Vm toBeDeleted = Iterables.get(vmsToBeDeleted, 0);
- Task deleteVm = vmApi.deleteVm(toBeDeleted.getHref());
- assertTaskSucceedsLong(deleteVm);
+ Vm toBeDeleted = Iterables.find(vmsToBeDeleted, new Predicate<Vm>() {
+
+ @Override
+ public boolean apply(Vm vm) {
+ return vm.getName().startsWith("vm-");
+ }
- Task deleteVApp = vAppApi.deleteVApp(composedVApp.getHref());
+ });
+ Task removeVm = vmApi.remove(toBeDeleted.getId());
+ assertTaskSucceedsLong(removeVm);
+
+ Task deleteVApp = vAppApi.remove(composedVApp.getHref());
assertTaskSucceedsLong(deleteVApp);
}
- private Set<Vm> getAvailableVMsFromVAppTemplates() {
- Set<Vm> vms = Sets.newLinkedHashSet();
- QueryResultRecords templatesRecords = queryApi.vAppTemplatesQueryAll();
- for (QueryResultRecordType templateRecord : templatesRecords.getRecords()) {
- VAppTemplate vAppTemplate = vAppTemplateApi.getVAppTemplate(templateRecord.getHref());
- vms.addAll(vAppTemplate.getChildren());
- }
- return ImmutableSet.copyOf(Iterables.filter(vms, new Predicate<Vm>() {
- // filter out vms in the vApp template with computer name that contains underscores, dots, or both.
+ private Set<Vm> getAvailableVMsFromVAppTemplate(VAppTemplate vAppTemplate) {
+ return ImmutableSet.copyOf(Iterables.filter(vAppTemplate.getChildren(), new Predicate<Vm>() {
+ // filter out vms in the vApp template with computer name that contains underscores, dots,
+ // or both.
@Override
public boolean apply(Vm input) {
- GuestCustomizationSection guestCustomizationSection = vmApi.getGuestCustomizationSection(input.getHref());
+ GuestCustomizationSection guestCustomizationSection = vmApi.getGuestCustomizationSection(input.getId());
String computerName = guestCustomizationSection.getComputerName();
- String retainComputerName = CharMatcher.inRange('0', '9')
- .or(CharMatcher.inRange('a', 'z'))
- .or(CharMatcher.inRange('A', 'Z'))
- .or(CharMatcher.is('-'))
- .retainFrom(computerName);
+ String retainComputerName = CharMatcher.inRange('0', '9').or(CharMatcher.inRange('a', 'z'))
+ .or(CharMatcher.inRange('A', 'Z')).or(CharMatcher.is('-')).retainFrom(computerName);
return computerName.equals(retainComputerName);
}
}));
}
-
+
/**
- * @see VAppApi#modifyVApp(URI, VApp)
+ * @see VAppApi#edit(URI, VApp)
*/
@Test(description = "PUT /vApp/{id}", dependsOnMethods = { "testGetVApp" })
- public void testModifyVApp() {
- VApp newVApp = VApp.builder()
- .name(name("new-name-"))
- .description("New Description")
- .build();
+ public void testEditVApp() {
+ VApp newVApp = VApp.builder().name(name("new-name-")).description("New Description").build();
vAppNames.add(newVApp.getName());
// The method under test
- Task modifyVApp = vAppApi.modifyVApp(vApp.getHref(), newVApp);
- assertTrue(retryTaskSuccess.apply(modifyVApp), String.format(TASK_COMPLETE_TIMELY, "modifyVApp"));
+ Task editVApp = vAppApi.edit(vAppUrn, newVApp);
+ assertTrue(retryTaskSuccess.apply(editVApp), String.format(TASK_COMPLETE_TIMELY, "editVApp"));
- // Get the updated VApp
- vApp = vAppApi.getVApp(vApp.getHref());
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check the required fields are set
- assertEquals(vApp.getName(), newVApp.getName(), String.format(OBJ_FIELD_EQ, VAPP, "Name", newVApp.getName(), vApp.getName()));
- assertEquals(vApp.getDescription(), newVApp.getDescription(), String.format(OBJ_FIELD_EQ, VAPP, "Description", newVApp.getDescription(), vApp.getDescription()));
+ assertEquals(vApp.getName(), newVApp.getName(),
+ String.format(OBJ_FIELD_EQ, VAPP, "Name", newVApp.getName(), vApp.getName()));
+ assertEquals(vApp.getDescription(), newVApp.getDescription(),
+ String.format(OBJ_FIELD_EQ, VAPP, "Description", newVApp.getDescription(), vApp.getDescription()));
}
@Test(description = "POST /vApp/{id}/action/deploy", dependsOnMethods = { "testGetVApp" })
public void testDeployVApp() {
DeployVAppParams params = DeployVAppParams.builder()
- .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS))
- .notForceCustomization()
- .notPowerOn()
- .build();
+ .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS)).notForceCustomization()
+ .notPowerOn().build();
// The method under test
- Task deployVApp = vAppApi.deploy(vApp.getHref(), params);
+ Task deployVApp = vAppApi.deploy(vAppUrn, params);
assertTrue(retryTaskSuccessLong.apply(deployVApp), String.format(TASK_COMPLETE_TIMELY, "deployVApp"));
- // Get the updated VApp
- vApp = vAppApi.getVApp(vApp.getHref());
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check the required fields are set
assertTrue(vApp.isDeployed(), String.format(OBJ_FIELD_EQ, VAPP, "deployed", "TRUE", vApp.isDeployed().toString()));
// Check status
- assertVAppStatus(vAppURI, Status.POWERED_OFF);
+ assertVAppStatus(vAppUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/power/action/powerOn", dependsOnMethods = { "testDeployVApp" })
public void testPowerOnVApp() {
// Power off VApp
- vApp = powerOffVApp(vApp.getHref());
+ vApp = powerOffVApp(vAppUrn);
// The method under test
- Task powerOnVApp = vAppApi.powerOn(vApp.getHref());
+ Task powerOnVApp = vAppApi.powerOn(vAppUrn);
assertTaskSucceedsLong(powerOnVApp);
- // Get the updated VApp
- vApp = vAppApi.getVApp(vApp.getHref());
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check status
- assertVAppStatus(vAppURI, Status.POWERED_ON);
+ assertVAppStatus(vAppUrn, Status.POWERED_ON);
}
@Test(description = "POST /vApp/{id}/power/action/reboot", dependsOnMethods = { "testDeployVApp" })
public void testReboot() {
// Power on VApp
- vApp = powerOnVApp(vApp.getHref());
-
+ vApp = powerOnVApp(vAppUrn);
+
// The method under test
- Task reboot = vAppApi.reboot(vApp.getHref());
+ Task reboot = vAppApi.reboot(vAppUrn);
assertTaskSucceedsLong(reboot);
- // Get the updated VApp
- vApp = vAppApi.getVApp(vApp.getHref());
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check status
- assertVAppStatus(vAppURI, Status.POWERED_OFF);
+ assertVAppStatus(vAppUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/power/action/shutdown", dependsOnMethods = { "testDeployVApp" })
public void testShutdown() {
// Power on VApp
- vApp = powerOnVApp(vApp.getHref());
+ vApp = powerOnVApp(vAppUrn);
+ vApp = vAppApi.get(vAppUrn);
+
// The method under test
- Task shutdown = vAppApi.shutdown(vApp.getHref());
+ Task shutdown = vAppApi.shutdown(vAppUrn);
assertTaskSucceedsLong(shutdown);
- // Get the updated VApp
- vApp = vAppApi.getVApp(vApp.getHref());
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check status
- assertVAppStatus(vApp.getHref(), Status.POWERED_OFF);
+ assertVAppStatus(vAppUrn, Status.POWERED_OFF);
// Power on the VApp again
- vApp = powerOnVApp(vApp.getHref());
+ vApp = powerOnVApp(vAppUrn);
}
@Test(description = "POST /vApp/{id}/power/action/suspend", dependsOnMethods = { "testDeployVApp" })
public void testSuspend() {
// Power on VApp
- vApp = powerOnVApp(vApp.getHref());
+ vApp = powerOnVApp(vAppUrn);
// The method under test
- Task suspend = vAppApi.suspend(vAppURI);
+ Task suspend = vAppApi.suspend(vAppUrn);
assertTaskSucceedsLong(suspend);
- // Get the updated VApp
- vApp = vAppApi.getVApp(vApp.getHref());
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check status
- assertVAppStatus(vAppURI, Status.SUSPENDED);
+ assertVAppStatus(vAppUrn, Status.SUSPENDED);
// Power on the VApp again
- vApp = powerOnVApp(vApp.getHref());
+ vApp = powerOnVApp(vAppUrn);
}
@Test(description = "POST /vApp/{id}/power/action/reset", dependsOnMethods = { "testDeployVApp" })
public void testReset() {
// Power on VApp
- vApp = powerOnVApp(vApp.getHref());
+ vApp = powerOnVApp(vAppUrn);
// The method under test
- Task reset = vAppApi.reset(vAppURI);
+ Task reset = vAppApi.reset(vAppUrn);
assertTaskSucceedsLong(reset);
- // Get the updated VApp
- vApp = vAppApi.getVApp(vAppURI);
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check status
- assertVAppStatus(vAppURI, Status.POWERED_ON);
+ assertVAppStatus(vAppUrn, Status.POWERED_ON);
}
@Test(description = "POST /vApp/{id}/action/undeploy", dependsOnMethods = { "testDeployVApp" })
public void testUndeployVApp() {
// Power on VApp
- vApp = powerOnVApp(vApp.getHref());
+ vApp = powerOnVApp(vAppUrn);
UndeployVAppParams params = UndeployVAppParams.builder().build();
// The method under test
- Task undeploy = vAppApi.undeploy(vApp.getHref(), params);
+ Task undeploy = vAppApi.undeploy(vAppUrn, params);
assertTrue(retryTaskSuccess.apply(undeploy), String.format(TASK_COMPLETE_TIMELY, "undeploy"));
- // Get the updated VApp
- vApp = vAppApi.getVApp(vAppURI);
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check status
- assertFalse(vApp.isDeployed(), String.format(OBJ_FIELD_EQ, VAPP, "deployed", "FALSE", vApp.isDeployed().toString()));
- assertVAppStatus(vAppURI, Status.POWERED_OFF);
+ assertFalse(vApp.isDeployed(),
+ String.format(OBJ_FIELD_EQ, VAPP, "deployed", "FALSE", vApp.isDeployed().toString()));
+ assertVAppStatus(vAppUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/power/action/powerOff", dependsOnMethods = { "testUndeployVApp" })
public void testPowerOffVApp() {
// Power on VApp
- vApp = powerOnVApp(vApp.getHref());
-
+ vApp = powerOnVApp(vAppUrn);
+
// The method under test
- Task powerOffVApp = vAppApi.powerOff(vApp.getHref());
+ Task powerOffVApp = vAppApi.powerOff(vAppUrn);
assertTrue(retryTaskSuccess.apply(powerOffVApp), String.format(TASK_COMPLETE_TIMELY, "powerOffVApp"));
- // Get the updated VApp
- vApp = vAppApi.getVApp(vAppURI);
+ // Get the edited VApp
+ vApp = vAppApi.get(vAppUrn);
// Check status
- assertVAppStatus(vAppURI, Status.POWERED_OFF);
+ assertVAppStatus(vAppUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/action/controlAccess", dependsOnMethods = { "testGetVApp" })
public void testControlAccessUser() {
- ControlAccessParams params = ControlAccessParams.builder()
- .notSharedToEveryone()
- .accessSetting(AccessSetting.builder()
- .subject(Reference.builder().href(testUserURI).type(ADMIN_USER).build())
- .accessLevel("ReadOnly")
- .build())
- .build();
+ ControlAccessParams params = ControlAccessParams
+ .builder()
+ .notSharedToEveryone()
+ .accessSetting(
+ AccessSetting.builder()
+ .subject(Reference.builder().href(user.getHref()).type(ADMIN_USER).build())
+ .accessLevel("ReadOnly").build()).build();
// The method under test
- ControlAccessParams modified = vAppApi.modifyControlAccess(vApp.getHref(), params);
+ ControlAccessParams modified = vAppApi.editControlAccess(vAppUrn, params);
// Check the retrieved object is well formed
checkControlAccessParams(modified);
@@ -453,14 +411,12 @@
@Test(description = "POST /vApp/{id}/action/controlAccess", dependsOnMethods = { "testControlAccessUser" })
public void testControlAccessEveryone() {
-
- ControlAccessParams params = ControlAccessParams.builder()
- .sharedToEveryone()
- .everyoneAccessLevel("FullControl")
- .build();
-
+
+ ControlAccessParams params = ControlAccessParams.builder().sharedToEveryone().everyoneAccessLevel("FullControl")
+ .build();
+
// The method under test
- ControlAccessParams modified = vAppApi.modifyControlAccess(vApp.getHref(), params);
+ ControlAccessParams modified = vAppApi.editControlAccess(vAppUrn, params);
// Check the retrieved object is well formed
checkControlAccessParams(modified);
@@ -472,62 +428,61 @@
@Test(description = "POST /vApp/{id}/action/discardSuspendedState", dependsOnMethods = { "testDeployVApp" })
public void testDiscardSuspendedState() {
// Power on, then suspend the VApp
- vApp = powerOnVApp(vAppURI);
- vApp = suspendVApp(vAppURI);
-
+ vApp = powerOnVApp(vAppUrn);
+ vApp = suspendVApp(vAppUrn);
+
// The method under test
- Task discardSuspendedState = vAppApi.discardSuspendedState(vApp.getHref());
- assertTrue(retryTaskSuccess.apply(discardSuspendedState), String.format(TASK_COMPLETE_TIMELY, "discardSuspendedState"));
+ Task discardSuspendedState = vAppApi.discardSuspendedState(vAppUrn);
+ assertTrue(retryTaskSuccess.apply(discardSuspendedState),
+ String.format(TASK_COMPLETE_TIMELY, "discardSuspendedState"));
}
- @Test(description = "POST /vApp/{id}/action/enterMaintenanceMode", groups = {"systemAdmin"})
+ @Test(description = "POST /vApp/{id}/action/enterMaintenanceMode", groups = { "systemAdmin" })
public void testEnterMaintenanceMode() {
// Do this to a new vApp, so don't mess up subsequent tests by making the vApp read-only
VApp temp = instantiateVApp();
DeployVAppParams params = DeployVAppParams.builder()
- .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS))
- .notForceCustomization()
- .notPowerOn()
- .build();
- Task deployVApp = vAppApi.deploy(temp.getHref(), params);
+ .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS)).notForceCustomization()
+ .notPowerOn().build();
+ Task deployVApp = vAppApi.deploy(temp.getId(), params);
assertTaskSucceedsLong(deployVApp);
-
+
try {
// Method under test
- vAppApi.enterMaintenanceMode(temp.getHref());
-
- temp = vAppApi.getVApp(temp.getHref());
- assertTrue(temp.isInMaintenanceMode(), String.format(CONDITION_FMT, "InMaintenanceMode", "TRUE", temp.isInMaintenanceMode()));
+ vAppApi.enterMaintenanceMode(temp.getId());
+
+ temp = vAppApi.get(temp.getId());
+ assertTrue(temp.isInMaintenanceMode(),
+ String.format(CONDITION_FMT, "InMaintenanceMode", "TRUE", temp.isInMaintenanceMode()));
// Exit maintenance mode
- vAppApi.exitMaintenanceMode(temp.getHref());
+ vAppApi.exitMaintenanceMode(temp.getId());
} finally {
cleanUpVApp(temp);
}
}
- @Test(description = "POST /vApp/{id}/action/exitMaintenanceMode", dependsOnMethods = { "testEnterMaintenanceMode" }, groups = {"systemAdmin"})
+ @Test(description = "POST /vApp/{id}/action/exitMaintenanceMode", dependsOnMethods = { "testEnterMaintenanceMode" }, groups = { "systemAdmin" })
public void testExitMaintenanceMode() {
// Do this to a new vApp, so don't mess up subsequent tests by making the vApp read-only
VApp temp = instantiateVApp();
DeployVAppParams params = DeployVAppParams.builder()
- .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS))
- .notForceCustomization()
- .notPowerOn()
- .build();
- Task deployVApp = vAppApi.deploy(temp.getHref(), params);
+ .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS)).notForceCustomization()
+ .notPowerOn().build();
+ Task deployVApp = vAppApi.deploy(temp.getId(), params);
assertTaskSucceedsLong(deployVApp);
-
+
try {
// Enter maintenance mode
- vAppApi.enterMaintenanceMode(temp.getHref());
-
- // Method under test
- vAppApi.exitMaintenanceMode(temp.getHref());
+ vAppApi.enterMaintenanceMode(temp.getId());
- temp = vAppApi.getVApp(temp.getHref());
- assertFalse(temp.isInMaintenanceMode(), String.format(CONDITION_FMT, "InMaintenanceMode", "FALSE", temp.isInMaintenanceMode()));
+ // Method under test
+ vAppApi.exitMaintenanceMode(temp.getId());
+
+ temp = vAppApi.get(temp.getId());
+ assertFalse(temp.isInMaintenanceMode(),
+ String.format(CONDITION_FMT, "InMaintenanceMode", "FALSE", temp.isInMaintenanceMode()));
} finally {
cleanUpVApp(temp);
}
@@ -536,7 +491,7 @@
@Test(description = "GET /vApp/{id}/controlAccess", dependsOnMethods = { "testGetVApp" })
public void testGetControlAccess() {
// The method under test
- ControlAccessParams controlAccess = vAppApi.getControlAccess(vApp.getHref());
+ ControlAccessParams controlAccess = vAppApi.getAccessControl(vAppUrn);
// Check the retrieved object is well formed
checkControlAccessParams(controlAccess);
@@ -545,27 +500,26 @@
@Test(description = "GET /vApp/{id}/leaseSettingsSection", dependsOnMethods = { "testGetVApp" })
public void testGetLeaseSettingsSection() {
// The method under test
- LeaseSettingsSection section = vAppApi.getLeaseSettingsSection(vApp.getHref());
+ LeaseSettingsSection section = vAppApi.getLeaseSettingsSection(vAppUrn);
// Check the retrieved object is well formed
checkLeaseSettingsSection(section);
}
@Test(description = "PUT /vApp/{id}/leaseSettingsSection", dependsOnMethods = { "testGetLeaseSettingsSection" })
- public void testModifyLeaseSettingsSection() {
+ public void testEditLeaseSettingsSection() {
// Copy existing section
- LeaseSettingsSection oldSection = vAppApi.getLeaseSettingsSection(vApp.getHref());
+ LeaseSettingsSection oldSection = vAppApi.getLeaseSettingsSection(vAppUrn);
Integer twoHours = (int) TimeUnit.SECONDS.convert(2L, TimeUnit.HOURS);
- LeaseSettingsSection newSection = oldSection.toBuilder()
- .deploymentLeaseInSeconds(twoHours)
- .build();
+ LeaseSettingsSection newSection = oldSection.toBuilder().deploymentLeaseInSeconds(twoHours).build();
// The method under test
- Task modifyLeaseSettingsSection = vAppApi.modifyLeaseSettingsSection(vApp.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyLeaseSettingsSection), String.format(TASK_COMPLETE_TIMELY, "modifyLeaseSettingsSection"));
+ Task editLeaseSettingsSection = vAppApi.editLeaseSettingsSection(vAppUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editLeaseSettingsSection),
+ String.format(TASK_COMPLETE_TIMELY, "editLeaseSettingsSection"));
// Retrieve the modified section
- LeaseSettingsSection modified = vAppApi.getLeaseSettingsSection(vApp.getHref());
+ LeaseSettingsSection modified = vAppApi.getLeaseSettingsSection(vAppUrn);
// Check the retrieved object is well formed
checkLeaseSettingsSection(modified);
@@ -573,71 +527,125 @@
// Check the date fields
if (modified.getDeploymentLeaseExpiration() != null && newSection.getDeploymentLeaseExpiration() != null) {
assertTrue(modified.getDeploymentLeaseExpiration().after(newSection.getDeploymentLeaseExpiration()),
- String.format("The new deploymentLeaseExpiration timestamp must be later than the original: %s > %s",
- dateService.iso8601DateFormat(modified.getDeploymentLeaseExpiration()),
- dateService.iso8601DateFormat(newSection.getDeploymentLeaseExpiration())));
+ String.format("The new deploymentLeaseExpiration timestamp must be later than the original: %s > %s",
+ dateService.iso8601DateFormat(modified.getDeploymentLeaseExpiration()),
+ dateService.iso8601DateFormat(newSection.getDeploymentLeaseExpiration())));
}
if (modified.getStorageLeaseExpiration() != null && newSection.getStorageLeaseExpiration() != null) {
- assertTrue(modified.getStorageLeaseExpiration().after(newSection.getStorageLeaseExpiration()),
- String.format("The new storageLeaseExpiration timestamp must be later than the original: %s > %s",
- dateService.iso8601DateFormat(modified.getStorageLeaseExpiration()),
- dateService.iso8601DateFormat(newSection.getStorageLeaseExpiration())));
+ assertTrue(modified.getStorageLeaseExpiration().after(newSection.getStorageLeaseExpiration()), String.format(
+ "The new storageLeaseExpiration timestamp must be later than the original: %s > %s",
+ dateService.iso8601DateFormat(modified.getStorageLeaseExpiration()),
+ dateService.iso8601DateFormat(newSection.getStorageLeaseExpiration())));
}
// Reset the date fields
- modified = modified.toBuilder()
- .deploymentLeaseExpiration(null)
- .storageLeaseExpiration(null)
- .build();
- newSection = newSection.toBuilder()
- .deploymentLeaseExpiration(null)
- .storageLeaseExpiration(null)
- .build();
+ modified = modified.toBuilder().deploymentLeaseExpiration(null).storageLeaseExpiration(null).build();
+ newSection = newSection.toBuilder().deploymentLeaseExpiration(null).storageLeaseExpiration(null).build();
// Check the section was modified correctly
- assertEquals(modified.getDeploymentLeaseInSeconds(), twoHours,
- String.format(OBJ_FIELD_EQ, "LeaseSettingsSection", "DeploymentLeaseInSeconds", Integer.toString(twoHours), modified.getDeploymentLeaseInSeconds().toString()));
+ assertEquals(
+ modified.getDeploymentLeaseInSeconds(),
+ twoHours,
+ String.format(OBJ_FIELD_EQ, "LeaseSettingsSection", "DeploymentLeaseInSeconds",
+ Integer.toString(twoHours), modified.getDeploymentLeaseInSeconds().toString()));
assertEquals(modified, newSection, String.format(ENTITY_EQUAL, "LeaseSettingsSection"));
}
@Test(description = "GET /vApp/{id}/networkConfigSection", dependsOnMethods = { "testGetVApp" })
public void testGetNetworkConfigSection() {
// The method under test
- NetworkConfigSection section = vAppApi.getNetworkConfigSection(vApp.getHref());
+ NetworkConfigSection section = vAppApi.getNetworkConfigSection(vAppUrn);
// Check the retrieved object is well formed
checkNetworkConfigSection(section);
}
@Test(description = "PUT /vApp/{id}/networkConfigSection", dependsOnMethods = { "testGetNetworkConfigSection" })
- public void testModifyNetworkConfigSection() {
+ public void testEditNetworkConfigSection() {
+
// Copy existing section and update fields
- NetworkConfigSection oldSection = vAppApi.getNetworkConfigSection(vApp.getHref());
- VAppNetworkConfiguration networkConfig = VAppNetworkConfiguration.builder().build();
- NetworkConfigSection newSection = oldSection.toBuilder().networkConfigs(ImmutableSet.of(networkConfig))
- .build();
+ NetworkConfigSection oldSection = vAppApi.getNetworkConfigSection(vAppUrn);
+ Network network = lazyGetNetwork();
+
+ tryFindBridgedNetworkInOrg();
+ IpRange ipRange = ipRange();
+ NetworkConfiguration newConfiguration = NetworkConfiguration.builder()
+ .ipScope(ipScope(ipRange))
+ .parentNetwork(Reference.builder().fromEntity(network).build())
+ .fenceMode(FenceMode.NAT_ROUTED)
+ .retainNetInfoAcrossDeployments(false)
+ .syslogServerSettings(SyslogServerSettings.builder().syslogServerIp1("192.168.14.27").build())
+ .features(NetworkFeatures.builder()
+ .service(DhcpService.builder()
+ .ipRange(ipRange)
+ .build())
+ .service(FirewallService.builder()
+ .logDefaultAction(false)
+ .defaultAction("drop")
+ .build())
+ .service(NatService.builder()
+ .natType("portForwarding")
+ .enabled(false)
+ .build())
+ .build())
+ .build();
+
+ final String networkName = name("vAppNetwork-");
+ VAppNetworkConfiguration newVAppNetworkConfiguration = VAppNetworkConfiguration.builder()
+ .networkName(networkName)
+ .description(name("description-"))
+ .configuration(newConfiguration)
+ .build();
+
+ NetworkConfigSection newSection = oldSection.toBuilder().networkConfigs(ImmutableSet.of(newVAppNetworkConfiguration)).build();
// The method under test
- Task modifyNetworkConfigSection = vAppApi.modifyNetworkConfigSection(vApp.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyNetworkConfigSection), String.format(TASK_COMPLETE_TIMELY, "modifyNetworkConfigSection"));
+ Task editNetworkConfigSection = vAppApi.editNetworkConfigSection(vAppUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editNetworkConfigSection),
+ String.format(TASK_COMPLETE_TIMELY, "editNetworkConfigSection"));
// Retrieve the modified section
- NetworkConfigSection modified = vAppApi.getNetworkConfigSection(vApp.getHref());
+ NetworkConfigSection modified = vAppApi.getNetworkConfigSection(vAppUrn);
// Check the retrieved object is well formed
checkNetworkConfigSection(modified);
+
+ Optional<VAppNetworkConfiguration> modifiedOptionalVAppNetwork = Iterables.tryFind(modified.getNetworkConfigs(), new IsVAppNetworkNamed(networkName));
+ if(!modifiedOptionalVAppNetwork.isPresent())
+ fail(String.format("Could not find vApp network named %s", networkName));
+
+ Optional<VAppNetworkConfiguration> newOptionalVAppNetwork = Iterables.tryFind(newSection.getNetworkConfigs(), new IsVAppNetworkNamed(networkName));
+ if(!newOptionalVAppNetwork.isPresent())
+ fail(String.format("Could not find vApp network named %s", networkName));
- // Check the modified section fields are set correctly
-// assertEquals(modified.getInfo(), newSection.getInfo());
+ assertEquals(modifiedOptionalVAppNetwork.get().getNetworkName(), newOptionalVAppNetwork.get().getNetworkName(), String.format(ENTITY_EQUAL, "NetworkName"));
+ assertEquals(modifiedOptionalVAppNetwork.get().getConfiguration().getFenceMode(), newOptionalVAppNetwork.get().getConfiguration().getFenceMode(), String.format(ENTITY_EQUAL, "FenceMode"));
+ assertEquals(modifiedOptionalVAppNetwork.get().getConfiguration().getIpScope(), newOptionalVAppNetwork.get().getConfiguration().getIpScope(), String.format(ENTITY_EQUAL, "IpScope"));
+ assertEquals(modifiedOptionalVAppNetwork.get().getConfiguration().getNetworkFeatures(), newOptionalVAppNetwork.get().getConfiguration().getNetworkFeatures(), String.format(ENTITY_EQUAL, "NetworkFeatures"));
+ }
- // Check the section was modified correctly
- assertEquals(modified, newSection, String.format(ENTITY_EQUAL, "NetworkConfigSection"));
+ private IpRange ipRange() {
+ return IpRange.builder()
+ .startAddress("192.168.2.100")
+ .endAddress("192.168.2.199")
+ .build();
+ }
+
+ private IpScope ipScope(IpRange ipRange) {
+ IpRanges newIpRanges = IpRanges.builder()
+ .ipRange(ipRange)
+ .build();
+ return IpScope.builder()
+ .isInherited(false)
+ .gateway("192.168.2.1")
+ .netmask("255.255.0.0")
+ .ipRanges(newIpRanges).build();
}
@Test(description = "GET /vApp/{id}/networkSection", dependsOnMethods = { "testGetVApp" })
public void testGetNetworkSection() {
// The method under test
- NetworkSection section = vAppApi.getNetworkSection(vApp.getHref());
+ NetworkSection section = vAppApi.getNetworkSection(vAppUrn);
// Check the retrieved object is well formed
checkNetworkSection(section);
@@ -646,21 +654,21 @@
@Test(description = "GET /vApp/{id}/owner", dependsOnMethods = { "testGetVApp" })
public void testGetOwner() {
// The method under test
- Owner owner = vAppApi.getOwner(vApp.getHref());
+ Owner owner = vAppApi.getOwner(vAppUrn);
// Check the retrieved object is well formed
checkOwner(owner);
}
@Test(description = "PUT /vApp/{id}/owner", dependsOnMethods = { "testGetOwner" })
- public void testModifyOwner() {
- Owner newOwner = Owner.builder().user(Reference.builder().href(testUserURI).type(ADMIN_USER).build()).build();
+ public void testEditOwner() {
+ Owner newOwner = Owner.builder().user(Reference.builder().href(user.getHref()).type(ADMIN_USER).build()).build();
// The method under test
- vAppApi.modifyOwner(vApp.getHref(), newOwner);
+ vAppApi.editOwner(vAppUrn, newOwner);
// Get the new VApp owner
- Owner modified = vAppApi.getOwner(vApp.getHref());
+ Owner modified = vAppApi.getOwner(vAppUrn);
// Check the retrieved object is well formed
checkOwner(modified);
@@ -672,32 +680,33 @@
@Test(description = "GET /vApp/{id}/productSections", dependsOnMethods = { "testGetVApp" })
public void testGetProductSections() {
// The method under test
- ProductSectionList sectionList = vAppApi.getProductSections(vApp.getHref());
+ ProductSectionList sectionList = vAppApi.getProductSections(vAppUrn);
// Check the retrieved object is well formed
checkProductSectionList(sectionList);
}
@Test(description = "PUT /vApp/{id}/productSections", dependsOnMethods = { "testGetProductSections" })
- public void testModifyProductSections() {
- // Copy existing section and update fields
- ProductSectionList oldSections = vAppApi.getProductSections(vApp.getHref());
- ProductSectionList newSections = oldSections.toBuilder()
- .productSection(ProductSection.builder()
- .info("Information about the installed software") // Default ovf:Info text
- .required()
- .product(MsgType.builder().value("jclouds").build())
- .vendor(MsgType.builder().value("jclouds Inc.").build())
- // NOTE other ProductSection elements not returned by vCloud
- .build())
- .build();
+ public void testEditProductSections() {
+ // Copy existing section and edit fields
+ ProductSectionList oldSections = vAppApi.getProductSections(vAppUrn);
+ ProductSectionList newSections = oldSections
+ .toBuilder()
+ .productSection(
+ ProductSection.builder().info("Information about the installed software")
+ // Default ovf:Info text
+ .required().product(MsgType.builder().value("jclouds").build())
+ .vendor(MsgType.builder().value("jclouds Inc.").build())
+ // NOTE other ProductSection elements not returned by vCloud
+ .build()).build();
// The method under test
- Task modifyProductSections = vAppApi.modifyProductSections(vApp.getHref(), newSections);
- assertTrue(retryTaskSuccess.apply(modifyProductSections), String.format(TASK_COMPLETE_TIMELY, "modifyProductSections"));
+ Task editProductSections = vAppApi.editProductSections(vAppUrn, newSections);
+ assertTrue(retryTaskSuccess.apply(editProductSections),
+ String.format(TASK_COMPLETE_TIMELY, "editProductSections"));
// Retrieve the modified section
- ProductSectionList modified = vAppApi.getProductSections(vApp.getHref());
+ ProductSectionList modified = vAppApi.getProductSections(vAppUrn);
// Check the retrieved object is well formed
checkProductSectionList(modified);
@@ -712,30 +721,29 @@
@Test(description = "GET /vApp/{id}/startupSection", dependsOnMethods = { "testGetVApp" })
public void testGetStartupSection() {
// The method under test
- StartupSection section = vAppApi.getStartupSection(vApp.getHref());
+ StartupSection section = vAppApi.getStartupSection(vAppUrn);
// Check the retrieved object is well formed
checkStartupSection(section);
}
@Test(description = "PUT /vApp/{id}/startupSection", dependsOnMethods = { "testGetStartupSection" })
- public void testModifyStartupSection() {
- // Copy existing section and update fields
- StartupSection oldSection = vAppApi.getStartupSection(vApp.getHref());
+ public void testEditStartupSection() {
+ // Copy existing section and edit fields
+ StartupSection oldSection = vAppApi.getStartupSection(vAppUrn);
StartupSection newSection = oldSection.toBuilder().build();
// The method under test
- Task modifyStartupSection = vAppApi.modifyStartupSection(vApp.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyStartupSection), String.format(TASK_COMPLETE_TIMELY, "modifyStartupSection"));
+ Task editStartupSection = vAppApi.editStartupSection(vAppUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editStartupSection), String.format(TASK_COMPLETE_TIMELY, "editStartupSection"));
// Retrieve the modified section
- StartupSection modified = vAppApi.getStartupSection(vApp.getHref());
+ StartupSection modified = vAppApi.getStartupSection(vAppUrn);
// Check the retrieved object is well formed
checkStartupSection(modified);
// Check the modified section fields are set correctly
- // assertEquals(modified.getX(), "");
assertEquals(modified, newSection);
}
@@ -744,50 +752,58 @@
key = name("key-");
String value = name("value-");
metadataValue = MetadataValue.builder().value(value).build();
- vAppApi.getMetadataApi().setMetadata(vApp.getHref(), key, metadataValue);
+ vAppApi.getMetadataApi(vAppUrn).putEntry(key, metadataValue);
// Retrieve the value, and assert it was set correctly
- MetadataValue newMetadataValue = vAppApi.getMetadataApi().getMetadataValue(vApp.getHref(), key);
+ MetadataValue newMetadataValue = vAppApi.getMetadataApi(vAppUrn).getValue(key);
// Check the retrieved object is well formed
checkMetadataValueFor(VAPP, newMetadataValue, value);
}
-
+
@Test(description = "GET /vApp/{id}/metadata", dependsOnMethods = { "testSetMetadataValue" })
public void testGetMetadata() {
key = name("key-");
String value = name("value-");
metadataValue = MetadataValue.builder().value(value).build();
- vAppApi.getMetadataApi().setMetadata(vApp.getHref(), key, metadataValue);
-
+ vAppApi.getMetadataApi(vAppUrn).putEntry(key, metadataValue);
+
// Call the method being tested
- Metadata metadata = vAppApi.getMetadataApi().getMetadata(vApp.getHref());
-
+ Metadata metadata = vAppApi.getMetadataApi(vAppUrn).get();
+
checkMetadata(metadata);
-
+
// Check requirements for this test
- assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()), String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "vApp"));
+ assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
+ String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "vApp"));
}
-
+
@Test(description = "GET /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
public void testGetOrgMetadataValue() {
- // Call the method being tested
- MetadataValue value = vAppApi.getMetadataApi().getMetadataValue(vApp.getHref(), key);
+ key = name("key-");
+ String value = name("value-");
+ metadataValue = MetadataValue.builder().value(value).build();
+ vAppApi.getMetadataApi(vAppUrn).putEntry(key, metadataValue);
+
+ // Call the method being tested
+ MetadataValue newValue = vAppApi.getMetadataApi(vAppUrn).getValue(key);
+
String expected = metadataValue.getValue();
- checkMetadataValue(value);
- assertEquals(value.getValue(), expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value.getValue()));
+ checkMetadataValue(newValue);
+ assertEquals(newValue.getValue(), expected,
+ String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, newValue.getValue()));
}
@Test(description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
- public void testDeleteMetadataEntry() {
+ public void testRemoveMetadataEntry() {
// Delete the entry
- Task task = vAppApi.getMetadataApi().deleteMetadataEntry(vApp.getHref(), key);
+ Task task = vAppApi.getMetadataApi(vAppUrn).removeEntry(key);
retryTaskSuccess.apply(task);
- // Confirm the entry has been deleted
- Metadata newMetadata = vAppApi.getMetadataApi().getMetadata(vApp.getHref());
+ // Confirm the entry has been removed
+ Metadata newMetadata = vAppApi.getMetadataApi(vAppUrn).get();
// Check the retrieved object is well formed
checkMetadataKeyAbsentFor(VAPP, newMetadata, key);
@@ -795,54 +811,50 @@
@Test(description = "POST /vApp/{id}/metadata", dependsOnMethods = { "testGetMetadata" })
public void testMergeMetadata() {
- Metadata oldMetadata = vAppApi.getMetadataApi().getMetadata(vApp.getHref());
+ Metadata oldMetadata = vAppApi.getMetadataApi(vAppUrn).get();
Map<String, String> oldMetadataMap = Checks.metadataToMap(oldMetadata);
- // Store a value, to be deleted
+ // Store a value, to be removed
String key = name("key-");
String value = name("value-");
- Metadata addedMetadata = Metadata.builder()
- .entry(MetadataEntry.builder().key(key).value(value).build())
- .build();
- Task task = vAppApi.getMetadataApi().mergeMetadata(vApp.getHref(), addedMetadata);
+ Metadata addedMetadata = Metadata.builder().entry(MetadataEntry.builder().key(key).value(value).build()).build();
+ Task task = vAppApi.getMetadataApi(vAppUrn).merge(addedMetadata);
retryTaskSuccess.apply(task);
// Confirm the entry contains everything that was there, and everything that was being added
- Metadata newMetadata = vAppApi.getMetadataApi().getMetadata(vApp.getHref());
- Map<String, String> expectedMetadataMap = ImmutableMap.<String, String>builder()
- .putAll(oldMetadataMap)
- .put(key, value)
- .build();
+ Metadata newMetadata = vAppApi.getMetadataApi(vAppUrn).get();
+ Map<String, String> expectedMetadataMap = ImmutableMap.<String, String> builder().putAll(oldMetadataMap)
+ .put(key, value).build();
// Check the retrieved object is well formed
checkMetadataFor(VAPP, newMetadata, expectedMetadataMap);
}
/**
- * @see VAppApi#deleteVApp(URI)
+ * @see VAppApi#remove(URI)
*/
@Test(description = "DELETE /vApp/{id}")
- public void testDeleteVApp() {
- // Create a temporary VApp to delete
+ public void testRemoveVApp() {
+ // Create a temporary VApp to remove
VApp temp = instantiateVApp();
// The method under test
- Task deleteVApp = vAppApi.deleteVApp(temp.getHref());
- assertTrue(retryTaskSuccess.apply(deleteVApp), String.format(TASK_COMPLETE_TIMELY, "deleteVApp"));
+ Task removeVApp = vAppApi.remove(temp.getId());
+ assertTrue(retryTaskSuccess.apply(removeVApp), String.format(TASK_COMPLETE_TIMELY, "removeVApp"));
- VApp deleted = vAppApi.getVApp(temp.getHref());
- assertNull(deleted, "The VApp "+temp.getName()+" should have been deleted");
+ VApp removed = vAppApi.get(temp.getId());
+ assertNull(removed, "The VApp " + temp.getName() + " should have been removed");
}
-
+
/**
* Create the recompose vapp params.
- *
+ *
* @param vappTemplateRef
* @param vdc
* @return
* @throws VCloudException
*/
- public RecomposeVAppParams createRecomposeParams(VApp vApp, Vm vm) {
+ public RecomposeVAppParams addRecomposeParams(VApp vApp, Vm vm) {
// creating an item element. this item will contain the vm which should be added to the vapp.
Reference reference = Reference.builder().name(name("vm-")).href(vm.getHref()).type(vm.getType()).build();
@@ -852,10 +864,11 @@
Set<NetworkAssignment> networkAssignments = Sets.newLinkedHashSet();
- // if the vm contains a network connection and the vApp does not contain any configured network
+ // if the vm contains a network connection and the vApp does not contain any configured
+ // network
if (vmHasNetworkConnectionConfigured(vm)) {
if (!vAppHasNetworkConfigured(vApp)) {
- // create a new network connection section for the vm.
+ // add a new network connection section for the vm.
NetworkConnectionSection networkConnectionSection = NetworkConnectionSection.builder()
.info("Empty network configuration parameters").build();
// adding the network connection section to the instantiation params of the vapp.
@@ -867,14 +880,11 @@
// configured network -> vm could be mapped to that network.
else {
Set<VAppNetworkConfiguration> vAppNetworkConfigurations = listVappNetworkConfigurations(vApp);
- Set<NetworkConnection> listVmNetworkConnections = listNetworkConnections(vm);
- for (NetworkConnection networkConnection : listVmNetworkConnections) {
- for (VAppNetworkConfiguration vAppNetworkConfiguration : vAppNetworkConfigurations) {
- NetworkAssignment networkAssignment = NetworkAssignment.builder()
- .innerNetwork(vAppNetworkConfiguration.getNetworkName())
- .containerNetwork(vAppNetworkConfiguration.getNetworkName()).build();
- networkAssignments.add(networkAssignment);
- }
+ for (VAppNetworkConfiguration vAppNetworkConfiguration : vAppNetworkConfigurations) {
+ NetworkAssignment networkAssignment = NetworkAssignment.builder()
+ .innerNetwork(vAppNetworkConfiguration.getNetworkName())
+ .containerNetwork(vAppNetworkConfiguration.getNetworkName()).build();
+ networkAssignments.add(networkAssignment);
}
}
}
@@ -884,11 +894,7 @@
// vapp network
else {
if (vAppHasNetworkConfigured(vApp)) {
-
VAppNetworkConfiguration vAppNetworkConfiguration = getVAppNetworkConfig(vApp);
- System.out.println(vAppNetworkConfiguration.getNetworkName());
- System.out.println(vAppNetworkConfiguration.getDescription());
-
NetworkConnection networkConnection = NetworkConnection.builder()
.network(vAppNetworkConfiguration.getNetworkName())
.ipAddressAllocationMode(IpAddressAllocationMode.DHCP).build();
@@ -904,18 +910,41 @@
if (vmInstantiationParams != null)
vmItem = SourcedCompositionItemParam.builder().fromSourcedCompositionItemParam(vmItem)
- .instantiationParams(vmInstantiationParams)
- .build();
-
+ .instantiationParams(vmInstantiationParams).build();
+
if (networkAssignments != null)
vmItem = SourcedCompositionItemParam.builder().fromSourcedCompositionItemParam(vmItem)
- .networkAssignment(networkAssignments)
- .build();
-
- return RecomposeVAppParams.builder().name(name("recompose-"))
- // adding the vm item.
- .sourcedItems(ImmutableList.of(vmItem)).build();
+ .networkAssignment(networkAssignments).build();
+ return RecomposeVAppParams.builder().name(name("recompose-"))
+ // adding the vm item.
+ .sourcedItems(ImmutableList.of(vmItem)).build();
+ }
+
+ private final class IsVAppNetworkNamed implements Predicate<VAppNetworkConfiguration> {
+ private final String networkName;
+
+ private IsVAppNetworkNamed(String networkName) {
+ this.networkName = networkName;
+ }
+
+ @Override
+ public boolean apply(VAppNetworkConfiguration input) {
+ return input.getNetworkName().equals(networkName);
+ }
+ }
+
+ private void cleanUpNetworkConnectionSection(Vm toAddVm) {
+ NetworkConnectionSection networkConnectionSection = vmApi.getNetworkConnectionSection(toAddVm.getId());
+ Set<NetworkConnection> networkConnections = networkConnectionSection.getNetworkConnections();
+ for (NetworkConnection networkConnection : networkConnections) {
+ NetworkConnection newNetworkConnection = networkConnection.toBuilder().isConnected(false).build();
+ networkConnectionSection = networkConnectionSection.toBuilder().networkConnection(newNetworkConnection)
+ .build();
+ }
+
+ Task configureNetwork = vmApi.editNetworkConnectionSection(toAddVm.getId(), networkConnectionSection);
+ assertTaskSucceedsLong(configureNetwork);
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppNetworksLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppNetworksLiveTest.java
index 8df1e59..4e2656e 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppNetworksLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppNetworksLiveTest.java
@@ -18,14 +18,10 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.ENTITY_NON_NULL;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkConfigSection;
-import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -33,7 +29,6 @@
import org.jclouds.vcloud.director.v1_5.AbstractVAppApiLiveTest;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.Vdc;
import org.jclouds.vcloud.director.v1_5.domain.Vm;
import org.jclouds.vcloud.director.v1_5.domain.network.FirewallRule;
import org.jclouds.vcloud.director.v1_5.domain.network.FirewallRuleProtocols;
@@ -42,6 +37,7 @@
import org.jclouds.vcloud.director.v1_5.domain.network.IpRanges;
import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
import org.jclouds.vcloud.director.v1_5.domain.network.NatService;
+import org.jclouds.vcloud.director.v1_5.domain.network.Network;
import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection;
@@ -57,11 +53,8 @@
import org.testng.annotations.Test;
import com.google.common.base.Joiner;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -78,16 +71,15 @@
private static final String HTTP_SECURITY_GROUP = "http";
private static final String DEFAULT_SECURITY_GROUP = "default";
private String key;
- private Reference parentNetworkRef;
private Map<String, NetworkConfiguration> securityGroupToNetworkConfig;
- private String orgNetworkName;
+ private Network network;
@AfterClass(alwaysRun = true, dependsOnMethods = { "cleanUpEnvironment" })
protected void tidyUp() {
if (key != null) {
try {
- Task delete = vAppTemplateApi.getMetadataApi().deleteMetadataEntry(vAppTemplateURI, key);
- taskDoneEventually(delete);
+ Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key);
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn(e, "Error when deleting metadata entry '%s'", key);
}
@@ -96,9 +88,8 @@
@BeforeClass
void setUp() {
- parentNetworkRef = lookUpNewtorkInVdc(networkURI);
- securityGroupToNetworkConfig = createSecurityGroupToNetworkConfiguration(parentNetworkRef);
- orgNetworkName = parentNetworkRef.getName();
+ network = lazyGetNetwork();
+ securityGroupToNetworkConfig = addSecurityGroupToNetworkConfiguration(Reference.builder().fromEntity(network).build());
}
@AfterMethod
@@ -107,12 +98,12 @@
}
@Test(description = "Create a vApp Network based on an org network with `default` firewall rules applied")
- public void testCreateVAppNetworkWithDefaultSecurityGroup() {
+ public void testAddVAppNetworkWithDefaultSecurityGroup() {
ImmutableList<String> securityGroups = ImmutableList.of(DEFAULT_SECURITY_GROUP);
- createVAppNetworkWithSecurityGroupOnVApp(securityGroups, vAppURI);
+ addVAppNetworkWithSecurityGroupOnVApp(securityGroups, vAppUrn);
// Retrieve the modified section
- NetworkConfigSection modified = vAppApi.getNetworkConfigSection(vAppURI);
+ NetworkConfigSection modified = vAppApi.getNetworkConfigSection(vAppUrn);
// Check the retrieved object is well formed
checkNetworkConfigSection(modified);
@@ -126,12 +117,12 @@
}
@Test(description = "Create a vApp Network based on an org network with `http` firewall rules applied")
- public void testCreateVAppNetworkWithHttpSecurityGroup() {
+ public void testAddVAppNetworkWithHttpSecurityGroup() {
ImmutableList<String> securityGroups = ImmutableList.of(HTTP_SECURITY_GROUP);
- createVAppNetworkWithSecurityGroupOnVApp(securityGroups, vAppURI);
+ addVAppNetworkWithSecurityGroupOnVApp(securityGroups, vAppUrn);
// Retrieve the modified section
- NetworkConfigSection modified = vAppApi.getNetworkConfigSection(vAppURI);
+ NetworkConfigSection modified = vAppApi.getNetworkConfigSection(vAppUrn);
// Check the retrieved object is well formed
checkNetworkConfigSection(modified);
@@ -145,12 +136,12 @@
}
@Test(description = "Create a vApp Network based on an org network with both `defautl` and `http` firewall rules applied")
- public void testCreateVAppNetworkWithDefaultAndHttpSecurityGroup() {
+ public void testAddVAppNetworkWithDefaultAndHttpSecurityGroup() {
ImmutableList<String> securityGroups = ImmutableList.of(DEFAULT_SECURITY_GROUP, HTTP_SECURITY_GROUP);
- createVAppNetworkWithSecurityGroupOnVApp(securityGroups, vAppURI);
+ addVAppNetworkWithSecurityGroupOnVApp(securityGroups, vAppUrn);
// Retrieve the modified section
- NetworkConfigSection modified = vAppApi.getNetworkConfigSection(vAppURI);
+ NetworkConfigSection modified = vAppApi.getNetworkConfigSection(vAppUrn);
// Check the retrieved object is well formed
checkNetworkConfigSection(modified);
@@ -163,12 +154,12 @@
*/
}
- private void createVAppNetworkWithSecurityGroupOnVApp(ImmutableList<String> securityGroups, URI vAppURI) {
- String newVAppNetworkName = generateVAppNetworkName(orgNetworkName, securityGroups);
+ private void addVAppNetworkWithSecurityGroupOnVApp(ImmutableList<String> securityGroups, String vAppUrn) {
+ String newVAppNetworkName = generateVAppNetworkName(network.getName(), securityGroups);
// Create a vAppNetwork with firewall rules
NetworkConfigSection newSection = generateNetworkConfigSection(securityGroups, newVAppNetworkName);
- Task modifyNetworkConfigSection = vAppApi.modifyNetworkConfigSection(vAppURI, newSection);
- assertTrue(retryTaskSuccess.apply(modifyNetworkConfigSection), String.format(TASK_COMPLETE_TIMELY, "modifyNetworkConfigSection"));
+ Task editNetworkConfigSection = vAppApi.editNetworkConfigSection(vAppUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editNetworkConfigSection), String.format(TASK_COMPLETE_TIMELY, "editNetworkConfigSection"));
attachVmToVAppNetwork(vm, newVAppNetworkName);
}
@@ -180,15 +171,15 @@
firewallRules.addAll(securityGroupFirewallRules);
}
- FirewallService firewallService = createFirewallService(firewallRules);
- NatService natService = createNatService();
- IpScope ipScope = createNewIpScope();
+ FirewallService firewallService = addFirewallService(firewallRules);
+ NatService natService = addNatService();
+ IpScope ipScope = addNewIpScope();
NetworkConfiguration newConfiguration = NetworkConfiguration.builder()
.ipScope(ipScope)
- .parentNetwork(parentNetworkRef)
+ .parentNetwork(Reference.builder().fromEntity(network).build())
.fenceMode(FenceMode.NAT_ROUTED)
.retainNetInfoAcrossDeployments(false)
- .features(createNetworkFeatures(ImmutableSet.of(firewallService, natService)))
+ .features(toNetworkFeatures(ImmutableSet.of(firewallService, natService)))
.build();
VAppNetworkConfiguration newVAppNetworkConfiguration = VAppNetworkConfiguration.builder().networkName(newVAppNetworkName).configuration(newConfiguration).build();
@@ -199,7 +190,7 @@
}
private void attachVmToVAppNetwork(Vm vm, String vAppNetworkName) {
- Set<NetworkConnection> networkConnections = vmApi.getNetworkConnectionSection(vm.getHref())
+ Set<NetworkConnection> networkConnections = vmApi.getNetworkConnectionSection(vm.getId())
.getNetworkConnections();
NetworkConnectionSection section = NetworkConnectionSection.builder()
@@ -217,12 +208,12 @@
section = section.toBuilder().networkConnection(newNetworkConnection).build();
}
- Task configureNetwork = vmApi.modifyNetworkConnectionSection(vm.getHref(), section);
+ Task configureNetwork = vmApi.editNetworkConnectionSection(vm.getId(), section);
assertTaskSucceedsLong(configureNetwork);
}
- private IpScope createNewIpScope() {
- IpRange newIpRange = createIpRange();
+ private IpScope addNewIpScope() {
+ IpRange newIpRange = addIpRange();
IpRanges newIpRanges = IpRanges.builder()
.ipRange(newIpRange)
.build();
@@ -233,7 +224,7 @@
.ipRanges(newIpRanges).build();
}
- private IpRange createIpRange() {
+ private IpRange addIpRange() {
IpRange newIpRange = IpRange.builder()
.startAddress("192.168.2.100")
.endAddress("192.168.2.199")
@@ -241,25 +232,6 @@
return newIpRange;
}
- private Reference lookUpNewtorkInVdc(final URI networkURI) {
- Vdc vdc = context.getApi().getVdcApi().getVdc(vdcURI);
- assertNotNull(vdc, String.format(ENTITY_NON_NULL, VDC));
-
- Set<Reference> networks = vdc.getAvailableNetworks();
-
- // Look up the network in the Vdc with the id configured for the tests
- Optional<Reference> parentNetwork = Iterables.tryFind(networks, new Predicate<Reference>() {
- @Override
- public boolean apply(Reference reference) {
- return reference.getHref().equals(networkURI);
- }
- });
- if (!parentNetwork.isPresent()) {
- fail(String.format("Could not find network %s in vdc", networkURI.toASCIIString()));
- }
- return parentNetwork.get();
- }
-
private Set<FirewallRule> retrieveAllFirewallRules(NetworkFeatures networkFeatures) {
Set<FirewallRule> firewallRules = Sets.newLinkedHashSet();
for (NetworkServiceType<?> networkServiceType : networkFeatures.getNetworkServices()) {
@@ -270,7 +242,7 @@
return firewallRules;
}
- private NetworkFeatures createNetworkFeatures(Set<? extends NetworkServiceType<?>> networkServices) {
+ private NetworkFeatures toNetworkFeatures(Set<? extends NetworkServiceType<?>> networkServices) {
NetworkFeatures networkFeatures = NetworkFeatures.builder()
.services(networkServices)
.build();
@@ -278,23 +250,23 @@
}
- private Set<FirewallRule> createDefaultFirewallRules() {
+ private Set<FirewallRule> defaultFirewallRules() {
FirewallRuleProtocols protocols = FirewallRuleProtocols.builder()
.any(true)
.build();
- FirewallRule egressAll = createFirewallRule(FirewallRuleProtocols.builder().tcp(true).build(), "allow ssh ingoing traffic", -1, 22, "in");
- FirewallRule sshIngoing = createFirewallRule(protocols, "allow all outgoing traffic", -1, -1, "out");
+ FirewallRule egressAll = addFirewallRule(FirewallRuleProtocols.builder().tcp(true).build(), "allow ssh ingoing traffic", -1, 22, "in");
+ FirewallRule sshIngoing = addFirewallRule(protocols, "allow all outgoing traffic", -1, -1, "out");
return ImmutableSet.of(egressAll, sshIngoing);
}
- private Set<FirewallRule> createHttpIngoingFirewallRule() {
+ private Set<FirewallRule> httpIngressFirewallRules() {
FirewallRuleProtocols protocols = FirewallRuleProtocols.builder().tcp(true).build();
- FirewallRule httpIngoing = createFirewallRule(protocols , "allow http ingoing traffic", 80, 80, "in");
- FirewallRule httpsIngoing = createFirewallRule(protocols , "allow https ingoing traffic", 443, 443, "in");
+ FirewallRule httpIngoing = addFirewallRule(protocols , "allow http ingoing traffic", 80, 80, "in");
+ FirewallRule httpsIngoing = addFirewallRule(protocols , "allow https ingoing traffic", 443, 443, "in");
return ImmutableSet.of(httpIngoing, httpsIngoing);
}
- private FirewallRule createFirewallRule(FirewallRuleProtocols protocols, String description, int sourcePort, int outPort, String direction) {
+ private FirewallRule addFirewallRule(FirewallRuleProtocols protocols, String description, int sourcePort, int outPort, String direction) {
return FirewallRule.builder()
.isEnabled(true)
.description(description)
@@ -309,7 +281,7 @@
.build();
}
- private FirewallService createFirewallService(Set<FirewallRule> firewallRules) {
+ private FirewallService addFirewallService(Set<FirewallRule> firewallRules) {
FirewallService firewallService = FirewallService.builder()
.enabled(true)
.defaultAction("drop")
@@ -319,7 +291,7 @@
return firewallService;
}
- private NatService createNatService() {
+ private NatService addNatService() {
NatService natService = NatService.builder()
.enabled(true)
.natType("ipTranslation")
@@ -328,28 +300,28 @@
return natService;
}
- private Map<String, NetworkConfiguration> createSecurityGroupToNetworkConfiguration(Reference parentNetworkRef) {
- Set<FirewallRule> defaultFirewallRules = createDefaultFirewallRules();
- Set<FirewallRule> httpFirewallRules = createHttpIngoingFirewallRule();
+ private Map<String, NetworkConfiguration> addSecurityGroupToNetworkConfiguration(Reference parentNetworkRef) {
+ Set<FirewallRule> defaultFirewallRules = defaultFirewallRules();
+ Set<FirewallRule> httpFirewallRules = httpIngressFirewallRules();
Map<String, NetworkConfiguration> securityGroupToNetworkConfigurations = Maps.newHashMap();
- securityGroupToNetworkConfigurations.put(DEFAULT_SECURITY_GROUP, createNetworkConfiguration(parentNetworkRef, defaultFirewallRules));
- securityGroupToNetworkConfigurations.put(HTTP_SECURITY_GROUP, createNetworkConfiguration(parentNetworkRef, httpFirewallRules));
+ securityGroupToNetworkConfigurations.put(DEFAULT_SECURITY_GROUP, addNetworkConfiguration(parentNetworkRef, defaultFirewallRules));
+ securityGroupToNetworkConfigurations.put(HTTP_SECURITY_GROUP, addNetworkConfiguration(parentNetworkRef, httpFirewallRules));
return securityGroupToNetworkConfigurations;
}
- private NetworkConfiguration createNetworkConfiguration(Reference parentNetworkRef, Set<FirewallRule> newFirewallRules) {
- FirewallService firewallService = createFirewallService(newFirewallRules);
+ private NetworkConfiguration addNetworkConfiguration(Reference parentNetworkRef, Set<FirewallRule> newFirewallRules) {
+ FirewallService firewallService = addFirewallService(newFirewallRules);
- IpScope ipScope = createNewIpScope();
+ IpScope ipScope = addNewIpScope();
NetworkConfiguration newConfiguration = NetworkConfiguration.builder()
.ipScope(ipScope)
.parentNetwork(parentNetworkRef)
.fenceMode(FenceMode.NAT_ROUTED)
.retainNetInfoAcrossDeployments(false)
- .features(createNetworkFeatures(ImmutableSet.of(firewallService)))
+ .features(toNetworkFeatures(ImmutableSet.of(firewallService)))
.build();
return newConfiguration;
}
@@ -360,7 +332,7 @@
private void disconnectVmFromVAppNetwork(Vm vm) {
- Set<NetworkConnection> networkConnections = vmApi.getNetworkConnectionSection(vm.getHref())
+ Set<NetworkConnection> networkConnections = vmApi.getNetworkConnectionSection(vm.getId())
.getNetworkConnections();
NetworkConnectionSection section = NetworkConnectionSection.builder()
@@ -377,7 +349,7 @@
.build())
.build();
}
- Task cleanUpNetworks = vmApi.modifyNetworkConnectionSection(vm.getHref(), section);
+ Task cleanUpNetworks = vmApi.editNetworkConnectionSection(vm.getId(), section);
assertTaskSucceedsLong(cleanUpNetworks);
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApiExpectTest.java
index 1fc5387..7bf687b 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApiExpectTest.java
@@ -21,12 +21,10 @@
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ANY;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CUSTOMIZATION_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ERROR;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.GUEST_CUSTOMIZATION_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.LEASE_SETTINGS_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_ENTRY;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONFIG_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.RELOCATE_TEMPLATE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP_TEMPLATE;
import static org.testng.Assert.assertEquals;
@@ -50,7 +48,6 @@
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.Vm;
-import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
@@ -86,14 +83,14 @@
).getVAppTemplateApi();
assertNotNull(api);
- VAppTemplate template = api.getVAppTemplate(uri);
+ VAppTemplate template = api.get(uri);
assertEquals(template, exampleTemplate());
- Task task = api.modifyVAppTemplate(uri, exampleTemplate());
+ Task task = api.edit(uri, exampleTemplate());
assertNotNull(task);
- task = api.deleteVappTemplate(uri);
+ task = api.remove(uri);
assertNotNull(task);
}
@@ -106,7 +103,7 @@
new VcloudHttpRequestPrimer().apiCommand("GET", templateId).acceptMedia(VAPP_TEMPLATE).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
- api.getVAppTemplate(uri);
+ api.get(uri);
}
@Test(expectedExceptions = ResourceNotFoundException.class)
@@ -118,11 +115,11 @@
new VcloudHttpRequestPrimer().apiCommand("PUT", templateId).xmlFilePayload("/vapptemplate/vAppTemplate.xml", VAPP_TEMPLATE).acceptMedia(TASK).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error403.xml", ERROR).httpResponseBuilder().statusCode(403).build()).getVAppTemplateApi();
- api.modifyVAppTemplate(uri, exampleTemplate());
+ api.edit(uri, exampleTemplate());
}
@Test(expectedExceptions = VCloudDirectorException.class)
- public void testDeleteMissingVAppTemplate() {
+ public void testRemoveMissingVAppTemplate() {
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
URI uri = URI.create(endpoint + templateId);
@@ -130,33 +127,7 @@
new VcloudHttpRequestPrimer().apiCommand("DELETE", templateId).acceptMedia(TASK).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
- api.deleteVappTemplate(uri);
- }
-
- public void testConsolidateVAppTemplate() {
- final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
- URI uri = URI.create(endpoint + templateId);
-
- VAppTemplateApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/action/consolidate").acceptMedia(TASK).httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer().xmlFilePayload("/task/task.xml", TASK).httpResponseBuilder().build()
- ).getVAppTemplateApi();
-
- assertNotNull(api);
- Task task = api.consolidateVm(uri);
- assertNotNull(task);
- }
-
- @Test(expectedExceptions = ResourceNotFoundException.class)
- public void testConsolidateMissingVAppTemplate() {
- final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
- URI uri = URI.create(endpoint + templateId);
-
- VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/action/consolidate").acceptMedia(TASK).httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error403.xml", ERROR).httpResponseBuilder().statusCode(403).build()).getVAppTemplateApi();
-
- api.consolidateVm(uri);
+ api.remove(uri);
}
public void testDisableDownloadVAppTemplate() {
@@ -209,39 +180,6 @@
api.enableDownload(uri);
}
-
- public void testRelocateVAppTemplate() {
- final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
- URI uri = URI.create(endpoint + templateId);
-
- VAppTemplateApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/action/relocate").xmlFilePayload("/vapptemplate/relocateParams.xml", RELOCATE_TEMPLATE).acceptMedia(TASK).httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer().xmlFilePayload("/task/task.xml", TASK).httpResponseBuilder().build()
- ).getVAppTemplateApi();
-
- assertNotNull(api);
-
- Reference datastore = Reference.builder().href(URI.create("https://vcloud.example.com/api/admin/extension/datastore/607")).build();
- RelocateParams params = RelocateParams.builder().datastore(datastore).build();
-
- Task task = api.relocateVm(uri, params);
- assertNotNull(task);
- }
-
- @Test(expectedExceptions = VCloudDirectorException.class)
- public void testRelocateMissingVAppTemplate() {
- final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
- URI uri = URI.create(endpoint + templateId);
-
- VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/action/relocate").xmlFilePayload("/vapptemplate/relocateParams.xml", RELOCATE_TEMPLATE).acceptMedia(TASK).httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
-
- Reference datastore = Reference.builder().href(URI.create("https://vcloud.example.com/api/admin/extension/datastore/607")).build();
- RelocateParams params = RelocateParams.builder().datastore(datastore).build();
-
- api.relocateVm(uri, params);
- }
public void testErrorGetCustomizationSection() {
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
@@ -254,50 +192,6 @@
assertNull(api.getCustomizationSection(uri));
}
- public void testGuestCustomizationSection() {
- final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
- URI uri = URI.create(endpoint + templateId);
-
- VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer().apiCommand("GET", templateId + "/guestCustomizationSection").acceptMedia(GUEST_CUSTOMIZATION_SECTION).httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/guestCustomizationSection.xml", GUEST_CUSTOMIZATION_SECTION).httpResponseBuilder().build(),
- new VcloudHttpRequestPrimer().apiCommand("PUT", templateId + "/guestCustomizationSection").xmlFilePayload("/vapptemplate/guestCustomizationSection.xml", GUEST_CUSTOMIZATION_SECTION).acceptMedia(TASK).httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer().xmlFilePayload("/task/task.xml", TASK).httpResponseBuilder().build()
- ).getVAppTemplateApi();
-
- assertNotNull(api);
- GuestCustomizationSection section = api.getGuestCustomizationSection(uri);
-
- assertEquals(section, exampleGuestCustomizationSection());
-
- Task task = api.modifyGuestCustomizationSection(uri, exampleGuestCustomizationSection());
- assertNotNull(task);
- }
-
- @Test(expectedExceptions = VCloudDirectorException.class)
- public void testErrorGetGuestCustomizationSection() {
- final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
- URI uri = URI.create(endpoint + templateId);
-
- VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer().apiCommand("GET", templateId + "/guestCustomizationSection").acceptMedia(GUEST_CUSTOMIZATION_SECTION).httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
-
- api.getGuestCustomizationSection(uri);
- }
-
- @Test(expectedExceptions = VCloudDirectorException.class)
- public void testErrorEditGuestCustomizationSection() {
- final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
- URI uri = URI.create(endpoint + templateId);
-
- VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer().apiCommand("PUT", templateId + "/guestCustomizationSection").xmlFilePayload("/vapptemplate/guestCustomizationSection.xml", GUEST_CUSTOMIZATION_SECTION).acceptMedia(TASK).httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
-
- api.modifyGuestCustomizationSection(uri, exampleGuestCustomizationSection());
- }
-
public void testLeaseSettingsSection() throws ParseException {
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
URI uri = URI.create(endpoint + templateId);
@@ -314,7 +208,7 @@
assertEquals(section, exampleLeaseSettingsSection());
- Task task = api.modifyLeaseSettingsSection(uri, exampleLeaseSettingsSection());
+ Task task = api.editLeaseSettingsSection(uri, exampleLeaseSettingsSection());
assertNotNull(task);
}
@@ -338,7 +232,7 @@
new VcloudHttpRequestPrimer().apiCommand("PUT", templateId + "/leaseSettingsSection").xmlFilePayload("/vapptemplate/leaseSettingsSection.xml", LEASE_SETTINGS_SECTION).acceptMedia(TASK).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error403.xml", ERROR).httpResponseBuilder().statusCode(403).build()).getVAppTemplateApi();
- api.modifyLeaseSettingsSection(uri, exampleLeaseSettingsSection());
+ api.editLeaseSettingsSection(uri, exampleLeaseSettingsSection());
}
public void testVappTemplateMetadata() {
@@ -353,11 +247,11 @@
).getVAppTemplateApi();
assertNotNull(api);
- Metadata metadata = api.getMetadataApi().getMetadata(uri);
+ Metadata metadata = api.getMetadataApi(uri).get();
assertEquals(metadata, exampleMetadata());
- Task task = api.getMetadataApi().mergeMetadata(uri, exampleMetadata());
+ Task task = api.getMetadataApi(uri).merge(exampleMetadata());
assertNotNull(task);
}
@@ -370,7 +264,7 @@
new VcloudHttpRequestPrimer().apiCommand("GET", templateId + "/metadata").acceptMedia(ANY).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
- api.getMetadataApi().getMetadata(uri);
+ api.getMetadataApi(uri).get();
}
@Test(expectedExceptions = VCloudDirectorException.class)
@@ -382,7 +276,7 @@
new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/metadata").xmlFilePayload("/vapptemplate/metadata.xml", METADATA).acceptMedia(TASK).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
- api.getMetadataApi().mergeMetadata(uri, exampleMetadata());
+ api.getMetadataApi(uri).merge(exampleMetadata());
}
public void testVappTemplateMetadataValue() {
@@ -399,14 +293,14 @@
).getVAppTemplateApi();
assertNotNull(api);
- MetadataValue metadata = api.getMetadataApi().getMetadataValue(uri, "12345");
+ MetadataValue metadata = api.getMetadataApi(uri).getValue("12345");
assertEquals(metadata, exampleMetadataValue());
- Task task = api.getMetadataApi().setMetadata(uri, "12345", exampleMetadataValue());
+ Task task = api.getMetadataApi(uri).putEntry("12345", exampleMetadataValue());
assertNotNull(task);
- task = api.getMetadataApi().deleteMetadataEntry(uri, "12345");
+ task = api.getMetadataApi(uri).removeEntry("12345");
assertNotNull(task);
}
@@ -418,7 +312,7 @@
new VcloudHttpRequestPrimer().apiCommand("GET", templateId + "/metadata/12345").acceptMedia(METADATA_ENTRY).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error403.xml", ERROR).httpResponseBuilder().statusCode(403).build()).getVAppTemplateApi();
- assertNull(api.getMetadataApi().getMetadataValue(uri, "12345"));
+ assertNull(api.getMetadataApi(uri).getValue("12345"));
}
@Test(expectedExceptions = VCloudDirectorException.class)
@@ -430,11 +324,11 @@
new VcloudHttpRequestPrimer().apiCommand("PUT", templateId + "/metadata/12345").xmlFilePayload("/vapptemplate/metadataValue.xml", METADATA_ENTRY).acceptMedia(TASK).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
- api.getMetadataApi().setMetadata(uri, "12345", exampleMetadataValue());
+ api.getMetadataApi(uri).putEntry("12345", exampleMetadataValue());
}
@Test(expectedExceptions = ResourceNotFoundException.class)
- public void testDeleteMissingMetadataValue() {
+ public void testRemoveMissingMetadataValue() {
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
URI uri = URI.create(endpoint + templateId);
@@ -442,7 +336,7 @@
new VcloudHttpRequestPrimer().apiCommand("DELETE", templateId + "/metadata/12345").acceptMedia(TASK).httpRequestBuilder().build(),
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error403.xml", ERROR).httpResponseBuilder().statusCode(403).build()).getVAppTemplateApi();
- api.getMetadataApi().deleteMetadataEntry(uri, "12345");
+ api.getMetadataApi(uri).removeEntry("12345");
}
@Test(expectedExceptions = VCloudDirectorException.class)
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApiLiveTest.java
index 40cf401..341c38e 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApiLiveTest.java
@@ -19,7 +19,6 @@
package org.jclouds.vcloud.director.v1_5.features;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkCustomizationSection;
-import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkGuestCustomizationSection;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkLeaseSettingsSection;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataFor;
@@ -38,7 +37,6 @@
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-import java.net.URI;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
@@ -46,7 +44,6 @@
import org.jclouds.dmtf.ovf.NetworkSection;
import org.jclouds.vcloud.director.v1_5.AbstractVAppApiLiveTest;
-import org.jclouds.vcloud.director.v1_5.domain.Checks;
import org.jclouds.vcloud.director.v1_5.domain.Link;
import org.jclouds.vcloud.director.v1_5.domain.Link.Rel;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
@@ -55,17 +52,13 @@
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
-import org.jclouds.vcloud.director.v1_5.domain.References;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.dmtf.Envelope;
import org.jclouds.vcloud.director.v1_5.domain.params.CloneVAppTemplateParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConnectionSection;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
@@ -78,7 +71,7 @@
* Tests the request/response behavior of {@link VAppTemplateApi}
*
* NOTE The environment MUST have at least one template configured
- *
+ *
* @author Aled Sage
*/
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "VAppTemplateApiLiveTest")
@@ -91,22 +84,20 @@
protected void tidyUp() {
if (key != null) {
try {
- Task delete = vAppTemplateApi.getMetadataApi().deleteMetadataEntry(vAppTemplateURI, key);
- taskDoneEventually(delete);
+ Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key);
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn(e, "Error when deleting metadata entry '%s'", key);
}
}
}
-
+
private VAppTemplate cloneVAppTemplate(boolean waitForTask) throws Exception {
CloneVAppTemplateParams cloneVAppTemplateParams = CloneVAppTemplateParams.builder()
- .source(Reference.builder().href(vAppTemplateURI).build())
- .isSourceDelete(false)
- .name("clone")
- .build();
- VAppTemplate clonedVappTemplate = vdcApi.cloneVAppTemplate(vdcURI, cloneVAppTemplateParams);
-
+ .source(Reference.builder().href(lazyGetVAppTemplate().getHref()).build()).isSourceDelete(false)
+ .name("clone").build();
+ VAppTemplate clonedVappTemplate = vdcApi.cloneVAppTemplate(vdcUrn, cloneVAppTemplateParams);
+
if (waitForTask) {
Task cloneTask = Iterables.getFirst(clonedVappTemplate.getTasks(), null);
assertNotNull(cloneTask, "vdcApi.cloneVAppTemplate returned VAppTemplate that did not contain any tasks");
@@ -117,112 +108,93 @@
@Test(description = "GET /vAppTemplate/{id}")
public void testGetVAppTemplate() {
- vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
-
+ vAppTemplate = vAppTemplateApi.get(vAppTemplateUrn);
+
checkVAppTemplate(vAppTemplate);
- assertEquals(vAppTemplate.getHref(), vAppTemplateURI);
+ assertEquals(vAppTemplate.getId(), vAppTemplateUrn);
}
-
+
@Test(description = "GET /vAppTemplate/{id}/owner")
public void testGetVAppTemplateOwner() {
- Owner owner = vAppTemplateApi.getOwner(vAppTemplateURI);
-
+ Owner owner = vAppTemplateApi.getOwner(vAppTemplateUrn);
+
checkOwner(owner);
- assertEquals(owner.getUser(), vAppTemplateApi.getVAppTemplate(vAppTemplateURI).getOwner().getUser());
+ assertEquals(owner.getUser(), vAppTemplateApi.get(vAppTemplateUrn).getOwner().getUser());
}
-
+
@Test(description = "GET /vAppTemplate/{id}/customizationSection")
public void testGetCustomizationSection() {
- CustomizationSection customizationSection = vAppTemplateApi.getCustomizationSection(vAppTemplateURI);
-
+ CustomizationSection customizationSection = vAppTemplateApi.getCustomizationSection(vAppTemplateUrn);
+
checkCustomizationSection(customizationSection);
}
-
+
@Test(description = "GET /vAppTemplate/{id}/productSections")
public void testGetProductSections() {
- ProductSectionList productSectionList = vAppTemplateApi.getProductSections(vAppTemplateURI);
-
+ ProductSectionList productSectionList = vAppTemplateApi.getProductSections(vAppTemplateUrn);
+
checkProductSectionList(productSectionList);
}
-
+
@Test(description = "PUT /vAppTemplate/{id}/productSections")
public void testEditProductSections() {
// TODO make a real modification
-
- ProductSectionList origSections = vAppTemplateApi.getProductSections(vApp.getHref());
+
+ ProductSectionList origSections = vAppTemplateApi.getProductSections(vApp.getId());
ProductSectionList newSections = origSections.toBuilder().build();
-
- Task task = vAppTemplateApi.modifyProductSections(vApp.getHref(), newSections);
+
+ Task task = vAppTemplateApi.editProductSections(vApp.getId(), newSections);
assertTaskSucceeds(task);
- ProductSectionList modified = vAppTemplateApi.getProductSections(vApp.getHref());
+ ProductSectionList modified = vAppTemplateApi.getProductSections(vApp.getId());
checkProductSectionList(modified);
}
- @Test(description = "GET /vAppTemplate/{id}/guestCustomizationSection")
- public void testGetGuestCustomizationSection() {
- getGuestCustomizationSection(new Function<URI, GuestCustomizationSection>() {
- @Override
- public GuestCustomizationSection apply(URI uri) {
- return vAppTemplateApi.getGuestCustomizationSection(uri);
- }
- });
- }
-
@Test(description = "GET /vAppTemplate/{id}/leaseSettingsSection")
public void testGetLeaseSettingsSection() {
- LeaseSettingsSection leaseSettingsSection = vAppTemplateApi.getLeaseSettingsSection(vAppTemplateURI);
-
+ LeaseSettingsSection leaseSettingsSection = vAppTemplateApi.getLeaseSettingsSection(vAppTemplateUrn);
+
checkLeaseSettingsSection(leaseSettingsSection);
}
-
+
@Test(description = "GET /vAppTemplate/{id}/metadata", dependsOnMethods = { "testEditMetadataValue" })
public void testGetVAppTemplateMetadata() {
- Metadata metadata = vAppTemplateApi.getMetadataApi().getMetadata(vAppTemplateURI);
-
+ Metadata metadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
+
checkMetadata(metadata);
}
- // implicitly tested by testEditVAppTemplateMetadataValue, which first creates the metadata entry; otherwise no entry may exist
+ // implicitly tested by testEditVAppTemplateMetadataValue, which first adds the metadata entry;
+ // otherwise no entry may exist
@Test(description = "GET /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testGetVAppTemplateMetadata" })
public void testGetMetadataValue() {
- Metadata metadata = vAppTemplateApi.getMetadataApi().getMetadata(vAppTemplateURI);
+ Metadata metadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
MetadataEntry entry = Iterables.get(metadata.getMetadataEntries(), 0);
-
- MetadataValue val = vAppTemplateApi.getMetadataApi().getMetadataValue(vAppTemplateURI, entry.getKey());
-
+
+ MetadataValue val = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).getValue(entry.getKey());
+
checkMetadataValue(val);
assertEquals(val.getValue(), entry.getValue());
}
-
+
@Test(description = "GET /vAppTemplate/{id}/networkConfigSection")
public void testGetVAppTemplateNetworkConfigSection() {
- NetworkConfigSection networkConfigSection = vAppTemplateApi.getNetworkConfigSection(vAppTemplateURI);
-
+ NetworkConfigSection networkConfigSection = vAppTemplateApi.getNetworkConfigSection(vAppTemplateUrn);
+
checkNetworkConfigSection(networkConfigSection);
}
-
- @Test(description = "GET /vAppTemplate/{id}/networkConnectionSection")
- public void testGetNetworkConnectionSection() {
- getNetworkConnectionSection(new Function<URI, NetworkConnectionSection>() {
- @Override
- public NetworkConnectionSection apply(URI uri) {
- return vAppTemplateApi.getNetworkConnectionSection(uri);
- }
- });
- }
@Test(description = "GET /vAppTemplate/{id}/networkSection")
public void testGetVAppTemplateNetworkSection() {
- NetworkSection networkSection = vAppTemplateApi.getNetworkSection(vAppTemplateURI);
+ NetworkSection networkSection = vAppTemplateApi.getNetworkSection(vAppTemplateUrn);
checkOvfNetworkSection(networkSection);
}
@Test(description = "GET /vAppTemplate/{id}/ovf")
public void testGetVAppTemplateOvf() {
- Envelope envelope = vAppTemplateApi.getOvf(vAppTemplateURI);
-
+ Envelope envelope = vAppTemplateApi.getOvf(vAppTemplateUrn);
+
checkOvfEnvelope(envelope);
}
@@ -230,197 +202,146 @@
public void testEditVAppTemplate() {
String name = name("myname-");
String description = name("Description ");
- VAppTemplate template = VAppTemplate.builder()
- .name(name)
- .description(description)
- .build();
-
- final Task task = vAppTemplateApi.modifyVAppTemplate(vAppTemplateURI, template);
+ VAppTemplate template = VAppTemplate.builder().name(name).description(description).build();
+
+ final Task task = vAppTemplateApi.edit(vAppTemplateUrn, template);
assertTaskSucceeds(task);
- VAppTemplate newTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
+ VAppTemplate newTemplate = vAppTemplateApi.get(vAppTemplateUrn);
assertEquals(newTemplate.getName(), name);
assertEquals(newTemplate.getDescription(), description);
}
@Test(description = "POST /vAppTemplate/{id}/metadata", dependsOnMethods = { "testGetVAppTemplate" })
public void testEditMetadata() {
- Metadata oldMetadata = vAppTemplateApi.getMetadataApi().getMetadata(vAppTemplateURI);
- Map<String,String> oldMetadataMap = metadataToMap(oldMetadata);
+ Metadata oldMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
+ Map<String, String> oldMetadataMap = metadataToMap(oldMetadata);
key = name("key-");
val = name("value-");
MetadataEntry metadataEntry = MetadataEntry.builder().entry(key, val).build();
Metadata metadata = Metadata.builder().fromMetadata(oldMetadata).entry(metadataEntry).build();
-
- final Task task = vAppTemplateApi.getMetadataApi().mergeMetadata(vAppTemplateURI, metadata);
+
+ final Task task = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).merge(metadata);
assertTaskSucceeds(task);
- Metadata newMetadata = vAppTemplateApi.getMetadataApi().getMetadata(vAppTemplateURI);
- Map<String,String> expectedMetadataMap = ImmutableMap.<String,String>builder()
- .putAll(oldMetadataMap)
- .put(key, val)
- .build();
+ Metadata newMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
+ Map<String, String> expectedMetadataMap = ImmutableMap.<String, String> builder().putAll(oldMetadataMap)
+ .put(key, val).build();
checkMetadataFor("vAppTemplate", newMetadata, expectedMetadataMap);
}
-
+
@Test(description = "PUT /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testEditMetadata" })
public void testEditMetadataValue() {
- val = "new"+val;
+ val = "new" + val;
MetadataValue metadataValue = MetadataValue.builder().value(val).build();
-
- final Task task = vAppTemplateApi.getMetadataApi().setMetadata(vAppTemplateURI, key, metadataValue);
+
+ final Task task = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).putEntry(key, metadataValue);
retryTaskSuccess.apply(task);
- MetadataValue newMetadataValue = vAppTemplateApi.getMetadataApi().getMetadataValue(vAppTemplateURI, key);
+ MetadataValue newMetadataValue = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).getValue(key);
assertEquals(newMetadataValue.getValue(), metadataValue.getValue());
}
@Test(description = "DELETE /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" })
- public void testDeleteVAppTemplateMetadataValue() {
- final Task deletionTask = vAppTemplateApi.getMetadataApi().deleteMetadataEntry(vAppTemplateURI, key);
+ public void testRemoveVAppTemplateMetadataValue() {
+ final Task deletionTask = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key);
assertTaskSucceeds(deletionTask);
- Metadata newMetadata = vAppTemplateApi.getMetadataApi().getMetadata(vAppTemplateURI);
+ Metadata newMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
checkMetadataKeyAbsentFor("vAppTemplate", newMetadata, key);
key = null;
}
- @Test(description = "PUT /vAppTemplate/{id}/guestCustomizationSection")
- public void testEditGuestCustomizationSection() {
- String computerName = name("n");
- GuestCustomizationSection newSection = GuestCustomizationSection.builder()
- .info("")
- .computerName(computerName)
- .build();
-
- final Task task = vAppTemplateApi.modifyGuestCustomizationSection(vm.getHref(), newSection);
- assertTaskSucceeds(task);
-
- GuestCustomizationSection modified = vAppTemplateApi.getGuestCustomizationSection(vm.getHref());
-
- checkGuestCustomizationSection(modified);
- assertEquals(modified.getComputerName(), computerName);
- }
-
// NOTE vAppTemplate supports only storageLease (deployment lease applies to vApp too)
@Test(description = "PUT /vAppTemplate/{id}/leaseSettingsSection")
public void testEditLeaseSettingsSection() throws Exception {
// NOTE use smallish number for storageLeaseInSeconds; it seems to be capped at 5184000?
- int storageLeaseInSeconds = random.nextInt(10000)+1;
+ int storageLeaseInSeconds = random.nextInt(10000) + 1;
- LeaseSettingsSection leaseSettingSection = LeaseSettingsSection.builder()
- .info("my info")
- .storageLeaseInSeconds(storageLeaseInSeconds)
- .build();
-
- final Task task = vAppTemplateApi.modifyLeaseSettingsSection(vAppTemplateURI, leaseSettingSection);
+ LeaseSettingsSection leaseSettingSection = LeaseSettingsSection.builder().info("my info")
+ .storageLeaseInSeconds(storageLeaseInSeconds).build();
+
+ final Task task = vAppTemplateApi.editLeaseSettingsSection(vAppTemplateUrn, leaseSettingSection);
assertTaskSucceeds(task);
-
- LeaseSettingsSection newLeaseSettingsSection = vAppTemplateApi.getLeaseSettingsSection(vAppTemplateURI);
+
+ LeaseSettingsSection newLeaseSettingsSection = vAppTemplateApi.getLeaseSettingsSection(vAppTemplateUrn);
assertEquals(newLeaseSettingsSection.getStorageLeaseInSeconds(), (Integer) storageLeaseInSeconds);
}
- @Test(description = "DELETE /vAppTemplate/{id}", dependsOnMethods = { "testGetVAppTemplate" })
- public void testDeleteVAppTemplate() throws Exception {
+ @Test(description = "DELETE /vAppTemplate/{id}", dependsOnMethods = { "testGetVAppTemplate" })
+ public void testRemoveVAppTemplate() throws Exception {
VAppTemplate clonedVappTemplate = cloneVAppTemplate(true);
- // Confirm that "get" works pre-delete
- VAppTemplate vAppTemplatePreDelete = vAppTemplateApi.getVAppTemplate(clonedVappTemplate.getHref());
+ // Confirm that "get" works pre-remove
+ VAppTemplate vAppTemplatePreDelete = vAppTemplateApi.get(clonedVappTemplate.getId());
checkVAppTemplate(vAppTemplatePreDelete);
-
+
// Delete the template
- final Task task = vAppTemplateApi.deleteVappTemplate(clonedVappTemplate.getHref());
+ final Task task = vAppTemplateApi.remove(clonedVappTemplate.getId());
assertTaskSucceeds(task);
- // Confirm that can't access post-delete, i.e. template has been deleted
- VAppTemplate deleted = vAppTemplateApi.getVAppTemplate(clonedVappTemplate.getHref());
- assertNull(deleted);
+ // Confirm that can't access post-remove, i.e. template has been removed
+ VAppTemplate removed = vAppTemplateApi.get(clonedVappTemplate.getId());
+ assertNull(removed);
}
@Test(description = "POST /vAppTemplate/{id}/action/disableDownload")
public void testDisableVAppTemplateDownload() throws Exception {
- vAppTemplateApi.disableDownload(vAppTemplateURI);
-
- // TODO Check that it really is disabled. The only thing I can see for determining this
+ vAppTemplateApi.disableDownload(vAppTemplateUrn);
+
+ // TODO Check that it really is disabled. The only thing I can see for determining this
// is the undocumented "download" link in the VAppTemplate. But that is brittle and we
// don't know what timing guarantees there are for adding/removing the link.
- VAppTemplate vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
+ VAppTemplate vAppTemplate = vAppTemplateApi.get(vAppTemplateUrn);
Set<Link> links = vAppTemplate.getLinks();
- assertTrue(Iterables.all(Iterables.transform(links, rel), Predicates.not(Predicates.in(EnumSet.of(Link.Rel.DOWNLOAD_DEFAULT, Link.Rel.DOWNLOAD_ALTERNATE)))),
- "Should not offer download link after disabling download: "+vAppTemplate);
+ assertTrue(Iterables.all(Iterables.transform(links, rel),
+ Predicates.not(Predicates.in(EnumSet.of(Link.Rel.DOWNLOAD_DEFAULT, Link.Rel.DOWNLOAD_ALTERNATE)))),
+ "Should not offer download link after disabling download: " + vAppTemplate);
}
-
+
@Test(description = "POST /vAppTemplate/{id}/action/enableDownload")
public void testEnableVAppTemplateDownload() throws Exception {
// First disable so that enable really has some work to do...
- vAppTemplateApi.disableDownload(vAppTemplateURI);
- final Task task = vAppTemplateApi.enableDownload(vAppTemplateURI);
+ vAppTemplateApi.disableDownload(vAppTemplateUrn);
+ final Task task = vAppTemplateApi.enableDownload(vAppTemplateUrn);
assertTaskSucceeds(task);
-
- // TODO Check that it really is enabled. The only thing I can see for determining this
+
+ // TODO Check that it really is enabled. The only thing I can see for determining this
// is the undocumented "download" link in the VAppTemplate. But that is brittle and we
// don't know what timing guarantees there are for adding/removing the link.
- VAppTemplate vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
+ VAppTemplate vAppTemplate = vAppTemplateApi.get(vAppTemplateUrn);
Set<Link> links = vAppTemplate.getLinks();
- assertTrue(Iterables.any(Iterables.transform(links, rel), Predicates.in(EnumSet.of(Link.Rel.DOWNLOAD_DEFAULT, Link.Rel.DOWNLOAD_ALTERNATE))),
- "Should offer download link after enabling download: "+vAppTemplate);
+ assertTrue(
+ Iterables.any(Iterables.transform(links, rel),
+ Predicates.in(EnumSet.of(Link.Rel.DOWNLOAD_DEFAULT, Link.Rel.DOWNLOAD_ALTERNATE))),
+ "Should offer download link after enabling download: " + vAppTemplate);
}
-
+
private Function<Link, Link.Rel> rel = new Function<Link, Link.Rel>() {
@Override
public Rel apply(Link input) {
return input.getRel();
}
};
-
- @Test(description = "POST /vAppTemplate/{id}/action/consolidate")
- public void testConsolidateVAppTemplate() throws Exception {
- final Task task = vAppTemplateApi.consolidateVm(vm.getHref());
- assertTaskSucceedsLong(task);
-
- // TODO Need assertion that command had effect
- }
-
- // TODO How to obtain a datastore reference?
- @Test(description = "POST /vAppTemplate/{id}/action/relocate")
- public void testRelocateVAppTemplate() throws Exception {
- Reference dataStore = null; // FIXME
- RelocateParams relocateParams = RelocateParams.builder()
- .datastore(dataStore)
- .build();
-
- final Task task = vAppTemplateApi.relocateVm(vAppTemplateURI, relocateParams);
- assertTaskSucceedsLong(task);
- // TODO Need assertion that command had effect
- }
-
- // NOTE This will fail unless we can relocate a template to another datastore
- @Test(description = "GET /vAppTemplate/{id}/shadowVms", dependsOnMethods = { "testRelocateVAppTemplate" })
- public void testGetShadowVms() {
- References references = vAppTemplateApi.getShadowVms(vAppTemplateURI);
-
- Checks.checkReferences(references);
- }
-
- // This failed previously, but is passing now.
+ // This failed previously, but is passing now.
// However, it's not part of the official API so not necessary to assert it.
- @Test(description = "test completed task not included in vAppTemplate")
+ @Test(description = "test completed task not included in vAppTemplate")
public void testCompletedTaskNotIncludedInVAppTemplate() throws Exception {
// Kick off a task, and wait for it to complete
- vAppTemplateApi.disableDownload(vAppTemplateURI);
- final Task task = vAppTemplateApi.enableDownload(vAppTemplateURI);
+ vAppTemplateApi.disableDownload(vAppTemplateUrn);
+ final Task task = vAppTemplateApi.enableDownload(vAppTemplateUrn);
assertTaskDoneEventually(task);
// Ask the VAppTemplate for its tasks, and the status of the matching task if it exists
- VAppTemplate vAppTemplate = vAppTemplateApi.getVAppTemplate(vAppTemplateURI);
+ VAppTemplate vAppTemplate = vAppTemplateApi.get(vAppTemplateUrn);
List<Task> tasks = vAppTemplate.getTasks();
for (Task contender : tasks) {
if (task.getId().equals(contender.getId())) {
Task.Status status = contender.getStatus();
if (EnumSet.of(Task.Status.QUEUED, Task.Status.PRE_RUNNING, Task.Status.RUNNING).contains(status)) {
- fail("Task "+contender+" reported complete, but is included in VAppTemplate in status "+status);
+ fail("Task " + contender + " reported complete, but is included in VAppTemplate in status " + status);
}
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VdcApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VdcApiExpectTest.java
index 8ba976f..c5d02f6 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VdcApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VdcApiExpectTest.java
@@ -24,8 +24,6 @@
import java.net.URI;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
@@ -35,17 +33,15 @@
import org.jclouds.vcloud.director.v1_5.domain.Error;
import org.jclouds.vcloud.director.v1_5.domain.Link;
import org.jclouds.vcloud.director.v1_5.domain.Media;
-import org.jclouds.vcloud.director.v1_5.domain.Owner;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.User;
import org.jclouds.vcloud.director.v1_5.domain.Media.ImageType;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
+import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
+import org.jclouds.vcloud.director.v1_5.domain.User;
import org.jclouds.vcloud.director.v1_5.domain.VApp;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
-import org.jclouds.vcloud.director.v1_5.domain.org.Org;
import org.jclouds.vcloud.director.v1_5.domain.params.CaptureVAppParams;
import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams;
import org.jclouds.vcloud.director.v1_5.domain.params.CloneVAppParams;
@@ -87,7 +83,7 @@
Vdc expected = getVdc();
- assertEquals(api.getVdcApi().getVdc(vdcURI), expected);
+ assertEquals(api.getVdcApi().get(vdcURI), expected);
}
@Test
@@ -109,7 +105,7 @@
.build();
try {
- api.getVdcApi().getVdc(URI.create(endpoint + "/vdc/NOTAUUID"));
+ api.getVdcApi().get(URI.create(endpoint + "/vdc/NOTAUUID"));
fail("Should give HTTP 400 error");
} catch (VCloudDirectorException vde) {
assertEquals(vde.getError(), expected);
@@ -128,7 +124,7 @@
.xmlFilePayload("/vdc/error403-fake.xml", VCloudDirectorMediaType.ERROR)
.httpResponseBuilder().statusCode(403).build());
- assertNull(api.getVdcApi().getVdc(URI.create(endpoint + "/vdc/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
+ assertNull(api.getVdcApi().get(URI.create(endpoint + "/vdc/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
}
@Test(enabled = false)
@@ -290,17 +286,17 @@
}
@Test
- public void testCreateMedia() {
+ public void testAddMedia() {
URI vdcUri = URI.create(endpoint + "/vdc/e9cd3387-ac57-4d27-a481-9bee75e0690f");
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("POST", "/vdc/e9cd3387-ac57-4d27-a481-9bee75e0690f/media")
.acceptMedia(VCloudDirectorMediaType.MEDIA)
- .xmlFilePayload("/media/createMediaSource.xml", VCloudDirectorMediaType.MEDIA)
+ .xmlFilePayload("/media/addMediaSource.xml", VCloudDirectorMediaType.MEDIA)
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/media/createMedia.xml", VCloudDirectorMediaType.MEDIA)
+ .xmlFilePayload("/media/addMedia.xml", VCloudDirectorMediaType.MEDIA)
.httpResponseBuilder().statusCode(201).build());
Media source = Media.builder()
@@ -310,9 +306,9 @@
.type("application/vnd.vmware.vcloud.media+xml")
.description("Test media generated by testCreateMedia()")
.build();
- Media expected = MediaApiExpectTest.createMedia();
+ Media expected = MediaApiExpectTest.addMedia();
- assertEquals(api.getVdcApi().createMedia(vdcUri, source), expected);
+ assertEquals(api.getVdcApi().addMedia(vdcUri, source), expected);
}
@Test
@@ -335,7 +331,6 @@
.source(Reference.builder()
.type("application/vnd.vmware.vcloud.media+xml")
.name("copied test media")
- .id("urn:vcloud:media:da8361af-cccd-4103-a71c-493513c49094")
.href(URI.create("https://mycloud.greenhousedata.com/api/media/da8361af-cccd-4103-a71c-493513c49094"))
.build())
.isSourceDelete(false)
@@ -360,7 +355,7 @@
Metadata expected = metadata();
- assertEquals(api.getVdcApi().getMetadataApi().getMetadata(vdcUri), expected);
+ assertEquals(api.getVdcApi().getMetadataApi(vdcUri).get(), expected);
}
@Test(enabled = false)
@@ -378,7 +373,7 @@
MetadataValue expected = metadataValue();
- assertEquals(api.getVdcApi().getMetadataApi().getMetadataValue(vdcUri, "key"), expected);
+ assertEquals(api.getVdcApi().getMetadataApi(vdcUri).getValue("key"), expected);
}
public static Vdc getVdc() {
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VdcApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VdcApiLiveTest.java
index cd0f14e..a03552a 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VdcApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VdcApiLiveTest.java
@@ -21,11 +21,10 @@
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_EQ;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ_LIVE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.util.Map;
@@ -40,6 +39,7 @@
import org.jclouds.vcloud.director.v1_5.domain.VApp;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
+import org.jclouds.vcloud.director.v1_5.domain.network.Network;
import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
import org.jclouds.vcloud.director.v1_5.domain.network.VAppNetworkConfiguration;
@@ -64,11 +64,11 @@
/**
* Tests behavior of {@link VdcApi}
*
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "VdcApiLiveTest")
public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
-
+
public static final String VDC = "vdc";
/*
@@ -77,7 +77,7 @@
protected VdcApi vdcApi;
protected VAppTemplateApi vappTemplateApi;
protected VAppApi vappApi;
-
+
private VApp instantiatedVApp;
private VApp clonedVApp;
private VApp composedVApp;
@@ -85,17 +85,19 @@
private VAppTemplate capturedVAppTemplate;
private VAppTemplate uploadedVAppTemplate;
private boolean metadataSet = false;
-
+ private Network network;
+
@Override
@BeforeClass(alwaysRun = true)
public void setupRequiredApis() {
vdcApi = context.getApi().getVdcApi();
vappTemplateApi = context.getApi().getVAppTemplateApi();
vappApi = context.getApi().getVAppApi();
-
- assertNotNull(vdcURI, String.format(REF_REQ_LIVE, VDC));
+
+ assertNotNull(vdcUrn, String.format(URN_REQ_LIVE, VDC));
+ network = lazyGetNetwork();
}
-
+
@AfterClass(alwaysRun = true)
public void cleanUp() throws Exception {
if (clonedVAppTemplate != null) {
@@ -116,236 +118,218 @@
if (composedVApp != null) {
cleanUpVApp(composedVApp);
}
-
+
if (metadataSet) {
try {
- Task delete = adminContext.getApi().getVdcApi().getMetadataApi().deleteMetadataEntry(toAdminUri(vdcURI), "key");
- taskDoneEventually(delete);
+ Task remove = adminContext.getApi().getVdcApi().getMetadataApi(vdcUrn).removeEntry("key");
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn(e, "Error deleting metadata entry");
}
}
}
-
+
@Test(description = "GET /vdc/{id}")
public void testGetVdc() {
- Vdc vdc = vdcApi.getVdc(vdcURI);
+ Vdc vdc = lazyGetVdc();
assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
- assertTrue(!vdc.getDescription().equals("DO NOT USE"), "vDC isn't to be used for testing");
-
+ assertFalse("DO NOT USE".equals(vdc.getDescription()), "vDC isn't to be used for testing");
Checks.checkVdc(vdc);
}
-
- @Test(description = "POST /vdc/{id}/action/captureVApp", dependsOnMethods = { "testInstantiateVAppTemplate" } )
+
+ @Test(description = "POST /vdc/{id}/action/captureVApp", dependsOnMethods = { "testInstantiateVAppTemplate" })
public void testCaptureVApp() {
String name = name("captured-");
-
- CaptureVAppParams captureVappParams = CaptureVAppParams.builder()
- .name(name)
- .source(instantiatedVApp.getHref())
- // TODO: test optional params
- //.description("")
- //.sections(sections) // TODO: ovf sections
+
+ CaptureVAppParams captureVappParams = CaptureVAppParams.builder().name(name).source(instantiatedVApp.getHref())
+ // TODO: test optional params
+ // .description("")
+ // .sections(sections) // TODO: ovf sections
.build();
-
- capturedVAppTemplate = vdcApi.captureVApp(vdcURI, captureVappParams);
+
+ capturedVAppTemplate = vdcApi.captureVApp(vdcUrn, captureVappParams);
Task task = Iterables.getFirst(capturedVAppTemplate.getTasks(), null);
assertTaskSucceedsLong(task);
Checks.checkVAppTemplate(capturedVAppTemplate);
-
- assertEquals(capturedVAppTemplate.getName(), name,
+
+ assertEquals(capturedVAppTemplate.getName(), name,
String.format(OBJ_FIELD_EQ, "VAppTemplate", "name", name, capturedVAppTemplate.getName()));
}
-
- @Test(description = "POST /vdc/{id}/action/cloneVApp", dependsOnMethods = { "testInstantiateVAppTemplate" } )
+
+ @Test(description = "POST /vdc/{id}/action/cloneVApp", dependsOnMethods = { "testInstantiateVAppTemplate" })
public void testCloneVApp() {
- CloneVAppParams cloneVappParams = CloneVAppParams.builder()
- .source(instantiatedVApp.getHref())
- // TODO: test optional params
- //.name("")
- //.description("")
- //.deploy(true)
- //.isSourceDelete(true)
- //.powerOn(true)
- //.instantiationParams(InstantiationParams.builder()
- // .sections(sections) // TODO: ovf sections? various tests?
- // .build())
-
+ CloneVAppParams cloneVappParams = CloneVAppParams.builder().source(instantiatedVApp.getHref())
+ // TODO: test optional params
+ // .name("")
+ // .description("")
+ // .deploy(true)
+ // .isSourceDelete(true)
+ // .powerOn(true)
+ // .instantiationParams(InstantiationParams.builder()
+ // .sections(sections) // TODO: ovf sections? various tests?
+ // .build())
+
// Reserved. Unimplemented params; may test eventually when implemented
- //.vAppParent(vAppParentRef)
- //.linkedClone(true)
+ // .vAppParent(vAppParentRef)
+ // .linkedClone(true)
.build();
-
- clonedVApp = vdcApi.cloneVApp(vdcURI, cloneVappParams);
-
+
+ clonedVApp = vdcApi.cloneVApp(vdcUrn, cloneVappParams);
+
Task task = Iterables.getFirst(clonedVApp.getTasks(), null);
assertNotNull(task, "vdcApi.cloneVApp returned VApp that did not contain any tasks");
assertTaskSucceedsLong(task);
Checks.checkVApp(clonedVApp);
}
-
+
@Test(description = "POST /vdc/{id}/action/cloneVAppTemplate")
public void testCloneVAppTemplate() {
- clonedVAppTemplate = vdcApi.cloneVAppTemplate(vdcURI, CloneVAppTemplateParams.builder()
- .source(vAppTemplateURI)
- .build());
-
+ clonedVAppTemplate = vdcApi.cloneVAppTemplate(vdcUrn,
+ CloneVAppTemplateParams.builder().source(lazyGetVAppTemplate().getHref()).build());
+
Task task = Iterables.getFirst(clonedVAppTemplate.getTasks(), null);
assertNotNull(task, "vdcApi.cloneVAppTemplate returned VAppTemplate that did not contain any tasks");
assertTaskSucceedsLong(task);
-
+
Checks.checkVAppTemplate(clonedVAppTemplate);
}
-
+
@Test(description = "POST /vdc/{id}/action/composeVApp")
public void testComposeVApp() {
String name = name("composed-");
-
- composedVApp = vdcApi.composeVApp(vdcURI, ComposeVAppParams.builder()
- .name(name)
- // TODO: test optional params
- //.sourcedItem(SourcedCompositionItemParam.builder()
- //.sourcedItem(vAppTemplateURI)
- //.build())
- //.description("")
- //.deploy(true)
- //.isSourceDelete(false)
- //.powerOn(true)
- //.instantiationParams(InstantiationParams.builder()
- // .sections(sections) // TODO: ovf sections? various tests?
- // .build())
- // Reserved. Unimplemented params; may test eventually when implemented
- //.linkedClone()
- .build());
+ composedVApp = vdcApi.composeVApp(vdcUrn, ComposeVAppParams.builder().name(name)
+ // TODO: test optional params
+ // .sourcedItem(SourcedCompositionItemParam.builder()
+ // .sourcedItem(vAppTemplateURI)
+ // .build())
+ // .description("")
+ // .deploy(true)
+ // .isSourceDelete(false)
+ // .powerOn(true)
+ // .instantiationParams(InstantiationParams.builder()
+ // .sections(sections) // TODO: ovf sections? various tests?
+ // .build())
+
+ // Reserved. Unimplemented params; may test eventually when implemented
+ // .linkedClone()
+ .build());
Task task = Iterables.getFirst(composedVApp.getTasks(), null);
assertNotNull(task, "vdcApi.composeVApp returned VApp that did not contain any tasks");
assertTaskSucceedsLong(task);
Checks.checkVApp(composedVApp);
- assertEquals(composedVApp.getName(), name,
+ assertEquals(composedVApp.getName(), name,
String.format(OBJ_FIELD_EQ, "VApp", "name", name, composedVApp.getName()));
}
-
+
// TODO Duplicates code in VAppApiLiveTest
@Test(description = "POST /vdc/{id}/action/instantiateVAppTemplate")
public void testInstantiateVAppTemplate() {
- Vdc vdc = vdcApi.getVdc(vdcURI);
+ Vdc vdc = vdcApi.get(vdcUrn);
Set<Reference> networks = vdc.getAvailableNetworks();
- Optional<Reference> parentNetwork = Iterables.tryFind(
- networks, new Predicate<Reference>() {
- @Override
- public boolean apply(Reference reference) {
- return reference.getHref().equals(networkURI);
- }
- });
+ Optional<Reference> parentNetwork = Iterables.tryFind(networks, new Predicate<Reference>() {
+ @Override
+ public boolean apply(Reference reference) {
+ return reference.getHref().equals(network.getHref());
+ }
+ });
if (!parentNetwork.isPresent()) {
- fail(String.format("Could not find network %s in vdc", networkURI.toASCIIString()));
+ fail(String.format("Could not find network %s in vdc", network.getHref().toASCIIString()));
}
- NetworkConfiguration networkConfiguration = NetworkConfiguration.builder()
- .parentNetwork(parentNetwork.get())
- .fenceMode(FenceMode.BRIDGED)
- .build();
-
- NetworkConfigSection networkConfigSection = NetworkConfigSection.builder()
+ NetworkConfiguration networkConfiguration = NetworkConfiguration.builder().parentNetwork(parentNetwork.get())
+ .fenceMode(FenceMode.BRIDGED).build();
+
+ NetworkConfigSection networkConfigSection = NetworkConfigSection
+ .builder()
.info("Configuration parameters for logical networks")
.networkConfigs(
- ImmutableSet.of(VAppNetworkConfiguration.builder()
- .networkName("vAppNetwork")
- .configuration(networkConfiguration)
- .build()))
- .build();
+ ImmutableSet.of(VAppNetworkConfiguration.builder().networkName("vAppNetwork")
+ .configuration(networkConfiguration).build())).build();
InstantiationParams instantiationParams = InstantiationParams.builder()
- .sections(ImmutableSet.of(networkConfigSection))
- .build();
-
- InstantiateVAppTemplateParams instantiate = InstantiateVAppTemplateParams.builder()
- .name(name("test-vapp-"))
- .notDeploy()
- .notPowerOn()
- .description("Test VApp")
- .instantiationParams(instantiationParams)
- .source(vAppTemplateURI)
- .build();
+ .sections(ImmutableSet.of(networkConfigSection)).build();
- instantiatedVApp = vdcApi.instantiateVApp(vdcURI, instantiate);
+ InstantiateVAppTemplateParams instantiate = InstantiateVAppTemplateParams.builder().name(name("test-vapp-"))
+ .notDeploy().notPowerOn().description("Test VApp").instantiationParams(instantiationParams)
+ .source(lazyGetVAppTemplate().getHref()).build();
+
+ instantiatedVApp = vdcApi.instantiateVApp(vdcUrn, instantiate);
Task instantiationTask = Iterables.getFirst(instantiatedVApp.getTasks(), null);
assertTaskSucceedsLong(instantiationTask);
-
+
Checks.checkVApp(instantiatedVApp);
}
-
+
@Test(description = "POST /vdc/{id}/action/uploadVAppTemplate")
public void testUploadVAppTemplate() {
// TODO Should test all 4 stages of upload; currently doing only stage 1 here.
- // 1. creating empty vApp template entity
- // 2. uploading an OVF of vApp template
- // 3. uploading disks described from the OVF
- // 4. finishing task for uploading
-
+ // 1. creating empty vApp template entity
+ // 2. uploading an OVF of vApp template
+ // 3. uploading disks described from the OVF
+ // 4. finishing task for uploading
+
String name = name("uploaded-");
-
- UploadVAppTemplateParams uploadVAppTemplateParams = UploadVAppTemplateParams.builder()
- .name(name)
- // TODO: test optional params
- //.description("")
- //.transferFormat("")
- //.manifestRequired(true)
+
+ UploadVAppTemplateParams uploadVAppTemplateParams = UploadVAppTemplateParams.builder().name(name)
+ // TODO: test optional params
+ // .description("")
+ // .transferFormat("")
+ // .manifestRequired(true)
.build();
-
- uploadedVAppTemplate = vdcApi.uploadVAppTemplate(vdcURI, uploadVAppTemplateParams);
-
+
+ uploadedVAppTemplate = vdcApi.uploadVAppTemplate(vdcUrn, uploadVAppTemplateParams);
+
Checks.checkVAppTemplateWhenNotReady(uploadedVAppTemplate);
-
- assertEquals(uploadedVAppTemplate.getName(), name,
+
+ assertEquals(uploadedVAppTemplate.getName(), name,
String.format(OBJ_FIELD_EQ, "VAppTemplate", "name", name, uploadedVAppTemplate.getName()));
-
+
ResourceEntity.Status expectedStatus = ResourceEntity.Status.UNRESOLVED;
ResourceEntity.Status actualStatus = uploadedVAppTemplate.getStatus();
assertEquals(actualStatus, expectedStatus,
String.format(OBJ_FIELD_EQ, "VAppTemplate", "status", expectedStatus, actualStatus));
-
+
}
-
+
private void setupMetadata() {
- adminContext.getApi().getVdcApi().getMetadataApi().setMetadata(toAdminUri(vdcURI),
- "key", MetadataValue.builder().value("value").build());
+ adminContext.getApi().getVdcApi().getMetadataApi(vdcUrn)
+ .putEntry("key", MetadataValue.builder().value("value").build());
metadataSet = true;
}
-
- @Test(description = "GET /vdc/{id}/metadata", dependsOnMethods = { "testGetVdc" } )
+
+ @Test(description = "GET /vdc/{id}/metadata", dependsOnMethods = { "testGetVdc" })
public void testGetMetadata() {
- if(adminContext != null) {
+ if (adminContext != null) {
setupMetadata();
}
-
- Metadata metadata = vdcApi.getMetadataApi().getMetadata(vdcURI);
-
+
+ Metadata metadata = vdcApi.getMetadataApi(vdcUrn).get();
+
// required for testing
- assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
- String.format(OBJ_FIELD_REQ_LIVE, VDC, "metadata.entries"));
-
+ assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
+ String.format(OBJ_FIELD_REQ_LIVE, VDC, "metadata.entries"));
+
Checks.checkMetadataFor(VDC, metadata);
}
-
- @Test(description = "GET /vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" } )
+
+ @Test(description = "GET /vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
public void testGetMetadataValue() {
// First find a key
- Metadata metadata = vdcApi.getMetadataApi().getMetadata(vdcURI);
+ Metadata metadata = vdcApi.getMetadataApi(vdcUrn).get();
Map<String, String> metadataMap = Checks.metadataToMap(metadata);
String key = Iterables.getFirst(metadataMap.keySet(), "MadeUpKey!");
String value = metadataMap.get(key);
-
- MetadataValue metadataValue = vdcApi.getMetadataApi().getMetadataValue(vdcURI, key);
-
+
+ MetadataValue metadataValue = vdcApi.getMetadataApi(vdcUrn).getValue(key);
+
Checks.checkMetadataValueFor(VDC, metadataValue, value);
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VmApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VmApiExpectTest.java
index fc922f4..f243c59 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VmApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VmApiExpectTest.java
@@ -86,15 +86,15 @@
Vm expected = getVm();
- assertEquals(api.getVmApi().getVm(vmURI), expected);
+ assertEquals(api.getVmApi().get(vmURI), expected);
}
@Test(enabled = false)
- public void testModifyVm() {
+ public void testEditVm() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId)
- .xmlFilePayload("/vm/modifyVm.xml", VCloudDirectorMediaType.VM)
+ .xmlFilePayload("/vm/editVm.xml", VCloudDirectorMediaType.VM)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
@@ -105,25 +105,25 @@
modified.setName("new-name");
modified.setDescription("New Description");
- Task expected = modifyVmTask();
+ Task expected = editVmTask();
- assertEquals(api.getVmApi().modifyVm(vmURI, modified), expected);
+ assertEquals(api.getVmApi().edit(vmURI, modified), expected);
}
@Test(enabled = false)
- public void testDeleteVm() {
+ public void testRemoveVm() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("DELETE", vmId)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vm/deleteVmTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vm/removeVmTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
- Task expected = deleteVmTask();
+ Task expected = removeVmTask();
- assertEquals(api.getVmApi().deleteVm(vmURI), expected);
+ assertEquals(api.getVmApi().remove(vmURI), expected);
}
@Test(enabled = false)
@@ -139,7 +139,7 @@
Task expected = consolidateVmTask();
- assertEquals(api.getVmApi().consolidateVm(vmURI), expected);
+ assertEquals(api.getVmApi().consolidate(vmURI), expected);
}
@Test(enabled = false)
@@ -211,7 +211,7 @@
Task expected = relocateTask();
- assertEquals(api.getVmApi().relocateVm(vmURI, params), expected);
+ assertEquals(api.getVmApi().relocate(vmURI, params), expected);
}
@Test(enabled = false)
@@ -363,23 +363,23 @@
}
@Test(enabled = false)
- public void testModifyGuestCustomizationSection() {
+ public void testEditGuestCustomizationSection() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/guestCustomizationSection")
- .xmlFilePayload("/vApp/modifyGuestCustomizationSection.xml", VCloudDirectorMediaType.GUEST_CUSTOMIZATION_SECTION)
+ .xmlFilePayload("/vApp/editGuestCustomizationSection.xml", VCloudDirectorMediaType.GUEST_CUSTOMIZATION_SECTION)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyGuestCustomizationSectionTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editGuestCustomizationSectionTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
GuestCustomizationSection section = getGuestCustomizationSection().toBuilder()
.build();
- Task expected = modifyGuestCustomizationSectionTask();
+ Task expected = editGuestCustomizationSectionTask();
- assertEquals(api.getVmApi().modifyGuestCustomizationSection(vmURI, section), expected);
+ assertEquals(api.getVmApi().editGuestCustomizationSection(vmURI, section), expected);
}
@Test(enabled = false)
@@ -439,23 +439,23 @@
}
@Test(enabled = false)
- public void testModifyNetworkConnectionSection() {
+ public void testEditNetworkConnectionSection() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/networkConnectionSection")
- .xmlFilePayload("/vApp/modifyNetworkConnectionSection.xml", VCloudDirectorMediaType.NETWORK_CONNECTION_SECTION)
+ .xmlFilePayload("/vApp/editNetworkConnectionSection.xml", VCloudDirectorMediaType.NETWORK_CONNECTION_SECTION)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyNetworkConnectionSectionTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editNetworkConnectionSectionTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
NetworkConnectionSection section = getNetworkConnectionSection().toBuilder()
.build();
- Task expected = modifyNetworkConnectionSectionTask();
+ Task expected = editNetworkConnectionSectionTask();
- assertEquals(api.getVmApi().modifyNetworkConnectionSection(vmURI, section), expected);
+ assertEquals(api.getVmApi().editNetworkConnectionSection(vmURI, section), expected);
}
@Test(enabled = false)
@@ -475,23 +475,23 @@
}
@Test(enabled = false)
- public void testModifyOperatingSystemSection() {
+ public void testEditOperatingSystemSection() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/operatingSystemSection")
- .xmlFilePayload("/vApp/modifyOperatingSystemSection.xml", VCloudDirectorMediaType.OPERATING_SYSTEM_SECTION)
+ .xmlFilePayload("/vApp/editOperatingSystemSection.xml", VCloudDirectorMediaType.OPERATING_SYSTEM_SECTION)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyOperatingSystemSectionTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editOperatingSystemSectionTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
OperatingSystemSection section = getOperatingSystemSection().toBuilder()
.build();
- Task expected = modifyOperatingSystemSectionTask();
+ Task expected = editOperatingSystemSectionTask();
- assertEquals(api.getVmApi().modifyOperatingSystemSection(vmURI, section), expected);
+ assertEquals(api.getVmApi().editOperatingSystemSection(vmURI, section), expected);
}
@Test(enabled = false)
@@ -511,20 +511,20 @@
}
@Test(enabled = false)
- public void testModifyProductSections() {
+ public void testEditProductSections() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/productSections")
- .xmlFilePayload("/vApp/modifyProductSections.xml", VCloudDirectorMediaType.PRODUCT_SECTION_LIST)
+ .xmlFilePayload("/vApp/editProductSections.xml", VCloudDirectorMediaType.PRODUCT_SECTION_LIST)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyProductSections.xml", VCloudDirectorMediaType.VAPP)
+ .xmlFilePayload("/vApp/editProductSections.xml", VCloudDirectorMediaType.VAPP)
.httpResponseBuilder().build());
- Task expected = modifyProductSectionsTask();
+ Task expected = editProductSectionsTask();
- assertEquals(api.getVmApi().modifyProductSections(vmURI, null), expected);
+ assertEquals(api.getVmApi().editProductSections(vmURI, null), expected);
}
@Test(enabled = false)
@@ -627,23 +627,23 @@
}
@Test(enabled = false)
- public void testModifyVirtualHardwareSection() {
+ public void testEditVirtualHardwareSection() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/virtualHardwareSection")
- .xmlFilePayload("/vApp/modifyVirtualHardwareSection.xml", VCloudDirectorMediaType.VIRTUAL_HARDWARE_SECTION)
+ .xmlFilePayload("/vApp/editVirtualHardwareSection.xml", VCloudDirectorMediaType.VIRTUAL_HARDWARE_SECTION)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
VirtualHardwareSection section = getVirtualHardwareSection().toBuilder()
.build();
- Task expected = modifyVirtualHardwareSectionTask();
+ Task expected = editVirtualHardwareSectionTask();
- assertEquals(api.getVmApi().modifyVirtualHardwareSection(vmURI, section), expected);
+ assertEquals(api.getVmApi().editVirtualHardwareSection(vmURI, section), expected);
}
@Test(enabled = false)
@@ -663,23 +663,23 @@
}
@Test(enabled = false)
- public void testModifyVirtualHardwareSectionCpu() {
+ public void testEditVirtualHardwareSectionCpu() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("", vmId + "/virtualHardwareSection/cpu")
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionCpu.xml", VCloudDirectorMediaType.OVF_RASD_ITEM)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionCpu.xml", VCloudDirectorMediaType.OVF_RASD_ITEM)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionCpuTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionCpuTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
RasdItem cpu = getVirtualHardwareSectionCpu(); // .toBuilder();
// .build();
- Task expected = modifyVirtualHardwareSectionCpuTask();
+ Task expected = editVirtualHardwareSectionCpuTask();
- assertEquals(api.getVmApi().modifyVirtualHardwareSectionCpu(vmURI, cpu), expected);
+ assertEquals(api.getVmApi().editVirtualHardwareSectionCpu(vmURI, cpu), expected);
}
@Test(enabled = false)
@@ -699,23 +699,23 @@
}
@Test(enabled = false)
- public void testModifyVirtualHardwareSectionDisks() {
+ public void testEditVirtualHardwareSectionDisks() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/virtualHardwareSection/disks")
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionDisks.xml", VCloudDirectorMediaType.OVF_RASD_ITEMS_LIST)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionDisks.xml", VCloudDirectorMediaType.OVF_RASD_ITEMS_LIST)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionDisksTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionDisksTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
RasdItemsList disks = getVirtualHardwareSectionDisks().toBuilder()
.build();
- Task expected = modifyVirtualHardwareSectionDisksTask();
+ Task expected = editVirtualHardwareSectionDisksTask();
- assertEquals(api.getVmApi().modifyVirtualHardwareSectionDisks(vmURI, disks), expected);
+ assertEquals(api.getVmApi().editVirtualHardwareSectionDisks(vmURI, disks), expected);
}
@Test(enabled = false)
@@ -751,23 +751,23 @@
}
@Test(enabled = false)
- public void testModifyVirtualHardwareSectionMemory() {
+ public void testEditVirtualHardwareSectionMemory() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/virtualHardwareSection/memory")
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionMemory.xml", VCloudDirectorMediaType.VAPP)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionMemory.xml", VCloudDirectorMediaType.VAPP)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionMemoryTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionMemoryTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
RasdItem memory = getVirtualHardwareSectionCpu(); // .toBuilder();
// .build();
- Task expected = modifyVirtualHardwareSectionMemoryTask();
+ Task expected = editVirtualHardwareSectionMemoryTask();
- assertEquals(api.getVmApi().modifyVirtualHardwareSectionMemory(vmURI, memory), expected);
+ assertEquals(api.getVmApi().editVirtualHardwareSectionMemory(vmURI, memory), expected);
}
@Test(enabled = false)
@@ -787,23 +787,23 @@
}
@Test(enabled = false)
- public void testModifyVirtualHardwareSectionNetworkCards() {
+ public void testEditVirtualHardwareSectionNetworkCards() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/virtualHardwareSection/networkCards")
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionNetworkCards.xml", VCloudDirectorMediaType.OVF_RASD_ITEMS_LIST)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionNetworkCards.xml", VCloudDirectorMediaType.OVF_RASD_ITEMS_LIST)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionNetworkCardsTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionNetworkCardsTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
RasdItemsList networkCards = getVirtualHardwareSectionNetworkCards().toBuilder()
.build();
- Task expected = modifyVirtualHardwareSectionNetworkCardsTask();
+ Task expected = editVirtualHardwareSectionNetworkCardsTask();
- assertEquals(api.getVmApi().modifyVirtualHardwareSectionNetworkCards(vmURI, networkCards), expected);
+ assertEquals(api.getVmApi().editVirtualHardwareSectionNetworkCards(vmURI, networkCards), expected);
}
@Test(enabled = false)
@@ -823,23 +823,23 @@
}
@Test(enabled = false)
- public void testModifyVirtualHardwareSectionSerialPorts() {
+ public void testEditVirtualHardwareSectionSerialPorts() {
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", vmId + "/virtualHardwareSection/serialPorts")
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionSerialPorts.xml", VCloudDirectorMediaType.OVF_RASD_ITEMS_LIST)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionSerialPorts.xml", VCloudDirectorMediaType.OVF_RASD_ITEMS_LIST)
.acceptAnyMedia()
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/vApp/modifyVirtualHardwareSectionSerialPortsTask.xml", VCloudDirectorMediaType.TASK)
+ .xmlFilePayload("/vApp/editVirtualHardwareSectionSerialPortsTask.xml", VCloudDirectorMediaType.TASK)
.httpResponseBuilder().build());
RasdItemsList serialPorts = getVirtualHardwareSectionSerialPorts().toBuilder()
.build();
- Task expected = modifyVirtualHardwareSectionSerialPortsTask();
+ Task expected = editVirtualHardwareSectionSerialPortsTask();
- assertEquals(api.getVmApi().modifyVirtualHardwareSectionSerialPorts(vmURI, serialPorts), expected);
+ assertEquals(api.getVmApi().editVirtualHardwareSectionSerialPorts(vmURI, serialPorts), expected);
}
public static Vm getVm() {
@@ -866,14 +866,14 @@
return vm;
}
- public static Task modifyVmTask() {
+ public static Task editVmTask() {
Task task = Task.builder()
.build();
return task;
}
- public static Task deleteVmTask() {
+ public static Task removeVmTask() {
Task task = Task.builder()
.build();
@@ -985,7 +985,7 @@
return task;
}
- public static ControlAccessParams getControlAccessParams() {
+ public static ControlAccessParams getAccessControlParams() {
ControlAccessParams params = ControlAccessParams.builder()
.build();
@@ -999,7 +999,7 @@
return section;
}
- public static Task modifyGuestCustomizationSectionTask() {
+ public static Task editGuestCustomizationSectionTask() {
Task task = Task.builder()
.build();
@@ -1013,7 +1013,7 @@
return section;
}
- public static Task modifyLeaseSettingsSectionTask() {
+ public static Task editLeaseSettingsSectionTask() {
Task task = Task.builder()
.build();
@@ -1041,7 +1041,7 @@
return section;
}
- public static Task modifyNetworkConfigSectionTask() {
+ public static Task editNetworkConfigSectionTask() {
Task task = Task.builder()
.build();
@@ -1055,7 +1055,7 @@
return section;
}
- public static Task modifyNetworkConnectionSectionTask() {
+ public static Task editNetworkConnectionSectionTask() {
Task task = Task.builder()
.build();
@@ -1076,7 +1076,7 @@
return section;
}
- public static Task modifyOperatingSystemSectionTask() {
+ public static Task editOperatingSystemSectionTask() {
Task task = Task.builder()
.build();
@@ -1090,7 +1090,7 @@
return owner;
}
- public static Task modifyOwnerTask() {
+ public static Task editOwnerTask() {
Task task = Task.builder()
.build();
@@ -1104,7 +1104,7 @@
return sectionItems;
}
- public static Task modifyProductSectionsTask() {
+ public static Task editProductSectionsTask() {
Task task = Task.builder()
.build();
@@ -1152,7 +1152,7 @@
return section;
}
- public static Task modifyStartupSectionTask() {
+ public static Task editStartupSectionTask() {
Task task = Task.builder()
.build();
@@ -1166,7 +1166,7 @@
return section;
}
- public static Task modifyVirtualHardwareSectionTask() {
+ public static Task editVirtualHardwareSectionTask() {
Task task = Task.builder()
.build();
@@ -1180,7 +1180,7 @@
return cpu;
}
- public static Task modifyVirtualHardwareSectionCpuTask() {
+ public static Task editVirtualHardwareSectionCpuTask() {
Task task = Task.builder()
.build();
@@ -1194,7 +1194,7 @@
return disks;
}
- public static Task modifyVirtualHardwareSectionDisksTask() {
+ public static Task editVirtualHardwareSectionDisksTask() {
Task task = Task.builder()
.build();
@@ -1215,7 +1215,7 @@
return memory;
}
- public static Task modifyVirtualHardwareSectionMemoryTask() {
+ public static Task editVirtualHardwareSectionMemoryTask() {
Task task = Task.builder()
.build();
@@ -1229,7 +1229,7 @@
return networkCards;
}
- public static Task modifyVirtualHardwareSectionNetworkCardsTask() {
+ public static Task editVirtualHardwareSectionNetworkCardsTask() {
Task task = Task.builder()
.build();
@@ -1243,11 +1243,11 @@
return serialPorts;
}
- public static Task modifyVirtualHardwareSectionSerialPortsTask() {
+ public static Task editVirtualHardwareSectionSerialPortsTask() {
return task("id", "name", "description", "status", "operation", "operationName", "startTime");
}
- /** Used by other methods to create a custom {@link Task} object. */
+ /** Used by other methods to add a custom {@link Task} object. */
private static Task task(String taskId, String name, String description, String status, String operation, String operationName, String startTime) {
Task task = Task.builder()
.error(Error.builder().build())
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VmApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VmApiLiveTest.java
index 0e65613..a2bfbce 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VmApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VmApiLiveTest.java
@@ -18,10 +18,6 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
-import static com.google.common.base.Predicates.and;
-import static com.google.common.collect.Iterables.contains;
-import static com.google.common.collect.Iterables.find;
-import static com.google.common.collect.Iterables.getFirst;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CORRECT_VALUE_OBJECT_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.ENTITY_EQUAL;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.NOT_EMPTY_OBJECT_FMT;
@@ -44,8 +40,6 @@
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkVirtualHardwareSection;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkVm;
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkVmPendingQuestion;
-import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals;
-import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.typeEquals;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
@@ -53,7 +47,6 @@
import static org.testng.Assert.assertTrue;
import java.math.BigInteger;
-import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -63,12 +56,8 @@
import org.jclouds.dmtf.cim.ResourceAllocationSettingData;
import org.jclouds.dmtf.ovf.MsgType;
import org.jclouds.dmtf.ovf.ProductSection;
-import org.jclouds.io.Payloads;
import org.jclouds.vcloud.director.v1_5.AbstractVAppApiLiveTest;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.domain.Checks;
-import org.jclouds.vcloud.director.v1_5.domain.Link;
-import org.jclouds.vcloud.director.v1_5.domain.Media;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry;
import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
@@ -109,7 +98,7 @@
/**
* Tests behavior of the {@link VmApi}.
- *
+ *
* @author grkvlt@apache.org
*/
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "VmApiLiveTest")
@@ -117,69 +106,30 @@
private MetadataValue metadataValue;
private String key;
- private URI testUserURI;
- private boolean mediaCreated = false;
private boolean testUserCreated = false;
-
+
@BeforeClass(alwaysRun = true)
protected void setupRequiredEntities() {
- Set<Link> links = vdcApi.getVdc(vdcURI).getLinks();
- if (mediaURI == null) {
- Predicate<Link> addMediaLink = and(relEquals(Link.Rel.ADD), typeEquals(VCloudDirectorMediaType.MEDIA));
-
- if (contains(links, addMediaLink)) {
- Link addMedia = find(links, addMediaLink);
- byte[] iso = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
-
- Media sourceMedia = Media.builder()
- .type(VCloudDirectorMediaType.MEDIA)
- .name(name("media"))
- .size(iso.length)
- .imageType(Media.ImageType.ISO)
- .description("Test media generated by VmApiLiveTest")
- .build();
- Media media = context.getApi().getMediaApi().createMedia(addMedia.getHref(), sourceMedia);
-
- Link uploadLink = getFirst(getFirst(media.getFiles(), null).getLinks(), null);
- context.getApi().getUploadApi().upload(uploadLink.getHref(), Payloads.newByteArrayPayload(iso));
-
- media = context.getApi().getMediaApi().getMedia(media.getHref());
-
- if (media.getTasks().size() == 1) {
- Task uploadTask = Iterables.getOnlyElement(media.getTasks());
- Checks.checkTask(uploadTask);
- assertEquals(uploadTask.getStatus(), Task.Status.RUNNING);
- assertTrue(retryTaskSuccess.apply(uploadTask), String.format(TASK_COMPLETE_TIMELY, "uploadTask"));
- media = context.getApi().getMediaApi().getMedia(media.getHref());
- }
-
- mediaURI = media.getHref();
- mediaCreated = true;
- }
- }
-
if (adminContext != null) {
- Link orgLink = find(links, and(relEquals("up"), typeEquals(VCloudDirectorMediaType.ORG)));
- testUserURI = adminContext.getApi().getUserApi().createUser(toAdminUri(orgLink), randomTestUser("VAppAccessTest")).getHref();
- } else {
- testUserURI = userURI;
+ userUrn = adminContext.getApi().getUserApi().addUserToOrg(randomTestUser("VAppAccessTest"), org.getId())
+ .getId();
}
}
-
+
@AfterClass(alwaysRun = true, dependsOnMethods = { "cleanUpEnvironment" })
public void cleanUp() {
- if (adminContext != null && mediaCreated && mediaURI != null) {
+ if (adminContext != null && mediaUrn != null) {
try {
- Task delete = context.getApi().getMediaApi().deleteMedia(mediaURI);
- taskDoneEventually(delete);
+ Task remove = context.getApi().getMediaApi().remove(mediaUrn);
+ taskDoneEventually(remove);
} catch (Exception e) {
logger.warn("Error when deleting media: %s", e.getMessage());
}
}
- if (adminContext != null && testUserCreated && testUserURI != null) {
+ if (adminContext != null && testUserCreated && userUrn != null) {
try {
- adminContext.getApi().getUserApi().deleteUser(testUserURI);
+ adminContext.getApi().getUserApi().remove(userUrn);
} catch (Exception e) {
logger.warn("Error when deleting user: %s", e.getMessage());
}
@@ -187,213 +137,212 @@
}
/**
- * @see VmApi#getVm(URI)
+ * @see VmApi#get(String)
*/
@Test(description = "GET /vApp/{id}")
public void testGetVm() {
// The method under test
- vm = vmApi.getVm(vmURI);
+ vm = vmApi.get(vmUrn);
// Check the retrieved object is well formed
checkVm(vm);
// Check the required fields are set
- assertEquals(vm.isDeployed(), Boolean.FALSE, String.format(OBJ_FIELD_EQ, VM, "deployed", "FALSE", vm.isDeployed().toString()));
+ assertEquals(vm.isDeployed(), Boolean.FALSE,
+ String.format(OBJ_FIELD_EQ, VM, "deployed", "FALSE", vm.isDeployed().toString()));
// Check status
- assertVmStatus(vm.getHref(), Status.POWERED_OFF);
+ assertVmStatus(vmUrn, Status.POWERED_OFF);
}
/**
- * @see VmApi#modifyVm(URI, Vm)
+ * @see VmApi#edit(String, Vm)
*/
@Test(description = "PUT /vApp/{id}", dependsOnMethods = { "testGetVm" })
- public void testModifyVm() {
- Vm newVm = Vm.builder()
- .name(name("new-name-"))
- .description("New Description")
- .build();
+ public void testEditVm() {
+ Vm newVm = Vm.builder().name(name("new-name-")).description("New Description").build();
// The method under test
- Task modifyVm = vmApi.modifyVm(vm.getHref(), newVm);
- assertTrue(retryTaskSuccess.apply(modifyVm), String.format(TASK_COMPLETE_TIMELY, "modifyVm"));
+ Task editVm = vmApi.edit(vmUrn, newVm);
+ assertTrue(retryTaskSuccess.apply(editVm), String.format(TASK_COMPLETE_TIMELY, "editVm"));
- // Get the updated Vm
- vm = vmApi.getVm(vm.getHref());
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check the required fields are set
- assertEquals(vm.getName(), newVm.getName(), String.format(OBJ_FIELD_EQ, VM, "Name", newVm.getName(), vm.getName()));
- assertEquals(vm.getDescription(), newVm.getDescription(), String.format(OBJ_FIELD_EQ, VM, "Description", newVm.getDescription(), vm.getDescription()));
+ assertEquals(vm.getName(), newVm.getName(),
+ String.format(OBJ_FIELD_EQ, VM, "Name", newVm.getName(), vm.getName()));
+ assertEquals(vm.getDescription(), newVm.getDescription(),
+ String.format(OBJ_FIELD_EQ, VM, "Description", newVm.getDescription(), vm.getDescription()));
}
@Test(description = "POST /vApp/{id}/action/deploy", dependsOnMethods = { "testGetVm" })
public void testDeployVm() {
DeployVAppParams params = DeployVAppParams.builder()
- .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS))
- .notForceCustomization()
- .notPowerOn()
- .build();
+ .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS)).notForceCustomization()
+ .notPowerOn().build();
// The method under test
- Task deployVm = vmApi.deploy(vm.getHref(), params);
+ Task deployVm = vmApi.deploy(vmUrn, params);
assertTrue(retryTaskSuccessLong.apply(deployVm), String.format(TASK_COMPLETE_TIMELY, "deployVm"));
- // Get the updated Vm
- vm = vmApi.getVm(vm.getHref());
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check the required fields are set
assertTrue(vm.isDeployed(), String.format(OBJ_FIELD_EQ, VM, "deployed", "TRUE", vm.isDeployed().toString()));
// Check status
- assertVmStatus(vmURI, Status.POWERED_OFF);
+ assertVmStatus(vmUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/power/action/powerOn", dependsOnMethods = { "testDeployVm" })
public void testPowerOnVm() {
// Power off Vm
- vm = powerOffVm(vm.getHref());
+ vm = powerOffVm(vmUrn);
// The method under test
- Task powerOnVm = vmApi.powerOn(vm.getHref());
+ Task powerOnVm = vmApi.powerOn(vmUrn);
assertTaskSucceedsLong(powerOnVm);
- // Get the updated Vm
- vm = vmApi.getVm(vm.getHref());
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check status
- assertVmStatus(vm.getHref(), Status.POWERED_ON);
+ assertVmStatus(vmUrn, Status.POWERED_ON);
}
@Test(description = "POST /vApp/{id}/power/action/reboot", dependsOnMethods = { "testDeployVm" })
public void testReboot() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
-
+ vm = powerOnVm(vmUrn);
+
// The method under test
- Task reboot = vmApi.reboot(vm.getHref());
+ Task reboot = vmApi.reboot(vmUrn);
assertTaskSucceedsLong(reboot);
- // Get the updated Vm
- vm = vmApi.getVm(vm.getHref());
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check status
- assertVmStatus(vmURI, Status.POWERED_OFF);
+ assertVmStatus(vmUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/power/action/shutdown", dependsOnMethods = { "testInstallVMwareTools" })
public void testShutdown() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
// The method under test
- Task shutdown = vmApi.shutdown(vm.getHref());
+ Task shutdown = vmApi.shutdown(vmUrn);
assertTaskSucceedsLong(shutdown);
- // Get the updated Vm
- vm = vmApi.getVm(vm.getHref());
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check status
- assertVmStatus(vm.getHref(), Status.POWERED_OFF);
+ assertVmStatus(vmUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/power/action/suspend", dependsOnMethods = { "testDeployVm" })
public void testSuspend() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
// The method under test
- Task suspend = vmApi.suspend(vmURI);
+ Task suspend = vmApi.suspend(vmUrn);
assertTaskSucceedsLong(suspend);
- // Get the updated Vm
- vm = vmApi.getVm(vm.getHref());
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check status
- assertVmStatus(vmURI, Status.SUSPENDED);
+ assertVmStatus(vmUrn, Status.SUSPENDED);
// Power on the Vm again
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
}
@Test(description = "POST /vApp/{id}/power/action/reset", dependsOnMethods = { "testDeployVm" })
public void testReset() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
// The method under test
- Task reset = vmApi.reset(vmURI);
+ Task reset = vmApi.reset(vmUrn);
assertTaskSucceedsLong(reset);
- // Get the updated Vm
- vm = vmApi.getVm(vm.getHref());
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check status
- assertVmStatus(vmURI, Status.POWERED_ON);
+ assertVmStatus(vmUrn, Status.POWERED_ON);
}
@Test(description = "POST /vApp/{id}/action/undeploy", dependsOnMethods = { "testDeployVm" })
public void testUndeployVm() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
UndeployVAppParams params = UndeployVAppParams.builder().build();
// The method under test
- Task undeploy = vmApi.undeploy(vm.getHref(), params);
+ Task undeploy = vmApi.undeploy(vmUrn, params);
assertTrue(retryTaskSuccess.apply(undeploy), String.format(TASK_COMPLETE_TIMELY, "undeploy"));
- // Get the updated Vm
- vm = vmApi.getVm(vm.getHref());
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check status
assertFalse(vm.isDeployed(), String.format(OBJ_FIELD_EQ, VM, "deployed", "FALSE", vm.isDeployed().toString()));
- assertVmStatus(vmURI, Status.POWERED_OFF);
+ assertVmStatus(vmUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/power/action/powerOff", dependsOnMethods = { "testUndeployVm" })
public void testPowerOffVm() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
-
+ vm = powerOnVm(vmUrn);
+
// The method under test
// NB this will put the vm in partially powered off state
- Task powerOffVm = vmApi.powerOff(vm.getHref());
+ Task powerOffVm = vmApi.powerOff(vmUrn);
assertTrue(retryTaskSuccess.apply(powerOffVm), String.format(TASK_COMPLETE_TIMELY, "powerOffVm"));
- // Get the updated Vm
- vm = vmApi.getVm(vmURI);
+ // Get the edited Vm
+ vm = vmApi.get(vmUrn);
// Check status
- assertVmStatus(vmURI, Status.POWERED_OFF);
+ assertVmStatus(vmUrn, Status.POWERED_OFF);
}
@Test(description = "POST /vApp/{id}/action/consolidate", dependsOnMethods = { "testDeployVm" })
public void testConsolidateVm() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
// The method under test
- Task consolidateVm = vmApi.consolidateVm(vm.getHref());
+ Task consolidateVm = vmApi.consolidate(vmUrn);
assertTrue(retryTaskSuccess.apply(consolidateVm), String.format(TASK_COMPLETE_TIMELY, "consolidateVm"));
}
@Test(description = "POST /vApp/{id}/action/discardSuspendedState", dependsOnMethods = { "testDeployVm" })
public void testDiscardSuspendedState() {
// Suspend the Vm
- vm = suspendVm(vm.getHref());
-
+ vm = suspendVm(vmUrn);
+
// The method under test
- Task discardSuspendedState = vmApi.discardSuspendedState(vm.getHref());
- assertTrue(retryTaskSuccess.apply(discardSuspendedState), String.format(TASK_COMPLETE_TIMELY, "discardSuspendedState"));
+ Task discardSuspendedState = vmApi.discardSuspendedState(vmUrn);
+ assertTrue(retryTaskSuccess.apply(discardSuspendedState),
+ String.format(TASK_COMPLETE_TIMELY, "discardSuspendedState"));
}
@Test(description = "POST /vApp/{id}/action/installVMwareTools", dependsOnMethods = { "testDeployVm" })
public void testInstallVMwareTools() {
// First ensure the vApp is powered on
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
// The method under test
- Task installVMwareTools = vmApi.installVMwareTools(vm.getHref());
+ Task installVMwareTools = vmApi.installVMwareTools(vmUrn);
assertTrue(retryTaskSuccess.apply(installVMwareTools), String.format(TASK_COMPLETE_TIMELY, "installVMwareTools"));
}
@@ -403,52 +352,53 @@
// Relocate to the last of the available datastores
QueryResultRecords records = context.getApi().getQueryApi().queryAll("datastore");
QueryResultRecordType datastore = Iterables.getLast(records.getRecords());
- RelocateParams params = RelocateParams.builder().datastore(Reference.builder().href(datastore.getHref()).build()).build();
+ RelocateParams params = RelocateParams.builder().datastore(Reference.builder().href(datastore.getHref()).build())
+ .build();
// The method under test
- Task relocate = vmApi.relocateVm(vm.getHref(), params);
+ Task relocate = vmApi.relocate(vmUrn, params);
assertTrue(retryTaskSuccess.apply(relocate), String.format(TASK_COMPLETE_TIMELY, "relocate"));
}
@Test(description = "POST /vApp/{id}/action/upgradeHardwareVersion", dependsOnMethods = { "testGetVm" })
public void testUpgradeHardwareVersion() {
// Power off Vm
- vm = powerOffVm(vm.getHref());
+ vm = powerOffVm(vmUrn);
// The method under test
- Task upgradeHardwareVersion = vmApi.upgradeHardwareVersion(vm.getHref());
- assertTrue(retryTaskSuccess.apply(upgradeHardwareVersion), String.format(TASK_COMPLETE_TIMELY, "upgradeHardwareVersion"));
-
+ Task upgradeHardwareVersion = vmApi.upgradeHardwareVersion(vmUrn);
+ assertTrue(retryTaskSuccess.apply(upgradeHardwareVersion),
+ String.format(TASK_COMPLETE_TIMELY, "upgradeHardwareVersion"));
+
// Power on the Vm again
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
}
@Test(description = "GET /vApp/{id}/guestCustomizationSection", dependsOnMethods = { "testGetVm" })
public void testGetGuestCustomizationSection() {
- getGuestCustomizationSection(new Function<URI, GuestCustomizationSection>() {
+ getGuestCustomizationSection(new Function<String, GuestCustomizationSection>() {
@Override
- public GuestCustomizationSection apply(URI uri) {
+ public GuestCustomizationSection apply(String uri) {
return vmApi.getGuestCustomizationSection(uri);
}
});
}
@Test(description = "PUT /vApp/{id}/guestCustomizationSection", dependsOnMethods = { "testGetGuestCustomizationSection" })
- public void testModifyGuestCustomizationSection() {
- // Copy existing section and update fields
- GuestCustomizationSection oldSection = vmApi.getGuestCustomizationSection(vm.getHref());
- GuestCustomizationSection newSection = oldSection.toBuilder()
- .computerName(name("n"))
- .enabled(Boolean.TRUE)
- .adminPassword(null) // Not allowed
- .build();
+ public void testEditGuestCustomizationSection() {
+ // Copy existing section and edit fields
+ GuestCustomizationSection oldSection = vmApi.getGuestCustomizationSection(vmUrn);
+ GuestCustomizationSection newSection = oldSection.toBuilder().computerName(name("n")).enabled(Boolean.TRUE)
+ .adminPassword(null) // Not allowed
+ .build();
// The method under test
- Task modifyGuestCustomizationSection = vmApi.modifyGuestCustomizationSection(vm.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyGuestCustomizationSection), String.format(TASK_COMPLETE_TIMELY, "modifyGuestCustomizationSection"));
+ Task editGuestCustomizationSection = vmApi.editGuestCustomizationSection(vmUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editGuestCustomizationSection),
+ String.format(TASK_COMPLETE_TIMELY, "editGuestCustomizationSection"));
// Retrieve the modified section
- GuestCustomizationSection modified = vmApi.getGuestCustomizationSection(vm.getHref());
+ GuestCustomizationSection modified = vmApi.getGuestCustomizationSection(vmUrn);
// Check the retrieved object is well formed
checkGuestCustomizationSection(modified);
@@ -464,16 +414,16 @@
assertEquals(modified, newSection, String.format(ENTITY_EQUAL, "GuestCustomizationSection"));
}
- // FIXME "Error: The requested operation on media "com.vmware.vcloud.entity.media:abfcb4b7-809f-4b50-a0aa-8c97bf09a5b0" is not supported in the current state."
+ // FIXME
+ // "Error: The requested operation on media "com.vmware.vcloud.entity.media:abfcb4b7-809f-4b50-a0aa-8c97bf09a5b0" is not supported in the current state."
@Test(description = "PUT /vApp/{id}/media/action/insertMedia", dependsOnMethods = { "testGetVm" })
public void testInsertMedia() {
// Setup media params from configured media id
MediaInsertOrEjectParams params = MediaInsertOrEjectParams.builder()
- .media(Reference.builder().href(mediaURI).type(MEDIA).build())
- .build();
+ .media(Reference.builder().href(lazyGetMedia().getHref()).type(MEDIA).build()).build();
// The method under test
- Task insertMedia = vmApi.insertMedia(vm.getHref(), params);
+ Task insertMedia = vmApi.insertMedia(vmUrn, params);
assertTrue(retryTaskSuccess.apply(insertMedia), String.format(TASK_COMPLETE_TIMELY, "insertMedia"));
}
@@ -481,47 +431,46 @@
public void testEjectMedia() {
// Setup media params from configured media id
MediaInsertOrEjectParams params = MediaInsertOrEjectParams.builder()
- .media(Reference.builder().href(mediaURI).type(MEDIA).build())
- .build();
+ .media(Reference.builder().href(lazyGetMedia().getHref()).type(MEDIA).build()).build();
// The method under test
- Task ejectMedia = vmApi.ejectMedia(vm.getHref(), params);
+ Task ejectMedia = vmApi.ejectMedia(vmUrn, params);
assertTrue(retryTaskSuccess.apply(ejectMedia), String.format(TASK_COMPLETE_TIMELY, "ejectMedia"));
}
@Test(description = "GET /vApp/{id}/networkConnectionSection", dependsOnMethods = { "testGetVm" })
public void testGetNetworkConnectionSection() {
- getNetworkConnectionSection(new Function<URI, NetworkConnectionSection>() {
+ getNetworkConnectionSection(new Function<String, NetworkConnectionSection>() {
@Override
- public NetworkConnectionSection apply(URI uri) {
+ public NetworkConnectionSection apply(String uri) {
return vmApi.getNetworkConnectionSection(uri);
}
});
}
// FIXME "Task error: Unable to perform this action. Contact your cloud administrator."
- @Test(description = "PUT /vApp/{id}/networkConnectionSection", dependsOnMethods = { "testModifyGuestCustomizationSection" })
- public void testModifyNetworkConnectionSection() {
- powerOffVm(vm.getHref());
+ @Test(description = "PUT /vApp/{id}/networkConnectionSection", dependsOnMethods = { "testEditGuestCustomizationSection" })
+ public void testEditNetworkConnectionSection() {
+ powerOffVm(vmUrn);
// Look up a network in the Vdc
Set<Reference> networks = vdc.getAvailableNetworks();
Reference network = Iterables.getLast(networks);
- // Copy existing section and update fields
- NetworkConnectionSection oldSection = vmApi.getNetworkConnectionSection(vm.getHref());
- NetworkConnectionSection newSection = oldSection.toBuilder()
- .networkConnection(NetworkConnection.builder()
- .ipAddressAllocationMode(IpAddressAllocationMode.DHCP.toString())
- .network(network.getName())
- .build())
- .build();
+ // Copy existing section and edit fields
+ NetworkConnectionSection oldSection = vmApi.getNetworkConnectionSection(vmUrn);
+ NetworkConnectionSection newSection = oldSection
+ .toBuilder()
+ .networkConnection(
+ NetworkConnection.builder().ipAddressAllocationMode(IpAddressAllocationMode.DHCP.toString())
+ .network(network.getName()).build()).build();
// The method under test
- Task modifyNetworkConnectionSection = vmApi.modifyNetworkConnectionSection(vm.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyNetworkConnectionSection), String.format(TASK_COMPLETE_TIMELY, "modifyNetworkConnectionSection"));
+ Task editNetworkConnectionSection = vmApi.editNetworkConnectionSection(vmUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editNetworkConnectionSection),
+ String.format(TASK_COMPLETE_TIMELY, "editNetworkConnectionSection"));
// Retrieve the modified section
- NetworkConnectionSection modified = vmApi.getNetworkConnectionSection(vm.getHref());
+ NetworkConnectionSection modified = vmApi.getNetworkConnectionSection(vmUrn);
// Check the retrieved object is well formed
checkNetworkConnectionSection(modified);
@@ -536,27 +485,28 @@
@Test(description = "GET /vApp/{id}/operatingSystemSection", dependsOnMethods = { "testGetVm" })
public void testGetOperatingSystemSection() {
// The method under test
- OperatingSystemSection section = vmApi.getOperatingSystemSection(vm.getHref());
+ OperatingSystemSection section = vmApi.getOperatingSystemSection(vmUrn);
// Check the retrieved object is well formed
checkOperatingSystemSection(section);
}
- @Test(description = "PUT /vApp/{id}/operatingSystemSection", dependsOnMethods = { "testGetOperatingSystemSection", "testModifyVirtualHardwareSection" })
- public void testModifyOperatingSystemSection() {
+ @Test(description = "PUT /vApp/{id}/operatingSystemSection", dependsOnMethods = { "testGetOperatingSystemSection",
+ "testEditVirtualHardwareSection" })
+ public void testEditOperatingSystemSection() {
// Create new OperatingSystemSection
- OperatingSystemSection newSection = OperatingSystemSection.builder()
- .info("") // NOTE Required OVF field, ignored
- .id(OSType.RHEL_64.getCode())
- .osType("rhel5_64Guest")
- .build();
+ OperatingSystemSection newSection = OperatingSystemSection.builder().info("") // NOTE Required
+ // OVF field,
+ // ignored
+ .id(OSType.RHEL_64.getCode()).osType("rhel5_64Guest").build();
// The method under test
- Task modifyOperatingSystemSection = vmApi.modifyOperatingSystemSection(vm.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyOperatingSystemSection), String.format(TASK_COMPLETE_TIMELY, "modifyOperatingSystemSection"));
+ Task editOperatingSystemSection = vmApi.editOperatingSystemSection(vmUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editOperatingSystemSection),
+ String.format(TASK_COMPLETE_TIMELY, "editOperatingSystemSection"));
// Retrieve the modified section
- OperatingSystemSection modified = vmApi.getOperatingSystemSection(vm.getHref());
+ OperatingSystemSection modified = vmApi.getOperatingSystemSection(vmUrn);
// Check the retrieved object is well formed
checkOperatingSystemSection(modified);
@@ -568,33 +518,34 @@
@Test(description = "GET /vApp/{id}/productSections", dependsOnMethods = { "testGetVm" })
public void testGetProductSections() {
// The method under test
- ProductSectionList sectionList = vmApi.getProductSections(vm.getHref());
+ ProductSectionList sectionList = vmApi.getProductSections(vmUrn);
// Check the retrieved object is well formed
checkProductSectionList(sectionList);
}
@Test(description = "PUT /vApp/{id}/productSections", dependsOnMethods = { "testGetProductSections" })
- public void testModifyProductSections() {
- powerOffVm(vm.getHref());
- // Copy existing section and update fields
- ProductSectionList oldSections = vmApi.getProductSections(vm.getHref());
- ProductSectionList newSections = oldSections.toBuilder()
- .productSection(ProductSection.builder()
- .info("Information about the installed software") // Default ovf:Info text
- .required()
- .product(MsgType.builder().value("jclouds").build())
- .vendor(MsgType.builder().value("jclouds Inc.").build())
- // NOTE other ProductSection elements not returned by vCloud
- .build())
- .build();
+ public void testEditProductSections() {
+ powerOffVm(vmUrn);
+ // Copy existing section and edit fields
+ ProductSectionList oldSections = vmApi.getProductSections(vmUrn);
+ ProductSectionList newSections = oldSections
+ .toBuilder()
+ .productSection(
+ ProductSection.builder().info("Information about the installed software")
+ // Default ovf:Info text
+ .required().product(MsgType.builder().value("jclouds").build())
+ .vendor(MsgType.builder().value("jclouds Inc.").build())
+ // NOTE other ProductSection elements not returned by vCloud
+ .build()).build();
// The method under test
- Task modifyProductSections = vmApi.modifyProductSections(vm.getHref(), newSections);
- assertTrue(retryTaskSuccess.apply(modifyProductSections), String.format(TASK_COMPLETE_TIMELY, "modifyProductSections"));
+ Task editProductSections = vmApi.editProductSections(vmUrn, newSections);
+ assertTrue(retryTaskSuccess.apply(editProductSections),
+ String.format(TASK_COMPLETE_TIMELY, "editProductSections"));
// Retrieve the modified section
- ProductSectionList modified = vmApi.getProductSections(vm.getHref());
+ ProductSectionList modified = vmApi.getProductSections(vmUrn);
// Check the retrieved object is well formed
checkProductSectionList(modified);
@@ -610,12 +561,12 @@
@Test(description = "GET /vApp/{id}/question", dependsOnMethods = { "testDeployVm" })
public void testGetPendingQuestion() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
+ vm = powerOnVm(vmUrn);
// TODO how to test?
// The method under test
- VmPendingQuestion question = vmApi.getPendingQuestion(vm.getHref());
+ VmPendingQuestion question = vmApi.getPendingQuestion(vmUrn);
// Check the retrieved object is well formed
checkVmPendingQuestion(question);
@@ -626,23 +577,21 @@
// TODO check that the question has been answered (e.g. asking for getPendingQuestion does not
// include our answered question).
- VmPendingQuestion question = vmApi.getPendingQuestion(vm.getHref());
+ VmPendingQuestion question = vmApi.getPendingQuestion(vmUrn);
List<VmQuestionAnswerChoice> answerChoices = question.getChoices();
VmQuestionAnswerChoice answerChoice = Iterables.getFirst(answerChoices, null);
- assertNotNull(answerChoice, "Question "+question+" must have at least once answer-choice");
-
- VmQuestionAnswer answer = VmQuestionAnswer.builder()
- .choiceId(answerChoice.getId())
- .questionId(question.getQuestionId())
- .build();
-
- vmApi.answerQuestion(vm.getHref(), answer);
+ assertNotNull(answerChoice, "Question " + question + " must have at least once answer-choice");
+
+ VmQuestionAnswer answer = VmQuestionAnswer.builder().choiceId(answerChoice.getId())
+ .questionId(question.getQuestionId()).build();
+
+ vmApi.answerQuestion(vmUrn, answer);
}
@Test(description = "GET /vApp/{id}/runtimeInfoSection", dependsOnMethods = { "testGetVm" })
public void testGetRuntimeInfoSection() {
// The method under test
- RuntimeInfoSection section = vmApi.getRuntimeInfoSection(vm.getHref());
+ RuntimeInfoSection section = vmApi.getRuntimeInfoSection(vmUrn);
// Check the retrieved object is well formed
checkRuntimeInfoSection(section);
@@ -652,27 +601,28 @@
@Test(description = "GET /vApp/{id}/screen", dependsOnMethods = { "testInstallVMwareTools" })
public void testGetScreenImage() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
-
+ vm = powerOnVm(vmUrn);
+
// The method under test
- byte[] image = vmApi.getScreenImage(vm.getHref());
+ byte[] image = vmApi.getScreenImage(vmUrn);
// Check returned bytes against PNG header magic number
byte[] pngHeaderBytes = new byte[] { (byte) 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };
assertNotNull(image);
assertTrue(image.length > pngHeaderBytes.length);
for (int i = 0; i < pngHeaderBytes.length; i++) {
- assertEquals(image[i], pngHeaderBytes[i], String.format("Image differs from PNG format at byte %d of header", i));
+ assertEquals(image[i], pngHeaderBytes[i],
+ String.format("Image differs from PNG format at byte %d of header", i));
}
}
@Test(description = "POST /vApp/{id}/screen/action/acquireTicket", dependsOnMethods = { "testDeployVm" })
public void testGetScreenTicket() {
// Power on Vm
- vm = powerOnVm(vm.getHref());
-
+ vm = powerOnVm(vmUrn);
+
// The method under test
- ScreenTicket ticket = vmApi.getScreenTicket(vm.getHref());
+ ScreenTicket ticket = vmApi.getScreenTicket(vmUrn);
// Check the retrieved object is well formed
checkScreenTicket(ticket);
@@ -681,55 +631,53 @@
@Test(description = "GET /vApp/{id}/virtualHardwareSection", dependsOnMethods = { "testGetVm" })
public void testGetVirtualHardwareSection() {
// Method under test
- VirtualHardwareSection hardware = vmApi.getVirtualHardwareSection(vm.getHref());
+ VirtualHardwareSection hardware = vmApi.getVirtualHardwareSection(vmUrn);
// Check the retrieved object is well formed
checkVirtualHardwareSection(hardware);
}
@Test(description = "PUT /vApp/{id}/virtualHardwareSection", dependsOnMethods = { "testGetVirtualHardwareSection" })
- public void testModifyVirtualHardwareSection() {
+ public void testEditVirtualHardwareSection() {
// Power off Vm
- vm = powerOffVm(vm.getHref());
+ vm = powerOffVm(vmUrn);
- // Copy existing section and update fields
- VirtualHardwareSection oldSection = vmApi.getVirtualHardwareSection(vm.getHref());
+ // Copy existing section and edit fields
+ VirtualHardwareSection oldSection = vmApi.getVirtualHardwareSection(vmUrn);
Set<? extends ResourceAllocationSettingData> oldItems = oldSection.getItems();
Set<ResourceAllocationSettingData> newItems = Sets.newLinkedHashSet(oldItems);
- ResourceAllocationSettingData oldMemory = Iterables.find(oldItems, new Predicate<ResourceAllocationSettingData>() {
- @Override
- public boolean apply(ResourceAllocationSettingData rasd) {
- return rasd.getResourceType() == ResourceAllocationSettingData.ResourceType.MEMORY;
- }
- });
- ResourceAllocationSettingData newMemory = oldMemory.toBuilder()
- .elementName("1024 MB of memory")
- .virtualQuantity(new BigInteger("1024"))
- .build();
+ ResourceAllocationSettingData oldMemory = Iterables.find(oldItems,
+ new Predicate<ResourceAllocationSettingData>() {
+ @Override
+ public boolean apply(ResourceAllocationSettingData rasd) {
+ return rasd.getResourceType() == ResourceAllocationSettingData.ResourceType.MEMORY;
+ }
+ });
+ ResourceAllocationSettingData newMemory = oldMemory.toBuilder().elementName("1024 MB of memory")
+ .virtualQuantity(new BigInteger("1024")).build();
newItems.remove(oldMemory);
newItems.add(newMemory);
- VirtualHardwareSection newSection = oldSection.toBuilder()
- .items(newItems)
- .build();
+ VirtualHardwareSection newSection = oldSection.toBuilder().items(newItems).build();
// The method under test
- Task modifyVirtualHardwareSection = vmApi.modifyVirtualHardwareSection(vm.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSection), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSection"));
+ Task editVirtualHardwareSection = vmApi.editVirtualHardwareSection(vmUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editVirtualHardwareSection),
+ String.format(TASK_COMPLETE_TIMELY, "editVirtualHardwareSection"));
// Retrieve the modified section
- VirtualHardwareSection modifiedSection = vmApi.getVirtualHardwareSection(vm.getHref());
+ VirtualHardwareSection modifiedSection = vmApi.getVirtualHardwareSection(vmUrn);
// Check the retrieved object is well formed
checkVirtualHardwareSection(modifiedSection);
// Check the modified section fields are set correctly
ResourceAllocationSettingData modifiedMemory = Iterables.find(modifiedSection.getItems(),
- new Predicate<ResourceAllocationSettingData>() {
- @Override
- public boolean apply(ResourceAllocationSettingData rasd) {
- return rasd.getResourceType() == ResourceAllocationSettingData.ResourceType.MEMORY;
- }
- });
+ new Predicate<ResourceAllocationSettingData>() {
+ @Override
+ public boolean apply(ResourceAllocationSettingData rasd) {
+ return rasd.getResourceType() == ResourceAllocationSettingData.ResourceType.MEMORY;
+ }
+ });
assertEquals(modifiedMemory.getVirtualQuantity(), new BigInteger("1024"));
assertEquals(modifiedMemory, newMemory);
assertEquals(modifiedSection, newSection);
@@ -738,86 +686,90 @@
@Test(description = "GET /vApp/{id}/virtualHardwareSection/cpu", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionCpu() {
// Method under test
- RasdItem rasd = vmApi.getVirtualHardwareSectionCpu(vm.getHref());
+ RasdItem rasd = vmApi.getVirtualHardwareSectionCpu(vmUrn);
// Check the retrieved object is well formed
checkResourceAllocationSettingData(rasd);
}
@Test(description = "PUT /vApp/{id}/virtualHardwareSection/cpu", dependsOnMethods = { "testGetVirtualHardwareSectionCpu" })
- public void testModifyVirtualHardwareSectionCpu() {
- // Copy existing section and update fields
- RasdItem oldItem = vmApi.getVirtualHardwareSectionCpu(vm.getHref());
- RasdItem newItem = oldItem.toBuilder()
- .elementName("2 virtual CPU(s)")
- .virtualQuantity(new BigInteger("2"))
- .build();
-
+ public void testEditVirtualHardwareSectionCpu() {
+ // Copy existing section and edit fields
+ RasdItem oldItem = vmApi.getVirtualHardwareSectionCpu(vmUrn);
+ RasdItem newItem = oldItem.toBuilder().elementName("2 virtual CPU(s)").virtualQuantity(new BigInteger("2"))
+ .build();
+
// Method under test
- Task modifyVirtualHardwareSectionCpu = vmApi.modifyVirtualHardwareSectionCpu(vm.getHref(), newItem);
- assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionCpu), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionCpu"));
+ Task editVirtualHardwareSectionCpu = vmApi.editVirtualHardwareSectionCpu(vmUrn, newItem);
+ assertTrue(retryTaskSuccess.apply(editVirtualHardwareSectionCpu),
+ String.format(TASK_COMPLETE_TIMELY, "editVirtualHardwareSectionCpu"));
// Retrieve the modified section
- RasdItem modified = vmApi.getVirtualHardwareSectionCpu(vm.getHref());
-
+ RasdItem modified = vmApi.getVirtualHardwareSectionCpu(vmUrn);
+
// Check the retrieved object
checkResourceAllocationSettingData(modified);
-
+
// Check modified item
- assertEquals(modified.getVirtualQuantity(), new BigInteger("2"),
- String.format(OBJ_FIELD_EQ, "ResourceAllocationSettingData", "VirtualQuantity", "2", modified.getVirtualQuantity().toString()));
+ assertEquals(modified.getVirtualQuantity(), new BigInteger("2"), String.format(OBJ_FIELD_EQ,
+ "ResourceAllocationSettingData", "VirtualQuantity", "2", modified.getVirtualQuantity().toString()));
assertEquals(modified, newItem);
}
@Test(description = "GET /vApp/{id}/virtualHardwareSection/disks", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionDisks() {
// Method under test
- RasdItemsList rasdItems = vmApi.getVirtualHardwareSectionDisks(vm.getHref());
+ RasdItemsList rasdItems = vmApi.getVirtualHardwareSectionDisks(vmUrn);
// Check the retrieved object is well formed
checkRasdItemsList(rasdItems);
}
@Test(description = "PUT /vApp/{id}/virtualHardwareSection/disks", dependsOnMethods = { "testGetVirtualHardwareSectionDisks" })
- public void testModifyVirtualHardwareSectionDisks() {
- // Copy the existing items list and modify the name of an item
- RasdItemsList oldSection = vmApi.getVirtualHardwareSectionDisks(vm.getHref());
+ public void testEditVirtualHardwareSectionDisks() {
+ // Copy the existing items list and edit the name of an item
+ RasdItemsList oldSection = vmApi.getVirtualHardwareSectionDisks(vmUrn);
RasdItemsList newSection = oldSection.toBuilder().build();
// Method under test
- Task modifyVirtualHardwareSectionDisks = vmApi.modifyVirtualHardwareSectionDisks(vm.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionDisks), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionDisks"));
+ Task editVirtualHardwareSectionDisks = vmApi.editVirtualHardwareSectionDisks(vmUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editVirtualHardwareSectionDisks),
+ String.format(TASK_COMPLETE_TIMELY, "editVirtualHardwareSectionDisks"));
// Retrieve the modified section
- RasdItemsList modified = vmApi.getVirtualHardwareSectionDisks(vm.getHref());
+ RasdItemsList modified = vmApi.getVirtualHardwareSectionDisks(vmUrn);
// Check the retrieved object is well formed
checkRasdItemsList(modified);
-
- // TODO What is modifiable? What can we change, so we can assert the change took effect?
- // I tried changing "elementName" of one of the items, but it continued to have the old value when looked up post-modify.
+
+ // TODO What is modifiable? What can we change, so we can assert the change took effect?
+ // I tried changing "elementName" of one of the items, but it continued to have the old value
+ // when looked up post-edit.
//
- // List<ResourceAllocationSettingData> newItems = new ArrayList<ResourceAllocationSettingData>(oldSection.getItems());
+ // List<ResourceAllocationSettingData> newItems = new
+ // ArrayList<ResourceAllocationSettingData>(oldSection.getItems());
// ResourceAllocationSettingData item0 = newItems.get(0);
// String item0InstanceId = item0.getInstanceID().getValue();
- // String item0ElementName = item0.getElementName().getValue()+"-"+random.nextInt(Integer.MAX_VALUE);
+ // String item0ElementName =
+ // item0.getElementName().getValue()+"-"+random.nextInt(Integer.MAX_VALUE);
// newItems.set(0, item0.toBuilder().elementName(newCimString(item0ElementName)).build());
// RasdItemsList newSection = oldSection.toBuilder()
- // .items(newItems)
- // .build();
+ // .items(newItems)
+ // .build();
// ...
// long weight = random.nextInt(Integer.MAX_VALUE);
// ResourceAllocationSettingData newSection = origSection.toBuilder()
- // .weight(newCimUnsignedInt(weight))
- // .build();
+ // .weight(newCimUnsignedInt(weight))
+ // .build();
// ...
- // checkHasMatchingItem("virtualHardwareSection/disk", modified, item0InstanceId, item0ElementName);
+ // checkHasMatchingItem("virtualHardwareSection/disk", modified, item0InstanceId,
+ // item0ElementName);
}
@Test(description = "GET /vApp/{id}/virtualHardwareSection/media", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionMedia() {
// Method under test
- RasdItemsList rasdItems = vmApi.getVirtualHardwareSectionMedia(vm.getHref());
+ RasdItemsList rasdItems = vmApi.getVirtualHardwareSectionMedia(vmUrn);
// Check the retrieved object is well formed
checkRasdItemsList(rasdItems);
@@ -826,92 +778,95 @@
@Test(description = "GET /vApp/{id}/virtualHardwareSection/memory", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionMemory() {
// Method under test
- RasdItem rasd = vmApi.getVirtualHardwareSectionCpu(vm.getHref());
+ RasdItem rasd = vmApi.getVirtualHardwareSectionCpu(vmUrn);
// Check the retrieved object is well formed
checkResourceAllocationSettingData(rasd);
}
@Test(description = "PUT /vApp/{id}/virtualHardwareSection/memory", dependsOnMethods = { "testGetVirtualHardwareSectionMemory" })
- public void testModifyVirtualHardwareSectionMemory() {
- RasdItem origItem = vmApi.getVirtualHardwareSectionMemory(vm.getHref());
- RasdItem newItem = origItem.toBuilder()
- .elementName("1024 MB of memory")
- .virtualQuantity(new BigInteger("1024"))
- .build();
-
+ public void testEditVirtualHardwareSectionMemory() {
+ RasdItem origItem = vmApi.getVirtualHardwareSectionMemory(vmUrn);
+ RasdItem newItem = origItem.toBuilder().elementName("1024 MB of memory").virtualQuantity(new BigInteger("1024"))
+ .build();
+
// Method under test
- Task modifyVirtualHardwareSectionMemory = vmApi.modifyVirtualHardwareSectionMemory(vm.getHref(), newItem);
- assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionMemory), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionMemory"));
+ Task editVirtualHardwareSectionMemory = vmApi.editVirtualHardwareSectionMemory(vmUrn, newItem);
+ assertTrue(retryTaskSuccess.apply(editVirtualHardwareSectionMemory),
+ String.format(TASK_COMPLETE_TIMELY, "editVirtualHardwareSectionMemory"));
// Retrieve the modified section
- RasdItem modified = vmApi.getVirtualHardwareSectionMemory(vm.getHref());
-
+ RasdItem modified = vmApi.getVirtualHardwareSectionMemory(vmUrn);
+
// Check the retrieved object
checkResourceAllocationSettingData(modified);
-
+
// Check modified item
- assertEquals(modified.getVirtualQuantity(), new BigInteger("1024"),
- String.format(OBJ_FIELD_EQ, "ResourceAllocationSettingData", "VirtualQuantity", "1024", modified.getVirtualQuantity().toString()));
+ assertEquals(modified.getVirtualQuantity(), new BigInteger("1024"), String.format(OBJ_FIELD_EQ,
+ "ResourceAllocationSettingData", "VirtualQuantity", "1024", modified.getVirtualQuantity().toString()));
assertEquals(modified, newItem);
}
@Test(description = "GET /vApp/{id}/virtualHardwareSection/networkCards", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionNetworkCards() {
// Method under test
- RasdItemsList rasdItems = vmApi.getVirtualHardwareSectionNetworkCards(vm.getHref());
+ RasdItemsList rasdItems = vmApi.getVirtualHardwareSectionNetworkCards(vmUrn);
// Check the retrieved object is well formed
checkRasdItemsList(rasdItems);
}
@Test(description = "PUT /vApp/{id}/virtualHardwareSection/networkCards", dependsOnMethods = { "testGetVirtualHardwareSectionNetworkCards" })
- public void testModifyVirtualHardwareSectionNetworkCards() {
- RasdItemsList oldSection = vmApi.getVirtualHardwareSectionNetworkCards(vm.getHref());
+ public void testEditVirtualHardwareSectionNetworkCards() {
+ RasdItemsList oldSection = vmApi.getVirtualHardwareSectionNetworkCards(vmUrn);
RasdItemsList newSection = oldSection.toBuilder().build();
// Method under test
- Task modifyVirtualHardwareSectionNetworkCards = vmApi.modifyVirtualHardwareSectionNetworkCards(vm.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionNetworkCards), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionNetworkCards"));
+ Task editVirtualHardwareSectionNetworkCards = vmApi.editVirtualHardwareSectionNetworkCards(vmUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editVirtualHardwareSectionNetworkCards),
+ String.format(TASK_COMPLETE_TIMELY, "editVirtualHardwareSectionNetworkCards"));
// Retrieve the modified section
- RasdItemsList modified = vmApi.getVirtualHardwareSectionNetworkCards(vm.getHref());
+ RasdItemsList modified = vmApi.getVirtualHardwareSectionNetworkCards(vmUrn);
// Check the retrieved object is well formed
checkRasdItemsList(modified);
-
- // TODO What is modifiable? What can we change, so we can assert the change took effect?
- // I tried changing "elementName" of one of the items, but it continued to have the old value when looked up post-modify.
- // See the description in testModifyVirtualHardwareSectionDisks
+
+ // TODO What is modifiable? What can we change, so we can assert the change took effect?
+ // I tried changing "elementName" of one of the items, but it continued to have the old value
+ // when looked up post-edit.
+ // See the description in testEditVirtualHardwareSectionDisks
}
@Test(description = "GET /vApp/{id}/virtualHardwareSection/serialPorts", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionSerialPorts() {
// Method under test
- RasdItemsList rasdItems = vmApi.getVirtualHardwareSectionSerialPorts(vm.getHref());
+ RasdItemsList rasdItems = vmApi.getVirtualHardwareSectionSerialPorts(vmUrn);
// Check the retrieved object is well formed
checkRasdItemsList(rasdItems);
}
@Test(description = "PUT /vApp/{id}/virtualHardwareSection/serialPorts", dependsOnMethods = { "testGetVirtualHardwareSectionSerialPorts" })
- public void testModifyVirtualHardwareSectionSerialPorts() {
- RasdItemsList oldSection = vmApi.getVirtualHardwareSectionSerialPorts(vm.getHref());
+ public void testEditVirtualHardwareSectionSerialPorts() {
+ RasdItemsList oldSection = vmApi.getVirtualHardwareSectionSerialPorts(vmUrn);
RasdItemsList newSection = oldSection.toBuilder().build();
// Method under test
- Task modifyVirtualHardwareSectionSerialPorts = vmApi.modifyVirtualHardwareSectionSerialPorts(vm.getHref(), newSection);
- assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionSerialPorts), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionSerialPorts"));
+ Task editVirtualHardwareSectionSerialPorts = vmApi.editVirtualHardwareSectionSerialPorts(vmUrn, newSection);
+ assertTrue(retryTaskSuccess.apply(editVirtualHardwareSectionSerialPorts),
+ String.format(TASK_COMPLETE_TIMELY, "editVirtualHardwareSectionSerialPorts"));
// Retrieve the modified section
- RasdItemsList modified = vmApi.getVirtualHardwareSectionSerialPorts(vm.getHref());
+ RasdItemsList modified = vmApi.getVirtualHardwareSectionSerialPorts(vmUrn);
// Check the retrieved object is well formed
checkRasdItemsList(modified);
-
- // TODO What is modifiable? What can we change, so we can assert the change took effect?
- // I tried changing "elementName" of one of the items, but it continued to have the old value when looked up post-modify.
- // See the description in testModifyVirtualHardwareSectionDisks
+
+ // TODO What is modifiable? What can we change, so we can assert the change took effect?
+ // I tried changing "elementName" of one of the items, but it continued to have the old value
+ // when looked up post-edit.
+ // See the description in testEditVirtualHardwareSectionDisks
}
@Test(description = "PUT /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetVm" })
@@ -919,50 +874,52 @@
key = name("key-");
String value = name("value-");
metadataValue = MetadataValue.builder().value(value).build();
- vmApi.getMetadataApi().setMetadata(vm.getHref(), key, metadataValue);
+ vmApi.getMetadataApi(vmUrn).putEntry(key, metadataValue);
// Retrieve the value, and assert it was set correctly
- MetadataValue newMetadataValue = vmApi.getMetadataApi().getMetadataValue(vm.getHref(), key);
+ MetadataValue newMetadataValue = vmApi.getMetadataApi(vmUrn).getValue(key);
// Check the retrieved object is well formed
checkMetadataValueFor(VM, newMetadataValue, value);
}
-
+
@Test(description = "GET /vApp/{id}/metadata", dependsOnMethods = { "testSetMetadataValue" })
public void testGetMetadata() {
// Call the method being tested
- Metadata metadata = vmApi.getMetadataApi().getMetadata(vm.getHref());
-
+ Metadata metadata = vmApi.getMetadataApi(vmUrn).get();
+
checkMetadata(metadata);
-
+
// Check requirements for this test
- assertTrue(Iterables.isEmpty(metadata.getMetadataEntries()), String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "vm"));
+ assertTrue(Iterables.isEmpty(metadata.getMetadataEntries()),
+ String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "vm"));
}
-
+
@Test(description = "GET /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
public void testGetOrgMetadataValue() {
key = name("key-");
String value = name("value-");
metadataValue = MetadataValue.builder().value(value).build();
- vmApi.getMetadataApi().setMetadata(vm.getHref(), key, metadataValue);
-
+ vmApi.getMetadataApi(vmUrn).putEntry(key, metadataValue);
+
// Call the method being tested
- MetadataValue metadataValue = vmApi.getMetadataApi().getMetadataValue(vm.getHref(), key);
-
+ MetadataValue metadataValue = vmApi.getMetadataApi(vmUrn).getValue(key);
+
String expected = metadataValue.getValue();
checkMetadataValue(metadataValue);
- assertEquals(metadataValue.getValue(), expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, metadataValue.getValue()));
+ assertEquals(metadataValue.getValue(), expected,
+ String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, metadataValue.getValue()));
}
@Test(description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
- public void testDeleteMetadataEntry() {
+ public void testRemoveMetadataEntry() {
// Delete the entry
- Task task = vmApi.getMetadataApi().deleteMetadataEntry(vm.getHref(), key);
+ Task task = vmApi.getMetadataApi(vmUrn).removeEntry(key);
retryTaskSuccess.apply(task);
- // Confirm the entry has been deleted
- Metadata newMetadata = vmApi.getMetadataApi().getMetadata(vm.getHref());
+ // Confirm the entry has been removed
+ Metadata newMetadata = vmApi.getMetadataApi(vmUrn).get();
// Check the retrieved object is well formed
checkMetadataKeyAbsentFor(VM, newMetadata, key);
@@ -970,62 +927,56 @@
@Test(description = "POST /vApp/{id}/metadata", dependsOnMethods = { "testGetMetadata" })
public void testMergeMetadata() {
- Metadata oldMetadata = vmApi.getMetadataApi().getMetadata(vm.getHref());
+ Metadata oldMetadata = vmApi.getMetadataApi(vmUrn).get();
Map<String, String> oldMetadataMap = Checks.metadataToMap(oldMetadata);
- // Store a value, to be deleted
+ // Store a value, to be removed
String key = name("key-");
String value = name("value-");
- Metadata addedMetadata = Metadata.builder()
- .entry(MetadataEntry.builder().key(key).value(value).build())
- .build();
- Task task = vmApi.getMetadataApi().mergeMetadata(vm.getHref(), addedMetadata);
+ Metadata addedMetadata = Metadata.builder().entry(MetadataEntry.builder().key(key).value(value).build()).build();
+ Task task = vmApi.getMetadataApi(vmUrn).merge(addedMetadata);
retryTaskSuccess.apply(task);
// Confirm the entry contains everything that was there, and everything that was being added
- Metadata newMetadata = vmApi.getMetadataApi().getMetadata(vm.getHref());
- Map<String, String> expectedMetadataMap = ImmutableMap.<String, String>builder()
- .putAll(oldMetadataMap)
- .put(key, value)
- .build();
+ Metadata newMetadata = vmApi.getMetadataApi(vmUrn).get();
+ Map<String, String> expectedMetadataMap = ImmutableMap.<String, String> builder().putAll(oldMetadataMap)
+ .put(key, value).build();
// Check the retrieved object is well formed
checkMetadataFor(VM, newMetadata, expectedMetadataMap);
}
/**
- * @see VmApi#deleteVm(URI)
+ * @see VmApi#remove(String)
*/
@Test(description = "DELETE /vApp/{id}")
- public void testDeleteVm() {
- // Create a temporary VApp to delete
- VApp delete = instantiateVApp();
+ public void testRemoveVm() {
+ // Create a temporary VApp to remove
+ VApp remove = instantiateVApp();
DeployVAppParams params = DeployVAppParams.builder()
- .deploymentLeaseSeconds((int)TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS))
- .notForceCustomization()
- .powerOn()
- .build();
- Task deployVApp = vAppApi.deploy(delete.getHref(), params);
+ .deploymentLeaseSeconds((int) TimeUnit.SECONDS.convert(1L, TimeUnit.HOURS)).notForceCustomization()
+ .powerOn().build();
+ Task deployVApp = vAppApi.deploy(remove.getId(), params);
assertTaskSucceedsLong(deployVApp);
- // Get the updated VApp and the Vm
- delete = vAppApi.getVApp(delete.getHref());
- List<Vm> vms = delete.getChildren().getVms();
+ // Get the edited VApp and the Vm
+ remove = vAppApi.get(remove.getId());
+ List<Vm> vms = remove.getChildren().getVms();
Vm temp = Iterables.get(vms, 0);
- // otherwise it's impossible to stop a running vApp with no vms
- if(vms.size() == 1) {
+ // otherwise it's impossible to stop a running vApp with no vms
+ if (vms.size() == 1) {
UndeployVAppParams undeployParams = UndeployVAppParams.builder().build();
- Task shutdownVapp = vAppApi.undeploy(delete.getHref(), undeployParams);
+ Task shutdownVapp = vAppApi.undeploy(remove.getId(), undeployParams);
assertTaskSucceedsLong(shutdownVapp);
} else {
- powerOffVm(temp.getHref());
+ powerOffVm(temp.getId());
}
// The method under test
- Task deleteVm = vmApi.deleteVm(temp.getHref());
- assertTrue(retryTaskSuccess.apply(deleteVm), String.format(TASK_COMPLETE_TIMELY, "deleteVm"));
+ Task removeVm = vmApi.remove(temp.getId());
+ assertTrue(retryTaskSuccess.apply(removeVm), String.format(TASK_COMPLETE_TIMELY, "removeVm"));
- Vm deleted = vmApi.getVm(temp.getHref());
- assertNull(deleted, "The Vm "+temp.getName()+" should have been deleted");
+ Vm removed = vmApi.get(temp.getId());
+ assertNull(removed, "The Vm " + temp.getName() + " should have been removed");
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApiExpectTest.java
index ff28dce..c6af0da 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApiExpectTest.java
@@ -18,10 +18,19 @@
*/
package org.jclouds.vcloud.director.v1_5.features.admin;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_CATALOG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_ORG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OWNER;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PUBLISH_CATALOG_PARAMS;
import static org.testng.Assert.assertEquals;
import java.net.URI;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
@@ -34,132 +43,197 @@
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
+import com.google.common.net.HttpHeaders;
/**
* Test the {@link AdminCatalogApi} by observing its side effects.
*
- * @author grkvlt@apache.org
+ * @author grkvlt@apache.org, Adrian Cole
*/
@Test(groups = { "unit", "admin" }, singleThreaded = true, testName = "CatalogApiExpectTest")
public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest {
- private Reference catalogRef = Reference.builder()
- .type("application/vnd.vmware.vcloud.catalog+xml")
- .name("QunyingTestCatalog")
- .href(URI.create(endpoint + "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
- .build();
+ static String catalog = "7212e451-76e1-4631-b2de-ba1dfd8080e4";
+ static String catalogUrn = "urn:vcloud:catalog:" + catalog;
+ static URI catalogAdminHref = URI.create(endpoint + "/admin/catalog/" + catalog);
+ static URI catalogHref = URI.create(endpoint + "/catalog/" + catalog);
+
+ HttpRequest get = HttpRequest.builder()
+ .method("GET")
+ .endpoint(catalogAdminHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ HttpResponse getResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/admin/catalog.xml", ADMIN_CATALOG + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testGetCatalogHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
+ assertEquals(api.getCatalogApi().get(catalogAdminHref), catalog());
+ }
+
+ HttpRequest resolveCatalog = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + catalogUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String catalogEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", catalogUrn)
+ .a("id", catalogUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + catalogUrn)
+ .e("Link").a("rel", "alternate").a("type", CATALOG).a("href", catalogHref.toString()).up()
+ .e("Link").a("rel", "alternate").a("type", ADMIN_CATALOG).a("href", catalogAdminHref.toString()).up());
+
+ HttpResponse resolveCatalogResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(catalogEntity, ENTITY + ";version=1.5"))
+ .build();
@Test
- public void testCreateCatalog() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("POST", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/catalogs")
- .xmlFilePayload("/catalog/admin/createCatalogSource.xml", VCloudDirectorMediaType.ADMIN_CATALOG)
- .acceptMedia(VCloudDirectorMediaType.ADMIN_CATALOG)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/catalog/admin/createCatalog.xml", VCloudDirectorMediaType.ADMIN_CATALOG)
- .httpResponseBuilder().build());
-
- AdminCatalog source = createCatalogSource();
- AdminCatalog expected = createCatalog();
-
- assertEquals(api.getCatalogApi().createCatalog(catalogRef.getHref(), source), expected);
+ public void testGetCatalogUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog, resolveCatalogResponse, get, getResponse);
+ assertEquals(api.getCatalogApi().get(catalogUrn), catalog());
}
+
+ static String org = "7212e451-76e1-4631-b2de-asdasdasd";
+ static String orgUrn = "urn:vcloud:org:" + org;
+ static URI orgHref = URI.create(endpoint + "/org/" + org);
+ static URI orgAdminHref = URI.create(endpoint + "/admin/org/" + org);
+
+ HttpRequest add = HttpRequest.builder()
+ .method("POST")
+ .endpoint(orgAdminHref + "/catalogs")
+ .addHeader("Accept", ADMIN_CATALOG)
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .payload(payloadFromResourceWithContentType("/catalog/admin/addCatalogSource.xml", VCloudDirectorMediaType.ADMIN_CATALOG))
+ .build();
- // FIXME disabled due to intermittent JXB error: javax.xml.bind.UnmarshalException:
- // unexpected element (uri:"http://www.vmware.com/vcloud/v1.5", local:"AdminCatalog").
- // Expected elements are <{http://www.vmware.com/vcloud/v1.5}Catalog>, <{http://www.vmware.com/vcloud/v1.5}CatalogReference>,
- // <{http://www.vmware.com/vcloud/v1.5}Error>,<{http://www.vmware.com/vcloud/v1.5}Link>,
- // <{http://www.vmware.com/vcloud/v1.5}Owner>,<{http://www.vmware.com/vcloud/v1.5}Reference>,
- // <{http://www.vmware.com/vcloud/v1.5}RoleReference>,<{http://www.vmware.com/vcloud/v1.5}Task>,
- // <{http://www.vmware.com/vcloud/v1.5}VAppReference>
- @Test(enabled = false)
- public void testGetCatalog() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/catalog/admin/catalog.xml", VCloudDirectorMediaType.ADMIN_CATALOG)
- .httpResponseBuilder().build());
+ HttpResponse addResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/admin/addCatalog.xml", ADMIN_CATALOG + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testAddCatalogHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, add, addResponse);
+ assertEquals(api.getCatalogApi().addCatalogToOrg(addCatalogToOrgSource(), orgAdminHref), addCatalogToOrg());
+ }
+
+ HttpRequest resolveOrg = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + orgUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String orgEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", orgUrn)
+ .a("id", orgUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + catalogUrn)
+ .e("Link").a("rel", "alternate").a("type", ORG).a("href", orgHref.toString()).up()
+ .e("Link").a("rel", "alternate").a("type", ADMIN_ORG).a("href", orgAdminHref.toString()).up());
+
+ HttpResponse resolveOrgResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(orgEntity, ENTITY + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testAddCatalogUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveOrg, resolveOrgResponse, add, addResponse);
+ assertEquals(api.getCatalogApi().addCatalogToOrg(addCatalogToOrgSource(), orgUrn), addCatalogToOrg());
+ }
+
+ HttpRequest edit = HttpRequest.builder()
+ .method("PUT")
+ .endpoint(catalogAdminHref)
+ .addHeader("Accept", ADMIN_CATALOG)
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .payload(payloadFromResourceWithContentType("/catalog/admin/editCatalogSource.xml", VCloudDirectorMediaType.ADMIN_CATALOG))
+ .build();
- AdminCatalog expected = catalog();
+ HttpResponse editResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/admin/editCatalog.xml", ADMIN_CATALOG + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testEditCatalogHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, edit, editResponse);
+ assertEquals(api.getCatalogApi().edit(catalogAdminHref, editCatalog()), editCatalog());
+ }
+
+ @Test
+ public void testEditCatalogUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog, resolveCatalogResponse, edit, editResponse);
+ assertEquals(api.getCatalogApi().edit(catalogUrn, editCatalog()), editCatalog());
+ }
+
+ HttpRequest getOwner = HttpRequest.builder()
+ .method("GET")
+ .endpoint(catalogAdminHref + "/owner")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
- AdminCatalog actual = api.getCatalogApi().getCatalog(catalogRef.getHref());
- assertEquals(actual.getHref(), expected.getHref());
- assertEquals(actual.getLinks(), expected.getLinks());
- assertEquals(actual.getTasks(), expected.getTasks());
-
- System.out.println(actual.getOwner());
- System.out.println(expected.getOwner());
-
- Reference actualUser = actual.getOwner().getUser();
- Reference expectedUser = expected.getOwner().getUser();
- assertEquals(actualUser, expectedUser);
-
- assertEquals(actual.getOwner(), expected.getOwner());
-
- assertEquals(api.getCatalogApi().getCatalog(catalogRef.getHref()), expected);
+ HttpResponse getOwnerResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/catalog/admin/owner.xml", OWNER + ";version=1.5"))
+ .build();
+
+ Owner expectedGetOwner = owner().toBuilder()
+ .link(Link.builder()
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
+ .type("application/vnd.vmware.vcloud.catalog+xml")
+ .rel("up")
+ .build())
+ .link(Link.builder()
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/owner"))
+ .type("application/vnd.vmware.vcloud.owner+xml")
+ .rel("edit")
+ .build())
+ .build();
+
+ @Test
+ public void testGetCatalogOwnerHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, getOwner, getOwnerResponse);
+ assertEquals(api.getCatalogApi().getOwner(catalogAdminHref), expectedGetOwner);
}
@Test
- public void testModifyCatalog() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")
- .xmlFilePayload("/catalog/admin/updateCatalogSource.xml", VCloudDirectorMediaType.ADMIN_CATALOG)
- .acceptMedia(VCloudDirectorMediaType.ADMIN_CATALOG)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/catalog/admin/updateCatalog.xml", VCloudDirectorMediaType.ADMIN_CATALOG)
- .httpResponseBuilder().build());
-
- AdminCatalog expected = modifyCatalog();
-
- assertEquals(api.getCatalogApi().updateCatalog(catalogRef.getHref(), expected), expected);
+ public void testGetCatalogOwnerUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog, resolveCatalogResponse, getOwner, getOwnerResponse);
+ assertEquals(api.getCatalogApi().getOwner(catalogUrn), expectedGetOwner);
}
- @Test
- public void testGetOwner() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/owner")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/catalog/admin/owner.xml", VCloudDirectorMediaType.OWNER)
- .httpResponseBuilder().build());
-
- Owner expected = owner().toBuilder()
- .link(Link.builder()
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
- .type("application/vnd.vmware.vcloud.catalog+xml")
- .rel("up")
- .build())
- .link(Link.builder()
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/owner"))
- .type("application/vnd.vmware.vcloud.owner+xml")
- .rel("edit")
- .build())
- .build();
+ HttpRequest setOwner = HttpRequest.builder()
+ .method("PUT")
+ .endpoint(catalogAdminHref + "/owner")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .payload(payloadFromResourceWithContentType("/catalog/admin/editOwnerSource.xml", OWNER + ";version=1.5"))
+ .build();
- assertEquals(api.getCatalogApi().getOwner(catalogRef.getHref()), expected);
- }
+ HttpResponse setOwnerResponse = HttpResponse.builder()
+ .statusCode(204)
+ .build();
- @Test
- public void testSetOwner() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/owner")
- .xmlFilePayload("/catalog/admin/updateOwnerSource.xml", VCloudDirectorMediaType.OWNER)
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .httpResponseBuilder().statusCode(204).build());
-
- Owner newOwner = Owner.builder()
+ Owner ownerToSet = Owner.builder()
.type("application/vnd.vmware.vcloud.owner+xml")
.user(Reference.builder()
.type("application/vnd.vmware.admin.user+xml")
@@ -167,49 +241,83 @@
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
.build())
.build();
-
- api.getCatalogApi().setOwner(catalogRef.getHref(), newOwner);
+
+ @Test
+ public void testSetCatalogOwnerHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, setOwner, setOwnerResponse);
+ api.getCatalogApi().setOwner(catalogAdminHref, ownerToSet);
}
@Test
- public void testPublishCatalog() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("POST", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/action/publish")
- .xmlFilePayload("/catalog/admin/publishCatalogParams.xml", VCloudDirectorMediaType.PUBLISH_CATALOG_PARAMS)
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .httpResponseBuilder().statusCode(204).build());
-
- PublishCatalogParams params = PublishCatalogParams.builder()
- .isPublished(true)
+ public void testSetCatalogOwnerUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog, resolveCatalogResponse, setOwner, setOwnerResponse);
+ api.getCatalogApi().setOwner(catalogUrn, ownerToSet);
+ }
+
+ HttpRequest publishCatalog = HttpRequest.builder()
+ .method("POST")
+ .endpoint(catalogAdminHref + "/action/publish")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .payload(payloadFromResourceWithContentType("/catalog/admin/publishCatalogParams.xml", PUBLISH_CATALOG_PARAMS + ";version=1.5"))
.build();
-
- api.getCatalogApi().publishCatalog(catalogRef.getHref(), params);
- }
+
+ HttpResponse publishCatalogResponse = HttpResponse.builder()
+ .statusCode(204)
+ .build();
@Test
- public void testDeleteCatalog() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("DELETE", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .httpResponseBuilder().statusCode(204).build());
-
- api.getCatalogApi().deleteCatalog(catalogRef.getHref());
+ public void testPublishCatalogHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, publishCatalog,
+ publishCatalogResponse);
+ api.getCatalogApi().publish(catalogAdminHref, PublishCatalogParams.builder().isPublished(true).build());
}
+
+ @Test
+ public void testPublishCatalogUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog,
+ resolveCatalogResponse, publishCatalog, publishCatalogResponse);
+ api.getCatalogApi().publish(catalogUrn, PublishCatalogParams.builder().isPublished(true).build());
+ }
+
- public static final AdminCatalog createCatalogSource() {
+ HttpRequest removeCatalog = HttpRequest.builder()
+ .method("DELETE")
+ .endpoint(catalogAdminHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ HttpResponse removeCatalogResponse = HttpResponse.builder()
+ .statusCode(204)
+ .build();
+
+ @Test
+ public void testRemoveCatalogHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, removeCatalog,
+ removeCatalogResponse);
+ api.getCatalogApi().remove(catalogAdminHref);
+ }
+
+ @Test
+ public void testRemoveCatalogUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog,
+ resolveCatalogResponse, removeCatalog, removeCatalogResponse);
+ api.getCatalogApi().remove(catalogUrn);
+ }
+
+ //TODO: tests for access control!
+
+ public static final AdminCatalog addCatalogToOrgSource() {
return AdminCatalog.builder()
.name("Test Catalog")
.description("created by testCreateCatalog()")
.build();
}
- public static final AdminCatalog createCatalog() {
+ public static final AdminCatalog addCatalogToOrg() {
return AdminCatalog.builder()
.name("Test Catalog")
.id("urn:vcloud:catalog:c56d9159-7838-446f-bb35-9ee12dfbbef3")
@@ -250,7 +358,6 @@
.type("application/vnd.vmware.vcloud.metadata+xml")
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/c56d9159-7838-446f-bb35-9ee12dfbbef3/metadata"))
.build())
- .description("created by testCreateCatalog()")
.tasks(ImmutableSet.<Task>builder()
.add(Task.builder()
.status("running")
@@ -364,7 +471,7 @@
.build();
}
- public static final AdminCatalog modifyCatalog() {
+ public static final AdminCatalog editCatalog() {
return catalog().toBuilder()
.name("new QunyingTestCatalog")
.description("new Testing")
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApiLiveTest.java
index e9f0a58..463d0bd 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApiLiveTest.java
@@ -23,6 +23,7 @@
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_DEL;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_EQ;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
+import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkControlAccessParams;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
@@ -35,6 +36,8 @@
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.User;
+import org.jclouds.vcloud.director.v1_5.domain.org.Org;
+import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
import org.testng.annotations.AfterClass;
@@ -50,7 +53,7 @@
*/
@Test(groups = { "live", "admin" }, singleThreaded = true, testName = "CatalogApiLiveTest")
public class AdminCatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
-
+
public static final String CATALOG = "admin catalog";
/*
@@ -63,7 +66,7 @@
* Shared state between dependant tests.
*/
- private Reference orgRef;
+ private Org org;
private AdminCatalog catalog;
private Owner owner;
@@ -71,141 +74,155 @@
@BeforeClass(alwaysRun = true)
protected void setupRequiredApis() {
catalogApi = adminContext.getApi().getCatalogApi();
- orgRef = Iterables.getFirst(context.getApi().getOrgApi().getOrgList().getOrgs(), null).toAdminReference(endpoint);
+ org = context.getApi().getOrgApi().get(Iterables.get(context.getApi().getOrgApi().list(), 0).getHref());
}
-
+
@AfterClass(alwaysRun = true)
protected void tidyUp() {
if (catalog != null) {
try {
- catalogApi.deleteCatalog(catalog.getHref());
+ catalogApi.remove(catalog.getId());
} catch (Exception e) {
logger.warn(e, "Error deleting admin catalog '%s'", catalog.getName());
}
}
}
-
+
@Test(description = "POST /admin/org/{id}/catalogs")
- public void testCreateCatalog() {
- AdminCatalog newCatalog = AdminCatalog.builder()
- .name(name("Test Catalog "))
- .description("created by testCreateCatalog()")
- .build();
- catalog = catalogApi.createCatalog(orgRef.getHref(), newCatalog);
-
+ public void testAddCatalog() {
+ AdminCatalog newCatalog = AdminCatalog.builder().name(name("Test Catalog "))
+ .description("created by testAddCatalog()").build();
+ catalog = catalogApi.addCatalogToOrg(newCatalog, org.getId());
+
Checks.checkAdminCatalog(catalog);
-
+
// FIXME: documentation suggests we should wait for a task here
}
- @Test(description = "GET /admin/catalog/{id}", dependsOnMethods = { "testCreateCatalog" })
+ @Test(description = "GET /admin/catalog/{id}", dependsOnMethods = { "testAddCatalog" })
public void testGetCatalog() {
- catalog = catalogApi.getCatalog(catalog.getHref());
-
+ catalog = catalogApi.get(catalog.getId());
+
Checks.checkAdminCatalog(catalog);
}
-
+
@Test(description = "GET /admin/catalog/{id}/owner", dependsOnMethods = { "testGetCatalog" })
public void testGetCatalogOwner() {
- owner = catalogApi.getOwner(catalog.getHref());
+ owner = catalogApi.getOwner(catalog.getId());
Checks.checkOwner(owner);
}
-
+
@Test(description = "PUT /admin/catalog/{id}/owner", dependsOnMethods = { "testGetCatalog" })
- public void updateCatalogOwner() {
- User newOwnerUser = randomTestUser("testUpdateCatalogOwner");
- newOwnerUser = adminContext.getApi().getUserApi().createUser(orgRef.getHref(), newOwnerUser);
- assertNotNull(newOwnerUser, "failed to create temp user to test updateCatalogOwner");
-
+ public void editCatalogOwner() {
+ User newOwnerUser = randomTestUser("testEditCatalogOwner");
+ newOwnerUser = adminContext.getApi().getUserApi().addUserToOrg(newOwnerUser, org.getId());
+ assertNotNull(newOwnerUser, "failed to add temp user to test editCatalogOwner");
+
Owner oldOwner = owner;
- Owner newOwner = Owner.builder()
- .type("application/vnd.vmware.vcloud.owner+xml")
- .user(Reference.builder().fromEntity(newOwnerUser).build())
- .build();
-
+ Owner newOwner = Owner.builder().type("application/vnd.vmware.vcloud.owner+xml")
+ .user(Reference.builder().fromEntity(newOwnerUser).build()).build();
+
try {
- catalogApi.setOwner(catalog.getHref(), newOwner);
- owner = catalogApi.getOwner(catalog.getHref());
+ catalogApi.setOwner(catalog.getId(), newOwner);
+ owner = catalogApi.getOwner(catalog.getId());
Checks.checkOwner(owner);
- assertTrue(equal(owner.toBuilder().links(Collections.<Link>emptySet()).build(),
- newOwner.toBuilder().user(newOwner.getUser().toBuilder().id(null).build()).build()),
- String.format(OBJ_FIELD_UPDATABLE, CATALOG, "owner"));
+ assertTrue(
+ equal(owner.toBuilder().links(Collections.<Link> emptySet()).build(),
+ newOwner.toBuilder().user(newOwner.getUser()).build()),
+ String.format(OBJ_FIELD_UPDATABLE, CATALOG, "owner"));
} finally {
- catalogApi.setOwner(catalog.getHref(), oldOwner);
- owner = catalogApi.getOwner(catalog.getHref());
- adminContext.getApi().getUserApi().deleteUser(newOwnerUser.getHref());
+ catalogApi.setOwner(catalog.getId(), oldOwner);
+ owner = catalogApi.getOwner(catalog.getId());
+ adminContext.getApi().getUserApi().remove(newOwnerUser.getHref());
}
}
-
+
@Test(description = "PUT /admin/catalog/{id}", dependsOnMethods = { "testGetCatalogOwner" })
- public void testUpdateCatalog() {
+ public void testEditCatalog() {
String oldName = catalog.getName();
- String newName = "new "+oldName;
+ String newName = "new " + oldName;
String oldDescription = catalog.getDescription();
- String newDescription = "new "+oldDescription;
- // TODO: can we update/manage catalogItems directly like this? or does it just do a merge (like metadata)
-// CatalogItems oldCatalogItems = catalog.getCatalogItems();
-// CatalogItems newCatalogItems = CatalogItems.builder().build();
-
+ String newDescription = "new " + oldDescription;
+ // TODO: can we edit/manage catalogItems directly like this? or does it just do a merge
+ // (like metadata)
+ // CatalogItems oldCatalogItems = catalog.getCatalogItems();
+ // CatalogItems newCatalogItems = CatalogItems.builder().build();
+
try {
- catalog = catalog.toBuilder()
- .name(newName)
- .description(newDescription)
-// .catalogItems(newCatalogItems)
- .build();
-
- catalog = catalogApi.updateCatalog(catalog.getHref(), catalog);
-
+ catalog = catalog.toBuilder().name(newName).description(newDescription)
+ // .catalogItems(newCatalogItems)
+ .build();
+
+ catalog = catalogApi.edit(catalog.getId(), catalog);
+
assertTrue(equal(catalog.getName(), newName), String.format(OBJ_FIELD_UPDATABLE, CATALOG, "name"));
assertTrue(equal(catalog.getDescription(), newDescription),
- String.format(OBJ_FIELD_UPDATABLE, CATALOG, "description"));
-// assertTrue(equal(catalog.getCatalogItems(), newCatalogItems), String.format(OBJ_FIELD_UPDATABLE, CATALOG, "catalogItems"));
-
- //TODO negative tests?
-
+ String.format(OBJ_FIELD_UPDATABLE, CATALOG, "description"));
+ // assertTrue(equal(catalog.getCatalogItems(), newCatalogItems),
+ // String.format(OBJ_FIELD_UPDATABLE, CATALOG, "catalogItems"));
+
+ // TODO negative tests?
+
Checks.checkAdminCatalog(catalog);
} finally {
- catalog = catalog.toBuilder()
- .name(oldName)
- .description(oldDescription)
-// .catalogItems(oldCatalogItems)
- .build();
-
- catalog = catalogApi.updateCatalog(catalog.getHref(), catalog);
+ catalog = catalog.toBuilder().name(oldName).description(oldDescription)
+ // .catalogItems(oldCatalogItems)
+ .build();
+
+ catalog = catalogApi.edit(catalog.getId(), catalog);
}
}
-
+
// FIXME fails with a 403
- @Test(description = "POST /admin/catalog/{id}/action/publish", dependsOnMethods = { "testUpdateCatalog" } )
+ @Test(description = "POST /admin/catalog/{id}/action/publish", dependsOnMethods = { "testEditCatalog" })
public void testPublishCatalog() {
assertNotNull(catalog, String.format(NOT_NULL_OBJ_FMT, "Catalog"));
- assertTrue(!catalog.isPublished(), String.format(OBJ_FIELD_EQ,
- CATALOG, "isPublished", false, catalog.isPublished()));
-
- PublishCatalogParams params = PublishCatalogParams.builder()
- .isPublished(true)
- .build();
-
- catalogApi.publishCatalog(catalog.getHref(), params);
- catalog = catalogApi.getCatalog(catalog.getHref());
-
- assertTrue(catalog.isPublished(), String.format(OBJ_FIELD_EQ,
- CATALOG, "isPublished", true, catalog.isPublished()));
+ assertTrue(!catalog.isPublished(),
+ String.format(OBJ_FIELD_EQ, CATALOG, "isPublished", false, catalog.isPublished()));
+
+ PublishCatalogParams params = PublishCatalogParams.builder().isPublished(true).build();
+
+ catalogApi.publish(catalog.getId(), params);
+ catalog = catalogApi.get(catalog.getId());
+
+ assertTrue(catalog.isPublished(),
+ String.format(OBJ_FIELD_EQ, CATALOG, "isPublished", true, catalog.isPublished()));
+ }
+
+ @Test(description = "GET /org/{id}/catalog/{catalogId}/controlAccess", dependsOnMethods = { "testAddCatalog" })
+ public void testGetControlAccessControl() {
+ // Call the method being tested
+ ControlAccessParams params = catalogApi.getAccessControl(catalog.getId());
+
+ // Check params are well formed
+ checkControlAccessParams(params);
+ }
+
+ @Test(description = "POST /org/{id}/catalog/{catalogId}/action/controlAccess", dependsOnMethods = { "testAddCatalog" })
+ public void testEditAccessControl() {
+ // Setup params
+ ControlAccessParams params = catalogApi.getAccessControl(catalog.getId());
+
+ // Call the method being tested
+ ControlAccessParams modified = catalogApi.editAccessControl(catalog.getId(), params);
+
+ // Check params are well formed
+ checkControlAccessParams(modified);
}
- @Test(description = "DELETE /admin/catalog/{id}", dependsOnMethods = { "testCreateCatalog" } )
- public void testDeleteCatalog() {
-// assertEquals(catalog.getCatalogItems().getCatalogItems().size(), 0,
-// String.format(OBJ_FIELD_EMPTY_TO_DELETE, "Catalog", "CatalogItems",
-// catalog.getCatalogItems().getCatalogItems().toString()));
- AdminCatalog deleteCatalog = AdminCatalog.builder()
- .name(name("Test Catalog "))
- .description("created by testCreateCatalog()")
- .build();
- deleteCatalog = catalogApi.createCatalog(orgRef.getHref(), deleteCatalog);
- catalogApi.deleteCatalog(deleteCatalog.getHref());
-
- deleteCatalog = catalogApi.getCatalog(deleteCatalog.getHref());
- assertNull(deleteCatalog, String.format(OBJ_DEL, CATALOG, deleteCatalog != null ? deleteCatalog.toString() : ""));
+ @Test(description = "DELETE /admin/catalog/{id}", dependsOnMethods = { "testAddCatalog" })
+ public void testRemoveCatalog() {
+ // assertEquals(catalog.getCatalogItems().getCatalogItems().size(), 0,
+ // String.format(OBJ_FIELD_EMPTY_TO_DELETE, "Catalog", "CatalogItems",
+ // catalog.getCatalogItems().getCatalogItems().toString()));
+ AdminCatalog removeCatalog = AdminCatalog.builder().name(name("Test Catalog "))
+ .description("created by testAddCatalog()").build();
+ removeCatalog = catalogApi.addCatalogToOrg(removeCatalog, org.getId());
+ catalogApi.remove(removeCatalog.getId());
+
+ removeCatalog = catalogApi.get(removeCatalog.getId());
+ assertNull(removeCatalog, String.format(OBJ_DEL, CATALOG, removeCatalog != null ? removeCatalog.toString() : ""));
}
+
+
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApiExpectTest.java
index a030f08..c5af84b 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApiExpectTest.java
@@ -18,133 +18,237 @@
*/
package org.jclouds.vcloud.director.v1_5.features.admin;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_NETWORK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_NETWORK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
import static org.testng.Assert.assertEquals;
import java.net.URI;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
import org.jclouds.vcloud.director.v1_5.domain.Link;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.Task;
+import org.jclouds.vcloud.director.v1_5.domain.network.DhcpService;
+import org.jclouds.vcloud.director.v1_5.domain.network.IpAddresses;
+import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
+import org.jclouds.vcloud.director.v1_5.domain.network.IpRanges;
+import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
+import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
+import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
+import org.jclouds.vcloud.director.v1_5.domain.network.NetworkFeatures;
+import org.jclouds.vcloud.director.v1_5.domain.network.SyslogServerSettings;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
-import org.jclouds.vcloud.director.v1_5.features.NetworkApiExpectTest;
import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorAdminApiExpectTest;
import org.testng.annotations.Test;
-import com.google.common.collect.ImmutableSet;
+import com.google.common.net.HttpHeaders;
/**
* Test the {@link AdminNetworkApi} by observing its side effects.
*
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Test(groups = { "unit", "admin" }, singleThreaded = true, testName = "AdminNetworkApiExpectTest")
public class AdminNetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
+
+ static String network = "55a677cf-ab3f-48ae-b880-fab90421980c";
+ static String networkUrn = "urn:vcloud:network:" + network;
+ static URI networkHref = URI.create(endpoint + "/network/" + network);
+ static URI networkAdminHref = URI.create(endpoint + "/admin/network/" + network);
- Reference networkRef = Reference.builder()
- .href(URI.create(endpoint+"/admin/network/b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1"))
- .build();
+ HttpRequest get = HttpRequest.builder()
+ .method("GET")
+ .endpoint(networkAdminHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ HttpResponse getResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/network/network.xml", ORG + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testGetNetworkHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
+ assertEquals(api.getNetworkApi().get(networkAdminHref), network());
+ }
+
+ HttpRequest resolveNetwork = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + networkUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String networkEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", networkUrn)
+ .a("id", networkUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + networkUrn)
+ .e("Link").a("rel", "alternate").a("type", NETWORK).a("href", networkHref.toString()).up()
+ .e("Link").a("rel", "alternate").a("type", ADMIN_NETWORK).a("href", networkAdminHref.toString()).up());
+
+ HttpResponse resolveNetworkResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(networkEntity, ENTITY + ";version=1.5"))
+ .build();
@Test
- public void testGetNetworkWithOrgNetwork() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/network/b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/admin/orgNetwork.xml", VCloudDirectorMediaType.ORG_NETWORK)
- .httpResponseBuilder().build());
+ public void testGetNetworkUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, get, getResponse);
+ assertEquals(api.getNetworkApi().get(networkUrn), network());
+ }
+
+ HttpRequest edit = HttpRequest.builder()
+ .method("PUT")
+ .endpoint(networkAdminHref )
+ .addHeader("Accept", TASK)
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .payload(payloadFromResourceWithContentType("/network/admin/editNetworkSource.xml", ORG_NETWORK))
+ .build();
- OrgNetwork expected = orgNetwork();
+ HttpResponse editResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/network/admin/editNetworkTask.xml", TASK))
+ .build();
- assertEquals(api.getNetworkApi().getNetwork(networkRef.getHref()), expected);
+ @Test
+ public void testEditNetworkHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, edit, editResponse);
+ assertEquals(api.getNetworkApi().edit(networkAdminHref, editNetwork()), editNetworkTask());
}
@Test
- public void testUpdateNetwork() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/network/b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1")
- .xmlFilePayload("/network/admin/updateNetworkSource.xml", VCloudDirectorMediaType.ORG_NETWORK)
- .acceptMedia(VCloudDirectorMediaType.TASK)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/admin/updateNetworkTask.xml", VCloudDirectorMediaType.TASK)
- .httpResponseBuilder().build());
-
- Task expected = updateNetworkTask();
-
- assertEquals(api.getNetworkApi().updateNetwork(networkRef.getHref(), updateNetwork()), expected);
+ public void testEditNetworkUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, edit, editResponse);
+ assertEquals(api.getNetworkApi().edit(networkUrn, editNetwork()), editNetworkTask());
}
- @Test(enabled = false)
- public void testResetNetwork() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("POST", "/admin/network/b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1/action/reset")
- .acceptMedia(VCloudDirectorMediaType.TASK)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/network/admin/resetNetworkTask.xml", VCloudDirectorMediaType.TASK)
- .httpResponseBuilder().build());
+ HttpRequest reset = HttpRequest.builder()
+ .method("POST")
+ .endpoint(networkAdminHref + "/action/reset")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
- Task expected = resetNetworkTask();
+ HttpResponse resetResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/network/admin/resetNetworkTask.xml", TASK))
+ .build();
- assertEquals(api.getNetworkApi().resetNetwork(networkRef.getHref()), expected);
+ @Test
+ public void testResetNetworkHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, reset, resetResponse);
+ assertEquals(api.getNetworkApi().reset(networkAdminHref), resetNetworkTask());
}
- public final OrgNetwork orgNetwork() {
- return NetworkApiExpectTest.orgNetwork().toBuilder()
- .href(toAdminUri(NetworkApiExpectTest.orgNetwork().getHref()))
- .links(ImmutableSet.of(
- Link.builder()
- .rel("alternate")
- .type("application/vnd.vmware.vcloud.orgNetwork+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
- .build(),
- Link.builder()
- .rel("edit")
- .type("application/vnd.vmware.admin.orgNetwork+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
- .build(),
- Link.builder()
- .rel("up")
- .type("application/vnd.vmware.admin.organization+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build(),
- Link.builder()
- .rel("repair")
- .type("application/vnd.vmware.admin.orgNetwork+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/action/reset"))
- .build(),
- Link.builder()
- .rel("down")
- .type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/metadata"))
- .build()))
- .networkPool(Reference.builder()
- .type("application/vnd.vmware.admin.networkPool+xml")
- .name("vcdni01")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/extension/networkPool/e86bfdb5-b3e0-4ece-9125-e764ac64c95c"))
+ @Test
+ public void testResetNetworkUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, reset, resetResponse);
+ assertEquals(api.getNetworkApi().reset(networkUrn), resetNetworkTask());
+ }
+
+ public static OrgNetwork network() {
+ return OrgNetwork.builder()
+ .name("ilsolation01-Jclouds")
+ .id("urn:vcloud:network:f3ba8256-6f48-4512-aad6-600e85b4dc38")
+ .type("application/vnd.vmware.vcloud.orgNetwork+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
+ .link(Link.builder()
+ .rel("up")
+ .type("application/vnd.vmware.vcloud.org+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
.build())
+ .link(Link.builder()
+ .rel("down")
+ .type("application/vnd.vmware.vcloud.metadata+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/metadata"))
+ .build())
+ .description("")
+ .configuration(NetworkConfiguration.builder()
+ .ipScope(IpScope.builder()
+ .isInherited(false)
+ .gateway("192.168.1.1")
+ .netmask("255.255.255.0")
+ .dns1("173.240.111.52")
+ .dns2("173.240.111.53")
+ .ipRanges(IpRanges.builder()
+ .ipRange(IpRange.builder()
+ .startAddress("192.168.1.100")
+ .endAddress("192.168.1.199")
+ .build())
+ .build())
+ .build())
+ .fenceMode(FenceMode.ISOLATED)
+ .retainNetInfoAcrossDeployments(false)
+ .features(NetworkFeatures.builder()
+ .service(DhcpService.builder()
+ .enabled(false)
+ .defaultLeaseTime(3600)
+ .maxLeaseTime(7200)
+ .ipRange(IpRange.builder()
+ .startAddress("192.168.1.2")
+ .endAddress("192.168.1.99")
+ .build())
+ .build())
+ .build())
+ .syslogServerSettings(SyslogServerSettings.builder().build())
+ .build())
+ .allowedExternalIpAddresses(IpAddresses.builder().build())
.build();
}
- public final OrgNetwork updateNetwork() {
- return orgNetwork().toBuilder()
+ public final OrgNetwork editNetwork() {
+ return network().toBuilder()
.build();
}
public final Task resetNetworkTask() {
return Task.builder()
-
- .build();
+ .status("running")
+ .startTime(dateService.iso8601DateParse("2012-03-14T12:39:23.720-04:00"))
+ .operationName("networkResetNetwork")
+ .operation("Resetting Network ilsolation01-Jclouds(f3ba8256-6f48-4512-aad6-600e85b4dc38)")
+ .expiryTime(dateService.iso8601DateParse("2012-06-12T12:39:23.720-04:00"))
+ .name("task")
+ .id("urn:vcloud:task:49d2e180-7921-4902-ac39-b4ff5406bb94")
+ .type("application/vnd.vmware.vcloud.task+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/task/49d2e180-7921-4902-ac39-b4ff5406bb94"))
+ .link(Link.builder()
+ .rel("task:cancel")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/task/49d2e180-7921-4902-ac39-b4ff5406bb94/action/cancel"))
+ .build())
+ .owner(Reference.builder()
+ .type("application/vnd.vmware.vcloud.network+xml")
+ .name("ilsolation01-Jclouds")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
+ .build())
+ .user(Reference.builder()
+ .type("application/vnd.vmware.admin.user+xml")
+ .name("dan@cloudsoftcorp.com")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/ae75edd2-12de-414c-8e85-e6ea10442c08"))
+ .build())
+ .org(Reference.builder()
+ .type("application/vnd.vmware.vcloud.org+xml")
+ .name("JClouds")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .build())
+ .build();
}
- public final Task updateNetworkTask() {
+ public final Task editNetworkTask() {
return Task.builder()
.status("running")
.startTime(dateService.iso8601DateParse("2012-03-14T12:39:23.720-04:00"))
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApiLiveTest.java
index eebbaf4..8c23d1b 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApiLiveTest.java
@@ -20,18 +20,15 @@
import static com.google.common.base.Objects.equal;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REQUIRED_VALUE_OBJECT_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
-import static org.testng.Assert.assertNotNull;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.util.Collections;
import org.jclouds.vcloud.director.v1_5.domain.Checks;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.network.ExternalNetwork;
import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
@@ -60,24 +57,19 @@
*/
private AdminNetworkApi networkApi;
- /*
- * Shared state between dependant tests.
- */
- Reference networkRef;
- Network network;
+ private Network network;
@Override
@BeforeClass(alwaysRun = true)
protected void setupRequiredApis() {
networkApi = adminContext.getApi().getNetworkApi();
- networkRef = Reference.builder().href(networkURI).build().toAdminReference(endpoint);
}
@Test(description = "GET /admin/network/{id}")
public void testGetNetwork() {
//TODO: test both org and external networks
- assertNotNull(networkRef, String.format(OBJ_REQ_LIVE, NETWORK));
- network = networkApi.getNetwork(networkRef.getHref());
+ network = lazyGetNetwork();
+
if(network instanceof ExternalNetwork) {
Checks.checkExternalNetwork(Network.<ExternalNetwork>toSubType(network));
@@ -91,69 +83,69 @@
// TODO: this test is far from exhaustive
@Test(description = "PUT /admin/network/{id}" )
- public void testUpdateNetwork() {
+ public void testEditNetwork() {
//TODO: ensure network instanceof OrgNetwork, may require queries
- assertTrue(network instanceof OrgNetwork, String.format(REF_REQ_LIVE, "OrgNetwork"));
+ assertTrue(network instanceof OrgNetwork, String.format(URN_REQ_LIVE, "OrgNetwork"));
OrgNetwork oldNetwork = Network.<OrgNetwork>toSubType(network)
.toBuilder()
.tasks(Collections.<Task>emptySet())
.build();
- OrgNetwork updateNetwork = getMutatedOrgNetwork(oldNetwork);
+ OrgNetwork editNetwork = getMutatedOrgNetwork(oldNetwork);
try {
- Task updateNetworkTask = networkApi.updateNetwork(network.getHref(), updateNetwork);
- Checks.checkTask(updateNetworkTask);
- assertTrue(retryTaskSuccess.apply(updateNetworkTask), String.format(TASK_COMPLETE_TIMELY, "updateNetworkTask"));
- network = networkApi.getNetwork(network.getHref());
+ Task editNetworkTask = networkApi.edit(networkUrn, editNetwork);
+ Checks.checkTask(editNetworkTask);
+ assertTrue(retryTaskSuccess.apply(editNetworkTask), String.format(TASK_COMPLETE_TIMELY, "editNetworkTask"));
+ network = networkApi.get(networkUrn);
Checks.checkOrgNetwork(Network.<OrgNetwork>toSubType(network));
assertTrue(equal(network.getConfiguration().getIpScope(),
- updateNetwork.getConfiguration().getIpScope()),
+ editNetwork.getConfiguration().getIpScope()),
String.format(OBJ_FIELD_UPDATABLE, NETWORK+".configuration", "ipScope"));
assertTrue(equal(network.getConfiguration().getParentNetwork(),
- updateNetwork.getConfiguration().getParentNetwork()),
+ editNetwork.getConfiguration().getParentNetwork()),
String.format(OBJ_FIELD_UPDATABLE, NETWORK+".configuration", "parentNetwork"));
assertTrue(equal(network.getConfiguration().getFenceMode(),
- updateNetwork.getConfiguration().getFenceMode()),
+ editNetwork.getConfiguration().getFenceMode()),
String.format(OBJ_FIELD_UPDATABLE, NETWORK+".configuration", "fenceMode"));
assertTrue(equal(network.getConfiguration().retainNetInfoAcrossDeployments(),
- updateNetwork.getConfiguration().retainNetInfoAcrossDeployments()),
+ editNetwork.getConfiguration().retainNetInfoAcrossDeployments()),
String.format(OBJ_FIELD_UPDATABLE, NETWORK+".configuration", "retainNetInfoAcrossDeployments"));
assertTrue(equal(network.getConfiguration().getNetworkFeatures(),
- updateNetwork.getConfiguration().getNetworkFeatures()),
+ editNetwork.getConfiguration().getNetworkFeatures()),
String.format(OBJ_FIELD_UPDATABLE, NETWORK+".configuration", "networkFeatures"));
assertTrue(equal(network.getConfiguration().getSyslogServerSettings(),
- updateNetwork.getConfiguration().getSyslogServerSettings()),
+ editNetwork.getConfiguration().getSyslogServerSettings()),
String.format(OBJ_FIELD_UPDATABLE, NETWORK+".configuration", "syslogServerSettings"));
assertTrue(equal(network.getConfiguration().getRouterInfo(),
- updateNetwork.getConfiguration().getRouterInfo()),
+ editNetwork.getConfiguration().getRouterInfo()),
String.format(OBJ_FIELD_UPDATABLE, NETWORK+".configuration", "routerInfo"));
// FIXME: fails
// assertTrue(equal(Network.<OrgNetwork>toSubType(network).getNetworkPool(),
-// updateNetwork.getNetworkPool()),
+// editNetwork.getNetworkPool()),
// String.format(OBJ_FIELD_UPDATABLE, NETWORK, "networkPool"));
// assertTrue(equal(Network.<OrgNetwork>toSubType(network).getAllowedExternalIpAddresses(),
-// updateNetwork.getAllowedExternalIpAddresses()),
+// editNetwork.getAllowedExternalIpAddresses()),
// String.format(OBJ_FIELD_UPDATABLE, NETWORK, "allowedExternalIpAddresses"));
} finally {
- Task updateNetworkTask = networkApi.updateNetwork(network.getHref(), oldNetwork);
- Checks.checkTask(updateNetworkTask);
- assertTrue(retryTaskSuccess.apply(updateNetworkTask), String.format(TASK_COMPLETE_TIMELY, "updateNetworkTask"));
- network = networkApi.getNetwork(network.getHref());
+ Task editNetworkTask = networkApi.edit(networkUrn, oldNetwork);
+ Checks.checkTask(editNetworkTask);
+ assertTrue(retryTaskSuccess.apply(editNetworkTask), String.format(TASK_COMPLETE_TIMELY, "editNetworkTask"));
+ network = networkApi.get(networkUrn);
}
}
@Test(description = "POST /admin/network/{id}/action/reset")
public void testResetNetwork() {
// TODO assert that network is deployed somehow
- Task resetNetworkTask = networkApi.resetNetwork(networkRef.getHref());
+ Task resetNetworkTask = networkApi.reset(networkUrn);
Checks.checkTask(resetNetworkTask);
assertTrue(retryTaskSuccess.apply(resetNetworkTask), String.format(TASK_COMPLETE_TIMELY, "resetNetworkTask"));
- network = networkApi.getNetwork(network.getHref());
+ network = networkApi.get(networkUrn);
Checks.checkOrgNetwork(Network.<OrgNetwork>toSubType(network));
// TODO: other assertions about the reset? that network is deployed when task is complete, for example
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApiExpectTest.java
index 4032e6e..28dee0a 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApiExpectTest.java
@@ -39,234 +39,250 @@
import org.testng.annotations.Test;
/**
- * Test the {@link AdminOrgApi} by observing its side effects.
+ * Test the {@link AdminOrgApi} by observing its side effects. TODO: this needs to be rewritten to
+ * test both URN and href access
*
* @author danikov
*/
@Test(groups = { "unit", "user" }, singleThreaded = true, testName = "AdminOrgApiExpectTest")
public class AdminOrgApiExpectTest extends VCloudDirectorAdminApiExpectTest {
-
+
private Reference orgRef = Reference.builder()
- .href(URI.create(endpoint + "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build();
-
+ .href(URI.create(endpoint + "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")).build();
+
@Test
public void testGetOrg() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/org.xml",
- VCloudDirectorMediaType.ADMIN_ORG)
- .httpResponseBuilder().build());
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, new VcloudHttpRequestPrimer()
+ .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0").acceptAnyMedia()
+ .httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer().xmlFilePayload("/org/admin/org.xml", VCloudDirectorMediaType.ADMIN_ORG)
+ .httpResponseBuilder().build());
AdminOrg expected = adminOrg();
- assertEquals(api.getOrgApi().getOrg(orgRef.getHref()), expected);
+ assertEquals(api.getOrgApi().get(orgRef.getHref()), expected);
}
-
+
public static final AdminOrg adminOrg() {
- return AdminOrg.builder()
- .name("JClouds")
- .id("urn:vcloud:org:6f312e42-cd2b-488d-a2bb-97519cd57ed0")
- .type("application/vnd.vmware.admin.organization+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .link(Link.builder()
- .rel("down")
- .type("application/vnd.vmware.vcloud.tasksList+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build())
- .link(Link.builder()
- .rel("down")
- .type("application/vnd.vmware.vcloud.metadata+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata"))
- .build())
- .link(Link.builder()
- .rel("add")
- .type("application/vnd.vmware.admin.catalog+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/catalogs"))
- .build())
- .link(Link.builder()
- .rel("add")
- .type("application/vnd.vmware.admin.user+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/users"))
- .build())
- .link(Link.builder()
- .rel("add")
- .type("application/vnd.vmware.admin.group+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/groups"))
- .build())
- .link(Link.builder()
- .rel("add")
- .type("application/vnd.vmware.admin.orgNetwork+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/networks"))
- .build())
- .link(Link.builder()
- .rel("edit")
- .type("application/vnd.vmware.admin.organization+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build())
- .link(Link.builder()
- .rel("remove")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build())
- .link(Link.builder()
- .rel("alternate")
- .type("application/vnd.vmware.vcloud.org+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build())
- .description("")
- .fullName("JClouds")
- .isEnabled(true)
- .settings(settings())
- .user(Reference.builder()
- .type("application/vnd.vmware.admin.user+xml")
- .name("adam.lowe@cloudsoftcorp.com")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/672ebb67-d8ff-4201-9c1b-c1be869e526c"))
- .build())
- .user(Reference.builder()
- .type("application/vnd.vmware.admin.user+xml")
- .name("adrian@jclouds.org")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/8c360b93-ed25-4c9a-8e24-d48cd9966d93"))
- .build())
- .user(Reference.builder()
- .type("application/vnd.vmware.admin.user+xml")
- .name("qunying.huang@enstratus.com")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/967d317c-4273-4a95-b8a4-bf63b78e9c69"))
- .build())
- .user(Reference.builder()
- .type("application/vnd.vmware.admin.user+xml")
- .name("dan@cloudsoftcorp.com")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/ae75edd2-12de-414c-8e85-e6ea10442c08"))
- .build())
- .user(Reference.builder()
- .type("application/vnd.vmware.admin.user+xml")
- .name("adk@cloudsoftcorp.com")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
- .build())
- .catalog(Reference.builder()
- .type("application/vnd.vmware.admin.catalog+xml")
- .name("QunyingTestCatalog")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
- .build())
- .catalog(Reference.builder()
- .type("application/vnd.vmware.admin.catalog+xml")
- .name("Public")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/9e08c2f6-077a-42ce-bece-d5332e2ebb5c"))
- .build())
- .catalog(Reference.builder()
- .type("application/vnd.vmware.admin.catalog+xml")
- .name("dantest")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/b542aff4-9f97-4f51-a126-4330fbf62f02"))
- .build())
- .catalog(Reference.builder()
- .type("application/vnd.vmware.admin.catalog+xml")
- .name("test")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/b7289d54-4ca4-497f-9a93-2d4afc97e3da"))
- .build())
- .vdc(Reference.builder()
- .type("application/vnd.vmware.vcloud.vdc+xml")
- .name("Cluster01-JClouds")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/vdc/d16d333b-e3c0-4176-845d-a5ee6392df07"))
- .build())
- .network(Reference.builder()
- .type("application/vnd.vmware.admin.network+xml")
- .name("ilsolation01-Jclouds")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
- .build())
- .network(Reference.builder()
- .type("application/vnd.vmware.admin.network+xml")
- .name("internet01-Jclouds")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/55a677cf-ab3f-48ae-b880-fab90421980c"))
- .build())
- .build();
+ return AdminOrg
+ .builder()
+ .name("JClouds")
+ .id("urn:vcloud:org:6f312e42-cd2b-488d-a2bb-97519cd57ed0")
+ .type("application/vnd.vmware.admin.organization+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .link(Link
+ .builder()
+ .rel("down")
+ .type("application/vnd.vmware.vcloud.tasksList+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("down")
+ .type("application/vnd.vmware.vcloud.metadata+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("add")
+ .type("application/vnd.vmware.admin.catalog+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/catalogs"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("add")
+ .type("application/vnd.vmware.admin.user+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/users"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("add")
+ .type("application/vnd.vmware.admin.group+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/groups"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("add")
+ .type("application/vnd.vmware.admin.orgNetwork+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/networks"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("edit")
+ .type("application/vnd.vmware.admin.organization+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("remove")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("alternate")
+ .type("application/vnd.vmware.vcloud.org+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
+ .build())
+ .description("")
+ .fullName("JClouds")
+ .isEnabled(true)
+ .settings(settings())
+ .user(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.user+xml")
+ .name("adam.lowe@cloudsoftcorp.com")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/672ebb67-d8ff-4201-9c1b-c1be869e526c"))
+ .build())
+ .user(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.user+xml")
+ .name("adrian@jclouds.org")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/8c360b93-ed25-4c9a-8e24-d48cd9966d93"))
+ .build())
+ .user(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.user+xml")
+ .name("qunying.huang@enstratus.com")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/967d317c-4273-4a95-b8a4-bf63b78e9c69"))
+ .build())
+ .user(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.user+xml")
+ .name("dan@cloudsoftcorp.com")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/ae75edd2-12de-414c-8e85-e6ea10442c08"))
+ .build())
+ .user(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.user+xml")
+ .name("adk@cloudsoftcorp.com")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9"))
+ .build())
+ .catalog(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.catalog+xml")
+ .name("QunyingTestCatalog")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
+ .build())
+ .catalog(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.catalog+xml")
+ .name("Public")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/9e08c2f6-077a-42ce-bece-d5332e2ebb5c"))
+ .build())
+ .catalog(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.catalog+xml")
+ .name("dantest")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/b542aff4-9f97-4f51-a126-4330fbf62f02"))
+ .build())
+ .catalog(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.catalog+xml")
+ .name("test")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/b7289d54-4ca4-497f-9a93-2d4afc97e3da"))
+ .build())
+ .vdc(Reference
+ .builder()
+ .type("application/vnd.vmware.vcloud.vdc+xml")
+ .name("Cluster01-JClouds")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/vdc/d16d333b-e3c0-4176-845d-a5ee6392df07"))
+ .build())
+ .network(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.network+xml")
+ .name("ilsolation01-Jclouds")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
+ .build())
+ .network(Reference
+ .builder()
+ .type("application/vnd.vmware.admin.network+xml")
+ .name("internet01-Jclouds")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/55a677cf-ab3f-48ae-b880-fab90421980c"))
+ .build()).build();
}
-
+
@Test(enabled = false)
public void testGetSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/settings.xml",
- VCloudDirectorMediaType.ORG_SETTINGS)
- .httpResponseBuilder().build());
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/")
+ .acceptAnyMedia().httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/settings.xml", VCloudDirectorMediaType.ORG_SETTINGS)
+ .httpResponseBuilder().build());
OrgSettings expected = settings();
assertEquals(api.getOrgApi().getSettings(orgRef.getHref()), expected);
}
-
+
@Test(enabled = false)
- public void testUpdateSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/")
- .xmlFilePayload("/org/admin/updateSettingsSource.xml",
- VCloudDirectorMediaType.ORG_SETTINGS)
- .acceptMedia(VCloudDirectorMediaType.ORG_SETTINGS)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/updateSettings.xml",
- VCloudDirectorMediaType.ORG_SETTINGS)
- .httpResponseBuilder().build());
+ public void testEditSettings() {
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/")
+ .xmlFilePayload("/org/admin/editSettingsSource.xml", VCloudDirectorMediaType.ORG_SETTINGS)
+ .acceptMedia(VCloudDirectorMediaType.ORG_SETTINGS).httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/editSettings.xml", VCloudDirectorMediaType.ORG_SETTINGS)
+ .httpResponseBuilder().build());
- OrgSettings expected = updateSettings();
+ OrgSettings expected = editSettings();
- assertEquals(api.getOrgApi().updateSettings(orgRef.getHref(), expected), expected);
+ assertEquals(api.getOrgApi().editSettings(orgRef.getHref(), expected), expected);
}
-
+
@Test
public void testGetEmailSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/emailSettings.xml",
- VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
- .httpResponseBuilder().build());
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email")
+ .acceptAnyMedia().httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/emailSettings.xml", VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
+ .httpResponseBuilder().build());
OrgEmailSettings expected = emailSettings();
assertEquals(api.getOrgApi().getEmailSettings(orgRef.getHref()), expected);
}
-
+
@Test
- public void testUpdateEmailSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email")
- .xmlFilePayload("/org/admin/updateEmailSettingsSource.xml",
- VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
- .acceptMedia(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/updateEmailSettings.xml",
- VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
- .httpResponseBuilder().build());
+ public void testEditEmailSettings() {
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email")
+ .xmlFilePayload("/org/admin/editEmailSettingsSource.xml",
+ VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
+ .acceptMedia(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS).httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/editEmailSettings.xml",
+ VCloudDirectorMediaType.ORG_EMAIL_SETTINGS).httpResponseBuilder().build());
- OrgEmailSettings expected = updateEmailSettings();
+ OrgEmailSettings expected = editEmailSettings();
- assertEquals(api.getOrgApi().updateEmailSettings(orgRef.getHref(), expected), expected);
+ assertEquals(api.getOrgApi().editEmailSettings(orgRef.getHref(), expected), expected);
}
-
+
@Test(enabled = false)
public void testGetGeneralSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/generalSettings.xml",
- VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
- .httpResponseBuilder().build());
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general")
+ .acceptAnyMedia().httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/generalSettings.xml", VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
+ .httpResponseBuilder().build());
OrgGeneralSettings expected = generalSettings();
@@ -274,335 +290,329 @@
}
public static final OrgGeneralSettings generalSettings() {
- return OrgGeneralSettings.builder()
- .type("application/vnd.vmware.admin.organizationGeneralSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general"))
- .link(Link.builder()
- .rel("edit")
- .type("application/vnd.vmware.admin.organizationGeneralSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general"))
- .build())
- .canPublishCatalogs(false)
- .deployedVMQuota(0)
- .storedVmQuota(0)
- .useServerBootSequence(false)
- .delayAfterPowerOnSeconds(0)
- .build();
+ return OrgGeneralSettings
+ .builder()
+ .type("application/vnd.vmware.admin.organizationGeneralSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general"))
+ .link(Link
+ .builder()
+ .rel("edit")
+ .type("application/vnd.vmware.admin.organizationGeneralSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general"))
+ .build()).canPublishCatalogs(false).deployedVMQuota(0).storedVmQuota(0)
+ .useServerBootSequence(false).delayAfterPowerOnSeconds(0).build();
}
-
+
@Test(enabled = false)
- public void testUpdateGeneralSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general")
- .xmlFilePayload("/org/admin/updateGeneralSettingsSource.xml",
- VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
- .acceptMedia(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/updateGeneralSettings.xml",
- VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
- .httpResponseBuilder().build());
+ public void testEditGeneralSettings() {
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general")
+ .xmlFilePayload("/org/admin/editGeneralSettingsSource.xml",
+ VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
+ .acceptMedia(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS).httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/editGeneralSettings.xml",
+ VCloudDirectorMediaType.ORG_GENERAL_SETTINGS).httpResponseBuilder().build());
- OrgGeneralSettings expected = updateGeneralSettings();
+ OrgGeneralSettings expected = editGeneralSettings();
- assertEquals(api.getOrgApi().updateGeneralSettings(orgRef.getHref(), expected), expected);
+ assertEquals(api.getOrgApi().editGeneralSettings(orgRef.getHref(), expected), expected);
}
-
- public static final OrgGeneralSettings updateGeneralSettings() {
+
+ public static final OrgGeneralSettings editGeneralSettings() {
return generalSettings().toBuilder()
-
- .build();
+
+ .build();
}
-
+
@Test
public void testGetLdapSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/ldap")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/ldapSettings.xml",
- VCloudDirectorMediaType.ORG_LDAP_SETTINGS)
- .httpResponseBuilder().build());
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/ldap")
+ .acceptAnyMedia().httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/ldapSettings.xml", VCloudDirectorMediaType.ORG_LDAP_SETTINGS)
+ .httpResponseBuilder().build());
OrgLdapSettings expected = ldapSettings();
assertEquals(api.getOrgApi().getLdapSettings(orgRef.getHref()), expected);
}
-
+
public static final OrgLdapSettings ldapSettings() {
- return OrgLdapSettings.builder()
- .type("application/vnd.vmware.admin.organizationLdapSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/ldap"))
- .ldapMode("NONE")
- .build();
+ return OrgLdapSettings
+ .builder()
+ .type("application/vnd.vmware.admin.organizationLdapSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/ldap"))
+ .ldapMode("NONE").build();
}
-
+
@Test
public void testGetPasswordPolicy() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/passwordPolicy.xml",
- VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
- .httpResponseBuilder().build());
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy")
+ .acceptAnyMedia().httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/passwordPolicy.xml",
+ VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS).httpResponseBuilder().build());
OrgPasswordPolicySettings expected = passwordPolicy();
assertEquals(api.getOrgApi().getPasswordPolicy(orgRef.getHref()), expected);
}
-
+
public static final OrgPasswordPolicySettings passwordPolicy() {
- return OrgPasswordPolicySettings.builder()
- .type("application/vnd.vmware.admin.organizationPasswordPolicySettings+xml")
- .link(Link.builder()
- .rel("edit")
+ return OrgPasswordPolicySettings
+ .builder()
.type("application/vnd.vmware.admin.organizationPasswordPolicySettings+xml")
+ .link(Link
+ .builder()
+ .rel("edit")
+ .type("application/vnd.vmware.admin.organizationPasswordPolicySettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy"))
+ .build())
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy"))
- .build())
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy"))
- .accountLockoutEnabled(false)
- .invalidLoginsBeforeLockout(5)
- .accountLockoutIntervalMinutes(10)
- .build();
+ .accountLockoutEnabled(false).invalidLoginsBeforeLockout(5).accountLockoutIntervalMinutes(10).build();
}
-
+
@Test
- public void testUpdatePasswordPolicy() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy")
- .xmlFilePayload("/org/admin/updatePasswordPolicySource.xml",
- VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
- .acceptMedia(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/updatePasswordPolicy.xml",
- VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
- .httpResponseBuilder().build());
+ public void testEditPasswordPolicy() {
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy")
+ .xmlFilePayload("/org/admin/editPasswordPolicySource.xml",
+ VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
+ .acceptMedia(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS).httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/editPasswordPolicy.xml",
+ VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS).httpResponseBuilder().build());
- OrgPasswordPolicySettings expected = updateOrgPasswordPolicy();
+ OrgPasswordPolicySettings expected = editOrgPasswordPolicy();
- assertEquals(api.getOrgApi().updatePasswordPolicy(orgRef.getHref(), expected), expected);
+ assertEquals(api.getOrgApi().editPasswordPolicy(orgRef.getHref(), expected), expected);
}
-
- public static final OrgPasswordPolicySettings updateOrgPasswordPolicy() {
- return passwordPolicy().toBuilder()
- .accountLockoutEnabled(true)
- .invalidLoginsBeforeLockout(6)
- .accountLockoutIntervalMinutes(11)
- .build();
+
+ public static final OrgPasswordPolicySettings editOrgPasswordPolicy() {
+ return passwordPolicy().toBuilder().accountLockoutEnabled(true).invalidLoginsBeforeLockout(6)
+ .accountLockoutIntervalMinutes(11).build();
}
-
+
@Test(enabled = false)
public void testGetVAppLeaseSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/vAppLeaseSettings.xml",
- VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
- .httpResponseBuilder().build());
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings")
+ .acceptAnyMedia().httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/vAppLeaseSettings.xml", VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
+ .httpResponseBuilder().build());
OrgLeaseSettings expected = vAppLeaseSettings();
assertEquals(api.getOrgApi().getVAppLeaseSettings(orgRef.getHref()), expected);
}
-
+
public static final OrgLeaseSettings vAppLeaseSettings() {
- return OrgLeaseSettings.builder()
- .type("application/vnd.vmware.admin.vAppLeaseSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings"))
- .link(Link.builder()
- .rel("edit")
- .type("application/vnd.vmware.admin.vAppLeaseSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings"))
- .build())
- .deleteOnStorageLeaseExpiration(false)
- .deploymentLeaseSeconds(0)
- .storageLeaseSeconds(0)
- .build();
+ return OrgLeaseSettings
+ .builder()
+ .type("application/vnd.vmware.admin.vAppLeaseSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings"))
+ .link(Link
+ .builder()
+ .rel("edit")
+ .type("application/vnd.vmware.admin.vAppLeaseSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings"))
+ .build()).deleteOnStorageLeaseExpiration(false).deploymentLeaseSeconds(0)
+ .storageLeaseSeconds(0).build();
}
-
+
@Test(enabled = false)
- public void testUpdateOrgVAppLeaseSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings")
- .xmlFilePayload("/org/admin/updateVAppLeaseSettingsSource.xml",
- VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
- .acceptMedia(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/updateVAppLeaseSettings.xml",
- VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
- .httpResponseBuilder().build());
+ public void testEditOrgVAppLeaseSettings() {
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings")
+ .xmlFilePayload("/org/admin/editVAppLeaseSettingsSource.xml",
+ VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
+ .acceptMedia(VCloudDirectorMediaType.ORG_LEASE_SETTINGS).httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/editVAppLeaseSettings.xml",
+ VCloudDirectorMediaType.ORG_LEASE_SETTINGS).httpResponseBuilder().build());
- OrgLeaseSettings expected = updateVAppLeaseSettings();
+ OrgLeaseSettings expected = editVAppLeaseSettings();
- assertEquals(api.getOrgApi().updateVAppLeaseSettings(orgRef.getHref(), expected), expected);
+ assertEquals(api.getOrgApi().editVAppLeaseSettings(orgRef.getHref(), expected), expected);
}
-
- public static final OrgLeaseSettings updateVAppLeaseSettings() {
+
+ public static final OrgLeaseSettings editVAppLeaseSettings() {
return vAppLeaseSettings().toBuilder()
-
- .build();
+
+ .build();
}
-
+
@Test(enabled = false)
public void testGetVAppTemplateLeaseSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/vAppTemplateLeaseSettings.xml",
- VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
- .httpResponseBuilder().build());
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("GET",
+ "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings")
+ .acceptAnyMedia().httpRequestBuilder().build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/vAppTemplateLeaseSettings.xml",
+ VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS).httpResponseBuilder()
+ .build());
OrgVAppTemplateLeaseSettings expected = vAppTemplateLeaseSettings();
assertEquals(api.getOrgApi().getVAppTemplateLeaseSettings(orgRef.getHref()), expected);
}
-
+
public static final OrgVAppTemplateLeaseSettings vAppTemplateLeaseSettings() {
- return OrgVAppTemplateLeaseSettings.builder()
- .type("application/vnd.vmware.admin.vAppTemplateLeaseSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings"))
- .link(Link.builder()
- .rel("edit")
+ return OrgVAppTemplateLeaseSettings
+ .builder()
.type("application/vnd.vmware.admin.vAppTemplateLeaseSettings+xml")
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings"))
- .build())
- .deleteOnStorageLeaseExpiration(false)
- .storageLeaseSeconds(0)
- .build();
+ .link(Link
+ .builder()
+ .rel("edit")
+ .type("application/vnd.vmware.admin.vAppTemplateLeaseSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings"))
+ .build()).deleteOnStorageLeaseExpiration(false).storageLeaseSeconds(0).build();
}
-
+
@Test(enabled = false)
- public void testUpdateOrgVAppTemplateLeaseSettings() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings")
- .xmlFilePayload("/org/admin/updateVAppLeaseSettingsSource.xml",
- VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
- .acceptMedia(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/org/admin/updateVAppLeaseSettings.xml",
- VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
- .httpResponseBuilder().build());
+ public void testEditOrgVAppTemplateLeaseSettings() {
+ VCloudDirectorAdminApi api = requestsSendResponses(
+ loginRequest,
+ sessionResponse,
+ new VcloudHttpRequestPrimer()
+ .apiCommand("PUT",
+ "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings")
+ .xmlFilePayload("/org/admin/editVAppLeaseSettingsSource.xml",
+ VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
+ .acceptMedia(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS).httpRequestBuilder()
+ .build(),
+ new VcloudHttpResponsePrimer()
+ .xmlFilePayload("/org/admin/editVAppLeaseSettings.xml",
+ VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS).httpResponseBuilder()
+ .build());
- OrgVAppTemplateLeaseSettings expected = updateVAppTemplateLeaseSettings();
+ OrgVAppTemplateLeaseSettings expected = editVAppTemplateLeaseSettings();
- assertEquals(api.getOrgApi().updateVAppTemplateLeaseSettings(orgRef.getHref(), expected), expected);
+ assertEquals(api.getOrgApi().editVAppTemplateLeaseSettings(orgRef.getHref(), expected), expected);
}
-
- public static final OrgVAppTemplateLeaseSettings updateVAppTemplateLeaseSettings() {
+
+ public static final OrgVAppTemplateLeaseSettings editVAppTemplateLeaseSettings() {
return vAppTemplateLeaseSettings().toBuilder()
-
- .build();
+
+ .build();
}
-
+
public static final OrgSettings settings() {
- return OrgSettings.builder()
- .type("application/vnd.vmware.admin.orgSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings"))
- .link(Link.builder()
- .rel("down")
- .type("application/vnd.vmware.admin.vAppTemplateLeaseSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings"))
- .build())
- .link(Link.builder()
- .rel("down")
- .type("application/vnd.vmware.admin.organizationEmailSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email"))
- .build())
- .link(Link.builder()
- .rel("down")
- .type("application/vnd.vmware.admin.vAppLeaseSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings"))
- .build())
- .link(Link.builder()
- .rel("down")
- .type("application/vnd.vmware.admin.organizationPasswordPolicySettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy"))
- .build())
- .link(Link.builder()
- .rel("down")
- .type("application/vnd.vmware.admin.organizationGeneralSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general"))
- .build())
- .link(Link.builder()
- .rel("down")
- .type("application/vnd.vmware.admin.organizationLdapSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/ldap"))
- .build())
- .link(Link.builder()
- .rel("edit")
- .type("application/vnd.vmware.admin.orgSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings"))
- .build())
- .generalSettings(generalSettings())
- .vAppLeaseSettings(vAppLeaseSettings())
- .vAppTemplateLeaseSettings(vAppTemplateLeaseSettings())
- .ldapSettings(ldapSettings())
- .emailSettings(emailSettings())
- .passwordPolicy(passwordPolicy())
- .build();
+ return OrgSettings
+ .builder()
+ .type("application/vnd.vmware.admin.orgSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings"))
+ .link(Link
+ .builder()
+ .rel("down")
+ .type("application/vnd.vmware.admin.vAppTemplateLeaseSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppTemplateLeaseSettings"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("down")
+ .type("application/vnd.vmware.admin.organizationEmailSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("down")
+ .type("application/vnd.vmware.admin.vAppLeaseSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/vAppLeaseSettings"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("down")
+ .type("application/vnd.vmware.admin.organizationPasswordPolicySettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/passwordPolicy"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("down")
+ .type("application/vnd.vmware.admin.organizationGeneralSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/general"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("down")
+ .type("application/vnd.vmware.admin.organizationLdapSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/ldap"))
+ .build())
+ .link(Link
+ .builder()
+ .rel("edit")
+ .type("application/vnd.vmware.admin.orgSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings"))
+ .build()).generalSettings(generalSettings()).vAppLeaseSettings(vAppLeaseSettings())
+ .vAppTemplateLeaseSettings(vAppTemplateLeaseSettings()).ldapSettings(ldapSettings())
+ .emailSettings(emailSettings()).passwordPolicy(passwordPolicy()).build();
}
-
+
@Test
- public static final OrgSettings updateSettings() {
- return settings().toBuilder()
- .build();
+ public static final OrgSettings editSettings() {
+ return settings().toBuilder().build();
}
-
+
public static final OrgEmailSettings emailSettings() {
- return OrgEmailSettings.builder()
- .type("application/vnd.vmware.admin.organizationEmailSettings+xml")
- .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email"))
- .link(Link.builder()
- .rel("edit")
+ return OrgEmailSettings
+ .builder()
.type("application/vnd.vmware.admin.organizationEmailSettings+xml")
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email"))
- .build())
- .isDefaultSmtpServer(true)
- .isDefaultOrgEmail(true)
- .fromEmailAddress("")
- .defaultSubjectPrefix("")
- .isAlertEmailToAllAdmins(true)
- .smtpServerSettings(SmtpServerSettings.builder()
- .useAuthentication(false)
- .host("")
- .username("")
- .password("")
- .build())
- .build();
+ .link(Link
+ .builder()
+ .rel("edit")
+ .type("application/vnd.vmware.admin.organizationEmailSettings+xml")
+ .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/settings/email"))
+ .build())
+ .isDefaultSmtpServer(true)
+ .isDefaultOrgEmail(true)
+ .fromEmailAddress("")
+ .defaultSubjectPrefix("")
+ .isAlertEmailToAllAdmins(true)
+ .smtpServerSettings(
+ SmtpServerSettings.builder().useAuthentication(false).host("").username("").password("")
+ .build()).build();
}
-
+
@Test
- public static final OrgEmailSettings updateEmailSettings() {
- return emailSettings().toBuilder()
- .isDefaultSmtpServer(false)
- .isDefaultOrgEmail(false)
- .fromEmailAddress("test@test.com")
- .defaultSubjectPrefix("new")
- .isAlertEmailToAllAdmins(false)
- .smtpServerSettings(emailSettings().getSmtpServerSettings().toBuilder()
- .useAuthentication(true)
- .host("new")
- .username("new")
- .build())
- .build();
+ public static final OrgEmailSettings editEmailSettings() {
+ return emailSettings()
+ .toBuilder()
+ .isDefaultSmtpServer(false)
+ .isDefaultOrgEmail(false)
+ .fromEmailAddress("test@test.com")
+ .defaultSubjectPrefix("new")
+ .isAlertEmailToAllAdmins(false)
+ .smtpServerSettings(
+ emailSettings().getSmtpServerSettings().toBuilder().useAuthentication(true).host("new")
+ .username("new").build()).build();
}
-
+
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApiLiveTest.java
index 4f8e999..a391aba 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApiLiveTest.java
@@ -20,12 +20,9 @@
import static com.google.common.base.Objects.equal;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
-import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import org.jclouds.vcloud.director.v1_5.domain.Checks;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.network.SmtpServerSettings;
import org.jclouds.vcloud.director.v1_5.domain.org.AdminOrg;
import org.jclouds.vcloud.director.v1_5.domain.org.OrgEmailSettings;
@@ -39,16 +36,14 @@
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import com.google.common.collect.Iterables;
-
/**
- * Tests live behavior of {@link AdminGroupApi}.
+ * Tests live behavior of {@link AdminOrgApi}.
*
* @author danikov
*/
@Test(groups = { "live", "admin" }, singleThreaded = true, testName = "AdminOrgApiLiveTest")
public class AdminOrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
-
+
public static final String ORG = "admin org";
/*
@@ -60,7 +55,6 @@
/*
* Shared state between dependant tests.
*/
- private Reference orgRef;
private OrgSettings settings;
private OrgEmailSettings emailSettings;
private OrgGeneralSettings generalSettings;
@@ -73,338 +67,278 @@
@BeforeClass(alwaysRun = true)
public void setupRequiredApis() {
orgApi = adminContext.getApi().getOrgApi();
- orgRef = Iterables.getFirst(orgApi.getOrgList().getOrgs(), null).toAdminReference(endpoint);
- assertNotNull(orgRef, String.format(REF_REQ_LIVE, "admin org"));
}
-
+
@Test(description = "GET /admin/org/{id}")
public void testGetAdminOrg() {
- AdminOrg adminOrg = orgApi.getOrg(orgRef.getHref());
-
+ AdminOrg adminOrg = orgApi.get(org.getId());
+
Checks.checkAdminOrg(adminOrg);
}
-
+
@Test(description = "GET /admin/org/{id}/settings/email")
public void testGetEmailSettings() {
- emailSettings = orgApi.getEmailSettings(orgRef.getHref());
-
+ emailSettings = orgApi.getEmailSettings(org.getId());
+
Checks.checkEmailSettings(emailSettings);
}
-
- @Test(description = "PUT /admin/org/{id}/settings/email",
- dependsOnMethods = { "testGetEmailSettings" })
- public void testUpdateEmailSettings() {
+
+ @Test(description = "PUT /admin/org/{id}/settings/email", dependsOnMethods = { "testGetEmailSettings" })
+ public void testEditEmailSettings() {
boolean isDefaultSmtpServer = emailSettings.isDefaultSmtpServer();
boolean isDefaultOrgEmail = emailSettings.isDefaultOrgEmail();
String oldFromEmailAddress = emailSettings.getFromEmailAddress();
String newFromEmailAddress = "test@test.com";
String oldDefaultSubjectPrefix = emailSettings.getDefaultSubjectPrefix();
- String newDefaultSubjectPrefix = "new"+oldDefaultSubjectPrefix;
+ String newDefaultSubjectPrefix = "new" + oldDefaultSubjectPrefix;
boolean isAlertEmailToAllAdmins = emailSettings.isAlertEmailToAllAdmins();
SmtpServerSettings oldSmtpServerSettings = emailSettings.getSmtpServerSettings();
SmtpServerSettings newSmtpServerSettings = oldSmtpServerSettings.toBuilder()
- .useAuthentication(!oldSmtpServerSettings.useAuthentication())
- .host("new"+oldSmtpServerSettings.getHost())
- .username("new"+oldSmtpServerSettings.getUsername())
- .password("new"+oldSmtpServerSettings.getPassword())
- .build();
-
+ .useAuthentication(!oldSmtpServerSettings.useAuthentication())
+ .host("new" + oldSmtpServerSettings.getHost()).username("new" + oldSmtpServerSettings.getUsername())
+ .password("new" + oldSmtpServerSettings.getPassword()).build();
+
try {
- OrgEmailSettings newEmailSettings = emailSettings.toBuilder()
- .isDefaultSmtpServer(!isDefaultSmtpServer)
- .isDefaultOrgEmail(!isDefaultOrgEmail)
- .fromEmailAddress(newFromEmailAddress)
- .defaultSubjectPrefix(newDefaultSubjectPrefix)
- .isAlertEmailToAllAdmins(!isAlertEmailToAllAdmins)
- .smtpServerSettings(newSmtpServerSettings)
- .build();
-
- emailSettings = orgApi.updateEmailSettings(
- orgRef.getHref(), newEmailSettings);
-
- assertTrue(equal(emailSettings.isDefaultSmtpServer(), !isDefaultSmtpServer),
- String.format(OBJ_FIELD_UPDATABLE,
- "emailSettings", "isDefaultSmtpServer"));
- assertTrue(equal(emailSettings.isDefaultOrgEmail(), !isDefaultOrgEmail),
- String.format(OBJ_FIELD_UPDATABLE,
- "emailSettings", "isDefaultOrgEmail"));
- assertTrue(equal(emailSettings.getFromEmailAddress(), newFromEmailAddress),
- String.format(OBJ_FIELD_UPDATABLE,
- "emailSettings", "fromEmailAddress"));
- assertTrue(equal(emailSettings.getDefaultSubjectPrefix(), newDefaultSubjectPrefix),
- String.format(OBJ_FIELD_UPDATABLE,
- "emailSettings", "defaultSubjectPrefix"));
- assertTrue(equal(emailSettings.isAlertEmailToAllAdmins(), !isAlertEmailToAllAdmins),
- String.format(OBJ_FIELD_UPDATABLE,
- "emailSettings", "isAlertEmailToAllAdmins"));
- assertTrue(equal(emailSettings.getSmtpServerSettings(), newSmtpServerSettings),
- String.format(OBJ_FIELD_UPDATABLE,
- "emailSettings", "smtpServerSettings"));
-
- //TODO negative tests?
-
+ OrgEmailSettings newEmailSettings = emailSettings.toBuilder().isDefaultSmtpServer(!isDefaultSmtpServer)
+ .isDefaultOrgEmail(!isDefaultOrgEmail).fromEmailAddress(newFromEmailAddress)
+ .defaultSubjectPrefix(newDefaultSubjectPrefix).isAlertEmailToAllAdmins(!isAlertEmailToAllAdmins)
+ .smtpServerSettings(newSmtpServerSettings).build();
+
+ emailSettings = orgApi.editEmailSettings(org.getId(), newEmailSettings);
+
+ assertTrue(equal(emailSettings.isDefaultSmtpServer(), !isDefaultSmtpServer),
+ String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "isDefaultSmtpServer"));
+ assertTrue(equal(emailSettings.isDefaultOrgEmail(), !isDefaultOrgEmail),
+ String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "isDefaultOrgEmail"));
+ assertTrue(equal(emailSettings.getFromEmailAddress(), newFromEmailAddress),
+ String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "fromEmailAddress"));
+ assertTrue(equal(emailSettings.getDefaultSubjectPrefix(), newDefaultSubjectPrefix),
+ String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "defaultSubjectPrefix"));
+ assertTrue(equal(emailSettings.isAlertEmailToAllAdmins(), !isAlertEmailToAllAdmins),
+ String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "isAlertEmailToAllAdmins"));
+ assertTrue(equal(emailSettings.getSmtpServerSettings(), newSmtpServerSettings),
+ String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "smtpServerSettings"));
+
+ // TODO negative tests?
+
Checks.checkEmailSettings(emailSettings);
} finally {
- emailSettings = emailSettings.toBuilder()
- .isDefaultSmtpServer(isDefaultSmtpServer)
- .isDefaultOrgEmail(isDefaultOrgEmail)
- .fromEmailAddress(oldFromEmailAddress)
- .defaultSubjectPrefix(oldDefaultSubjectPrefix)
- .isAlertEmailToAllAdmins(isAlertEmailToAllAdmins)
- .smtpServerSettings(oldSmtpServerSettings)
- .build();
-
- emailSettings = orgApi.updateEmailSettings(
- orgRef.getHref(), emailSettings);
+ emailSettings = emailSettings.toBuilder().isDefaultSmtpServer(isDefaultSmtpServer)
+ .isDefaultOrgEmail(isDefaultOrgEmail).fromEmailAddress(oldFromEmailAddress)
+ .defaultSubjectPrefix(oldDefaultSubjectPrefix).isAlertEmailToAllAdmins(isAlertEmailToAllAdmins)
+ .smtpServerSettings(oldSmtpServerSettings).build();
+
+ emailSettings = orgApi.editEmailSettings(org.getId(), emailSettings);
}
}
-
+
@Test(description = "GET /admin/org/{id}/settings/general")
public void testGetGeneralSettings() {
- generalSettings = orgApi.getGeneralSettings(orgRef.getHref());
-
+ generalSettings = orgApi.getGeneralSettings(org.getId());
+
Checks.checkGeneralSettings(generalSettings);
}
-
- @Test(description = "PUT /admin/org/{id}/settings/general",
- dependsOnMethods = { "testGetGeneralSettings" } )
- public void testUpdateGeneralSettings() {
- // FIXME: canPublishCatalogs does not update
- //boolean canPublishCatalogs = generalSettings.canPublishCatalogs();
+
+ @Test(description = "PUT /admin/org/{id}/settings/general", dependsOnMethods = { "testGetGeneralSettings" })
+ public void testEditGeneralSettings() {
+ // FIXME: canPublishCatalogs does not edit
+ // boolean canPublishCatalogs = generalSettings.canPublishCatalogs();
Integer deployedVMQuota = generalSettings.getDeployedVMQuota();
Integer storedVmQuota = generalSettings.getStoredVmQuota();
boolean useServerBootSequence = generalSettings.useServerBootSequence();
Integer delayAfterPowerOnSeconds = generalSettings.getDelayAfterPowerOnSeconds();
-
+
try {
- OrgGeneralSettings newGeneralSettings = generalSettings.toBuilder()
- //.canPublishCatalogs(!canPublishCatalogs)
- .deployedVMQuota(deployedVMQuota+1)
- .storedVmQuota(storedVmQuota+1)
- .useServerBootSequence(!useServerBootSequence)
- .delayAfterPowerOnSeconds(delayAfterPowerOnSeconds+1)
- .build();
-
- generalSettings = orgApi.updateGeneralSettings(
- orgRef.getHref(), newGeneralSettings);
-
-// assertTrue(equal(generalSettings.canPublishCatalogs(), !canPublishCatalogs),
-// String.format(OBJ_FIELD_UPDATABLE,
-// "generalSettings", "canPublishCatalogs"));
- assertTrue(equal(generalSettings.getDeployedVMQuota(), deployedVMQuota+1),
- String.format(OBJ_FIELD_UPDATABLE,
- "generalSettings", "deployedVMQuota"));
- assertTrue(equal(generalSettings.getStoredVmQuota(), storedVmQuota+1),
- String.format(OBJ_FIELD_UPDATABLE,
- "generalSettings", "storedVmQuota"));
- assertTrue(equal(generalSettings.useServerBootSequence(), !useServerBootSequence),
- String.format(OBJ_FIELD_UPDATABLE,
- "generalSettings", "useServerBootSequence"));
- assertTrue(equal(generalSettings.getDelayAfterPowerOnSeconds(), delayAfterPowerOnSeconds+1),
- String.format(OBJ_FIELD_UPDATABLE,
- "generalSettings", "delayAfterPowerOnSeconds"));
-
- //TODO negative tests?
-
+ OrgGeneralSettings newGeneralSettings = generalSettings
+ .toBuilder()
+ // .canPublishCatalogs(!canPublishCatalogs)
+ .deployedVMQuota(deployedVMQuota + 1).storedVmQuota(storedVmQuota + 1)
+ .useServerBootSequence(!useServerBootSequence).delayAfterPowerOnSeconds(delayAfterPowerOnSeconds + 1)
+ .build();
+
+ generalSettings = orgApi.editGeneralSettings(org.getId(), newGeneralSettings);
+
+ // assertTrue(equal(generalSettings.canPublishCatalogs(), !canPublishCatalogs),
+ // String.format(OBJ_FIELD_UPDATABLE,
+ // "generalSettings", "canPublishCatalogs"));
+ assertTrue(equal(generalSettings.getDeployedVMQuota(), deployedVMQuota + 1),
+ String.format(OBJ_FIELD_UPDATABLE, "generalSettings", "deployedVMQuota"));
+ assertTrue(equal(generalSettings.getStoredVmQuota(), storedVmQuota + 1),
+ String.format(OBJ_FIELD_UPDATABLE, "generalSettings", "storedVmQuota"));
+ assertTrue(equal(generalSettings.useServerBootSequence(), !useServerBootSequence),
+ String.format(OBJ_FIELD_UPDATABLE, "generalSettings", "useServerBootSequence"));
+ assertTrue(equal(generalSettings.getDelayAfterPowerOnSeconds(), delayAfterPowerOnSeconds + 1),
+ String.format(OBJ_FIELD_UPDATABLE, "generalSettings", "delayAfterPowerOnSeconds"));
+
+ // TODO negative tests?
+
Checks.checkGeneralSettings(generalSettings);
} finally {
- generalSettings = generalSettings.toBuilder()
-// .canPublishCatalogs(canPublishCatalogs)
- .deployedVMQuota(deployedVMQuota)
- .storedVmQuota(storedVmQuota)
- .useServerBootSequence(useServerBootSequence)
- .delayAfterPowerOnSeconds(delayAfterPowerOnSeconds)
- .build();
-
- generalSettings = orgApi.updateGeneralSettings(
- orgRef.getHref(), generalSettings);
+ generalSettings = generalSettings
+ .toBuilder()
+ // .canPublishCatalogs(canPublishCatalogs)
+ .deployedVMQuota(deployedVMQuota).storedVmQuota(storedVmQuota)
+ .useServerBootSequence(useServerBootSequence).delayAfterPowerOnSeconds(delayAfterPowerOnSeconds)
+ .build();
+
+ generalSettings = orgApi.editGeneralSettings(org.getId(), generalSettings);
}
}
-
+
@Test(description = "GET /admin/org/{id}/settings/ldap")
public void testGetLdapSettings() {
- ldapSettings = orgApi.getLdapSettings(orgRef.getHref());
-
+ ldapSettings = orgApi.getLdapSettings(org.getId());
+
Checks.checkLdapSettings(ldapSettings);
}
-
+
@Test(description = "GET /admin/org/{id}/settings/passwordPolicy")
public void testGetPasswordPolicy() {
- passwordPolicy = orgApi.getPasswordPolicy(orgRef.getHref());
-
+ passwordPolicy = orgApi.getPasswordPolicy(org.getId());
+
Checks.checkPasswordPolicySettings(passwordPolicy);
}
-
- @Test(description = "PUT /admin/org/{id}/settings/passwordPolicy",
- dependsOnMethods = { "testGetPasswordPolicy" })
- public void testUpdatePasswordPolicy() {
+
+ @Test(description = "PUT /admin/org/{id}/settings/passwordPolicy", dependsOnMethods = { "testGetPasswordPolicy" })
+ public void testEditPasswordPolicy() {
boolean accountLockoutEnabled = passwordPolicy.isAccountLockoutEnabled();
Integer invalidLoginsBeforeLockout = passwordPolicy.getInvalidLoginsBeforeLockout();
Integer accountLockoutIntervalMinutes = passwordPolicy.getAccountLockoutIntervalMinutes();
-
+
try {
OrgPasswordPolicySettings newPasswordPolicy = passwordPolicy.toBuilder()
- .accountLockoutEnabled(!accountLockoutEnabled)
- .invalidLoginsBeforeLockout(invalidLoginsBeforeLockout+1)
- .accountLockoutIntervalMinutes(accountLockoutIntervalMinutes+1)
- .build();
-
- passwordPolicy = orgApi.updatePasswordPolicy(
- orgRef.getHref(), newPasswordPolicy);
-
- assertTrue(equal(passwordPolicy.isAccountLockoutEnabled(), !accountLockoutEnabled),
- String.format(OBJ_FIELD_UPDATABLE,
- "PasswordPolicySettings", "deleteOnStorageLeaseExpiration"));
- assertTrue(equal(passwordPolicy.getInvalidLoginsBeforeLockout(), invalidLoginsBeforeLockout+1),
- String.format(OBJ_FIELD_UPDATABLE,
- "PasswordPolicySettings", "storageLeaseSeconds"));
- assertTrue(equal(passwordPolicy.getAccountLockoutIntervalMinutes(), accountLockoutIntervalMinutes+1),
- String.format(OBJ_FIELD_UPDATABLE,
- "PasswordPolicySettings", "deploymentLeaseSeconds"));
-
- //TODO negative tests?
-
+ .accountLockoutEnabled(!accountLockoutEnabled)
+ .invalidLoginsBeforeLockout(invalidLoginsBeforeLockout + 1)
+ .accountLockoutIntervalMinutes(accountLockoutIntervalMinutes + 1).build();
+
+ passwordPolicy = orgApi.editPasswordPolicy(org.getId(), newPasswordPolicy);
+
+ assertTrue(equal(passwordPolicy.isAccountLockoutEnabled(), !accountLockoutEnabled),
+ String.format(OBJ_FIELD_UPDATABLE, "PasswordPolicySettings", "deleteOnStorageLeaseExpiration"));
+ assertTrue(equal(passwordPolicy.getInvalidLoginsBeforeLockout(), invalidLoginsBeforeLockout + 1),
+ String.format(OBJ_FIELD_UPDATABLE, "PasswordPolicySettings", "storageLeaseSeconds"));
+ assertTrue(equal(passwordPolicy.getAccountLockoutIntervalMinutes(), accountLockoutIntervalMinutes + 1),
+ String.format(OBJ_FIELD_UPDATABLE, "PasswordPolicySettings", "deploymentLeaseSeconds"));
+
+ // TODO negative tests?
+
Checks.checkPasswordPolicySettings(passwordPolicy);
} finally {
- passwordPolicy = passwordPolicy.toBuilder()
- .accountLockoutEnabled(accountLockoutEnabled)
- .invalidLoginsBeforeLockout(invalidLoginsBeforeLockout)
- .accountLockoutIntervalMinutes(accountLockoutIntervalMinutes)
- .build();
-
- passwordPolicy = orgApi.updatePasswordPolicy(
- orgRef.getHref(), passwordPolicy);
+ passwordPolicy = passwordPolicy.toBuilder().accountLockoutEnabled(accountLockoutEnabled)
+ .invalidLoginsBeforeLockout(invalidLoginsBeforeLockout)
+ .accountLockoutIntervalMinutes(accountLockoutIntervalMinutes).build();
+
+ passwordPolicy = orgApi.editPasswordPolicy(org.getId(), passwordPolicy);
}
}
-
+
@Test(description = "GET /admin/org/{id}/settings/vAppLeaseSettings")
public void testGetVAppLeaseSettings() {
- vAppLeaseSettings = orgApi.getVAppLeaseSettings(orgRef.getHref());
-
+ vAppLeaseSettings = orgApi.getVAppLeaseSettings(org.getId());
+
Checks.checkVAppLeaseSettings(vAppLeaseSettings);
}
-
- @Test(description = "PUT /admin/org/{id}/settings/vAppLeaseSettings",
- dependsOnMethods = { "testGetVAppLeaseSettings" } ) // FIXME: fails with 403 forbidden
- public void testUpdateVAppLeaseSettings() {
+
+ @Test(description = "PUT /admin/org/{id}/settings/vAppLeaseSettings", dependsOnMethods = { "testGetVAppLeaseSettings" })
+ // FIXME: fails with 403 forbidden
+ public void testEditVAppLeaseSettings() {
boolean deleteOnStorageLeaseExpiration = vAppLeaseSettings.deleteOnStorageLeaseExpiration();
Integer storageLeaseSeconds = vAppLeaseSettings.getStorageLeaseSeconds();
Integer deploymentLeaseSeconds = vAppLeaseSettings.getDeploymentLeaseSeconds();
-
+
try {
OrgLeaseSettings newVAppLeaseSettings = vAppLeaseSettings.toBuilder()
- .deleteOnStorageLeaseExpiration(!deleteOnStorageLeaseExpiration)
- .storageLeaseSeconds(storageLeaseSeconds+1)
- .deploymentLeaseSeconds(deploymentLeaseSeconds+1)
- .build();
-
- vAppLeaseSettings = orgApi.updateVAppLeaseSettings(
- orgRef.getHref(), newVAppLeaseSettings);
-
- assertTrue(equal(vAppLeaseSettings.deleteOnStorageLeaseExpiration(), !deleteOnStorageLeaseExpiration),
- String.format(OBJ_FIELD_UPDATABLE,
- "vAppLeaseSettings", "deleteOnStorageLeaseExpiration"));
- assertTrue(equal(vAppLeaseSettings.getStorageLeaseSeconds(), storageLeaseSeconds+1),
- String.format(OBJ_FIELD_UPDATABLE,
- "vAppLeaseSettings", "storageLeaseSeconds"));
- assertTrue(equal(vAppLeaseSettings.getDeploymentLeaseSeconds(), deploymentLeaseSeconds+1),
- String.format(OBJ_FIELD_UPDATABLE,
- "vAppLeaseSettings", "deploymentLeaseSeconds"));
-
- //TODO negative tests?
-
+ .deleteOnStorageLeaseExpiration(!deleteOnStorageLeaseExpiration)
+ .storageLeaseSeconds(storageLeaseSeconds + 1).deploymentLeaseSeconds(deploymentLeaseSeconds + 1)
+ .build();
+
+ vAppLeaseSettings = orgApi.editVAppLeaseSettings(org.getId(), newVAppLeaseSettings);
+
+ assertTrue(equal(vAppLeaseSettings.deleteOnStorageLeaseExpiration(), !deleteOnStorageLeaseExpiration),
+ String.format(OBJ_FIELD_UPDATABLE, "vAppLeaseSettings", "deleteOnStorageLeaseExpiration"));
+ assertTrue(equal(vAppLeaseSettings.getStorageLeaseSeconds(), storageLeaseSeconds + 1),
+ String.format(OBJ_FIELD_UPDATABLE, "vAppLeaseSettings", "storageLeaseSeconds"));
+ assertTrue(equal(vAppLeaseSettings.getDeploymentLeaseSeconds(), deploymentLeaseSeconds + 1),
+ String.format(OBJ_FIELD_UPDATABLE, "vAppLeaseSettings", "deploymentLeaseSeconds"));
+
+ // TODO negative tests?
+
Checks.checkVAppLeaseSettings(vAppLeaseSettings);
} finally {
vAppLeaseSettings = vAppLeaseSettings.toBuilder()
- .deleteOnStorageLeaseExpiration(deleteOnStorageLeaseExpiration)
- .storageLeaseSeconds(storageLeaseSeconds)
- .deploymentLeaseSeconds(deploymentLeaseSeconds)
- .build();
-
- vAppLeaseSettings = orgApi.updateVAppLeaseSettings(
- orgRef.getHref(), vAppLeaseSettings);
+ .deleteOnStorageLeaseExpiration(deleteOnStorageLeaseExpiration)
+ .storageLeaseSeconds(storageLeaseSeconds).deploymentLeaseSeconds(deploymentLeaseSeconds).build();
+
+ vAppLeaseSettings = orgApi.editVAppLeaseSettings(org.getId(), vAppLeaseSettings);
}
}
-
+
@Test(description = "GET /admin/org/{id}/settings/vAppTemplateLeaseSettings")
public void testGetVAppTemplateLeaseSettings() {
- vAppTemplateLeaseSettings = orgApi.getVAppTemplateLeaseSettings(orgRef.getHref());
-
+ vAppTemplateLeaseSettings = orgApi.getVAppTemplateLeaseSettings(org.getId());
+
Checks.checkVAppTemplateLeaseSettings(vAppTemplateLeaseSettings);
}
-
- @Test(description = "PUT /admin/org/{id}/settings/vAppTemplateLeaseSettings",
- dependsOnMethods = { "testGetVAppTemplateLeaseSettings" }) // FIXME: fails with 403 forbidden
- public void testUpdateVAppTemplateLeaseSettings() {
+
+ @Test(description = "PUT /admin/org/{id}/settings/vAppTemplateLeaseSettings", dependsOnMethods = { "testGetVAppTemplateLeaseSettings" })
+ // FIXME: fails with 403 forbidden
+ public void testEditVAppTemplateLeaseSettings() {
boolean deleteOnStorageLeaseExpiration = vAppTemplateLeaseSettings.deleteOnStorageLeaseExpiration();
Integer storageLeaseSeconds = vAppTemplateLeaseSettings.getStorageLeaseSeconds();
-
+
try {
OrgVAppTemplateLeaseSettings newVAppTemplateLeaseSettings = vAppTemplateLeaseSettings.toBuilder()
- .deleteOnStorageLeaseExpiration(!deleteOnStorageLeaseExpiration)
- .storageLeaseSeconds(storageLeaseSeconds+1)
- .build();
-
- vAppTemplateLeaseSettings = orgApi.updateVAppTemplateLeaseSettings(
- orgRef.getHref(), newVAppTemplateLeaseSettings);
-
- assertTrue(equal(vAppTemplateLeaseSettings.deleteOnStorageLeaseExpiration(), !deleteOnStorageLeaseExpiration),
- String.format(OBJ_FIELD_UPDATABLE,
- "vAppTemplateLeaseSettings", "deleteOnStorageLeaseExpiration"));
- assertTrue(equal(vAppTemplateLeaseSettings.getStorageLeaseSeconds(), storageLeaseSeconds+1),
- String.format(OBJ_FIELD_UPDATABLE,
- "vAppTemplateLeaseSettings", "storageLeaseSeconds"));
-
- //TODO negative tests?
-
+ .deleteOnStorageLeaseExpiration(!deleteOnStorageLeaseExpiration)
+ .storageLeaseSeconds(storageLeaseSeconds + 1).build();
+
+ vAppTemplateLeaseSettings = orgApi.editVAppTemplateLeaseSettings(org.getId(), newVAppTemplateLeaseSettings);
+
+ assertTrue(equal(vAppTemplateLeaseSettings.deleteOnStorageLeaseExpiration(), !deleteOnStorageLeaseExpiration),
+ String.format(OBJ_FIELD_UPDATABLE, "vAppTemplateLeaseSettings", "deleteOnStorageLeaseExpiration"));
+ assertTrue(equal(vAppTemplateLeaseSettings.getStorageLeaseSeconds(), storageLeaseSeconds + 1),
+ String.format(OBJ_FIELD_UPDATABLE, "vAppTemplateLeaseSettings", "storageLeaseSeconds"));
+
+ // TODO negative tests?
+
Checks.checkVAppTemplateLeaseSettings(vAppTemplateLeaseSettings);
} finally {
vAppTemplateLeaseSettings = vAppTemplateLeaseSettings.toBuilder()
- .deleteOnStorageLeaseExpiration(deleteOnStorageLeaseExpiration)
- .storageLeaseSeconds(storageLeaseSeconds)
- .build();
-
- vAppTemplateLeaseSettings = orgApi.updateVAppTemplateLeaseSettings(
- orgRef.getHref(), vAppTemplateLeaseSettings);
+ .deleteOnStorageLeaseExpiration(deleteOnStorageLeaseExpiration)
+ .storageLeaseSeconds(storageLeaseSeconds).build();
+
+ vAppTemplateLeaseSettings = orgApi.editVAppTemplateLeaseSettings(org.getId(), vAppTemplateLeaseSettings);
}
}
-
+
@Test(description = "GET /admin/org/{id}/settings")
public void testGetSettings() {
- settings = orgApi.getSettings(orgRef.getHref());
-
+ settings = orgApi.getSettings(org.getId());
+
Checks.checkOrgSettings(settings);
}
-
- @Test(description = "PUT /admin/org/{id}/settings",
- dependsOnMethods = { "testGetEmailSettings" } )
- public void testUpdateSettings() throws Exception {
- String newFromEmailAddress = "test"+random.nextInt(Integer.MAX_VALUE)+"@test.com";
+
+ @Test(description = "PUT /admin/org/{id}/settings", dependsOnMethods = { "testGetEmailSettings" })
+ public void testEditSettings() throws Exception {
+ String newFromEmailAddress = "test" + random.nextInt(Integer.MAX_VALUE) + "@test.com";
Exception exception = null;
-
+
try {
OrgSettings newSettings = OrgSettings.builder()
- .emailSettings(emailSettings.toBuilder().fromEmailAddress(newFromEmailAddress).build())
- .build();
-
- OrgSettings modified = orgApi.updateSettings(
- orgRef.getHref(), newSettings);
-
+ .emailSettings(emailSettings.toBuilder().fromEmailAddress(newFromEmailAddress).build()).build();
+
+ OrgSettings modified = orgApi.editSettings(org.getId(), newSettings);
+
Checks.checkOrgSettings(settings);
- assertTrue(equal(modified.getEmailSettings().getFromEmailAddress(), newFromEmailAddress),
- String.format(OBJ_FIELD_UPDATABLE,
- "orgSettings", "emailSettings"));
-
+ assertTrue(equal(modified.getEmailSettings().getFromEmailAddress(), newFromEmailAddress),
+ String.format(OBJ_FIELD_UPDATABLE, "orgSettings", "emailSettings"));
+
} catch (Exception e) {
exception = e;
} finally {
try {
- OrgSettings restorableSettings = OrgSettings.builder()
- .emailSettings(emailSettings)
- .build();
-
- settings = orgApi.updateSettings(
- orgRef.getHref(), restorableSettings);
+ OrgSettings restorableSettings = OrgSettings.builder().emailSettings(emailSettings).build();
+
+ settings = orgApi.editSettings(org.getId(), restorableSettings);
} catch (Exception e) {
if (exception != null) {
logger.warn(e, "Error resetting settings; rethrowing original test exception...");
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApiExpectTest.java
index dc198f7..e0f3750 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApiExpectTest.java
@@ -56,7 +56,7 @@
AdminVdc expected = adminVdc();
- assertEquals(api.getVdcApi().getVdc(vdcRef.getHref()), expected);
+ assertEquals(api.getVdcApi().get(vdcRef.getHref()), expected);
}
public static final AdminVdc adminVdc() {
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApiLiveTest.java
index 5c230c6..8e5eeb0 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApiLiveTest.java
@@ -19,13 +19,10 @@
package org.jclouds.vcloud.director.v1_5.features.admin;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.fail;
-import java.net.URI;
-
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
import org.jclouds.vcloud.director.v1_5.domain.Checks;
@@ -47,34 +44,30 @@
*/
@Test(groups = { "live", "admin" }, singleThreaded = true, testName = "AdminVdcApiLiveTest")
public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
-
+
public static final String VDC = "admin vdc";
-
+
/*
* Convenience reference to API api.
*/
protected AdminVdcApi vdcApi;
protected MetadataApi.Writeable metadataApi;
-
- protected URI adminVdcUri;
private String metadataKey;
private String metadataValue;
-
+
@Override
@BeforeClass(alwaysRun = true)
public void setupRequiredApis() {
vdcApi = adminContext.getApi().getVdcApi();
- metadataApi = vdcApi.getMetadataApi();
- assertNotNull(vdcURI, String.format(REF_REQ_LIVE, VDC));
- adminVdcUri = toAdminUri(vdcURI);
+ metadataApi = vdcApi.getMetadataApi(vdcUrn);
}
@AfterClass(alwaysRun = true)
public void cleanUp() throws Exception {
if (metadataKey != null) {
try {
- Task task = metadataApi.deleteMetadataEntry(adminVdcUri, metadataKey);
+ Task task = metadataApi.removeEntry(metadataKey);
taskDoneEventually(task);
} catch (VCloudDirectorException e) {
logger.warn(e, "Error deleting metadata-value (perhaps it doesn't exist?); continuing...");
@@ -84,31 +77,29 @@
@Test(description = "GET /admin/vdc/{id}")
public void testGetVdc() {
- AdminVdc vdc = vdcApi.getVdc(adminVdcUri);
+ AdminVdc vdc = vdcApi.get(vdcUrn);
assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
-
+
// parent type
Checks.checkAdminVdc(vdc);
}
-
+
// TODO insufficient permissions to test
- @Test(description = "PUT /admin/vdc/{id}", enabled=false)
+ @Test(description = "PUT /admin/vdc/{id}", enabled = false)
public void testEditVdc() throws Exception {
- String origName = vdcApi.getVdc(adminVdcUri).getName();
+ String origName = lazyGetVdc().getName();
String newName = name("a");
Exception exception = null;
-
- AdminVdc vdc = AdminVdc.builder()
- .name(newName)
- .build();
-
+
+ AdminVdc vdc = AdminVdc.builder().name(newName).build();
+
try {
- Task task = vdcApi.editVdc(adminVdcUri, vdc);
+ Task task = vdcApi.edit(vdcUrn, vdc);
assertTaskSucceeds(task);
-
- AdminVdc modified = vdcApi.getVdc(adminVdcUri);
+
+ AdminVdc modified = vdcApi.get(vdcUrn);
assertEquals(modified.getName(), newName);
-
+
// parent type
Checks.checkAdminVdc(vdc);
} catch (Exception e) {
@@ -116,7 +107,7 @@
} finally {
try {
AdminVdc restorableVdc = AdminVdc.builder().name(origName).build();
- Task task = vdcApi.editVdc(adminVdcUri, restorableVdc);
+ Task task = vdcApi.edit(vdcUrn, restorableVdc);
assertTaskSucceeds(task);
} catch (Exception e) {
if (exception != null) {
@@ -128,34 +119,35 @@
}
}
}
-
+
// TODO insufficient permissions to test
- @Test(description = "DELETE /admin/vdc/{id}", enabled=false)
- public void testDeleteVdc() throws Exception {
- // TODO Need to have a VDC that we're happy to delete!
- Task task = vdcApi.deleteVdc(adminVdcUri);
+ @Test(description = "DELETE /admin/vdc/{id}", enabled = false)
+ public void testRemoveVdc() throws Exception {
+ // TODO Need to have a VDC that we're happy to remove!
+ Task task = vdcApi.remove(vdcUrn);
assertTaskSucceeds(task);
-
+
try {
- vdcApi.getVdc(adminVdcUri);
+ vdcApi.get(vdcUrn);
} catch (VCloudDirectorException e) {
- // success; unreachable because it has been deleted
+ // success; unreachable because it has been removed
+ // TODO: ^^ wrong. this should return null
}
}
-
+
// TODO insufficient permissions to test
- @Test(description = "DISABLE/ENABLE /admin/vdc/{id}", enabled=false)
+ @Test(description = "DISABLE/ENABLE /admin/vdc/{id}", enabled = false)
public void testDisableAndEnableVdc() throws Exception {
- // TODO Need to have a VDC that we're happy to delete!
+ // TODO Need to have a VDC that we're happy to remove!
Exception exception = null;
-
+
try {
- vdcApi.disableVdc(adminVdcUri);
+ vdcApi.disable(vdcUrn);
} catch (Exception e) {
exception = e;
} finally {
try {
- vdcApi.enableVdc(adminVdcUri);
+ vdcApi.enable(vdcUrn);
} catch (Exception e) {
if (exception != null) {
logger.warn(e, "Error resetting adminVdc.name; rethrowing original test exception...");
@@ -166,63 +158,62 @@
}
}
}
-
+
@Test(description = "GET /admin/vdc/{id}/metadata")
public void testGetMetadata() throws Exception {
- Metadata metadata = metadataApi.getMetadata(adminVdcUri);
+ Metadata metadata = metadataApi.get();
Checks.checkMetadata(metadata);
}
-
+
// TODO insufficient permissions to test
- @Test(description = "PUT /admin/vdc/{id}/metadata", enabled=false)
+ @Test(description = "PUT /admin/vdc/{id}/metadata", enabled = false)
public void testSetMetadata() throws Exception {
metadataKey = name("key-");
metadataValue = name("value-");
- Metadata metadata = Metadata.builder()
- .entry(MetadataEntry.builder().entry(metadataKey, metadataValue).build())
+ Metadata metadata = Metadata.builder().entry(MetadataEntry.builder().entry(metadataKey, metadataValue).build())
.build();
-
- Task task = metadataApi.mergeMetadata(adminVdcUri, metadata);
+
+ Task task = metadataApi.merge(metadata);
assertTaskSucceeds(task);
-
- MetadataValue modified = metadataApi.getMetadataValue(adminVdcUri, metadataKey);
+
+ MetadataValue modified = metadataApi.getValue(metadataKey);
Checks.checkMetadataValueFor("AdminVdc", modified, metadataValue);
Checks.checkMetadata(metadata);
}
-
+
// TODO insufficient permissions to test
- @Test(description = "GET /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadata" }, enabled=false)
+ @Test(description = "GET /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadata" }, enabled = false)
public void testGetMetadataValue() throws Exception {
- MetadataValue retrievedMetadataValue = metadataApi.getMetadataValue(adminVdcUri, metadataKey);
-
+ MetadataValue retrievedMetadataValue = metadataApi.getValue(metadataKey);
+
Checks.checkMetadataValueFor("AdminVdc", retrievedMetadataValue, metadataValue);
}
-
+
// TODO insufficient permissions to test
- @Test(description = "PUT /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" }, enabled=false )
+ @Test(description = "PUT /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" }, enabled = false)
public void testSetMetadataValue() throws Exception {
metadataValue = name("value-");
MetadataValue newV = MetadataValue.builder().value(metadataValue).build();
-
- Task task = metadataApi.setMetadata(adminVdcUri, metadataKey, newV);
+
+ Task task = metadataApi.putEntry(metadataKey, newV);
assertTaskSucceeds(task);
-
- MetadataValue retrievedMetadataValue = metadataApi.getMetadataValue(adminVdcUri, metadataKey);
+
+ MetadataValue retrievedMetadataValue = metadataApi.getValue(metadataKey);
Checks.checkMetadataValueFor("AdminVdc", retrievedMetadataValue, metadataValue);
}
-
+
// TODO insufficient permissions to test
- @Test(description = "DELETE /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" }, enabled=false )
- public void testDeleteMetadataValue() throws Exception {
- // TODO Remove dependency on other tests; make cleanUp delete a list of metadata entries?
-
- Task task = metadataApi.deleteMetadataEntry(adminVdcUri, metadataKey);
+ @Test(description = "DELETE /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" }, enabled = false)
+ public void testRemoveMetadataValue() throws Exception {
+ // TODO Remove dependency on other tests; make cleanUp remove a list of metadata entries?
+
+ Task task = metadataApi.removeEntry(metadataKey);
assertTaskSucceeds(task);
try {
- metadataApi.getMetadataValue(adminVdcUri, metadataKey);
- fail("Retrieval of metadata value "+metadataKey+" should have fail after deletion");
+ metadataApi.getValue(metadataKey);
+ fail("Retrieval of metadata value " + metadataKey + " should have fail after deletion");
} catch (VCloudDirectorException e) {
// success; should not be accessible
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApiExpectTest.java
index 90d0337..5601ad5 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApiExpectTest.java
@@ -56,7 +56,7 @@
Group expected = group();
- assertEquals(api.getGroupApi().getGroup(groupRef.getHref()), expected);
+ assertEquals(api.getGroupApi().get(groupRef.getHref()), expected);
}
public static final Group group() {
@@ -66,28 +66,28 @@
}
@Test(enabled = false)
- public void testUpdateGroup() {
+ public void testEditGroup() {
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", "/admin/group/???")
- .xmlFilePayload("/group/updateGroupSource.xml", VCloudDirectorMediaType.GROUP)
+ .xmlFilePayload("/group/editGroupSource.xml", VCloudDirectorMediaType.GROUP)
.acceptMedia(VCloudDirectorMediaType.GROUP)
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
- .xmlFilePayload("/group/updateGroup.xml", VCloudDirectorMediaType.GROUP)
+ .xmlFilePayload("/group/editGroup.xml", VCloudDirectorMediaType.GROUP)
.httpResponseBuilder().build());
- Group expected = updateGroup();
+ Group expected = editGroup();
- assertEquals(api.getGroupApi().updateGroup(groupRef.getHref(), expected), expected);
+ assertEquals(api.getGroupApi().edit(groupRef.getHref(), expected), expected);
}
- public static Group updateGroup() {
- return null; // TODO chain onto group() then toBuilder() and modify?
+ public static Group editGroup() {
+ return null; // TODO chain onto group() then toBuilder() and edit?
}
@Test
- public void testDeleteGroup() {
+ public void testRemoveGroup() {
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("DELETE", "/admin/group/???")
@@ -96,6 +96,6 @@
new VcloudHttpResponsePrimer()
.httpResponseBuilder().statusCode(204).build());
- api.getCatalogApi().deleteCatalog(groupRef.getHref());
+ api.getGroupApi().remove(groupRef.getHref());
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApiLiveTest.java
index cbf7d47..5226c29 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApiLiveTest.java
@@ -50,7 +50,6 @@
/*
* Shared state between dependant tests.
*/
- private Reference groupRef;
private Group group;
private OrgLdapSettings oldLdapSettings, newLdapSettings;
@@ -61,15 +60,15 @@
Reference orgRef = null;
// TODO: requisite LDAP settings
-// oldLdapSettings = adminContext.getApi().getAdminOrgApi().getLdapSettings(orgRef.getHref());
+// oldLdapSettings = adminContext.getApi().getAdminOrgApi().getLdapSettings(orgRef.getId());
// OrgLdapSettings newLdapSettings = oldLdapSettings.toBuilder()
// .ldapMode(OrgLdapSettings.LdapMode.SYSTEM)
// .build();
-// context.getApi().getAdminOrgApi().updateLdapSettings(newLdapSettings);
+// context.getApi().getAdminOrgApi().editLdapSettings(newLdapSettings);
}
@Test(description = "POST /admin/org/{id}/groups")
- public void testCreateGroup() {
+ public void testAddGroup() {
fail("LDAP not configured, group api isn't currently testable.");
// group = groupApi.createGroup(orgUri, Group.builder()
// .build();
@@ -77,15 +76,15 @@
Checks.checkGroup(group);
}
- @Test(description = "GET /admin/group/{id}", dependsOnMethods = { "testCreateGroup" })
+ @Test(description = "GET /admin/group/{id}", dependsOnMethods = { "testAddGroup" })
public void testGetGroup() {
- group = groupApi.getGroup(groupRef.getHref());
+ group = groupApi.get(group.getId());
Checks.checkGroup(group);
}
@Test(description = "PUT /admin/group/{id}", dependsOnMethods = { "testGetGroup" } )
- public void testUpdateGroup() {
+ public void testEditGroup() {
String oldName = group.getName();
String newName = "new "+oldName;
String oldDescription = group.getDescription();
@@ -98,7 +97,7 @@
.description(newDescription)
.build();
- group = groupApi.updateGroup(group.getHref(), group);
+ group = groupApi.edit(group.getId(), group);
assertTrue(equal(group.getName(), newName), String.format(OBJ_FIELD_UPDATABLE, GROUP, "name"));
assertTrue(equal(group.getDescription(), newDescription),
@@ -113,13 +112,13 @@
.description(oldDescription)
.build();
- group = groupApi.updateGroup(group.getHref(), group);
+ group = groupApi.edit(group.getId(), group);
}
}
- @Test(description = "DELETE /admin/group/{id}", dependsOnMethods = { "testUpdateGroup" } )
- public void testDeleteGroup() {
- groupApi.deleteGroup(groupRef.getHref());
+ @Test(description = "DELETE /admin/group/{id}", dependsOnMethods = { "testEditGroup" } )
+ public void testRemoveGroup() {
+ groupApi.remove(group.getId());
// TODO stronger assertion of error expected
// Error expected = Error.builder()
@@ -129,7 +128,7 @@
// .build();
try {
- group = groupApi.getGroup(groupRef.getHref());
+ group = groupApi.get(group.getId());
fail("Should give HTTP 403 error");
} catch (VCloudDirectorException vde) {
// success
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApiExpectTest.java
index 1eacc74..4d05350 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApiExpectTest.java
@@ -18,11 +18,18 @@
*/
package org.jclouds.vcloud.director.v1_5.features.admin;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_ORG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ERROR;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.USER;
import static org.testng.Assert.assertEquals;
import java.net.URI;
import java.util.Collections;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
import org.jclouds.rest.ResourceNotFoundException;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
@@ -32,41 +39,200 @@
import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorAdminApiExpectTest;
import org.testng.annotations.Test;
+import com.google.common.net.HttpHeaders;
+
/**
* Test the {@link UserApi} by observing its side effects.
*
- * @author danikov
+ * @author danikov, Adrian Cole
*/
@Test(groups = { "unit", "admin" }, singleThreaded = true, testName = "UserApiExpectTest")
public class UserApiExpectTest extends VCloudDirectorAdminApiExpectTest {
- private Reference orgRef = Reference.builder()
- .href(URI.create(endpoint + "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
- .build();
+ private static String user = "7212e451-76e1-4631-b2de-ba1dfd8080e4";
+ private static String userUrn = "urn:vcloud:user:" + user;
+ private static URI userHref = URI.create(endpoint + "/user/" + user);
- private Reference userRef = Reference.builder()
- .href(URI.create(endpoint + "/admin/user/b37223f3-8792-477a-820f-334998f61cd6"))
- .build();
+ private static String org = "7212e451-76e1-4631-b2de-asdasdasd";
+ private static String orgUrn = "urn:vcloud:org:" + org;
+ private static URI orgHref = URI.create(endpoint + "/org/" + org);
+ private static URI orgAdminHref = URI.create(endpoint + "/admin/org/" + org);
+
+ private HttpRequest add = HttpRequest.builder()
+ .method("POST")
+ .endpoint(orgAdminHref + "/users")
+ .addHeader("Accept", USER)
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .payload(payloadFromResourceWithContentType("/user/addUserSource.xml", VCloudDirectorMediaType.USER))
+ .build();
+
+ private HttpResponse addResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/user/addUser.xml", USER + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testAddUserHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, add, addResponse);
+ assertEquals(api.getUserApi().addUserToOrg(addUserSource(), orgAdminHref), addUser());
+ }
+
+ private HttpRequest resolveOrg = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + orgUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ private String orgEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", orgUrn)
+ .a("id", orgUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + userUrn)
+ .e("Link").a("rel", "alternate").a("type", ORG).a("href", orgHref.toString()).up()
+ .e("Link").a("rel", "alternate").a("type", ADMIN_ORG).a("href", orgAdminHref.toString()).up());
+
+ private HttpResponse resolveOrgResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(orgEntity, ENTITY + ";version=1.5"))
+ .build();
@Test
- public void testCreateUser() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("POST", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/users")
- .xmlFilePayload("/user/createUserSource.xml", VCloudDirectorMediaType.USER)
- .acceptMedia(VCloudDirectorMediaType.USER)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/user/createUser.xml", VCloudDirectorMediaType.USER)
- .httpResponseBuilder().build());
-
- User source = createUserSource();
- User expected = createUser();
-
- assertEquals(api.getUserApi().createUser(orgRef.getHref(), source), expected);
+ public void testAddUserUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveOrg, resolveOrgResponse, add, addResponse);
+ assertEquals(api.getUserApi().addUserToOrg(addUserSource(), orgUrn), addUser());
}
- public static final User createUserSource() {
+ HttpRequest get = HttpRequest.builder()
+ .method("GET")
+ .endpoint(userHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ HttpResponse getResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/user/user.xml", ORG + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testGetUserHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
+ assertEquals(api.getUserApi().get(userHref), user());
+ }
+
+ HttpRequest resolveUser = HttpRequest.builder()
+ .method("GET")
+ .endpoint(endpoint + "/entity/" + userUrn)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ String userEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
+ .a("name", userUrn)
+ .a("id", userUrn)
+ .a("type", ENTITY)
+ .a("href", endpoint + "/entity/" + userUrn)
+ .e("Link").a("rel", "alternate").a("type", USER).a("href", userHref.toString()).up());
+
+ HttpResponse resolveUserResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromStringWithContentType(userEntity, ENTITY + ";version=1.5"))
+ .build();
+
+ @Test
+ public void testGetUserUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveUser, resolveUserResponse, get, getResponse);
+ assertEquals(api.getUserApi().get(userUrn), user());
+ }
+
+ HttpRequest edit = HttpRequest.builder()
+ .method("PUT")
+ .endpoint(userHref)
+ .addHeader("Accept", USER)
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .payload(payloadFromResourceWithContentType("/user/editUserSource.xml", USER))
+ .build();
+
+ HttpResponse editResponse = HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResourceWithContentType("/user/editUser.xml", USER))
+ .build();
+
+ @Test
+ public void testEditUserHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, edit, editResponse);
+ assertEquals(api.getUserApi().edit(userHref, editUserSource()), editUser());
+ }
+
+ @Test
+ public void testEditUserUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveUser, resolveUserResponse, edit, editResponse);
+ assertEquals(api.getUserApi().edit(userUrn, editUserSource()), editUser());
+ }
+
+ HttpRequest unlock = HttpRequest.builder()
+ .method("POST")
+ .endpoint(userHref + "/action/unlock")
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+ .build();
+
+ HttpResponse unlockResponse = HttpResponse.builder()
+ .statusCode(204)
+ .build();
+
+ @Test
+ public void testUnlockUserHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, unlock, unlockResponse);
+ api.getUserApi().unlock(userHref);
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class)
+ public void testUnlockUserHrefNotFound() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, unlock, HttpResponse.builder()
+ .statusCode(403)
+ .payload(payloadFromResourceWithContentType("/org/error400.xml", ERROR))
+ .build());
+ api.getUserApi().unlock(userHref);
+ }
+
+ @Test
+ public void testUnlockUserUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveUser, resolveUserResponse, unlock, unlockResponse);
+ api.getUserApi().unlock(userUrn);
+ }
+
+ HttpRequest remove = HttpRequest.builder()
+ .method("DELETE")
+ .endpoint(userHref)
+ .addHeader("Accept", "*/*")
+ .addHeader("x-vcloud-authorization", token)
+ .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
+
+ HttpResponse removeResponse = HttpResponse.builder()
+ .statusCode(200)
+ .build();
+
+ @Test
+ public void testRemoveUserHref() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, remove, removeResponse);
+ api.getUserApi().remove(userHref);
+ }
+
+ @Test
+ public void testRemoveUserUrn() {
+ VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveUser, resolveUserResponse, remove, removeResponse);
+ api.getUserApi().remove(userUrn);
+ }
+
+ public static final User addUserSource() {
return User.builder()
.name("test")
.fullName("testFullName")
@@ -89,8 +255,8 @@
.build();
}
- public static final User createUser() {
- return createUserSource().toBuilder()
+ public static final User addUser() {
+ return addUserSource().toBuilder()
.id("urn:vcloud:user:b37223f3-8792-477a-820f-334998f61cd6")
.type("application/vnd.vmware.admin.user+xml")
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/b37223f3-8792-477a-820f-334998f61cd6"))
@@ -111,47 +277,13 @@
.build();
}
- @Test
- public void testGetUser() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("GET", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/user/user.xml", VCloudDirectorMediaType.USER)
- .httpResponseBuilder().build());
-
- User expected = user();
-
- assertEquals(api.getUserApi().getUser(userRef.getHref()), expected);
- }
-
public static final User user() {
- return createUser().toBuilder()
+ return addUser().toBuilder()
.nameInSource("test")
.build();
}
-
- @Test
- public void testUpdateUser() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("PUT", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6")
- .xmlFilePayload("/user/updateUserSource.xml", VCloudDirectorMediaType.USER)
- .acceptMedia(VCloudDirectorMediaType.USER)
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .xmlFilePayload("/user/updateUser.xml", VCloudDirectorMediaType.USER)
- .httpResponseBuilder().build());
- User source = updateUserSource();
- User expected = updateUser();
-
- assertEquals(api.getUserApi().updateUser(userRef.getHref(), source), expected);
- }
-
- public static final User updateUserSource() {
+ public static final User editUserSource() {
return user().toBuilder()
.fullName("new"+user().getFullName())
.emailAddress("new"+user().getEmailAddress())
@@ -167,50 +299,10 @@
.build();
}
- public static final User updateUser() {
- return updateUserSource().toBuilder()
+ public static final User editUser() {
+ return editUserSource().toBuilder()
.password(null)
.build();
}
- @Test
- public void testDeleteUser() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("DELETE", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .httpResponseBuilder().statusCode(204).build());
-
- api.getUserApi().deleteUser(userRef.getHref());
- }
-
- @Test
- public void testUnlockUser() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("POST", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6/action/unlock")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .httpResponseBuilder().statusCode(204).build());
-
- api.getUserApi().unlockUser(userRef.getHref());
- }
-
- @Test(expectedExceptions = ResourceNotFoundException.class)
- public void testUnlockUserFailNotFound() {
- VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
- new VcloudHttpRequestPrimer()
- .apiCommand("POST", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6/action/unlock")
- .acceptAnyMedia()
- .httpRequestBuilder().build(),
- new VcloudHttpResponsePrimer()
- .httpResponseBuilder().statusCode(403)
- .payload(payloadFromResourceWithContentType("/org/error400.xml", VCloudDirectorMediaType.ERROR))
- .build());
-
- api.getUserApi().unlockUser(userRef.getHref());
- }
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApiLiveTest.java
index e399146..3cacca0 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApiLiveTest.java
@@ -30,7 +30,6 @@
import java.net.URI;
import org.jclouds.rest.AuthorizationException;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.Role.DefaultRoles;
import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken;
import org.jclouds.vcloud.director.v1_5.domain.User;
@@ -41,8 +40,6 @@
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import com.google.common.collect.Iterables;
-
/**
* Tests live behavior of {@link UserApi}.
*
@@ -61,21 +58,19 @@
/*
* Shared state between dependant tests.
*/
- private Reference orgRef;
private User user;
@Override
@BeforeClass(alwaysRun = true)
public void setupRequiredApis() {
userApi = adminContext.getApi().getUserApi();
- orgRef = Iterables.getFirst(context.getApi().getOrgApi().getOrgList().getOrgs(), null).toAdminReference(endpoint);
}
@AfterClass(alwaysRun = true)
public void cleanUp() throws Exception {
if (user != null) {
try {
- userApi.deleteUser(user.getHref());
+ userApi.remove(user.getHref());
} catch (Exception e) {
logger.warn(e, "Error deleting user '%s'", user.getName());
}
@@ -83,21 +78,21 @@
}
@Test(description = "POST /admin/org/{id}/users")
- public void testCreateUser() {
- User newUser = randomTestUser("testCreateUser");
- user = userApi.createUser(orgRef.getHref(), newUser);
+ public void testAddUser() {
+ User newUser = randomTestUser("testAddUser");
+ user = userApi.addUserToOrg(newUser, org.getId());
checkUser(newUser);
}
- @Test(description = "GET /admin/user/{id}", dependsOnMethods = { "testCreateUser" })
+ @Test(description = "GET /admin/user/{id}", dependsOnMethods = { "testAddUser" })
public void testGetUser() {
- user = userApi.getUser(user.getHref());
+ user = userApi.get(user.getHref());
checkUser(user);
}
@Test(description = "PUT /admin/user/{id}", dependsOnMethods = { "testGetUser" })
- public void testUpdateUser() {
+ public void testEditUser() {
User oldUser = user.toBuilder().build();
User newUser = user.toBuilder()
.fullName("new"+oldUser.getFullName())
@@ -116,8 +111,8 @@
.role(getRoleReferenceFor(DefaultRoles.AUTHOR.value()))
.build();
- userApi.updateUser(user.getHref(), newUser);
- user = userApi.getUser(user.getHref());
+ userApi.edit(user.getHref(), newUser);
+ user = userApi.get(user.getHref());
checkUser(user);
assertTrue(equal(user.getFullName(), newUser.getFullName()),
@@ -148,12 +143,12 @@
// Check the user can really login with the changed password
// NOTE: the password is NOT returned in the User object returned from the server
- SessionWithToken sessionWithToken = sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "newPassword");
+ SessionWithToken sessionWithToken = sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), org.getName(), "newPassword");
assertNotNull(sessionWithToken.getToken());
sessionApi.logoutSessionWithToken(sessionWithToken.getSession().getHref(), sessionWithToken.getToken());
}
- @Test(description = "POST /admin/user/{id}/action/unlock", dependsOnMethods = { "testUpdateUser" })
+ @Test(description = "POST /admin/user/{id}/action/unlock", dependsOnMethods = { "testEditUser" })
public void testUnlockUser() {
// Need to know how many times to fail login to lock account
AdminOrgApi adminOrgApi = adminContext.getApi().getOrgApi();
@@ -162,21 +157,21 @@
// session api isn't typically exposed to the user, as it is implicit
SessionApi sessionApi = context.utils().injector().getInstance(SessionApi.class);
- OrgPasswordPolicySettings settings = adminOrgApi.getSettings(orgRef.getHref()).getPasswordPolicy();
+ OrgPasswordPolicySettings settings = adminOrgApi.getSettings(org.getId()).getPasswordPolicy();
assertNotNull(settings);
// Adjust account settings so we can lock the account - be careful to not set invalidLoginsBeforeLockout too low!
if (!settings.isAccountLockoutEnabled()) {
settingsToRevertTo = settings;
settings = settings.toBuilder().accountLockoutEnabled(true).invalidLoginsBeforeLockout(5).build();
- settings = adminOrgApi.updatePasswordPolicy(orgRef.getHref(), settings);
+ settings = adminOrgApi.editPasswordPolicy(org.getId(), settings);
}
assertTrue(settings.isAccountLockoutEnabled());
for (int i = 0; i < settings.getInvalidLoginsBeforeLockout() + 1; i++) {
try {
- sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "wrongpassword!");
+ sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), org.getName(), "wrongpassword!");
fail("Managed to login using the wrong password!");
} catch (AuthorizationException e) {
} catch (Exception e) {
@@ -184,44 +179,44 @@
}
}
- user = userApi.getUser(user.getHref());
+ user = userApi.get(user.getHref());
assertTrue(user.isLocked());
try {
- sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "newPassword");
+ sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), org.getName(), "newPassword");
fail("Managed to login to locked account!");
} catch (AuthorizationException e) {
} catch (Exception e) {
fail("Expected AuthorizationException", e);
}
- userApi.unlockUser(user.getHref());
+ userApi.unlock(user.getHref());
- user = userApi.getUser(user.getHref());
+ user = userApi.get(user.getHref());
assertFalse(user.isLocked());
// Double-check the user can now login again
- SessionWithToken sessionWithToken = sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "newPassword");
+ SessionWithToken sessionWithToken = sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), org.getName(), "newPassword");
assertNotNull(sessionWithToken.getToken());
sessionApi.logoutSessionWithToken(sessionWithToken.getSession().getHref(), sessionWithToken.getToken());
// Return account settings to the previous values, if necessary
if (settingsToRevertTo != null) {
- adminOrgApi.updatePasswordPolicy(orgRef.getHref(), settingsToRevertTo);
+ adminOrgApi.editPasswordPolicy(org.getId(), settingsToRevertTo);
}
}
- @Test(description = "DELETE /admin/user/{id}", dependsOnMethods = { "testCreateUser" })
- public void testDeleteUser() {
- // Create a user to be deleted (so we remove dependencies on test ordering)
- User newUser = randomTestUser("testDeleteUser"+getTestDateTimeStamp());
- User userToBeDeleted = userApi.createUser(orgRef.getHref(), newUser);
+ @Test(description = "DELETE /admin/user/{id}", dependsOnMethods = { "testAddUser" })
+ public void testRemoveUser() {
+ // Create a user to be removed (so we remove dependencies on test ordering)
+ User newUser = randomTestUser("testRemoveUser"+getTestDateTimeStamp());
+ User userToBeDeleted = userApi.addUserToOrg(newUser, org.getId());
// Delete the user
- userApi.deleteUser(userToBeDeleted.getHref());
+ userApi.remove(userToBeDeleted.getHref());
// Confirm cannot no longer be accessed
- User deleted = userApi.getUser(userToBeDeleted.getHref());
- assertNull(deleted);
+ User removed = userApi.get(userToBeDeleted.getHref());
+ assertNull(removed);
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java
index 5ce92f6..55fef1f 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java
@@ -18,8 +18,27 @@
*/
package org.jclouds.vcloud.director.v1_5.internal;
+import static com.google.common.base.Predicates.and;
+import static com.google.common.base.Strings.emptyToNull;
+import static com.google.common.collect.Iterables.any;
+import static com.google.common.collect.Iterables.contains;
+import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.getFirst;
+import static com.google.common.collect.Iterables.tryFind;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.ENTITY_NON_NULL;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_NETWORK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.USER;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP_TEMPLATE;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VDC;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VM;
+import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals;
+import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.typeEquals;
+import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
@@ -28,7 +47,6 @@
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
-import java.util.Properties;
import java.util.Random;
import java.util.Set;
@@ -37,6 +55,7 @@
import org.jclouds.apis.BaseContextLiveTest;
import org.jclouds.date.DateService;
+import org.jclouds.io.Payloads;
import org.jclouds.logging.Logger;
import org.jclouds.predicates.RetryablePredicate;
import org.jclouds.rest.RestContext;
@@ -44,9 +63,13 @@
import org.jclouds.vcloud.director.v1_5.VCloudDirectorApiMetadata;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorContext;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
+import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
+import org.jclouds.vcloud.director.v1_5.domain.Catalog;
+import org.jclouds.vcloud.director.v1_5.domain.Checks;
import org.jclouds.vcloud.director.v1_5.domain.Link;
+import org.jclouds.vcloud.director.v1_5.domain.Link.Rel;
+import org.jclouds.vcloud.director.v1_5.domain.Media;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.ResourceEntity.Status;
import org.jclouds.vcloud.director.v1_5.domain.Role.DefaultRoles;
@@ -57,6 +80,7 @@
import org.jclouds.vcloud.director.v1_5.domain.VApp;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
+import org.jclouds.vcloud.director.v1_5.domain.Vm;
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
import org.jclouds.vcloud.director.v1_5.domain.network.VAppNetworkConfiguration;
@@ -69,32 +93,31 @@
import org.jclouds.vcloud.director.v1_5.features.VAppApi;
import org.jclouds.vcloud.director.v1_5.features.VAppTemplateApi;
import org.jclouds.vcloud.director.v1_5.features.VdcApi;
+import org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates;
import org.jclouds.vcloud.director.v1_5.predicates.ReferencePredicates;
import org.jclouds.vcloud.director.v1_5.predicates.TaskStatusEquals;
import org.jclouds.vcloud.director.v1_5.predicates.TaskSuccess;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
-import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import com.google.common.io.Closeables;
import com.google.common.reflect.TypeToken;
import com.google.inject.Guice;
/**
* Tests behavior of {@link VCloudDirectorApi} and acts as parent for other api live tests.
- *
+ *
* @author Adrian Cole
* @author grkvlt@apache.org
*/
@@ -108,9 +131,6 @@
protected static final long TASK_TIMEOUT_SECONDS = 100L;
protected static final long LONG_TASK_TIMEOUT_SECONDS = 300L;
- public static final String VAPP = "vApp";
- public static final String VAPP_TEMPLATE = "vAppTemplate";
- public static final String VDC = "vdc";
public static final int REQUIRED_ADMIN_VM_QUOTA = 0;
public static final int REQUIRED_USER_VM_QUOTA = 0;
@@ -118,17 +138,24 @@
public Predicate<Task> retryTaskSuccessLong;
protected RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext;
- protected RestContext<VCloudDirectorApi, VCloudDirectorAsyncApi> context; // FIXME: rename to userContext?
+
protected Session adminSession;
protected Session session;
- protected String catalogId;
- protected URI catalogURI;
- protected URI vAppTemplateURI;
- protected URI mediaURI;
- protected URI networkURI;
- protected URI vdcURI;
- protected URI userURI;
+ protected String orgUrn;
+ protected Org org;
+ protected String catalogUrn;
+ private Catalog catalog;
+ protected String vAppTemplateUrn;
+ private VAppTemplate vAppTemplate;
+ protected String mediaUrn;
+ private Media media;
+ protected String networkUrn;
+ private Network network;
+ protected String vdcUrn;
+ private Vdc vdc;
+ protected String userUrn;
+ private User user;
protected final Set<String> vAppNames = Sets.newLinkedHashSet();
protected static final Random random = new Random();
@@ -139,8 +166,6 @@
protected DateService dateService;
- protected VCloudDirectorTestSession testSession;
-
protected static String testStamp;
@BeforeClass(alwaysRun = true)
@@ -162,29 +187,13 @@
retryTaskSuccessLong = new RetryablePredicate<Task>(taskSuccess, LONG_TASK_TIMEOUT_SECONDS * 1000L);
}
- @AfterClass(alwaysRun = true)
- protected void tearDownTestSession() {
- Closeables.closeQuietly(testSession);
- }
+ @BeforeClass(groups = { "integration", "live" })
+ public void setupContext() {
+ super.setupContext();
+ adminContext = context.getAdminContext();
- @Override
- protected void initializeContext() {
- Properties overrides = setupProperties();
- testSession = VCloudDirectorTestSession.builder()
- .provider(provider)
- .identity(identity)
- .credential(credential)
- .endpoint(endpoint)
- .overrides(overrides)
- .build();
-
- context = testSession.getUserContext();
- adminContext = testSession.getAdminContext();
-
- if (adminContext != null) {
- adminSession = adminContext.getApi().getCurrentSession();
- adminContext.utils().injector().injectMembers(this);
- }
+ adminSession = adminContext.getApi().getCurrentSession();
+ adminContext.utils().injector().injectMembers(this);
session = context.getApi().getCurrentSession();
context.utils().injector().injectMembers(this);
@@ -205,10 +214,12 @@
return getRoleReferenceFor(name, adminContext);
}
- public static Reference getRoleReferenceFor(String name, RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext) {
+ public static Reference getRoleReferenceFor(String name,
+ RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext) {
RoleReferences roles = adminContext.getApi().getQueryApi().roleReferencesQueryAll();
// backend in a builder to strip out unwanted xml cruft that the api chokes on
- return Reference.builder().fromReference(Iterables.find(roles.getReferences(), ReferencePredicates.nameEquals(name))).build();
+ return Reference.builder().fromReference(find(roles.getReferences(), ReferencePredicates.nameEquals(name)))
+ .build();
}
public User randomTestUser(String prefix) {
@@ -216,76 +227,309 @@
}
public User randomTestUser(String prefix, Reference role) {
- return User.builder()
- .name(name(prefix)+getTestDateTimeStamp())
- .fullName("testFullName")
- .emailAddress("test@test.com")
- .telephone("555-1234")
- .isEnabled(false)
- .im("testIM")
- .isAlertEnabled(false)
- .alertEmailPrefix("testPrefix")
- .alertEmail("testAlert@test.com")
- .isExternal(false)
- .isGroupRole(false)
- .role(role)
- .password("password")
- .build();
+ return User.builder().name(name(prefix) + getTestDateTimeStamp()).fullName("testFullName")
+ .emailAddress("test@test.com").telephone("555-1234").isEnabled(false).im("testIM").isAlertEnabled(false)
+ .alertEmailPrefix("testPrefix").alertEmail("testAlert@test.com").isExternal(false).isGroupRole(false)
+ .role(role).password("password").build();
}
- // TODO change properties to URI, not id
protected void initTestParametersFromPropertiesOrLazyDiscover() {
- catalogId = Strings.emptyToNull(System.getProperty("test." + provider + ".catalog-id"));
- if (catalogId != null) {
- catalogURI = URI.create(endpoint + "/catalog/" + catalogId);
- }
+ catalogUrn = emptyToNull(System.getProperty("test." + provider + ".catalog-id"));
- String vAppTemplateId = Strings.emptyToNull(System.getProperty("test." + provider + ".vapptemplate-id"));
- if (vAppTemplateId != null)
- vAppTemplateURI = URI.create(endpoint + "/vAppTemplate/" + vAppTemplateId);
+ vAppTemplateUrn = emptyToNull(System.getProperty("test." + provider + ".vapptemplate-id"));
- String vdcId = Strings.emptyToNull(System.getProperty("test." + provider + ".vdc-id"));
- if (vdcId != null)
- vdcURI = URI.create(endpoint + "/vdc/" + vdcId);
+ vdcUrn = emptyToNull(System.getProperty("test." + provider + ".vdc-id"));
- String mediaId = Strings.emptyToNull(System.getProperty("test." + provider + ".media-id"));
- if (mediaId != null)
- mediaURI = URI.create(endpoint + "/media/" + mediaId);
+ mediaUrn = emptyToNull(System.getProperty("test." + provider + ".media-id"));
- String networkId = Strings.emptyToNull(System.getProperty("test." + provider + ".network-id"));
- if (networkId != null)
- networkURI = URI.create(endpoint + "/network/" + networkId);
+ networkUrn = emptyToNull(System.getProperty("test." + provider + ".network-id"));
- String userId = Strings.emptyToNull(System.getProperty("test." + provider + ".user-id"));
- if (userId != null)
- userURI = URI.create(endpoint + "/admin/user/" + userId);
+ userUrn = emptyToNull(System.getProperty("test." + provider + ".user-id"));
- if (Iterables.any(Lists.newArrayList(vAppTemplateURI, networkURI, vdcURI), Predicates.isNull())) {
- Org thisOrg = context.getApi().getOrgApi().getOrg(
- Iterables.find(context.getApi().getOrgApi().getOrgList().getOrgs(),
- ReferencePredicates.<Reference> nameEquals(session.getOrg())).getHref());
+ org = context
+ .getApi()
+ .getOrgApi()
+ .get(find(context.getApi().getOrgApi().list(), ReferencePredicates.<Reference> nameEquals(session.get()))
+ .getHref());
+ orgUrn = org.getId();
- if (vdcURI == null)
- vdcURI = Iterables.find(thisOrg.getLinks(),
- ReferencePredicates.<Link> typeEquals(VCloudDirectorMediaType.VDC)).getHref();
+ if (any(Lists.newArrayList(vAppTemplateUrn, networkUrn, vdcUrn), Predicates.isNull())) {
- if (networkURI == null)
- networkURI = Iterables.find(thisOrg.getLinks(),
- ReferencePredicates.<Link> typeEquals(VCloudDirectorMediaType.ORG_NETWORK)).getHref();
+ if (vdcUrn == null) {
+ vdc = context.getApi().getVdcApi()
+ .get(find(org.getLinks(), ReferencePredicates.<Link> typeEquals(VDC)).getHref());
+ vdcUrn = vdc.getId();
- // FIXME the URI should be opaque
- if (Strings.isNullOrEmpty(catalogId)) {
- String uri = Iterables.find(thisOrg.getLinks(),
- ReferencePredicates.<Link> typeEquals(VCloudDirectorMediaType.CATALOG)).getHref().toASCIIString();
- catalogId = Iterables.getLast(Splitter.on('/').split(uri));
+ if (vAppTemplateUrn == null) {
+ Optional<VAppTemplate> optionalvAppTemplate = tryFindVAppTemplateInOrg();
+ if (optionalvAppTemplate.isPresent()) {
+ vAppTemplate = optionalvAppTemplate.get();
+ vAppTemplateUrn = vAppTemplate.getId();
+ }
+ }
+
+ }
+
+ if (networkUrn == null) {
+ Optional<Network> optionalNetwork = tryFindBridgedNetworkInOrg();
+ if (optionalNetwork.isPresent()) {
+ network = optionalNetwork.get();
+ networkUrn = network.getId();
+ }
+ }
+
+ if (catalogUrn == null) {
+ Optional<Catalog> optionalCatalog = tryFindWritableCatalogInOrg();
+ if (optionalCatalog.isPresent()) {
+ catalog = optionalCatalog.get();
+ catalogUrn = catalog.getId();
+ }
}
}
}
+ Function<VAppTemplate, String> prettyVAppTemplate = new Function<VAppTemplate, String>() {
+
+ @Override
+ public String apply(VAppTemplate input) {
+ return Objects.toStringHelper("").omitNullValues().add("name", input.getName()).add("id", input.getId())
+ .add("owner", input.getOwner()).toString();
+ }
+
+ };
+
+ public Optional<VAppTemplate> tryFindVAppTemplateInOrg() {
+ FluentIterable<VAppTemplate> vAppTemplates = FluentIterable.from(vdc.getResourceEntities())
+ .filter(ReferencePredicates.<Reference> typeEquals(VAPP_TEMPLATE))
+ .transform(new Function<Reference, VAppTemplate>() {
+
+ @Override
+ public VAppTemplate apply(Reference in) {
+ return context.getApi().getVAppTemplateApi().get(in.getHref());
+ }})
+ .filter(Predicates.notNull());
+
+ Optional<VAppTemplate> optionalVAppTemplate = tryFind(vAppTemplates, new Predicate<VAppTemplate>() {
+
+ @Override
+ public boolean apply(VAppTemplate input) {
+ return input.getOwner().getUser().getName().equals(session.getUser());
+ }
+
+ });
+
+ if (optionalVAppTemplate.isPresent()) {
+ Logger.CONSOLE.info("found vAppTemplate: %s", prettyVAppTemplate.apply(optionalVAppTemplate.get()));
+ } else {
+ Logger.CONSOLE.warn("%s doesn't own any vApp Template in org %s; vApp templates: %s", context.getApi()
+ .getCurrentSession().getUser(), org.getName(), Iterables.transform(vAppTemplates, prettyVAppTemplate));
+ }
+
+ return optionalVAppTemplate;
+ }
+
+ Function<Vm, String> prettyVm = new Function<Vm, String>() {
+
+ @Override
+ public String apply(Vm input) {
+ return Objects.toStringHelper("").omitNullValues().add("name", input.getName()).add("id", input.getId()).toString();
+ }
+
+ };
+
+ public Optional<Vm> tryFindVmInOrg() {
+ FluentIterable<Vm> vms = FluentIterable.from(vdc.getResourceEntities())
+ .filter(ReferencePredicates.<Reference> typeEquals(VM))
+ .transform(new Function<Reference, Vm>() {
+
+ @Override
+ public Vm apply(Reference in) {
+ return context.getApi().getVmApi().get(in.getHref());
+ }})
+ .filter(Predicates.notNull());
+
+ Optional<Vm> optionalVm = tryFind(vms, new Predicate<Vm>() {
+
+ @Override
+ public boolean apply(Vm input) {
+ return input.getId() != null;
+ }
+
+ });
+
+ if (optionalVm.isPresent()) {
+ Logger.CONSOLE.info("found vAppTemplate: %s", prettyVm.apply(optionalVm.get()));
+ } else {
+ Logger.CONSOLE.warn("%s doesn't have any vm in org %s; vms: %s", context.getApi()
+ .getCurrentSession().getUser(), org.getName(), Iterables.transform(vms, prettyVm));
+ }
+
+ return optionalVm;
+ }
+
+ Function<Catalog, String> prettyCatalog = new Function<Catalog, String>() {
+
+ @Override
+ public String apply(Catalog input) {
+ return Objects.toStringHelper("").omitNullValues().add("name", input.getName()).add("id", input.getId())
+ .add("owner", input.getOwner()).add("isPublished", input.isPublished()).toString();
+ }
+
+ };
+
+ /**
+ * If I can add to a catalog, I can write to it
+ */
+ public Optional<Catalog> tryFindWritableCatalogInOrg() {
+ FluentIterable<Catalog> catalogs = FluentIterable.from(org.getLinks())
+ .filter(ReferencePredicates.<Link> typeEquals(CATALOG)).transform(new Function<Link, Catalog>() {
+ @Override
+ public Catalog apply(Link in) {
+ return context.getApi().getCatalogApi().get(in.getHref());
+ }
+ });
+
+ Optional<Catalog> optionalCatalog = tryFind(catalogs, new Predicate<Catalog>() {
+
+ @Override
+ public boolean apply(Catalog input) {
+ return Iterables.any(input.getLinks(), LinkPredicates.relEquals(Rel.ADD));
+ }
+
+ });
+ if (optionalCatalog.isPresent()) {
+ Logger.CONSOLE.info("found catalog: %s", prettyCatalog.apply(optionalCatalog.get()));
+ } else {
+ Logger.CONSOLE.warn("%s doesn't own any catalogs in org %s; catalogs: %s", context.getApi()
+ .getCurrentSession().getUser(), org.getName(), Iterables.transform(catalogs, prettyCatalog));
+ }
+ return optionalCatalog;
+ }
+
+ Function<Network, String> prettyNetwork = new Function<Network, String>() {
+
+ @Override
+ public String apply(Network input) {
+ return Objects.toStringHelper("").omitNullValues().add("name", input.getName()).add("id", input.getId())
+ .add("fenceMode", input.getConfiguration().getFenceMode())
+ .add("taskCount", input.getTasks().size() > 0 ? input.getTasks().size() : null).toString();
+ }
+
+ };
+
+ public Optional<Network> tryFindBridgedNetworkInOrg() {
+ FluentIterable<Network> networks = FluentIterable.from(org.getLinks())
+ .filter(ReferencePredicates.<Link> typeEquals(ORG_NETWORK)).transform(new Function<Link, Network>() {
+ @Override
+ public Network apply(Link in) {
+ return context.getApi().getNetworkApi().get(in.getHref());
+ }
+ });
+
+ Optional<Network> optionalNetwork = tryFind(networks, new Predicate<Network>() {
+
+ @Override
+ public boolean apply(Network input) {
+ if (input.getConfiguration().getFenceMode().equals(Network.FenceMode.BRIDGED)) {
+ if (input.getTasks().size() == 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ });
+ if (optionalNetwork.isPresent()) {
+ Logger.CONSOLE.info("found network: %s", prettyNetwork.apply(optionalNetwork.get()));
+ } else {
+ Logger.CONSOLE.warn("no ready bridged networks present in org %s; networks: %s", org.getName(),
+ Iterables.transform(networks, prettyNetwork));
+ }
+ return optionalNetwork;
+ }
+
+ protected Vdc lazyGetVdc() {
+ if (vdc == null) {
+ assertNotNull(vdcUrn, String.format(URN_REQ_LIVE, VDC));
+ vdc = context.getApi().getVdcApi().get(vdcUrn);
+ assertNotNull(vdc, String.format(ENTITY_NON_NULL, VDC));
+ }
+ return vdc;
+ }
+
+ protected Network lazyGetNetwork() {
+ if (network == null) {
+ assertNotNull(networkUrn, String.format(URN_REQ_LIVE, NETWORK));
+ network = context.getApi().getNetworkApi().get(networkUrn);
+ assertNotNull(network, String.format(ENTITY_NON_NULL, NETWORK));
+ }
+ return network;
+ }
+
+ protected Catalog lazyGetCatalog() {
+ if (catalog == null) {
+ assertNotNull(catalogUrn, String.format(URN_REQ_LIVE, CATALOG));
+ catalog = context.getApi().getCatalogApi().get(catalogUrn);
+ assertNotNull(catalog, String.format(ENTITY_NON_NULL, CATALOG));
+ }
+ return catalog;
+ }
+
+ protected User lazyGetUser() {
+ if (user == null) {
+ assertNotNull(userUrn, String.format(URN_REQ_LIVE, USER));
+ user = adminContext.getApi().getUserApi().get(userUrn);
+ assertNotNull(user, String.format(ENTITY_NON_NULL, USER));
+ }
+ return user;
+ }
+
+ protected Media lazyGetMedia(){
+ if (media == null || mediaUrn == null) {
+ Predicate<Link> addMediaLink = and(relEquals(Link.Rel.ADD), typeEquals(VCloudDirectorMediaType.MEDIA));
+ if (contains(lazyGetVdc().getLinks(), addMediaLink)) {
+ Link addMedia = find(lazyGetVdc().getLinks(), addMediaLink);
+ byte[] iso = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
+
+ Media sourceMedia = Media.builder().type(VCloudDirectorMediaType.MEDIA).name(name("media"))
+ .size(iso.length).imageType(Media.ImageType.ISO)
+ .description("Test media generated by VmApiLiveTest").build();
+ media = context.getApi().getMediaApi().add(addMedia.getHref(), sourceMedia);
+
+ Link uploadLink = getFirst(getFirst(media.getFiles(), null).getLinks(), null);
+ context.getApi().getUploadApi().upload(uploadLink.getHref(), Payloads.newByteArrayPayload(iso));
+
+ media = context.getApi().getMediaApi().get(media.getId());
+
+ if (media.getTasks().size() == 1) {
+ Task uploadTask = Iterables.getOnlyElement(media.getTasks());
+ Checks.checkTask(uploadTask);
+ assertEquals(uploadTask.getStatus(), Task.Status.RUNNING);
+ assertTrue(retryTaskSuccess.apply(uploadTask), String.format(TASK_COMPLETE_TIMELY, "uploadTask"));
+ media = context.getApi().getMediaApi().get(media.getId());
+ }
+
+ mediaUrn = media.getId();
+ }
+ }
+ return media;
+ }
+
+ protected VAppTemplate lazyGetVAppTemplate() {
+ if (vAppTemplate == null) {
+ assertNotNull(vAppTemplateUrn, String.format(URN_REQ_LIVE, VAPP_TEMPLATE));
+ vAppTemplate = adminContext.getApi().getVAppTemplateApi().get(vAppTemplateUrn);
+ assertNotNull(vAppTemplate, String.format(ENTITY_NON_NULL, VAPP_TEMPLATE));
+ }
+ return vAppTemplate;
+ }
+
+ @Deprecated
public URI toAdminUri(Reference ref) {
return toAdminUri(ref.getHref());
}
+ @Deprecated
public URI toAdminUri(URI uri) {
return Reference.builder().href(uri).build().toAdminReference(endpoint).getHref();
}
@@ -301,33 +545,33 @@
protected boolean taskStatusEventually(Task task, Task.Status running, ImmutableSet<Task.Status> immutableSet) {
TaskApi taskApi = context.getApi().getTaskApi();
TaskStatusEquals predicate = new TaskStatusEquals(taskApi, running, immutableSet);
- RetryablePredicate<Task> retryablePredicate = new RetryablePredicate<Task>(predicate, TASK_TIMEOUT_SECONDS * 1000L);
+ RetryablePredicate<Task> retryablePredicate = new RetryablePredicate<Task>(predicate,
+ TASK_TIMEOUT_SECONDS * 1000L);
return retryablePredicate.apply(task);
}
protected void assertTaskStatusEventually(Task task, Task.Status running, ImmutableSet<Task.Status> immutableSet) {
assertTrue(taskStatusEventually(task, running, immutableSet),
- String.format("Task '%s' must reach status %s", task.getOperationName(), running));
+ String.format("Task '%s' must reach status %s", task.getOperationName(), running));
}
protected boolean taskDoneEventually(Task task) {
TaskApi taskApi = context.getApi().getTaskApi();
- TaskStatusEquals predicate = new TaskStatusEquals(
- taskApi,
- ImmutableSet.of(Task.Status.ABORTED, Task.Status.CANCELED, Task.Status.ERROR, Task.Status.SUCCESS),
- Collections.<Task.Status>emptySet());
- RetryablePredicate<Task> retryablePredicate = new RetryablePredicate<Task>(predicate, LONG_TASK_TIMEOUT_SECONDS * 1000L);
+ TaskStatusEquals predicate = new TaskStatusEquals(taskApi, ImmutableSet.of(Task.Status.ABORTED,
+ Task.Status.CANCELED, Task.Status.ERROR, Task.Status.SUCCESS), Collections.<Task.Status> emptySet());
+ RetryablePredicate<Task> retryablePredicate = new RetryablePredicate<Task>(predicate,
+ LONG_TASK_TIMEOUT_SECONDS * 1000L);
return retryablePredicate.apply(task);
}
protected void assertTaskDoneEventually(Task task) {
- assertTrue(taskDoneEventually(task),
- String.format("Task '%s' must complete", task.getOperationName()));
+ assertTrue(taskDoneEventually(task), String.format("Task '%s' must complete", task.getOperationName()));
}
/**
- * Instantiate a {@link VApp} in a {@link Vdc} using the {@link VAppTemplate} we have configured for the tests.
- *
+ * Instantiate a {@link VApp} in a {@link Vdc} using the {@link VAppTemplate} we have configured
+ * for the tests.
+ *
* @return the VApp that is being instantiated
*/
protected VApp instantiateVApp() {
@@ -335,21 +579,17 @@
}
protected VApp instantiateVApp(String name) {
- InstantiateVAppTemplateParams instantiate = InstantiateVAppTemplateParams.builder()
- .name(name)
- .notDeploy()
- .notPowerOn()
- .description("Test VApp")
- .instantiationParams(instantiationParams())
- .source(Reference.builder().href(vAppTemplateURI).build())
- .build();
+ InstantiateVAppTemplateParams instantiate = InstantiateVAppTemplateParams.builder().name(name).notDeploy()
+ .notPowerOn().description("Test VApp").instantiationParams(instantiationParams())
+ .source(Reference.builder().href(lazyGetVAppTemplate().getHref()).build()).build();
VdcApi vdcApi = context.getApi().getVdcApi();
- VApp vAppInstantiated = vdcApi.instantiateVApp(vdcURI, instantiate);
+ VApp vAppInstantiated = vdcApi.instantiateVApp(vdcUrn, instantiate);
assertNotNull(vAppInstantiated, String.format(ENTITY_NON_NULL, VAPP));
- Task instantiationTask = Iterables.getFirst(vAppInstantiated.getTasks(), null);
- if (instantiationTask != null) assertTaskSucceedsLong(instantiationTask);
+ Task instantiationTask = getFirst(vAppInstantiated.getTasks(), null);
+ if (instantiationTask != null)
+ assertTaskSucceedsLong(instantiationTask);
// Save VApp name for cleanUp
vAppNames.add(name);
@@ -360,52 +600,47 @@
/** Build an {@link InstantiationParams} object. */
protected InstantiationParams instantiationParams() {
InstantiationParams instantiationParams = InstantiationParams.builder()
- .sections(ImmutableSet.of(networkConfigSection()))
- .build();
+ .sections(ImmutableSet.of(networkConfigSection())).build();
return instantiationParams;
}
/** Build a {@link NetworkConfigSection} object. */
private NetworkConfigSection networkConfigSection() {
- NetworkConfigSection networkConfigSection = NetworkConfigSection.builder()
- .info("Configuration parameters for logical networks")
- .networkConfigs(
- ImmutableSet.of(
- VAppNetworkConfiguration.builder()
- .networkName("vAppNetwork")
- .configuration(networkConfiguration())
- .build()))
- .build();
+ NetworkConfigSection networkConfigSection = NetworkConfigSection
+ .builder()
+ .info("Configuration parameters for logical networks")
+ .networkConfigs(
+ ImmutableSet.of(VAppNetworkConfiguration.builder()
+ .networkName("vAppNetwork")
+ .configuration(networkConfiguration()).build())).build();
return networkConfigSection;
}
/** Build a {@link NetworkConfiguration} object. */
private NetworkConfiguration networkConfiguration() {
- Vdc vdc = context.getApi().getVdcApi().getVdc(vdcURI);
+ Vdc vdc = context.getApi().getVdcApi().get(vdcUrn);
assertNotNull(vdc, String.format(ENTITY_NON_NULL, VDC));
Set<Reference> networks = vdc.getAvailableNetworks();
-
+ network = lazyGetNetwork();
// Look up the network in the Vdc with the id configured for the tests
- Optional<Reference> parentNetwork = Iterables.tryFind(networks, new Predicate<Reference>() {
+ Optional<Reference> parentNetwork = tryFind(networks, new Predicate<Reference>() {
@Override
public boolean apply(Reference reference) {
- return reference.getHref().equals(networkURI);
+ return reference.getHref().equals(network.getHref());
}
});
// Check we actually found a network reference
if (!parentNetwork.isPresent()) {
- fail(String.format("Could not find network %s in vdc", networkURI.toASCIIString()));
+ fail(String.format("Could not find network %s in vdc", network.getHref().toASCIIString()));
}
// Build the configuration object
- NetworkConfiguration networkConfiguration = NetworkConfiguration.builder()
- .parentNetwork(parentNetwork.get())
- .fenceMode(Network.FenceMode.BRIDGED)
- .build();
+ NetworkConfiguration networkConfiguration = NetworkConfiguration.builder().parentNetwork(parentNetwork.get())
+ .fenceMode(Network.FenceMode.BRIDGED).build();
return networkConfiguration;
}
@@ -413,30 +648,26 @@
protected void cleanUpVAppTemplate(VAppTemplate vAppTemplate) {
VAppTemplateApi vappTemplateApi = context.getApi().getVAppTemplateApi();
try {
- Task task = vappTemplateApi.deleteVappTemplate(vAppTemplate.getHref());
- taskDoneEventually(task);
+ Task task = vappTemplateApi.remove(vAppTemplate.getId());
+ taskDoneEventually(task);
} catch (Exception e) {
logger.warn(e, "Error deleting template '%s'", vAppTemplate.getName());
}
- }
-
- protected void cleanUpVApp(VApp vApp) {
- cleanUpVApp(vApp.getHref());
}
- // TODO code tidy for cleanUpVApp? Seems extremely verbose!
- protected void cleanUpVApp(URI vAppURI) {
+ protected void cleanUpVApp(VApp vApp) {
VAppApi vAppApi = context.getApi().getVAppApi();
- VApp vApp = vAppApi.getVApp(vAppURI); // Refresh
+ String vAppUrn = vApp.getId();
+ vApp = vAppApi.get(vAppUrn); // Refresh
if (vApp == null) {
- logger.info("Cannot find VApp at %s", vAppURI.getPath());
- return; // Presumably vApp has already been deleted. Ignore.
+ logger.info("Cannot find VApp at %s", vAppUrn);
+ return; // Presumably vApp has already been removed. Ignore.
}
- logger.debug("Deleting VApp %s (%s)", vApp.getName(), vAppURI.getPath());
+ logger.debug("Deleting VApp %s (%s)", vApp.getName(), vAppUrn);
// Wait for busy tasks to complete (don't care if it's failed or successful)
- // Otherwise, get error on delete "entity is busy completing an operation.
+ // Otherwise, get error on remove "entity is busy completing an operation.
if (vApp.getTasks() != null) {
for (Task task : vApp.getTasks()) {
if (!taskDoneEventually(task)) {
@@ -448,7 +679,7 @@
// Shutdown and power off the VApp if necessary
if (vApp.getStatus() == Status.POWERED_ON) {
try {
- Task shutdownTask = vAppApi.shutdown(vAppURI);
+ Task shutdownTask = vAppApi.shutdown(vAppUrn);
taskDoneEventually(shutdownTask);
} catch (Exception e) {
// keep going; cleanup as much as possible
@@ -460,9 +691,8 @@
if (vApp.isDeployed()) {
try {
UndeployVAppParams params = UndeployVAppParams.builder()
- .undeployPowerAction(UndeployVAppParams.PowerAction.SHUTDOWN)
- .build();
- Task undeployTask = vAppApi.undeploy(vAppURI, params);
+ .undeployPowerAction(UndeployVAppParams.PowerAction.SHUTDOWN).build();
+ Task undeployTask = vAppApi.undeploy(vAppUrn, params);
taskDoneEventually(undeployTask);
} catch (Exception e) {
// keep going; cleanup as much as possible
@@ -471,13 +701,13 @@
}
try {
- Task task = vAppApi.deleteVApp(vAppURI);
+ Task task = vAppApi.remove(vAppUrn);
taskDoneEventually(task);
vAppNames.remove(vApp.getName());
logger.info("Deleted VApp %s", vApp.getName());
} catch (Exception e) {
- vApp = vAppApi.getVApp(vAppURI); // Refresh
- logger.warn(e, "Deleting VApp %s failed (%s)", vApp.getName(), vAppURI.getPath());
+ vApp = vAppApi.get(vApp.getId()); // Refresh
+ logger.warn(e, "Deleting VApp %s failed (%s)", vApp.getName(), vAppUrn);
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorExpectTest.java
index 08c1422..44c9d9c 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorExpectTest.java
@@ -30,14 +30,15 @@
import org.jclouds.http.HttpResponse;
import org.jclouds.rest.internal.BaseRestApiExpectTest;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.testng.annotations.BeforeGroups;
+import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Multimap;
import com.google.common.net.HttpHeaders;
import com.google.inject.Guice;
+import com.jamesmurty.utils.XMLBuilder;
/**
* Base class for writing vCloud Director REST api expect tests.
@@ -187,6 +188,7 @@
*
* @author danikov
*/
+ @Deprecated
public class VcloudHttpRequestPrimer {
private Multimap<String, String> headers = LinkedListMultimap.create();
private HttpRequest.Builder<?> builder = HttpRequest.builder();
@@ -230,6 +232,7 @@
}
}
+ @Deprecated
protected class VcloudHttpResponsePrimer {
private HttpResponse.Builder<?> builder = HttpResponse.builder();
@@ -245,11 +248,19 @@
}
}
- public URI toAdminUri(Reference ref) {
- return toAdminUri(ref.getHref());
+ protected static XMLBuilder createXMLBuilder(String root){
+ try {
+ return XMLBuilder.create(root);
+ } catch (Exception e) {
+ throw Throwables.propagate(e);
+ }
}
- public URI toAdminUri(URI uri) {
- return Reference.builder().href(uri).build().toAdminReference(endpoint).getHref();
+ protected static String asString(XMLBuilder in){
+ try {
+ return in.asString();
+ } catch (Exception e) {
+ throw Throwables.propagate(e);
+ }
}
}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/VCloudDirectorTestSession.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/VCloudDirectorTestSession.java
deleted file mode 100644
index 7e2d79b..0000000
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/VCloudDirectorTestSession.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.jclouds.vcloud.director.v1_5.internal;
-
-import static org.testng.Assert.assertEquals;
-
-import java.io.Closeable;
-import java.util.Properties;
-
-import org.jclouds.ContextBuilder;
-import org.jclouds.logging.log4j.config.Log4JLoggingModule;
-import org.jclouds.rest.RestContext;
-import org.jclouds.sshj.config.SshjSshClientModule;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorContext;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
-import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
-import org.jclouds.vcloud.director.v1_5.domain.Link;
-import org.jclouds.vcloud.director.v1_5.domain.Reference;
-import org.jclouds.vcloud.director.v1_5.domain.Role.DefaultRoles;
-import org.jclouds.vcloud.director.v1_5.domain.User;
-import org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates;
-import org.jclouds.vcloud.director.v1_5.predicates.ReferencePredicates;
-
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.io.Closeables;
-import com.google.inject.Module;
-
-public class VCloudDirectorTestSession implements Closeable {
-
- public static Builder builder() {
- return new Builder();
- }
-
- public static class Builder {
-
- private String provider;
- private String identity;
- private String credential;
- private Properties overrides;
- private String endpoint;
-
- public Builder provider(String provider) {
- this.provider = provider;
- return this;
- }
-
- public Builder identity(String identity) {
- this.identity = identity;
- return this;
- }
-
- public Builder credential(String credential) {
- this.credential = credential;
- return this;
- }
-
- public Builder overrides(Properties overrides) {
- this.overrides = overrides;
- return this;
- }
-
- public Builder endpoint(String endpoint) {
- this.endpoint = endpoint;
- return this;
- }
-
- public VCloudDirectorTestSession build() {
- return new VCloudDirectorTestSession(provider, identity, credential, overrides, endpoint);
- }
- }
-
- private VCloudDirectorContext userContext;
- private RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext;
-
- private VCloudDirectorTestSession(String provider, String identity, String credential, Properties overrides, String endpoint) {
- ContextBuilder builder = ContextBuilder.newBuilder(provider)
- .credentials(identity, credential)
- .endpoint(endpoint)
- .modules(ImmutableSet.<Module> of(new Log4JLoggingModule(), new SshjSshClientModule()))
- .overrides(overrides);
- userContext = VCloudDirectorContext.class.cast(builder.build());
-
- // Look for the admin link in the current session
- Link admin = Iterables.tryFind(
- userContext.getApi().getCurrentSession().getLinks(),
- Predicates.and(LinkPredicates.relEquals(Link.Rel.DOWN), ReferencePredicates.typeEquals(VCloudDirectorMediaType.ADMIN)))
- .orNull();
-
- // Get the admin context if the link exists
- if (admin != null) {
- adminContext = userContext.getAdminContext();
-
- // Lookup the user details
- Reference orgRef = Iterables.getFirst(userContext.getApi().getOrgApi().getOrgList().getOrgs(), null)
- .toAdminReference(endpoint);
- Reference userRef = Iterables.find(
- adminContext.getApi().getOrgApi().getOrg(orgRef.getHref()).getUsers(),
- ReferencePredicates.nameEquals(adminContext.getApi().getCurrentSession().getUser()));
- User user = adminContext.getApi().getUserApi().getUser(userRef.getHref());
-
- // Check that the user has the org admin role
- Reference userRole = user.getRole();
- assertEquals(userRole.getName(), DefaultRoles.ORG_ADMIN.value());
- }
- }
-
- @Override
- public void close() {
- // NOTE we only need to close the user context to log out
- Closeables.closeQuietly(userContext);
- }
-
- public VCloudDirectorContext getUserContext() {
- return userContext;
- }
-
- public RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> getAdminContext() {
- return adminContext;
- }
-}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java
index 04465c1..ec6cbf4 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java
@@ -72,7 +72,7 @@
sessionWithToken = api.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user, org, password);
assertEquals(sessionWithToken.getSession().getUser(), user);
- assertEquals(sessionWithToken.getSession().getOrg(), org);
+ assertEquals(sessionWithToken.getSession().get(), org);
assertTrue(sessionWithToken.getSession().getLinks().size() > 0);
assertNotNull(sessionWithToken.getToken());
}
diff --git a/labs/vcloud-director/src/test/resources/catalog/createdCatalogItem.xml b/labs/vcloud-director/src/test/resources/catalog/adddCatalogItem.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/catalog/createdCatalogItem.xml
rename to labs/vcloud-director/src/test/resources/catalog/adddCatalogItem.xml
diff --git a/labs/vcloud-director/src/test/resources/catalog/admin/createCatalog.xml b/labs/vcloud-director/src/test/resources/catalog/admin/addCatalog.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/catalog/admin/createCatalog.xml
rename to labs/vcloud-director/src/test/resources/catalog/admin/addCatalog.xml
diff --git a/labs/vcloud-director/src/test/resources/catalog/admin/createCatalogSource.xml b/labs/vcloud-director/src/test/resources/catalog/admin/addCatalogSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/catalog/admin/createCatalogSource.xml
rename to labs/vcloud-director/src/test/resources/catalog/admin/addCatalogSource.xml
diff --git a/labs/vcloud-director/src/test/resources/catalog/admin/updateCatalog.xml b/labs/vcloud-director/src/test/resources/catalog/admin/editCatalog.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/catalog/admin/updateCatalog.xml
rename to labs/vcloud-director/src/test/resources/catalog/admin/editCatalog.xml
diff --git a/labs/vcloud-director/src/test/resources/catalog/admin/updateCatalogSource.xml b/labs/vcloud-director/src/test/resources/catalog/admin/editCatalogSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/catalog/admin/updateCatalogSource.xml
rename to labs/vcloud-director/src/test/resources/catalog/admin/editCatalogSource.xml
diff --git a/labs/vcloud-director/src/test/resources/catalog/admin/updateOwnerSource.xml b/labs/vcloud-director/src/test/resources/catalog/admin/editOwnerSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/catalog/admin/updateOwnerSource.xml
rename to labs/vcloud-director/src/test/resources/catalog/admin/editOwnerSource.xml
diff --git a/labs/vcloud-director/src/test/resources/catalog/updateCatalogItem.xml b/labs/vcloud-director/src/test/resources/catalog/editCatalogItem.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/catalog/updateCatalogItem.xml
rename to labs/vcloud-director/src/test/resources/catalog/editCatalogItem.xml
diff --git a/labs/vcloud-director/src/test/resources/catalog/deleteMetadataEntryTask.xml b/labs/vcloud-director/src/test/resources/catalog/removeMetadataEntryTask.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/catalog/deleteMetadataEntryTask.xml
rename to labs/vcloud-director/src/test/resources/catalog/removeMetadataEntryTask.xml
diff --git a/labs/vcloud-director/src/test/resources/group/updateGroup.xml b/labs/vcloud-director/src/test/resources/group/editGroup.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/group/updateGroup.xml
rename to labs/vcloud-director/src/test/resources/group/editGroup.xml
diff --git a/labs/vcloud-director/src/test/resources/group/updateGroupSource.xml b/labs/vcloud-director/src/test/resources/group/editGroupSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/group/updateGroupSource.xml
rename to labs/vcloud-director/src/test/resources/group/editGroupSource.xml
diff --git a/labs/vcloud-director/src/test/resources/log4j.xml b/labs/vcloud-director/src/test/resources/log4j.xml
deleted file mode 100644
index 63810d3..0000000
--- a/labs/vcloud-director/src/test/resources/log4j.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
- <!--
- For more configuration infromation and examples see the Apache
- Log4j website: http://logging.apache.org/log4j/
- -->
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
- debug="false">
-
- <!-- A time/date based rolling appender -->
- <appender name="WIREFILE" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="File" value="target/test-data/jclouds-wire.log" />
- <param name="Append" value="true" />
-
- <!-- Rollover at midnight each day -->
- <param name="DatePattern" value="'.'yyyy-MM-dd" />
-
- <param name="Threshold" value="TRACE" />
-
- <layout class="org.apache.log4j.PatternLayout">
- <!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
-
- <!--
- The full pattern: Date MS Priority [Category]
- (Thread:NDC) Message\n <param name="ConversionPattern"
- value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
- -->
- </layout>
- </appender>
-
- <!-- A time/date based rolling appender -->
- <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="File" value="target/test-data/jclouds.log" />
- <param name="Append" value="true" />
-
- <!-- Rollover at midnight each day -->
- <param name="DatePattern" value="'.'yyyy-MM-dd" />
-
- <param name="Threshold" value="TRACE" />
-
- <layout class="org.apache.log4j.PatternLayout">
- <!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
-
- <!--
- The full pattern: Date MS Priority [Category]
- (Thread:NDC) Message\n <param name="ConversionPattern"
- value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
- -->
- </layout>
- </appender>
-
- <!-- A time/date based rolling appender -->
- <appender name="COMPUTEFILE" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="File" value="target/test-data/jclouds-compute.log" />
- <param name="Append" value="true" />
-
- <!-- Rollover at midnight each day -->
- <param name="DatePattern" value="'.'yyyy-MM-dd" />
-
- <param name="Threshold" value="TRACE" />
-
- <layout class="org.apache.log4j.PatternLayout">
- <!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
-
- <!--
- The full pattern: Date MS Priority [Category]
- (Thread:NDC) Message\n <param name="ConversionPattern"
- value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
- -->
- </layout>
- </appender>
-
- <!-- A time/date based rolling appender -->
- <appender name="SSHFILE" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="File" value="target/test-data/jclouds-ssh.log" />
- <param name="Append" value="true" />
-
- <!-- Rollover at midnight each day -->
- <param name="DatePattern" value="'.'yyyy-MM-dd" />
-
- <param name="Threshold" value="TRACE" />
-
- <layout class="org.apache.log4j.PatternLayout">
- <!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
-
- <!--
- The full pattern: Date MS Priority [Category]
- (Thread:NDC) Message\n <param name="ConversionPattern"
- value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
- -->
- </layout>
- </appender>
-
- <appender name="ASYNCCOMPUTE" class="org.apache.log4j.AsyncAppender">
- <appender-ref ref="COMPUTEFILE" />
- </appender>
-
- <appender name="ASYNCSSH" class="org.apache.log4j.AsyncAppender">
- <appender-ref ref="SSHFILE" />
- </appender>
-
- <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
- <appender-ref ref="FILE" />
- </appender>
-
- <appender name="ASYNCWIRE" class="org.apache.log4j.AsyncAppender">
- <appender-ref ref="WIREFILE" />
- </appender>
-
- <!-- ================ -->
- <!-- Limit categories -->
- <!-- ================ -->
-
- <category name="org.jclouds">
- <priority value="DEBUG" />
- <appender-ref ref="ASYNC" />
- </category>
-
- <category name="jclouds.headers">
- <priority value="DEBUG" />
- <appender-ref ref="ASYNCWIRE" />
- </category>
-
- <category name="jclouds.ssh">
- <priority value="DEBUG" />
- <appender-ref ref="ASYNCSSH" />
- </category>
-
- <category name="jclouds.wire">
- <priority value="DEBUG" />
- <appender-ref ref="ASYNCWIRE" />
- </category>
-
- <category name="jclouds.compute">
- <priority value="TRACE" />
- <appender-ref ref="ASYNCCOMPUTE" />
- </category>
- <!-- ======================= -->
- <!-- Setup the Root category -->
- <!-- ======================= -->
-
- <root>
- <priority value="WARN" />
- </root>
-
-</log4j:configuration>
diff --git a/labs/vcloud-director/src/test/resources/logback.xml b/labs/vcloud-director/src/test/resources/logback.xml
index 660584a..4c97319 100644
--- a/labs/vcloud-director/src/test/resources/logback.xml
+++ b/labs/vcloud-director/src/test/resources/logback.xml
@@ -1,5 +1,37 @@
<?xml version="1.0"?>
<configuration scan="false">
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+ <file>target/test-data/jclouds.log</file>
+
+ <encoder>
+ <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+ </encoder>
+ </appender>
+
+ <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender">
+ <file>target/test-data/jclouds-wire.log</file>
+
+ <encoder>
+ <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+ </encoder>
+ </appender>
+
+ <appender name="COMPUTEFILE" class="ch.qos.logback.core.FileAppender">
+ <file>target/test-data/jclouds-compute.log</file>
+
+ <encoder>
+ <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+ </encoder>
+ </appender>
+
+ <appender name="SSHFILE" class="ch.qos.logback.core.FileAppender">
+ <file>target/test-data/jclouds-ssh.log</file>
+
+ <encoder>
+ <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+ </encoder>
+ </appender>
+
<appender name="API" class="ch.qos.logback.core.FileAppender">
<file>target/test-data/api.log</file>
@@ -18,6 +50,31 @@
<level value="warn" />
</root>
+ <logger name="org.jclouds">
+ <level value="DEBUG" />
+ <appender-ref ref="FILE" />
+ </logger>
+
+ <logger name="jclouds.wire">
+ <level value="DEBUG" />
+ <appender-ref ref="WIREFILE" />
+ </logger>
+
+ <logger name="jclouds.headers">
+ <level value="DEBUG" />
+ <appender-ref ref="WIREFILE" />
+ </logger>
+
+ <logger name="jclouds.compute">
+ <level value="DEBUG" />
+ <appender-ref ref="COMPUTEFILE" />
+ </logger>
+
+ <logger name="jclouds.ssh">
+ <level value="DEBUG" />
+ <appender-ref ref="SSHFILE" />
+ </logger>
+
<logger name="jclouds.vcloud.api">
<level value="INFO" />
<appender-ref ref="API" />
diff --git a/labs/vcloud-director/src/test/resources/media/createMedia.xml b/labs/vcloud-director/src/test/resources/media/addMedia.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/media/createMedia.xml
rename to labs/vcloud-director/src/test/resources/media/addMedia.xml
diff --git a/labs/vcloud-director/src/test/resources/media/createMediaSource.xml b/labs/vcloud-director/src/test/resources/media/addMediaSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/media/createMediaSource.xml
rename to labs/vcloud-director/src/test/resources/media/addMediaSource.xml
diff --git a/labs/vcloud-director/src/test/resources/media/cloneMediaParams.xml b/labs/vcloud-director/src/test/resources/media/cloneMediaParams.xml
index 4081d71..fa767b0 100644
--- a/labs/vcloud-director/src/test/resources/media/cloneMediaParams.xml
+++ b/labs/vcloud-director/src/test/resources/media/cloneMediaParams.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CloneMediaParams name="moved test media" xmlns="http://www.vmware.com/vcloud/v1.5">
<Description>moved by testCloneMedia()</Description>
- <Source type="application/vnd.vmware.vcloud.media+xml" name="copied test media" id="urn:vcloud:media:da8361af-cccd-4103-a71c-493513c49094" href="https://mycloud.greenhousedata.com/api/media/da8361af-cccd-4103-a71c-493513c49094"/>
+ <Source type="application/vnd.vmware.vcloud.media+xml" name="copied test media" href="https://mycloud.greenhousedata.com/api/media/da8361af-cccd-4103-a71c-493513c49094"/>
<IsSourceDelete>false</IsSourceDelete>
</CloneMediaParams>
diff --git a/labs/vcloud-director/src/test/resources/media/updateMedia.xml b/labs/vcloud-director/src/test/resources/media/editMedia.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/media/updateMedia.xml
rename to labs/vcloud-director/src/test/resources/media/editMedia.xml
diff --git a/labs/vcloud-director/src/test/resources/media/updateMediaTask.xml b/labs/vcloud-director/src/test/resources/media/editMediaTask.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/media/updateMediaTask.xml
rename to labs/vcloud-director/src/test/resources/media/editMediaTask.xml
diff --git a/labs/vcloud-director/src/test/resources/media/deleteMediaTask.xml b/labs/vcloud-director/src/test/resources/media/removeMediaTask.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/media/deleteMediaTask.xml
rename to labs/vcloud-director/src/test/resources/media/removeMediaTask.xml
diff --git a/labs/vcloud-director/src/test/resources/media/deleteMetadataEntryTask.xml b/labs/vcloud-director/src/test/resources/media/removeMetadataEntryTask.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/media/deleteMetadataEntryTask.xml
rename to labs/vcloud-director/src/test/resources/media/removeMetadataEntryTask.xml
diff --git a/labs/vcloud-director/src/test/resources/network/admin/editNetworkSource.xml b/labs/vcloud-director/src/test/resources/network/admin/editNetworkSource.xml
new file mode 100644
index 0000000..41363dc
--- /dev/null
+++ b/labs/vcloud-director/src/test/resources/network/admin/editNetworkSource.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<OrgNetwork name="ilsolation01-Jclouds" id="urn:vcloud:network:f3ba8256-6f48-4512-aad6-600e85b4dc38" type="application/vnd.vmware.vcloud.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38" xmlns="http://www.vmware.com/vcloud/v1.5">
+ <Link rel="up" type="application/vnd.vmware.vcloud.org+xml" href="https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"/>
+ <Link rel="down" type="application/vnd.vmware.vcloud.metadata+xml" href="https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/metadata"/>
+ <Description></Description>
+ <Configuration>
+ <IpScope>
+ <IsInherited>false</IsInherited>
+ <Gateway>192.168.1.1</Gateway>
+ <Netmask>255.255.255.0</Netmask>
+ <Dns1>173.240.111.52</Dns1>
+ <Dns2>173.240.111.53</Dns2>
+ <IpRanges>
+ <IpRange>
+ <StartAddress>192.168.1.100</StartAddress>
+ <EndAddress>192.168.1.199</EndAddress>
+ </IpRange>
+ </IpRanges>
+ </IpScope>
+ <FenceMode>isolated</FenceMode>
+ <RetainNetInfoAcrossDeployments>false</RetainNetInfoAcrossDeployments>
+ <Features>
+ <DhcpService>
+ <IsEnabled>false</IsEnabled>
+ <DefaultLeaseTime>3600</DefaultLeaseTime>
+ <MaxLeaseTime>7200</MaxLeaseTime>
+ <IpRange>
+ <StartAddress>192.168.1.2</StartAddress>
+ <EndAddress>192.168.1.99</EndAddress>
+ </IpRange>
+ </DhcpService>
+ </Features>
+ <SyslogServerSettings/>
+ </Configuration>
+ <AllowedExternalIpAddresses/>
+</OrgNetwork>
\ No newline at end of file
diff --git a/labs/vcloud-director/src/test/resources/network/admin/updateNetworkTask.xml b/labs/vcloud-director/src/test/resources/network/admin/editNetworkTask.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/network/admin/updateNetworkTask.xml
rename to labs/vcloud-director/src/test/resources/network/admin/editNetworkTask.xml
diff --git a/labs/vcloud-director/src/test/resources/network/admin/resetNetworkTask.xml b/labs/vcloud-director/src/test/resources/network/admin/resetNetworkTask.xml
index e69de29..16dbd18 100644
--- a/labs/vcloud-director/src/test/resources/network/admin/resetNetworkTask.xml
+++ b/labs/vcloud-director/src/test/resources/network/admin/resetNetworkTask.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Task xmlns="http://www.vmware.com/vcloud/v1.5" status="running" startTime="2012-03-14T12:39:23.720-04:00" operationName="networkResetNetwork" operation="Resetting Network ilsolation01-Jclouds(f3ba8256-6f48-4512-aad6-600e85b4dc38)" expiryTime="2012-06-12T12:39:23.720-04:00" name="task" id="urn:vcloud:task:49d2e180-7921-4902-ac39-b4ff5406bb94" type="application/vnd.vmware.vcloud.task+xml" href="https://vcloudbeta.bluelock.com/api/task/49d2e180-7921-4902-ac39-b4ff5406bb94" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://vcloudbeta.bluelock.com/api/v1.5/schema/master.xsd">
+ <Link rel="task:cancel" href="https://vcloudbeta.bluelock.com/api/task/49d2e180-7921-4902-ac39-b4ff5406bb94/action/cancel"/>
+ <Owner type="application/vnd.vmware.vcloud.network+xml" name="ilsolation01-Jclouds" href="https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"/>
+ <User type="application/vnd.vmware.admin.user+xml" name="dan@cloudsoftcorp.com" href="https://vcloudbeta.bluelock.com/api/admin/user/ae75edd2-12de-414c-8e85-e6ea10442c08"/>
+ <Organization type="application/vnd.vmware.vcloud.org+xml" name="JClouds" href="https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"/>
+</Task>
\ No newline at end of file
diff --git a/labs/vcloud-director/src/test/resources/network/admin/updateNetworkSource.xml b/labs/vcloud-director/src/test/resources/network/admin/updateNetworkSource.xml
deleted file mode 100644
index 81d08a6..0000000
--- a/labs/vcloud-director/src/test/resources/network/admin/updateNetworkSource.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<OrgNetwork name="ilsolation01-Jclouds" id="urn:vcloud:network:f3ba8256-6f48-4512-aad6-600e85b4dc38" type="application/vnd.vmware.vcloud.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38" xmlns="http://www.vmware.com/vcloud/v1.5">
- <Link rel="alternate" type="application/vnd.vmware.vcloud.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"/>
- <Link rel="edit" type="application/vnd.vmware.admin.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"/>
- <Link rel="up" type="application/vnd.vmware.admin.organization+xml" href="https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"/>
- <Link rel="repair" type="application/vnd.vmware.admin.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/action/reset"/>
- <Link rel="down" type="application/vnd.vmware.vcloud.metadata+xml" href="https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/metadata"/>
- <Description></Description>
- <Configuration>
- <IpScope>
- <IsInherited>false</IsInherited>
- <Gateway>192.168.1.1</Gateway>
- <Netmask>255.255.255.0</Netmask>
- <Dns1>173.240.111.52</Dns1>
- <Dns2>173.240.111.53</Dns2>
- <IpRanges>
- <IpRange>
- <StartAddress>192.168.1.100</StartAddress>
- <EndAddress>192.168.1.199</EndAddress>
- </IpRange>
- </IpRanges>
- </IpScope>
- <FenceMode>isolated</FenceMode>
- <RetainNetInfoAcrossDeployments>false</RetainNetInfoAcrossDeployments>
- <Features>
- <DhcpService>
- <IsEnabled>false</IsEnabled>
- <DefaultLeaseTime>3600</DefaultLeaseTime>
- <MaxLeaseTime>7200</MaxLeaseTime>
- <IpRange>
- <StartAddress>192.168.1.2</StartAddress>
- <EndAddress>192.168.1.99</EndAddress>
- </IpRange>
- </DhcpService>
- </Features>
- <SyslogServerSettings/>
- </Configuration>
- <NetworkPool type="application/vnd.vmware.admin.networkPool+xml" name="vcdni01" href="https://vcloudbeta.bluelock.com/api/admin/extension/networkPool/e86bfdb5-b3e0-4ece-9125-e764ac64c95c"/>
- <AllowedExternalIpAddresses/>
-</OrgNetwork>
\ No newline at end of file
diff --git a/labs/vcloud-director/src/test/resources/org/admin/updateEmailSettings.xml b/labs/vcloud-director/src/test/resources/org/admin/editEmailSettings.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/org/admin/updateEmailSettings.xml
rename to labs/vcloud-director/src/test/resources/org/admin/editEmailSettings.xml
diff --git a/labs/vcloud-director/src/test/resources/org/admin/updateEmailSettingsSource.xml b/labs/vcloud-director/src/test/resources/org/admin/editEmailSettingsSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/org/admin/updateEmailSettingsSource.xml
rename to labs/vcloud-director/src/test/resources/org/admin/editEmailSettingsSource.xml
diff --git a/labs/vcloud-director/src/test/resources/org/admin/updatePasswordPolicy.xml b/labs/vcloud-director/src/test/resources/org/admin/editPasswordPolicy.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/org/admin/updatePasswordPolicy.xml
rename to labs/vcloud-director/src/test/resources/org/admin/editPasswordPolicy.xml
diff --git a/labs/vcloud-director/src/test/resources/org/admin/updatePasswordPolicySource.xml b/labs/vcloud-director/src/test/resources/org/admin/editPasswordPolicySource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/org/admin/updatePasswordPolicySource.xml
rename to labs/vcloud-director/src/test/resources/org/admin/editPasswordPolicySource.xml
diff --git a/labs/vcloud-director/src/test/resources/org/admin/updateVAppLeaseSettings.xml b/labs/vcloud-director/src/test/resources/org/admin/editVAppLeaseSettings.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/org/admin/updateVAppLeaseSettings.xml
rename to labs/vcloud-director/src/test/resources/org/admin/editVAppLeaseSettings.xml
diff --git a/labs/vcloud-director/src/test/resources/org/admin/updateVAppLeaseSettingsSource.xml b/labs/vcloud-director/src/test/resources/org/admin/editVAppLeaseSettingsSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/org/admin/updateVAppLeaseSettingsSource.xml
rename to labs/vcloud-director/src/test/resources/org/admin/editVAppLeaseSettingsSource.xml
diff --git a/labs/vcloud-director/src/test/resources/task/taskslist.xml b/labs/vcloud-director/src/test/resources/task/tasksList.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/task/taskslist.xml
rename to labs/vcloud-director/src/test/resources/task/tasksList.xml
diff --git a/labs/vcloud-director/src/test/resources/user/createUser.xml b/labs/vcloud-director/src/test/resources/user/addUser.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/user/createUser.xml
rename to labs/vcloud-director/src/test/resources/user/addUser.xml
diff --git a/labs/vcloud-director/src/test/resources/user/createUserSource.xml b/labs/vcloud-director/src/test/resources/user/addUserSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/user/createUserSource.xml
rename to labs/vcloud-director/src/test/resources/user/addUserSource.xml
diff --git a/labs/vcloud-director/src/test/resources/user/updateUser.xml b/labs/vcloud-director/src/test/resources/user/editUser.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/user/updateUser.xml
rename to labs/vcloud-director/src/test/resources/user/editUser.xml
diff --git a/labs/vcloud-director/src/test/resources/user/updateUserSource.xml b/labs/vcloud-director/src/test/resources/user/editUserSource.xml
similarity index 100%
rename from labs/vcloud-director/src/test/resources/user/updateUserSource.xml
rename to labs/vcloud-director/src/test/resources/user/editUserSource.xml
diff --git a/providers/ninefold-compute/pom.xml b/providers/ninefold-compute/pom.xml
index 17ab38c..a935525 100644
--- a/providers/ninefold-compute/pom.xml
+++ b/providers/ninefold-compute/pom.xml
@@ -39,7 +39,7 @@
<test.ninefold-compute.build-version />
<test.ninefold-compute.identity>FIXME_IDENTITY</test.ninefold-compute.identity>
<test.ninefold-compute.credential>FIXME_CREDENTIAL</test.ninefold-compute.credential>
- <test.ninefold-compute.template>imageId=1215,loginUser=user:Password01,authenticateSudo=true</test.ninefold-compute.template>
+ <test.ninefold-compute.template></test.ninefold-compute.template>
<jclouds.osgi.export>org.jclouds.ninefold.compute*;version="${project.version}"</jclouds.osgi.export>
<jclouds.osgi.import>
org.jclouds.compute.internal;version="${project.version}",
diff --git a/providers/ninefold-compute/src/main/java/org/jclouds/ninefold/compute/NinefoldComputeProviderMetadata.java b/providers/ninefold-compute/src/main/java/org/jclouds/ninefold/compute/NinefoldComputeProviderMetadata.java
index f9a4d32..2cdf200 100644
--- a/providers/ninefold-compute/src/main/java/org/jclouds/ninefold/compute/NinefoldComputeProviderMetadata.java
+++ b/providers/ninefold-compute/src/main/java/org/jclouds/ninefold/compute/NinefoldComputeProviderMetadata.java
@@ -38,7 +38,8 @@
public static Properties defaultProperties() {
Properties properties = new Properties();
- properties.setProperty(TEMPLATE, "imageId=1215,loginUser=user:Password01,authenticateSudo=true");
+ // https://ninefold.com/support/display/SPT/Ubuntu+10.04+64+Bit+Micro+Server+with+CHEF
+ properties.setProperty(TEMPLATE, "imageNameMatches=.*Micro.*,osFamily=UBUNTU,osVersionMatches=1[012].[01][04],loginUser=user:Password01,authenticateSudo=true");
return properties;
}
diff --git a/providers/ninefold-compute/src/test/java/org/jclouds/ninefold/compute/compute/NinefoldComputeTemplateBuilderLiveTest.java b/providers/ninefold-compute/src/test/java/org/jclouds/ninefold/compute/compute/NinefoldComputeTemplateBuilderLiveTest.java
index 912727f..144b619 100644
--- a/providers/ninefold-compute/src/test/java/org/jclouds/ninefold/compute/compute/NinefoldComputeTemplateBuilderLiveTest.java
+++ b/providers/ninefold-compute/src/test/java/org/jclouds/ninefold/compute/compute/NinefoldComputeTemplateBuilderLiveTest.java
@@ -52,16 +52,18 @@
@Override
public boolean apply(OsFamilyVersion64Bit input) {
switch (input.family) {
- case UBUNTU:
- return input.version.equals("") || input.version.equals("10.04");
- case SUSE:
- return (input.version.equals("") || input.version.equals("11")) && input.is64Bit;
- case CENTOS:
- return (input.version.equals("") || input.version.equals("5.5")) && input.is64Bit;
- case WINDOWS:
- return input.version.equals("") || (input.version.equals("2008") && !input.is64Bit);
- default:
- return false;
+ case UBUNTU:
+ return input.version.equals("") || input.version.equals("10.04");
+ case SUSE:
+ return (input.version.equals("") || input.version.equals("11")) && input.is64Bit;
+ case DEBIAN:
+ return (input.version.equals("") || input.version.equals("6.0")) && !input.is64Bit;
+ case CENTOS:
+ return (input.version.equals("") || input.version.equals("5.5")) && input.is64Bit;
+ case WINDOWS:
+ return input.version.equals("") || (input.version.equals("2008") && !input.is64Bit);
+ default:
+ return false;
}
}
@@ -72,14 +74,19 @@
public void testDefaultTemplateBuilder() throws IOException {
Template defaultTemplate = this.view.getComputeService().templateBuilder().build();
if (template == null) {
+ assert defaultTemplate.getImage().getOperatingSystem().getVersion().matches("1[012].[10][04]") : defaultTemplate
+ .getImage().getOperatingSystem().getVersion();
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
- assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "10.04");
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
assertEquals(defaultTemplate.getLocation().getId(), "1");
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
+ assertEquals(defaultTemplate.getOptions().getLoginUser(), "user");
+ assertEquals(defaultTemplate.getOptions().getLoginPassword(), "Password01");
+ assertEquals(defaultTemplate.getOptions().getLoginPrivateKey(), null);
+ assertEquals(defaultTemplate.getOptions().shouldAuthenticateSudo(), Boolean.TRUE);
} else {
assertEquals(defaultTemplate.getImage(), this.view.getComputeService().templateBuilder().from(template)
- .build().getImage());
+ .build().getImage());
}
}
diff --git a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/ScriptBuilderTest.java b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/ScriptBuilderTest.java
index aa7409a..e5d3664 100644
--- a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/ScriptBuilderTest.java
+++ b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/ScriptBuilderTest.java
@@ -26,18 +26,23 @@
import static org.jclouds.scriptbuilder.domain.Statements.newStatementList;
import static org.jclouds.scriptbuilder.domain.Statements.switchArg;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
import java.io.IOException;
import java.net.MalformedURLException;
+import java.util.Map;
import org.jclouds.scriptbuilder.domain.OsFamily;
import org.jclouds.scriptbuilder.domain.ShellToken;
+import org.jclouds.scriptbuilder.domain.Statement;
import org.jclouds.scriptbuilder.domain.SwitchArg;
+import org.jclouds.scriptbuilder.util.Utils;
import org.testng.annotations.Test;
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.common.io.CharStreams;
import com.google.common.io.Resources;
@@ -146,5 +151,22 @@
public void testExportNPE() {
new ScriptBuilder().addEnvironmentVariableScope(null, null);
}
+
+ @Test
+ public void testResolveFunctionDependenciesForStatementsUNIX() {
+ ImmutableMap<String, String> defaultFunctions = ImmutableMap.of("abort",
+ Utils.writeFunctionFromResource("abort", OsFamily.UNIX));
+ for (String fn : defaultFunctions.values()) {
+ assertTrue(fn.indexOf("\r\n") == -1, "windows linefeeds!");
+ }
+
+ Map<String, String> resolvedFunctions = ScriptBuilder.resolveFunctionDependenciesForStatements(defaultFunctions,
+ ImmutableSet.<Statement> of(call("nonewline")), OsFamily.UNIX);
+
+ assertEquals(
+ resolvedFunctions,
+ ImmutableMap.of("abort", Utils.writeFunctionFromResource("abort", OsFamily.UNIX), "nonewline",
+ Utils.writeFunctionFromResource("nonewline", OsFamily.UNIX)));
+ }
}