From 7db0519d0baf7d4dce90f184343ef1cd7fe7b840 Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Fri, 24 Aug 2012 00:19:49 -0700 Subject: [PATCH] decrufted metadataapi --- .../v1_5/binders/BindMapAsMetadata.java | 49 ++++++++ .../binders/BindStringAsMetadataValue.java | 66 ++++++++++ .../director/v1_5/binders/package-info.java} | 31 +++-- .../vcloud/director/v1_5/domain/Metadata.java | 12 +- .../director/v1_5/domain/MetadataValue.java | 113 ------------------ .../director/v1_5/features/MetadataApi.java | 31 ++--- .../v1_5/features/MetadataAsyncApi.java | 35 +++--- .../v1_5/functions/RegexValueParser.java | 58 +++++++++ .../director/v1_5/HttpClientLiveTest.java | 107 ----------------- .../v1_5/binders/BindMapAsMetadataTest.java | 57 +++++++++ .../BindStringAsMetadataValueTest.java | 52 ++++++++ .../vcloud/director/v1_5/domain/Checks.java | 74 ++++-------- .../v1_5/features/CatalogApiExpectTest.java | 40 ++----- .../v1_5/features/CatalogApiLiveTest.java | 77 +++++------- .../v1_5/features/MediaApiExpectTest.java | 43 ++----- .../v1_5/features/MediaApiLiveTest.java | 69 ++++------- .../v1_5/features/NetworkApiExpectTest.java | 16 +-- .../v1_5/features/NetworkApiLiveTest.java | 24 ++-- .../v1_5/features/OrgApiExpectTest.java | 15 +-- .../v1_5/features/OrgApiLiveTest.java | 14 +-- .../v1_5/features/VAppApiLiveTest.java | 31 ++--- .../v1_5/features/VAppNetworksLiveTest.java | 2 +- .../features/VAppTemplateApiExpectTest.java | 23 ++-- .../features/VAppTemplateApiLiveTest.java | 22 ++-- .../v1_5/features/VdcApiExpectTest.java | 10 +- .../v1_5/features/VdcApiLiveTest.java | 14 +-- .../director/v1_5/features/VmApiLiveTest.java | 40 +++---- .../features/admin/AdminVdcApiLiveTest.java | 38 +++--- .../BaseVCloudDirectorExpectTest.java | 2 +- .../resources/vapptemplate/metadataValue.xml | 3 +- 30 files changed, 511 insertions(+), 657 deletions(-) create mode 100644 labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/BindMapAsMetadata.java create mode 100644 labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/BindStringAsMetadataValue.java rename labs/{carrenza-vcloud-director/src/test/java/org/jclouds/carrenza/vcloud/director/CarrenzaVCloudDirectorHttpClientLiveTest.java => vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/package-info.java} (57%) create mode 100644 labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/RegexValueParser.java delete mode 100644 labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java create mode 100644 labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/binders/BindMapAsMetadataTest.java create mode 100644 labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/binders/BindStringAsMetadataValueTest.java diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/BindMapAsMetadata.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/BindMapAsMetadata.java new file mode 100644 index 0000000000..549f41ac19 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/BindMapAsMetadata.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.binders; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.Map; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.http.HttpRequest; +import org.jclouds.rest.binders.BindToXMLPayload; +import org.jclouds.vcloud.director.v1_5.domain.Metadata; +import org.jclouds.xml.XMLParser; + +/** + * Changes a Map to the crufty {@link Metadata type} + */ +@Singleton +public class BindMapAsMetadata extends BindToXMLPayload { + + @Inject + public BindMapAsMetadata(final XMLParser xmlParser) { + super(xmlParser); + } + + @SuppressWarnings("unchecked") + @Override + public R bindToRequest(final R request, final Object input) { + return super.bindToRequest(request, Metadata.toMetadata(Map.class.cast(checkNotNull(input, "input")))); + } +} diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/BindStringAsMetadataValue.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/BindStringAsMetadataValue.java new file mode 100644 index 0000000000..4f1d489757 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/BindStringAsMetadataValue.java @@ -0,0 +1,66 @@ +/** + * 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.binders; + +import static com.google.common.base.Preconditions.checkNotNull; + +import javax.inject.Inject; +import javax.inject.Singleton; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import org.jclouds.http.HttpRequest; +import org.jclouds.rest.binders.BindToXMLPayload; +import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; +import org.jclouds.vcloud.director.v1_5.domain.Resource; +import org.jclouds.xml.XMLParser; + +/** + * Changes a String to the crufty {@link MetadataValue type} + */ +@Singleton +public class BindStringAsMetadataValue extends BindToXMLPayload { + @XmlRootElement(name = "MetadataValue") + public static class MetadataValue extends Resource { + public static final String MEDIA_TYPE = VCloudDirectorMediaType.METADATA_VALUE; + + public MetadataValue() { + + } + + public MetadataValue(String value) { + super(Resource.builder()); + this.value = value; + } + + @XmlElement(name = "Value", required = true) + private String value; + + } + + @Inject + public BindStringAsMetadataValue(final XMLParser xmlParser) { + super(xmlParser); + } + + @Override + public R bindToRequest(final R request, final Object input) { + return super.bindToRequest(request, new MetadataValue(checkNotNull(input, "input").toString())); + } +} diff --git a/labs/carrenza-vcloud-director/src/test/java/org/jclouds/carrenza/vcloud/director/CarrenzaVCloudDirectorHttpClientLiveTest.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/package-info.java similarity index 57% rename from labs/carrenza-vcloud-director/src/test/java/org/jclouds/carrenza/vcloud/director/CarrenzaVCloudDirectorHttpClientLiveTest.java rename to labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/package-info.java index f3959fa55c..3aa81f6b6a 100644 --- a/labs/carrenza-vcloud-director/src/test/java/org/jclouds/carrenza/vcloud/director/CarrenzaVCloudDirectorHttpClientLiveTest.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/binders/package-info.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,21 +16,20 @@ * specific language governing permissions and limitations * under the License. */ -package org.jclouds.carrenza.vcloud.director; +@XmlSchema(namespace = VCLOUD_1_5_NS, + elementFormDefault = XmlNsForm.QUALIFIED, + xmlns = { + @XmlNs(prefix = "", namespaceURI = VCLOUD_1_5_NS) + } +) +@XmlAccessorType(XmlAccessType.FIELD) +package org.jclouds.vcloud.director.v1_5.binders; -import org.jclouds.vcloud.director.v1_5.HttpClientLiveTest; -import org.testng.annotations.Test; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_1_5_NS; -/** - * {@inheritDoc} - * - * @author danikov - * @author grkvlt - */ -@Test(groups = { "live", "user" }, singleThreaded = true, testName = "CarrenzaVCloudDirectorHttpClientLiveTest") -public class CarrenzaVCloudDirectorHttpClientLiveTest extends HttpClientLiveTest { +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlNs; +import javax.xml.bind.annotation.XmlNsForm; +import javax.xml.bind.annotation.XmlSchema; - public CarrenzaVCloudDirectorHttpClientLiveTest() { - provider = "carrenza-vcloud-director"; - } -} 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 266cd2b144..fc7118e1f2 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 @@ -48,6 +48,16 @@ import com.google.common.collect.Sets; */ @XmlRootElement(name = "Metadata") public class Metadata extends Resource implements Map { + + public static Metadata toMetadata(Map input) { + if (input instanceof Metadata) + return Metadata.class.cast(input); + Builder builder = builder(); + for (Map.Entry entry : input.entrySet()) { + builder.entry(MetadataEntry.builder().entry(entry.getKey(), entry.getValue()).build()); + } + return builder.build(); + } public static final String MEDIA_TYPE = VCloudDirectorMediaType.METADATA; @@ -66,7 +76,7 @@ public class Metadata extends Resource implements Map { public static abstract class Builder> extends Resource.Builder { private Set metadataEntries = Sets.newLinkedHashSet(); - + /** * @see Metadata#getMetadataEntries() */ diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/MetadataValue.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/MetadataValue.java index 6a6969489a..c7030b8436 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/MetadataValue.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/MetadataValue.java @@ -42,116 +42,3 @@ import com.google.common.collect.Sets; * * @author grkvlt@apache.org */ -@XmlRootElement(name = "MetadataValue") -public class MetadataValue extends Resource { - - public static final String MEDIA_TYPE = VCloudDirectorMediaType.METADATA_ENTRY; - - public static Builder builder() { - return new ConcreteBuilder(); - } - - @Override - public Builder toBuilder() { - return builder().fromMetadataValue(this); - } - - private static class ConcreteBuilder extends Builder { - } - - public static abstract class Builder> extends Resource.Builder { - private String value; - - /** - * @see MetadataValue#getValue - */ - public B value(String value) { - this.value = value; - return self(); - } - - @Override - public MetadataValue build() { - return new MetadataValue(this); - } - - /** - * @see ResourceType#getHref() - */ - @Override - public B href(URI href) { - super.href(href); - return self(); - } - - /** - * @see ResourceType#getType() - */ - @Override - public B type(String type) { - super.type(type); - return self(); - } - - /** - * @see ResourceType#getLinks() - */ - @Override - public B links(Set links) { - super.links(Sets.newLinkedHashSet(checkNotNull(links, "links"))); - return self(); - } - - /** - * @see ResourceType#getLinks() - */ - @Override - public B link(Link link) { - super.link(link); - return self(); - } - - public B fromMetadataValue(MetadataValue in) { - return fromResource(in).value(value); - } - } - - protected MetadataValue() { - // For JAXB - } - - protected MetadataValue(Builder builder) { - super(builder); - this.value = checkNotNull(builder.value, "value"); - } - - @XmlElement(name = "Value", required = true) - private String value; - - /** - * The value. - */ - public String getValue() { - return value; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - MetadataValue that = MetadataValue.class.cast(o); - return super.equals(that) && equal(this.value, that.value); - } - - @Override - public int hashCode() { - return Objects.hashCode(super.hashCode(), value); - } - - @Override - public ToStringHelper string() { - return super.string().add("value", value); - } -} 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 18db889110..fd9bb4293f 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,18 +18,18 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import java.util.Map; import java.util.concurrent.TimeUnit; import org.jclouds.concurrent.Timeout; 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.Task; /** * Provides synchronous access to {@link Metadata}. * * @see MetadataAsyncApi - * @author danikov + * @author danikov, Adrian Cole */ public interface MetadataApi { @@ -47,7 +47,7 @@ public interface MetadataApi { * * @return the metadata value, or null if not found */ - MetadataValue getValue(String key); + String get(String key); } @Timeout(duration = 180, timeUnit = TimeUnit.SECONDS) @@ -56,27 +56,30 @@ public interface MetadataApi { /** * 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 merge(Metadata metadata); + Task putAll(Map 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 putEntry(String key, MetadataValue metadataValue); + Task put(String key, String value); /** * 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 removeEntry(String key); + Task remove(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 dcb9b1bb56..32f542cb01 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 @@ -18,7 +18,7 @@ */ package org.jclouds.vcloud.director.v1_5.features; -import java.net.URI; +import java.util.Map; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -33,29 +33,29 @@ import org.jclouds.rest.annotations.BinderParam; 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.annotations.ResponseParser; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; +import org.jclouds.vcloud.director.v1_5.binders.BindMapAsMetadata; +import org.jclouds.vcloud.director.v1_5.binders.BindStringAsMetadataValue; 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; +import org.jclouds.vcloud.director.v1_5.functions.RegexValueParser; import com.google.common.util.concurrent.ListenableFuture; /** * @see MetadataApi - * @author danikov + * @author Adrian Cole, 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#get(URI) + * @see MetadataApi.Readable#get() */ @GET @Path("/metadata") @@ -65,14 +65,14 @@ public interface MetadataAsyncApi { ListenableFuture get(); /** - * @see MetadataApi.Readable#getValue(String) + * @see MetadataApi.Readable#get(String) */ @GET @Path("/metadata/{key}") @Consumes - @JAXBResponseParser + @ResponseParser(RegexValueParser.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class) - ListenableFuture getValue(@PathParam("key") String key); + ListenableFuture get(@PathParam("key") String key); } @@ -80,35 +80,34 @@ public interface MetadataAsyncApi { public static interface Writeable extends Readable { /** - * @see MetadataApi.Writable#merge(Metadata) + * @see MetadataApi.Writable#putAll */ @POST @Path("/metadata") @Consumes(VCloudDirectorMediaType.TASK) @Produces(VCloudDirectorMediaType.METADATA) @JAXBResponseParser - ListenableFuture merge(@BinderParam(BindToXMLPayload.class) Metadata metadata); + ListenableFuture putAll(@BinderParam(BindMapAsMetadata.class) Map metadata); /** - * @see MetadataApi.Writeable#putEntry(String, MetadataEntry) + * @see MetadataApi.Writeable#put */ @PUT @Path("/metadata/{key}") @Consumes(VCloudDirectorMediaType.TASK) @Produces(VCloudDirectorMediaType.METADATA_VALUE) @JAXBResponseParser - // TODO: this is rediculous. get rid of the MetadataValue type, as it is only a string! - ListenableFuture putEntry(@PathParam("key") String key, - @BinderParam(BindToXMLPayload.class) MetadataValue metadataValue); + ListenableFuture put(@PathParam("key") String key, + @BinderParam(BindStringAsMetadataValue.class) String metadataValue); /** - * @see MetadataApi.Writable#removeEntry(String) + * @see MetadataApi.Writable#remove */ @DELETE @Path("/metadata/{key}") @Consumes(VCloudDirectorMediaType.TASK) @JAXBResponseParser - ListenableFuture removeEntry(@PathParam("key") String key); + ListenableFuture remove(@PathParam("key") String key); } } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/RegexValueParser.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/RegexValueParser.java new file mode 100644 index 0000000000..bb28395da2 --- /dev/null +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/RegexValueParser.java @@ -0,0 +1,58 @@ +/** + * 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.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.inject.Inject; + +import org.jclouds.http.HttpResponse; +import org.jclouds.http.functions.ReturnStringIf2xx; + +import com.google.common.base.Function; +import com.google.inject.Singleton; + +/** + * + * @author Adrian Cole + */ +@Singleton +public class RegexValueParser implements Function { + Pattern pattern = Pattern.compile("([^<]+)"); + private final ReturnStringIf2xx returnStringIf200; + + @Inject + RegexValueParser(ReturnStringIf2xx returnStringIf200) { + this.returnStringIf200 = returnStringIf200; + } + + @Override + public String apply(HttpResponse response) { + String content = returnStringIf200.apply(response); + if (content != null) { + Matcher matcher = pattern.matcher(content); + if (matcher.find()) { + return matcher.group(1); + } + } + return null; + } + +} \ No newline at end of file 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 deleted file mode 100644 index 427db4a991..0000000000 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java +++ /dev/null @@ -1,107 +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; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; - -import java.io.IOException; - -import org.jclouds.crypto.CryptoStreams; -import org.jclouds.http.HttpRequest; -import org.jclouds.http.HttpResponse; -import org.jclouds.rest.HttpClient; -import org.jclouds.util.Strings2; -import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken; -import org.jclouds.vcloud.director.v1_5.domain.org.OrgList; -import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest; -import org.jclouds.xml.internal.JAXBParser; -import org.testng.annotations.Test; - -import com.google.common.collect.Iterables; - -/** - * Tests live behavior of operations that use {@link HttpClient}. - * - * @author danikov - */ -@Test(groups = { "live", "user" }, singleThreaded = true, testName = "HttpClientLiveTest") -public class HttpClientLiveTest extends BaseVCloudDirectorApiLiveTest { - - private JAXBParser parser = new JAXBParser("true"); - private SessionWithToken sessionWithToken; - - @Override - protected void setupRequiredApis() { - } - - @Test(description = "POST /login") - public void testPostLogin() throws IOException { - testLoginWithMethod("POST"); - } - - @Test(description = "GET /login") - public void testGetLogin() throws IOException { - testLoginWithMethod("GET"); - } - - private void testLoginWithMethod(final String method) throws IOException { - String user = identity.substring(0, identity.lastIndexOf('@')); - String org = identity.substring(identity.lastIndexOf('@') + 1); - String password = credential; - - String authHeader = "Basic " + CryptoStreams.base64(String.format("%s@%s:%s", checkNotNull(user), checkNotNull(org), checkNotNull(password)).getBytes("UTF-8")); - - HttpResponse response = context.getUtils().getHttpClient().invoke(HttpRequest.builder() - .method(method) - .endpoint(endpoint + "/login") - .addHeader("Authorization", authHeader) - .addHeader("Accept", "*/*").build()); - - sessionWithToken = SessionWithToken.builder().session(session).token(response.getFirstHeaderOrNull("x-vcloud-authorization")).build(); - - assertEquals(sessionWithToken.getSession().getUser(), user); - 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.size() > 0, "must have orgs"); - - context.getApi().getOrgApi().get(Iterables.getLast(orgList).getHref()); - } - - @Test(description = "GET /schema/{schemaFileName}", dependsOnMethods = { "testPostLogin", "testGetLogin" }) - public void testGetSchema() throws IOException { - String schemafileName = "master.xsd"; - HttpResponse response = context.getUtils().getHttpClient().invoke(HttpRequest.builder() - .method("GET") - .endpoint(endpoint + "/v1.5/schema/" + schemafileName) - .addHeader("x-vcloud-authorization", sessionWithToken.getToken()) - .addHeader("Accept", "*/*").build()); - - String schema = Strings2.toString(response.getPayload()); - - // TODO: asserting something about the schema - } - -} diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/binders/BindMapAsMetadataTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/binders/BindMapAsMetadataTest.java new file mode 100644 index 0000000000..9c6d056895 --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/binders/BindMapAsMetadataTest.java @@ -0,0 +1,57 @@ +/* + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + *(Link.builder().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(Link.builder().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.binders; + +import static org.testng.Assert.assertEquals; + +import javax.ws.rs.core.MediaType; + +import org.jclouds.http.HttpRequest; +import org.jclouds.xml.XMLParser; +import org.jclouds.xml.internal.JAXBParser; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableMap; + +/** + * Tests behavior of {@code BindMapAsMetadata}. + * + */ +@Test(groups = "unit", testName = "BindMapAsMetadataTest") +public class BindMapAsMetadataTest { + XMLParser xml = new JAXBParser("true"); + + @Test + public void testBindMap() { + BindMapAsMetadata binder = new BindMapAsMetadata(xml); + + HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://momma").build(); + request = binder.bindToRequest(request, ImmutableMap.of("foo", "bar")); + assertEquals(request.getPayload().getRawContent(), + XMLParser.DEFAULT_XML_HEADER + "\n"+ + "" + "\n"+ + " " + "\n" + + " foo" + "\n" + + " bar" + "\n" + + " " + "\n" + + "" + "\n"); + assertEquals(request.getPayload().getContentMetadata().getContentType(), MediaType.APPLICATION_XML); + } + +} diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/binders/BindStringAsMetadataValueTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/binders/BindStringAsMetadataValueTest.java new file mode 100644 index 0000000000..e7a2485585 --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/binders/BindStringAsMetadataValueTest.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 + *(Link.builder().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(Link.builder().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.binders; + +import static org.testng.Assert.assertEquals; + +import javax.ws.rs.core.MediaType; + +import org.jclouds.http.HttpRequest; +import org.jclouds.xml.XMLParser; +import org.jclouds.xml.internal.JAXBParser; +import org.testng.annotations.Test; + +/** + * Tests behavior of {@code BindStringAsMetadataValue}. + * + */ +@Test(groups = "unit", testName = "BindStringAsMetadataValueTest") +public class BindStringAsMetadataValueTest { + XMLParser xml = new JAXBParser("true"); + + @Test + public void testBindMap() { + BindStringAsMetadataValue binder = new BindStringAsMetadataValue(xml); + + HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://momma").build(); + request = binder.bindToRequest(request, "foo"); + assertEquals(request.getPayload().getRawContent(), + XMLParser.DEFAULT_XML_HEADER + "\n"+ + "" + "\n"+ + " foo" + "\n" + + "" + "\n"); + assertEquals(request.getPayload().getContentMetadata().getContentType(), MediaType.APPLICATION_XML); + } + +} 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 fa1e6d1bc4..017af88af1 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 @@ -141,7 +141,7 @@ public class Checks { } // Check parent type - checkResourceType(entity); + checkResource(entity); } /** @@ -173,20 +173,20 @@ public class Checks { /** * Assumes the validTypes to be vcloud-specific types. * - * @see #checkResourceType(ResourceType, Collection) + * @see #checkResource(Resource, Collection) */ - public static void checkResourceType(Resource resource) { - checkResourceType(resource, VCloudDirectorMediaType.ALL); + public static void checkResource(Resource resource) { + checkResource(resource, VCloudDirectorMediaType.ALL); } /** - * @see #checkResourceType(ResourceType, Collection) + * @see #checkResource(Resource, Collection) */ - public static void checkResourceType(Resource resource, String type) { - checkResourceType(resource, ImmutableSet.of(type)); + public static void checkResource(Resource resource, String type) { + checkResource(resource, ImmutableSet.of(type)); } - public static void checkResourceType(Resource resource, Collection validTypes) { + public static void checkResource(Resource resource, Collection validTypes) { // Check optional fields URI href = resource.getHref(); if (href != null) checkHref(href); @@ -294,7 +294,7 @@ public class Checks { } // Check parent type - checkResourceType(metadata); + checkResource(metadata); } public static void checkMetadataEntry(MetadataEntry metadataEntry) { @@ -303,15 +303,7 @@ public class Checks { assertNotNull(metadataEntry.getValue(), String.format(NOT_NULL_OBJ_FIELD_FMT, "Value", "MetadataEntry")); // Check parent type - checkResourceType(metadataEntry); - } - - public static void checkMetadataValue(MetadataValue metadataValue) { - // Check required elements and attributes - assertNotNull(metadataValue.getValue(), String.format(NOT_NULL_OBJ_FIELD_FMT, "Value", "MetadataValue")); - - // Check parent type - checkResourceType(metadataValue); + checkResource(metadataEntry); } public static void checkProgress(Integer progress) { @@ -339,7 +331,7 @@ public class Checks { public static void checkAdminOrg(AdminOrg org) { // required assertNotNull(org.getSettings(), String.format(NOT_NULL_OBJ_FIELD_FMT, "settings", "AdminOrg")); - checkResourceType(org, VCloudDirectorMediaType.ADMIN_ORG); + checkResource(org, VCloudDirectorMediaType.ADMIN_ORG); // optional for (Reference user : org.getUsers()) { @@ -387,7 +379,7 @@ public class Checks { } // Check parent type - checkResourceType(owner); + checkResource(owner); } public static void checkCatalogItem(CatalogItem catalogItem) { @@ -573,29 +565,13 @@ public class Checks { String.format(OBJ_FIELD_ATTRB_REQ, api, "MetadataEntry", entry.getValue(), "value")); // Check parent type - checkResourceType(entry); + checkResource(entry); } // Check parent type - checkResourceType(metadata); + checkResource(metadata); } - public static void checkMetadataValueFor(String api, MetadataValue metadataValue) { - checkMetadataValueFor(api, metadataValue, "value"); - } - - public static void checkMetadataValueFor(String api, MetadataValue metadataValue, String expectedValue) { - // Check required fields - String value = metadataValue.getValue(); - assertNotNull(value, - String.format(OBJ_FIELD_ATTRB_REQ, api, "MetadataEntry", - metadataValue.toString(), "value")); - assertEquals(value, expectedValue, - String.format(OBJ_FIELD_EQ, api, "metadataEntry.value", expectedValue, value)); - - // Check parent type - checkResourceType(metadataValue); - } public static void checkMetadataKeyAbsentFor(String api, Metadata metadata, String key) { Map metadataMap = metadataToMap(metadata); @@ -628,7 +604,7 @@ public class Checks { } // Check parent type - checkResourceType(question); + checkResource(question); } public static void checkVmQuestionAnswerChoice(VmQuestionAnswerChoice choice) { @@ -848,7 +824,7 @@ public class Checks { } // parent type - checkResourceType(settings); + checkResource(settings); } public static void checkEmailSettings(OrgEmailSettings settings) { @@ -864,7 +840,7 @@ public class Checks { // NOTE alertEmailsTo cannot be checked // parent type - checkResourceType(settings); + checkResource(settings); } public static void checkEmailAddress(String email) { @@ -889,7 +865,7 @@ public class Checks { } // parent type - checkResourceType(settings); + checkResource(settings); } public static void checkLdapSettings(OrgLdapSettings settings) { @@ -905,7 +881,7 @@ public class Checks { } // parent type - checkResourceType(settings); + checkResource(settings); } public static void checkCustomOrgLdapSettings(CustomOrgLdapSettings settings) { @@ -980,7 +956,7 @@ public class Checks { String.format(OBJ_FIELD_GTE_0, "OrgPasswordPolicySettings", "accountLockoutIntervalMinutes", settings.getAccountLockoutIntervalMinutes())); // parent type - checkResourceType(settings); + checkResource(settings); } public static void checkVAppLeaseSettings(OrgLeaseSettings settings) { @@ -996,7 +972,7 @@ public class Checks { } // parent type - checkResourceType(settings); + checkResource(settings); } public static void checkVAppTemplateLeaseSettings(OrgVAppTemplateLeaseSettings settings) { @@ -1008,7 +984,7 @@ public class Checks { } // parent type - checkResourceType(settings); + checkResource(settings); } public static void checkUser(User user) { @@ -1087,7 +1063,7 @@ public class Checks { } // Check parent type - checkResourceType(sections); + checkResource(sections); } public static void checkGuestCustomizationSection(GuestCustomizationSection section) { @@ -1220,7 +1196,7 @@ public class Checks { assertNotNull(val.getNetworkName(), String.format(NOT_NULL_OBJ_FIELD_FMT, "NetworkName", "VAppNetworkConfiguration")); checkNetworkConfiguration(val.getConfiguration()); - checkResourceType(val); + checkResource(val); } public static void checkNetworkConnectionSection(NetworkConnectionSection val) { @@ -1517,6 +1493,6 @@ public class Checks { } // parent type - checkResourceType(container); + checkResource(container); } } 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 365a90c45e..54fc8616fa 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 @@ -37,12 +37,12 @@ import org.jclouds.vcloud.director.v1_5.domain.CatalogItem; 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; -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.user.VCloudDirectorApi; import org.testng.annotations.Test; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.net.HttpHeaders; @@ -182,7 +182,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest { @Test public void testGetCatalogMetadataEntryHref() { VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse); - assertEquals(api.getCatalogApi().getMetadataApi(catalogHref).getValue("KEY"), metadataValue()); + assertEquals(api.getCatalogApi().getMetadataApi(catalogHref).get("KEY"), "VALUE"); } static String item = "a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df"; @@ -328,9 +328,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest { @Test public void testMergeCatalogItemMetadataHref() { VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, mergeItemMetadata, mergeItemMetadataResponse); - // TODO: horrendous way of representing Map - Metadata metadata = Metadata.builder().entry(MetadataEntry.builder().entry("KEY", "VALUE").build()).build(); - assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).merge(metadata), mergeMetadataTask()); + assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).putAll(ImmutableMap.of("KEY", "VALUE")), mergeMetadataTask()); } HttpRequest getItemMetadataValue = HttpRequest.builder() @@ -348,7 +346,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest { @Test public void testGetCatalogItemMetadataEntryHref() { VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getItemMetadataValue, getItemMetadataValueResponse); - assertEquals(api.getCatalogApi().getMetadataApi(itemHref).getValue("KEY"), itemMetadataValue()); + assertEquals(api.getCatalogApi().getMetadataApi(itemHref).get("KEY"), "VALUE"); } HttpRequest putItemMetadata = HttpRequest.builder() @@ -368,7 +366,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest { @Test public void testSetCatalogItemMetadataEntryHref() { VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, putItemMetadata, putItemMetadataResponse); - assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).putEntry("KEY", MetadataValue.builder().value("KITTENS").build()), setMetadataValueTask()); + assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).put("KEY", "KITTENS"), setMetadataValueTask()); } HttpRequest removeItemMetadataEntry = HttpRequest.builder() @@ -386,7 +384,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest { @Test public void testRemoveCatalogItemMetadataEntryHref() { VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, removeItemMetadataEntry, removeItemMetadataEntryResponse); - assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).removeEntry("KEY"), removeEntryTask()); + assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).remove("KEY"), removeTask()); } public static final Catalog catalog() { @@ -486,30 +484,6 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest { .entry("KEY", "VALUE") .build(); } - - public static MetadataValue metadataValue() { - return MetadataValue.builder() - .href(URI.create(endpoint + "/catalog/" + catalog + "/metadata/KEY")) - .link(Link.builder() - .rel("up") - .type("application/vnd.vmware.vcloud.metadata+xml") - .href(URI.create(endpoint + "/catalog/" + catalog + "/metadata")) - .build()) - .value("VALUE") - .build(); - } - - public static MetadataValue itemMetadataValue() { - return MetadataValue.builder() - .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata/KEY")) - .link(Link.builder() - .rel("up") - .type("application/vnd.vmware.vcloud.metadata+xml") - .href(URI.create(endpoint + "/catalogItem/" + item + "/metadata")) - .build()) - .value("VALUE") - .build(); - } public static CatalogItem catalogItem() { return CatalogItem.builder() @@ -607,7 +581,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest { .build(); } - public static Task removeEntryTask() { + public static Task removeTask() { 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/CatalogApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java index a34c669730..5c409a0dcd 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 @@ -24,7 +24,6 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.C 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; -import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkTask; import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals; import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.typeEquals; @@ -41,8 +40,6 @@ 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; 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; @@ -51,8 +48,7 @@ import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest; import org.testng.annotations.AfterClass; import org.testng.annotations.Test; -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; +import com.google.common.collect.ImmutableMap; /** * Tests live behavior of {@link CatalogApi}. @@ -180,29 +176,19 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest { Metadata catalogMetadata = catalogApi.getMetadataApi(catalogUrn).get(); checkMetadata(catalogMetadata); } - + @Test(description = "GET /catalog/{id}/metadata/{key}") public void testGetCatalogMetadataValue() { - - Metadata newMetadata = Metadata.builder().entry(MetadataEntry.builder().entry("KEY", "MARMALADE").build()) - .build(); - Task mergeCatalogMetadata = adminCatalogApi.getMetadataApi(catalogUrn).merge(newMetadata); + Task mergeCatalogMetadata = adminCatalogApi.getMetadataApi(catalogUrn) + .putAll(ImmutableMap.of("KEY", "MARMALADE")); assertTaskSucceedsLong(mergeCatalogMetadata); - + Metadata catalogMetadata = catalogApi.getMetadataApi(catalogUrn).get(); - MetadataEntry existingMetadataEntry = Iterables.find(catalogMetadata.getMetadataEntries(), - new Predicate() { - @Override - public boolean apply(MetadataEntry input) { - return input.getKey().equals("KEY"); - } - }); - MetadataValue metadataValue = catalogApi.getMetadataApi(catalogUrn) - .getValue("KEY"); - assertEquals(metadataValue.getValue(), existingMetadataEntry.getValue(), String.format(CORRECT_VALUE_OBJECT_FMT, - "Value", "MetadataValue", existingMetadataEntry.getValue(), metadataValue.getValue())); - checkMetadataValue(metadataValue); + + String metadataValue = catalogApi.getMetadataApi(catalogUrn).get("KEY"); + assertEquals(metadataValue, catalogMetadata.get("KEY"), String.format(CORRECT_VALUE_OBJECT_FMT, "Value", + "MetadataValue", catalogMetadata.get("KEY"), metadataValue)); } @Test(description = "GET /catalogItem/{id}/metadata", dependsOnMethods = "testAddCatalogItem") @@ -213,61 +199,52 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest { @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 before = catalogApi.getItemMetadataApi(catalogItem.getId()).get(); - Task mergeCatalogItemMetadata = catalogApi.getItemMetadataApi(catalogItem.getId()).merge(newMetadata); + Task mergeCatalogItemMetadata = catalogApi.getItemMetadataApi(catalogItem.getId()).putAll( + ImmutableMap.of("KEY", "MARMALADE", "VEGIMITE", "VALUE")); checkTask(mergeCatalogItemMetadata); assertTrue(retryTaskSuccess.apply(mergeCatalogItemMetadata), - String.format(TASK_COMPLETE_TIMELY, "mergeCatalogItemMetadata")); + 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"); + "Should have added at least one other MetadataEntry to the CatalogItem"); - MetadataValue keyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY"); - assertEquals(keyMetadataValue.getValue(), "MARMALADE", - "The Value of the MetadataValue for KEY should have changed"); - checkMetadataValue(keyMetadataValue); + String keyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).get("KEY"); + assertEquals(keyMetadataValue, "MARMALADE", "The Value of the MetadataValue for KEY should have changed"); - MetadataValue newKeyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("VEGIMITE"); + String newKeyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).get("VEGIMITE"); - assertEquals(newKeyMetadataValue.getValue(), "VALUE", - "The Value of the MetadataValue for NEW_KEY should have been set"); - checkMetadataValue(newKeyMetadataValue); + assertEquals(newKeyMetadataValue, "VALUE", "The Value of the MetadataValue for NEW_KEY should have been set"); } @Test(description = "GET /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testSetCatalogItemMetadataValue") public void testGetCatalogItemMetadataValue() { - MetadataValue metadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY"); - checkMetadataValue(metadataValue); + String metadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).get("KEY"); + assertNotNull(metadataValue); } @Test(description = "PUT /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testMergeCatalogItemMetadata") public void testSetCatalogItemMetadataValue() { - MetadataValue newMetadataValue = MetadataValue.builder().value("NEW").build(); - Task setCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).putEntry("KEY", - newMetadataValue); + Task setCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).put("KEY", "NEW"); checkTask(setCatalogItemMetadataValue); assertTrue(retryTaskSuccess.apply(setCatalogItemMetadataValue), - String.format(TASK_COMPLETE_TIMELY, "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); + String editedMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).get("KEY"); + assertEquals(editedMetadataValue, "NEW", + String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", "NEW", editedMetadataValue)); } @Test(description = "DELETE /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testGetCatalogItemMetadataValue") public void testRemoveCatalogItemMetadataValue() { - Task removeCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).removeEntry("KEY"); + Task removeCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).remove("KEY"); checkTask(removeCatalogItemMetadataValue); assertTrue(retryTaskSuccess.apply(removeCatalogItemMetadataValue), - String.format(TASK_COMPLETE_TIMELY, "removeCatalogItemMetadataValue")); - MetadataValue removed = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY"); + String.format(TASK_COMPLETE_TIMELY, "removeCatalogItemMetadataValue")); + String removed = catalogApi.getItemMetadataApi(catalogItem.getId()).get("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 3fbe284b43..6a66301594 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 @@ -33,7 +33,6 @@ import org.jclouds.vcloud.director.v1_5.domain.Media; 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.MetadataEntry; -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.Task; @@ -259,7 +258,7 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest { Metadata inputMetadata = metadata(); Task expectedTask = mergeMetadataTask(); - assertEquals(api.getMediaApi().getMetadataApi(mediaUri).merge(inputMetadata), expectedTask); + assertEquals(api.getMediaApi().getMetadataApi(mediaUri).putAll(inputMetadata), expectedTask); } public void testGetMetadataValue() { @@ -273,11 +272,8 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest { new VcloudHttpResponsePrimer() .xmlFilePayload("/media/metadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE) .httpResponseBuilder().build()); - - MetadataValue expected = metadataValue(); - - - assertEquals(api.getMediaApi().getMetadataApi(mediaUri).getValue("key"), expected); + + assertEquals(api.getMediaApi().getMetadataApi(mediaUri).get("key"), "value"); } @Test @@ -293,12 +289,10 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest { new VcloudHttpResponsePrimer() .xmlFilePayload("/media/setMetadataValueTask.xml", VCloudDirectorMediaType.TASK) .httpResponseBuilder().build()); - - MetadataValue inputMetadataValue = MetadataValue.builder().value("value").build(); - + Task expectedTask = setMetadataEntryTask(); - assertEquals(api.getMediaApi().getMetadataApi(mediaUri).putEntry("key", inputMetadataValue), expectedTask); + assertEquals(api.getMediaApi().getMetadataApi(mediaUri).put("key", "value"), expectedTask); } @Test @@ -314,9 +308,9 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest { .xmlFilePayload("/media/removeMetadataEntryTask.xml", VCloudDirectorMediaType.TASK) .httpResponseBuilder().build()); - Task expectedTask = removeEntryTask(); + Task expectedTask = removeTask(); - assertEquals(api.getMediaApi().getMetadataApi(mediaUri).removeEntry("key"), expectedTask); + assertEquals(api.getMediaApi().getMetadataApi(mediaUri).remove("key"), expectedTask); } @Test @@ -635,27 +629,6 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest { .build(); } - private static MetadataValue metadataValue() { - return MetadataValue.builder() - .type("application/vnd.vmware.vcloud.metadata.value+xml") - .href(URI.create("https://mycloud.greenhousedata.com/api/media/c93e5cdc-f29a-4749-8ed2-093df04cc75e/metadata/key")) - .link(Link.builder() - .rel("up") - .type("application/vnd.vmware.vcloud.metadata+xml") - .href(URI.create("https://mycloud.greenhousedata.com/api/media/c93e5cdc-f29a-4749-8ed2-093df04cc75e/metadata")) - .build()) - .link(Link.builder() - .rel("edit") - .type("application/vnd.vmware.vcloud.metadata.value+xml") - .href(URI.create("https://mycloud.greenhousedata.com/api/media/c93e5cdc-f29a-4749-8ed2-093df04cc75e/metadata/key")) - .build()) - .link(Link.builder() - .rel("remove") - .href(URI.create("https://mycloud.greenhousedata.com/api/media/c93e5cdc-f29a-4749-8ed2-093df04cc75e/metadata/key")) - .build()) - .value("value").build(); - } - private Task mergeMetadataTask() { return Task.builder() .status("running") @@ -722,7 +695,7 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest { .build(); } - public static Task removeEntryTask() { + public static Task removeTask() { 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 66d611d68e..6b7af00e2c 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 @@ -27,7 +27,6 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.G import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_DEL; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_ATTRB_DEL; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_CLONE; -import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_CONTAINS; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_EQ; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_LIST_SIZE_EQ; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_LIST_SIZE_GE; @@ -55,8 +54,6 @@ import org.jclouds.vcloud.director.v1_5.domain.File; 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; 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.Task; @@ -69,7 +66,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import com.google.common.base.Predicates; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; /** @@ -95,7 +92,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest { private Media media, oldMedia; private Owner owner; private Metadata metadata; - private MetadataValue metadataValue; + private String metadataValue; private String metadataEntryValue = "value"; @Override @@ -179,7 +176,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest { owner = media.getOwner(); assertNotNull(owner, String.format(OBJ_FIELD_REQ_LIVE, MEDIA, "owner")); - Checks.checkResourceType(media.getOwner()); + Checks.checkResource(media.getOwner()); Checks.checkMediaFor(MEDIA, media); } @@ -193,7 +190,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest { directOwner.toString())); // parent type - Checks.checkResourceType(directOwner); + Checks.checkResource(directOwner); // required assertNotNull(directOwner.getUser(), String.format(OBJ_FIELD_REQ, "Owner", "user")); @@ -223,7 +220,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest { 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()); + mediaApi.getMetadataApi(media.getId()).put("key", "value"); media = vdcApi .cloneMedia(vdcUrn, CloneMediaParams.builder().source(Reference.builder().fromEntity(media).build()) @@ -286,83 +283,59 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest { @Test(description = "POST /media/{id}/metadata", dependsOnMethods = { "testGetMedia" }) public void testMergeMetadata() { // test new - Set inputEntries = ImmutableSet.of(MetadataEntry.builder().entry("testKey", "testValue").build()); - Metadata inputMetadata = Metadata.builder().entries(inputEntries).build(); - - Task mergeMetadata = mediaApi.getMetadataApi(media.getId()).merge(inputMetadata); + Task mergeMetadata = mediaApi.getMetadataApi(media.getId()).putAll(ImmutableMap.of("testKey", "testValue")); Checks.checkTask(mergeMetadata); assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(new)")); metadata = mediaApi.getMetadataApi(media.getId()).get(); Checks.checkMetadataFor(MEDIA, metadata); - checkMetadataContainsEntries(metadata, inputEntries); + assertEquals(metadata.get("testKey"), "testValue"); media = mediaApi.get(media.getId()); Checks.checkMediaFor(MEDIA, media); // test edit - inputEntries = ImmutableSet.of(MetadataEntry.builder().entry("testKey", "new testValue").build()); - inputMetadata = Metadata.builder().entries(inputEntries).build(); - - mergeMetadata = mediaApi.getMetadataApi(media.getId()).merge(inputMetadata); + mergeMetadata = mediaApi.getMetadataApi(media.getId()).put("testKey", "new testValue"); Checks.checkTask(mergeMetadata); assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(edit)")); metadata = mediaApi.getMetadataApi(media.getId()).get(); Checks.checkMetadataFor(MEDIA, metadata); - checkMetadataContainsEntries(metadata, inputEntries); + assertEquals(metadata.get("testKey"), "new testValue"); media = mediaApi.get(media.getId()); Checks.checkMediaFor(MEDIA, media); } - private void checkMetadataContainsEntries(Metadata metadata, Set entries) { - for (MetadataEntry inputEntry : entries) { - boolean found = false; - for (MetadataEntry entry : metadata.getMetadataEntries()) { - if (equal(inputEntry.getKey(), entry.getKey())) { - found = true; - break; - } - } - - if (!found) { - 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(media.getId()).getValue("key"); - Checks.checkMetadataValueFor(MEDIA, metadataValue); + metadataValue = mediaApi.getMetadataApi(media.getId()).get("key"); + assertNotNull(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(media.getId()).putEntry("key", newValue); + + Task setMetadataEntry = mediaApi.getMetadataApi(media.getId()).put("key", metadataEntryValue); Checks.checkTask(setMetadataEntry); assertTrue(retryTaskSuccess.apply(setMetadataEntry), String.format(TASK_COMPLETE_TIMELY, "setMetadataEntry")); - metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("key"); - Checks.checkMetadataValueFor(MEDIA, metadataValue); + metadataValue = mediaApi.getMetadataApi(media.getId()).get("key"); + assertNotNull(metadataValue); } @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")); + Task remove = mediaApi.getMetadataApi(media.getId()).remove("testKey"); + Checks.checkTask(remove); + assertTrue(retryTaskSuccess.apply(remove), String.format(TASK_COMPLETE_TIMELY, "remove")); - metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("testKey"); + metadataValue = mediaApi.getMetadataApi(media.getId()).get("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); + metadataValue = mediaApi.getMetadataApi(media.getId()).get("key"); + assertNotNull(metadataValue); media = mediaApi.get(media.getId()); Checks.checkMediaFor(MEDIA, media); 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 5458c81c5b..2cd1038880 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 @@ -38,7 +38,6 @@ 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; 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.network.DhcpService; import org.jclouds.vcloud.director.v1_5.domain.network.IpAddresses; import org.jclouds.vcloud.director.v1_5.domain.network.IpRange; @@ -216,22 +215,9 @@ public class NetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest { @Test public void testGetNetworkMetadataEntryHref() { VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse); - assertEquals(api.getNetworkApi().getMetadataApi(networkHref).getValue("KEY"), metadataValue()); + assertEquals(api.getNetworkApi().getMetadataApi(networkHref).get("KEY"), "value"); } - 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") 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 40dc0f0ba2..76af7d9358 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 @@ -24,7 +24,7 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.O import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_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.jclouds.vcloud.director.v1_5.domain.Checks.checkResource; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; @@ -33,7 +33,6 @@ import static org.testng.Assert.assertTrue; import org.jclouds.vcloud.director.v1_5.domain.Checks; 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.domain.network.Network; import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork; @@ -71,7 +70,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest { public void cleanUp() { if (metadataSet) { try { - Task remove = adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn).removeEntry("key"); + Task remove = adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn).remove("key"); taskDoneEventually(remove); } catch (Exception e) { logger.warn(e, "Error when deleting metadata"); @@ -95,8 +94,8 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest { } private void setupMetadata() { - adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn) - .putEntry("key", MetadataValue.builder().value("value").build()); + //TODO: block until complete + adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn).put("key", "value"); metadataSet = true; } @@ -112,7 +111,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest { String.format(OBJ_FIELD_REQ_LIVE, NETWORK, "metadata.entries")); // parent type - checkResourceType(metadata); + checkResource(metadata); for (MetadataEntry entry : metadata.getMetadataEntries()) { // required elements and attributes @@ -122,21 +121,14 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest { String.format(OBJ_FIELD_ATTRB_REQ, networkApi, "MetadataEntry", entry.getValue(), "value")); // parent type - checkResourceType(entry); + checkResource(entry); } } @Test(description = "GET /network/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" }) public void testGetMetadataValue() { - MetadataValue metadataValue = networkApi.getMetadataApi(networkUrn).getValue("key"); + String metadataValue = networkApi.getMetadataApi(networkUrn).get("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)); + assertEquals(metadataValue, "value", String.format(OBJ_FIELD_EQ, NETWORK, "metadataEntry.value", "value", metadataValue)); } } 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 06c672766d..2beadb0a95 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 @@ -33,7 +33,6 @@ 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; -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.org.Org; import org.jclouds.vcloud.director.v1_5.domain.org.OrgList; @@ -179,7 +178,7 @@ public class OrgApiExpectTest extends VCloudDirectorAdminApiExpectTest { @Test public void testGetOrgMetadataEntryHref() { VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse); - assertEquals(api.getOrgApi().getMetadataApi(orgHref).getValue("KEY"), metadataValue()); + assertEquals(api.getOrgApi().getMetadataApi(orgHref).get("KEY"), "VALUE"); } public static Org org() { @@ -243,16 +242,4 @@ public class OrgApiExpectTest extends VCloudDirectorAdminApiExpectTest { .entry("KEY", "VALUE") .build(); } - - public static MetadataValue metadataValue() { - return MetadataValue.builder() - .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata/KEY")) - .link(Link.builder() - .rel("up") - .type("application/vnd.vmware.vcloud.metadata+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata")) - .build()) - .value("VALUE") - .build(); - } } 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 050e81431f..50cae58b75 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 @@ -22,7 +22,6 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.C 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.checkMetadata; -import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOrg; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkReferenceType; import static org.testng.Assert.assertEquals; @@ -32,7 +31,6 @@ import static org.testng.Assert.assertNotNull; 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.OrgList; @@ -67,7 +65,7 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest { public void cleanUp() throws Exception { if (adminMembersSet) { try { - Task remove = adminContext.getApi().getOrgApi().getMetadataApi(orgUrn).removeEntry("KEY"); + Task remove = adminContext.getApi().getOrgApi().getMetadataApi(orgUrn).remove("KEY"); taskDoneEventually(remove); } catch (Exception e) { logger.warn(e, "Error when deleting metadata entry"); @@ -126,8 +124,8 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest { * the need for configuration */ private void setupAdminMembers() { - adminContext.getApi().getOrgApi().getMetadataApi(orgUrn) - .putEntry("KEY", MetadataValue.builder().value("VALUE").build()); + //TODO: block until complete + adminContext.getApi().getOrgApi().getMetadataApi(orgUrn).put("KEY", "VALUE"); AdminCatalog newCatalog = AdminCatalog.builder().name("Test Catalog " + getTestDateTimeStamp()) .description("created by testOrg()").build(); @@ -156,16 +154,14 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest { @Test(description = "GET /org/{id}/metadata/{key}", dependsOnMethods = { "testGetOrgMetadata" }) public void testGetOrgMetadataValue() { // Call the method being tested - MetadataValue value = orgApi.getMetadataApi(orgUrn).getValue("KEY"); + String value = orgApi.getMetadataApi(orgUrn).get("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, expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value)); } } 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 92b025b291..f59ca069b0 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 @@ -31,8 +31,6 @@ import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkLeaseSettingsS import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataFor; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataKeyAbsentFor; -import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue; -import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValueFor; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkConfigSection; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkSection; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOwner; @@ -59,8 +57,6 @@ import org.jclouds.vcloud.director.v1_5.AbstractVAppApiLiveTest; 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.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.Owner; import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList; import org.jclouds.vcloud.director.v1_5.domain.Reference; @@ -117,7 +113,6 @@ import com.google.common.collect.Sets; @Test(singleThreaded = true, testName = "VAppApiLiveTest") public class VAppApiLiveTest extends AbstractVAppApiLiveTest { - private MetadataValue metadataValue; private String key; private boolean testUserCreated = false; private User user; @@ -751,22 +746,20 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest { public void testSetMetadataValue() { key = name("key-"); String value = name("value-"); - metadataValue = MetadataValue.builder().value(value).build(); - vAppApi.getMetadataApi(vAppUrn).putEntry(key, metadataValue); + vAppApi.getMetadataApi(vAppUrn).put(key, value); // Retrieve the value, and assert it was set correctly - MetadataValue newMetadataValue = vAppApi.getMetadataApi(vAppUrn).getValue(key); + String newMetadataValue = vAppApi.getMetadataApi(vAppUrn).get(key); // Check the retrieved object is well formed - checkMetadataValueFor(VAPP, newMetadataValue, value); + assertEquals(newMetadataValue, value); } @Test(groups = { "live", "user" }, 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(vAppUrn).putEntry(key, metadataValue); + vAppApi.getMetadataApi(vAppUrn).put(key, value); // Call the method being tested Metadata metadata = vAppApi.getMetadataApi(vAppUrn).get(); @@ -783,23 +776,18 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest { key = name("key-"); String value = name("value-"); - metadataValue = MetadataValue.builder().value(value).build(); - vAppApi.getMetadataApi(vAppUrn).putEntry(key, metadataValue); + vAppApi.getMetadataApi(vAppUrn).put(key, value); // Call the method being tested - MetadataValue newValue = vAppApi.getMetadataApi(vAppUrn).getValue(key); + String newValue = vAppApi.getMetadataApi(vAppUrn).get(key); - String expected = metadataValue.getValue(); - - checkMetadataValue(newValue); - assertEquals(newValue.getValue(), expected, - String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, newValue.getValue())); + assertEquals(newValue, value, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", value, newValue)); } @Test(groups = { "live", "user" }, description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" }) public void testRemoveMetadataEntry() { // Delete the entry - Task task = vAppApi.getMetadataApi(vAppUrn).removeEntry(key); + Task task = vAppApi.getMetadataApi(vAppUrn).remove(key); retryTaskSuccess.apply(task); // Confirm the entry has been removed @@ -817,8 +805,7 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest { // 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(vAppUrn).merge(addedMetadata); + Task task = vAppApi.getMetadataApi(vAppUrn).putAll(ImmutableMap.of(key, value)); retryTaskSuccess.apply(task); // Confirm the entry contains everything that was there, and everything that was being added 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 4e2656e645..21909786fd 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 @@ -78,7 +78,7 @@ public class VAppNetworksLiveTest extends AbstractVAppApiLiveTest { protected void tidyUp() { if (key != null) { try { - Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key); + Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).remove(key); taskDoneEventually(remove); } catch (Exception e) { logger.warn(e, "Error when deleting metadata entry '%s'", key); 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 7bf687ba61..42308aab40 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 @@ -42,7 +42,6 @@ import org.jclouds.vcloud.director.v1_5.VCloudDirectorException; 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; -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.Task; @@ -251,7 +250,7 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest assertEquals(metadata, exampleMetadata()); - Task task = api.getMetadataApi(uri).merge(exampleMetadata()); + Task task = api.getMetadataApi(uri).putAll(exampleMetadata()); assertNotNull(task); } @@ -276,7 +275,7 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest 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(uri).merge(exampleMetadata()); + api.getMetadataApi(uri).putAll(exampleMetadata()); } public void testVappTemplateMetadataValue() { @@ -293,14 +292,14 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest ).getVAppTemplateApi(); assertNotNull(api); - MetadataValue metadata = api.getMetadataApi(uri).getValue("12345"); + String metadata = api.getMetadataApi(uri).get("12345"); - assertEquals(metadata, exampleMetadataValue()); + assertEquals(metadata, "some value"); - Task task = api.getMetadataApi(uri).putEntry("12345", exampleMetadataValue()); + Task task = api.getMetadataApi(uri).put("12345", "some value"); assertNotNull(task); - task = api.getMetadataApi(uri).removeEntry("12345"); + task = api.getMetadataApi(uri).remove("12345"); assertNotNull(task); } @@ -312,7 +311,7 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest 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(uri).getValue("12345")); + assertNull(api.getMetadataApi(uri).get("12345")); } @Test(expectedExceptions = VCloudDirectorException.class) @@ -324,7 +323,7 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest 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(uri).putEntry("12345", exampleMetadataValue()); + api.getMetadataApi(uri).put("12345", "some value"); } @Test(expectedExceptions = ResourceNotFoundException.class) @@ -336,7 +335,7 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest 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(uri).removeEntry("12345"); + api.getMetadataApi(uri).remove("12345"); } @Test(expectedExceptions = VCloudDirectorException.class) @@ -437,8 +436,4 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest .entry(MetadataEntry.builder().key("key").value("value").build()).build(); } - private MetadataValue exampleMetadataValue() { - return MetadataValue.builder().value("some value").build(); - } - } 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 cc5c62d135..a827b53be3 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 @@ -23,7 +23,6 @@ import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkLeaseSettingsS import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataFor; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataKeyAbsentFor; -import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkConfigSection; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfEnvelope; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfNetworkSection; @@ -48,7 +47,6 @@ 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; 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.Owner; import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList; import org.jclouds.vcloud.director.v1_5.domain.Reference; @@ -84,7 +82,7 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest { protected void tidyUp() { if (key != null) { try { - Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key); + Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).remove(key); taskDoneEventually(remove); } catch (Exception e) { logger.warn(e, "Error when deleting metadata entry '%s'", key); @@ -157,10 +155,9 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest { Metadata metadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get(); MetadataEntry entry = Iterables.get(metadata.getMetadataEntries(), 0); - MetadataValue val = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).getValue(entry.getKey()); + String val = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get(entry.getKey()); - checkMetadataValue(val); - assertEquals(val.getValue(), entry.getValue()); + assertEquals(val, entry.getValue()); } @Test(description = "GET /vAppTemplate/{id}/networkConfigSection") @@ -205,10 +202,8 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest { 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(vAppTemplateUrn).merge(metadata); + final Task task = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).putAll(ImmutableMap.of(key, val)); assertTaskSucceeds(task); Metadata newMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get(); @@ -220,18 +215,17 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest { @Test(description = "PUT /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testEditMetadata" }) public void testEditMetadataValue() { val = "new" + val; - MetadataValue metadataValue = MetadataValue.builder().value(val).build(); - final Task task = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).putEntry(key, metadataValue); + final Task task = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).put(key, val); retryTaskSuccess.apply(task); - MetadataValue newMetadataValue = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).getValue(key); - assertEquals(newMetadataValue.getValue(), metadataValue.getValue()); + String newMetadataValue = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get(key); + assertEquals(newMetadataValue, val); } @Test(description = "DELETE /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" }) public void testRemoveVAppTemplateMetadataValue() { - final Task deletionTask = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key); + final Task deletionTask = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).remove(key); assertTaskSucceeds(deletionTask); Metadata newMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get(); 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 c5d02f62e7..7342a443da 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 @@ -35,7 +35,6 @@ 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.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; @@ -371,9 +370,7 @@ public class VdcApiExpectTest extends VCloudDirectorAdminApiExpectTest { .xmlFilePayload("/vdc/metadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE) .httpResponseBuilder().build()); - MetadataValue expected = metadataValue(); - - assertEquals(api.getVdcApi().getMetadataApi(vdcUri).getValue("key"), expected); + assertEquals(api.getVdcApi().getMetadataApi(vdcUri).get("key"), ""); } public static Vdc getVdc() { @@ -582,9 +579,4 @@ public class VdcApiExpectTest extends VCloudDirectorAdminApiExpectTest { return null; } - private MetadataValue metadataValue() { - // TODO Auto-generated method stub - return null; - } - } 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 b587c757e4..7b458e872d 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 @@ -24,8 +24,8 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.O 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.assertTrue; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import java.util.Map; @@ -33,8 +33,6 @@ import java.util.Set; import org.jclouds.vcloud.director.v1_5.domain.Checks; 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.Reference; import org.jclouds.vcloud.director.v1_5.domain.ResourceEntity; import org.jclouds.vcloud.director.v1_5.domain.Task; @@ -123,7 +121,7 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest { if (metadataSet) { try { - Task remove = adminContext.getApi().getVdcApi().getMetadataApi(vdcUrn).removeEntry("key"); + Task remove = adminContext.getApi().getVdcApi().getMetadataApi(vdcUrn).remove("key"); taskDoneEventually(remove); } catch (Exception e) { logger.warn(e, "Error deleting metadata entry"); @@ -323,13 +321,9 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest { String key = Iterables.getFirst(metadataMap.keySet(), "MadeUpKey!"); String value = metadataMap.get(key); - MetadataValue metadataValue = vdcApi.getMetadataApi(vdcUrn).getValue(key); + String metadataValue = vdcApi.getMetadataApi(vdcUrn).get(key); - Checks.checkMetadataValueFor(VDC, metadataValue, value); + assertEquals(metadataValue, value); } - private void setupMetadata() { - adminContext.getApi().getVdcApi().getMetadataApi(vdcUrn).putEntry("key", MetadataValue.builder().value("value").build()); - metadataSet = true; - } } 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 a2bfbce37f..692911dd4b 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 @@ -28,8 +28,6 @@ import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkGuestCustomiza import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataFor; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataKeyAbsentFor; -import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue; -import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValueFor; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkConnectionSection; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOperatingSystemSection; import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkProductSectionList; @@ -59,8 +57,6 @@ import org.jclouds.dmtf.ovf.ProductSection; 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.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.ProductSectionList; import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList; import org.jclouds.vcloud.director.v1_5.domain.Reference; @@ -104,7 +100,7 @@ import com.google.common.collect.Sets; @Test(groups = { "live", "user" }, singleThreaded = true, testName = "VmApiLiveTest") public class VmApiLiveTest extends AbstractVAppApiLiveTest { - private MetadataValue metadataValue; + private String metadataValue; private String key; private boolean testUserCreated = false; @@ -872,15 +868,16 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest { @Test(description = "PUT /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetVm" }) public void testSetMetadataValue() { key = name("key-"); - String value = name("value-"); - metadataValue = MetadataValue.builder().value(value).build(); - vmApi.getMetadataApi(vmUrn).putEntry(key, metadataValue); + metadataValue = name("value-"); + //TODO: block!! + vmApi.getMetadataApi(vmUrn).put(key, metadataValue); // Retrieve the value, and assert it was set correctly - MetadataValue newMetadataValue = vmApi.getMetadataApi(vmUrn).getValue(key); + String newMetadataValue = vmApi.getMetadataApi(vmUrn).get(key); // Check the retrieved object is well formed - checkMetadataValueFor(VM, newMetadataValue, value); + assertEquals(newMetadataValue, metadataValue, + String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", metadataValue, newMetadataValue)); } @Test(description = "GET /vApp/{id}/metadata", dependsOnMethods = { "testSetMetadataValue" }) @@ -898,24 +895,22 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest { @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(vmUrn).putEntry(key, metadataValue); + metadataValue = name("value-"); + + //TODO: block!! + vmApi.getMetadataApi(vmUrn).put(key, metadataValue); // Call the method being tested - 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())); + String newMetadataValue = vmApi.getMetadataApi(vmUrn).get(key); + + assertEquals(newMetadataValue, metadataValue, + String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", metadataValue, newMetadataValue)); } @Test(description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" }) public void testRemoveMetadataEntry() { // Delete the entry - Task task = vmApi.getMetadataApi(vmUrn).removeEntry(key); + Task task = vmApi.getMetadataApi(vmUrn).remove(key); retryTaskSuccess.apply(task); // Confirm the entry has been removed @@ -933,8 +928,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest { // 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(vmUrn).merge(addedMetadata); + Task task = vmApi.getMetadataApi(vmUrn).putAll(ImmutableMap.of(key, value)); retryTaskSuccess.apply(task); // Confirm the entry contains everything that was there, and everything that was being added 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 8e5eeb0fdb..d8ae8063ed 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 @@ -21,14 +21,12 @@ package org.jclouds.vcloud.director.v1_5.features.admin; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.fail; +import static org.testng.Assert.assertNull; 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; 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.features.MetadataApi; import org.jclouds.vcloud.director.v1_5.features.VdcApi; @@ -37,6 +35,8 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import com.google.common.collect.ImmutableMap; + /** * Tests behavior of {@link VdcApi} * @@ -67,7 +67,7 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest { public void cleanUp() throws Exception { if (metadataKey != null) { try { - Task task = metadataApi.removeEntry(metadataKey); + Task task = metadataApi.remove(metadataKey); taskDoneEventually(task); } catch (VCloudDirectorException e) { logger.warn(e, "Error deleting metadata-value (perhaps it doesn't exist?); continuing..."); @@ -171,36 +171,33 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest { public void testSetMetadata() throws Exception { metadataKey = name("key-"); metadataValue = name("value-"); - Metadata metadata = Metadata.builder().entry(MetadataEntry.builder().entry(metadataKey, metadataValue).build()) - .build(); - Task task = metadataApi.merge(metadata); + Task task = metadataApi.putAll(ImmutableMap.of(metadataKey, metadataValue)); + assertTaskSucceeds(task); - MetadataValue modified = metadataApi.getValue(metadataKey); - Checks.checkMetadataValueFor("AdminVdc", modified, metadataValue); - Checks.checkMetadata(metadata); + String modified = metadataApi.get(metadataKey); + assertEquals(modified, metadataValue); } // TODO insufficient permissions to test @Test(description = "GET /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadata" }, enabled = false) public void testGetMetadataValue() throws Exception { - MetadataValue retrievedMetadataValue = metadataApi.getValue(metadataKey); + String retrievedMetadataValue = metadataApi.get(metadataKey); - Checks.checkMetadataValueFor("AdminVdc", retrievedMetadataValue, metadataValue); + assertEquals(retrievedMetadataValue, metadataValue); } // TODO insufficient permissions to test @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.putEntry(metadataKey, newV); + Task task = metadataApi.put(metadataKey, metadataValue); assertTaskSucceeds(task); - MetadataValue retrievedMetadataValue = metadataApi.getValue(metadataKey); - Checks.checkMetadataValueFor("AdminVdc", retrievedMetadataValue, metadataValue); + String retrievedMetadataValue = metadataApi.get(metadataKey); + assertEquals(retrievedMetadataValue, metadataValue); } // TODO insufficient permissions to test @@ -208,14 +205,9 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest { public void testRemoveMetadataValue() throws Exception { // TODO Remove dependency on other tests; make cleanUp remove a list of metadata entries? - Task task = metadataApi.removeEntry(metadataKey); + Task task = metadataApi.remove(metadataKey); assertTaskSucceeds(task); - try { - metadataApi.getValue(metadataKey); - fail("Retrieval of metadata value " + metadataKey + " should have fail after deletion"); - } catch (VCloudDirectorException e) { - // success; should not be accessible - } + assertNull(metadataApi.get(metadataKey)); } } 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 44c9d9cf41..8a6f3cd69b 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 @@ -234,7 +234,7 @@ public abstract class BaseVCloudDirectorExpectTest extends BaseRestApiExpectT @Deprecated protected class VcloudHttpResponsePrimer { - private HttpResponse.Builder builder = HttpResponse.builder(); + private HttpResponse.Builder builder = HttpResponse.builder().statusCode(200); public VcloudHttpResponsePrimer() { } diff --git a/labs/vcloud-director/src/test/resources/vapptemplate/metadataValue.xml b/labs/vcloud-director/src/test/resources/vapptemplate/metadataValue.xml index 96d29f23b1..df6649add3 100644 --- a/labs/vcloud-director/src/test/resources/vapptemplate/metadataValue.xml +++ b/labs/vcloud-director/src/test/resources/vapptemplate/metadataValue.xml @@ -1,4 +1,3 @@ - + some value \ No newline at end of file