mirror of https://github.com/apache/jclouds.git
decrufted metadataapi
This commit is contained in:
parent
03326849e0
commit
7db0519d0b
|
@ -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 extends HttpRequest> R bindToRequest(final R request, final Object input) {
|
||||||
|
return super.bindToRequest(request, Metadata.toMetadata(Map.class.cast(checkNotNull(input, "input"))));
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 extends HttpRequest> R bindToRequest(final R request, final Object input) {
|
||||||
|
return super.bindToRequest(request, new MetadataValue(checkNotNull(input, "input").toString()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
/**
|
/*
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
* contributor license agreements. See the NOTICE file
|
* contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
|
@ -16,21 +16,20 @@
|
||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* 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 static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_1_5_NS;
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
/**
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
* {@inheritDoc}
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
*
|
import javax.xml.bind.annotation.XmlNs;
|
||||||
* @author danikov
|
import javax.xml.bind.annotation.XmlNsForm;
|
||||||
* @author grkvlt
|
import javax.xml.bind.annotation.XmlSchema;
|
||||||
*/
|
|
||||||
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "CarrenzaVCloudDirectorHttpClientLiveTest")
|
|
||||||
public class CarrenzaVCloudDirectorHttpClientLiveTest extends HttpClientLiveTest {
|
|
||||||
|
|
||||||
public CarrenzaVCloudDirectorHttpClientLiveTest() {
|
|
||||||
provider = "carrenza-vcloud-director";
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -48,6 +48,16 @@ import com.google.common.collect.Sets;
|
||||||
*/
|
*/
|
||||||
@XmlRootElement(name = "Metadata")
|
@XmlRootElement(name = "Metadata")
|
||||||
public class Metadata extends Resource implements Map<String, String> {
|
public class Metadata extends Resource implements Map<String, String> {
|
||||||
|
|
||||||
|
public static Metadata toMetadata(Map<String, String> input) {
|
||||||
|
if (input instanceof Metadata)
|
||||||
|
return Metadata.class.cast(input);
|
||||||
|
Builder<?> builder = builder();
|
||||||
|
for (Map.Entry<String, String> entry : input.entrySet()) {
|
||||||
|
builder.entry(MetadataEntry.builder().entry(entry.getKey(), entry.getValue()).build());
|
||||||
|
}
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
public static final String MEDIA_TYPE = VCloudDirectorMediaType.METADATA;
|
public static final String MEDIA_TYPE = VCloudDirectorMediaType.METADATA;
|
||||||
|
|
||||||
|
@ -66,7 +76,7 @@ public class Metadata extends Resource implements Map<String, String> {
|
||||||
public static abstract class Builder<B extends Builder<B>> extends Resource.Builder<B> {
|
public static abstract class Builder<B extends Builder<B>> extends Resource.Builder<B> {
|
||||||
|
|
||||||
private Set<MetadataEntry> metadataEntries = Sets.newLinkedHashSet();
|
private Set<MetadataEntry> metadataEntries = Sets.newLinkedHashSet();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see Metadata#getMetadataEntries()
|
* @see Metadata#getMetadataEntries()
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -42,116 +42,3 @@ import com.google.common.collect.Sets;
|
||||||
*
|
*
|
||||||
* @author grkvlt@apache.org
|
* @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<ConcreteBuilder> {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static abstract class Builder<B extends Builder<B>> extends Resource.Builder<B> {
|
|
||||||
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<Link> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -18,18 +18,18 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.vcloud.director.v1_5.features;
|
package org.jclouds.vcloud.director.v1_5.features;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.jclouds.concurrent.Timeout;
|
import org.jclouds.concurrent.Timeout;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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;
|
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides synchronous access to {@link Metadata}.
|
* Provides synchronous access to {@link Metadata}.
|
||||||
*
|
*
|
||||||
* @see MetadataAsyncApi
|
* @see MetadataAsyncApi
|
||||||
* @author danikov
|
* @author danikov, Adrian Cole
|
||||||
*/
|
*/
|
||||||
public interface MetadataApi {
|
public interface MetadataApi {
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ public interface MetadataApi {
|
||||||
*
|
*
|
||||||
* @return the metadata value, or null if not found
|
* @return the metadata value, or null if not found
|
||||||
*/
|
*/
|
||||||
MetadataValue getValue(String key);
|
String get(String key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||||
|
@ -56,27 +56,30 @@ public interface MetadataApi {
|
||||||
/**
|
/**
|
||||||
* Merges the metadata for a media with the information provided.
|
* Merges the metadata for a media with the information provided.
|
||||||
*
|
*
|
||||||
* @return a task. This operation is asynchronous and the user should monitor the returned
|
* @return a task. This operation is asynchronous and the user should
|
||||||
* task status in order to check when it is completed.
|
* monitor the returned task status in order to check when it is
|
||||||
|
* completed.
|
||||||
*/
|
*/
|
||||||
Task merge(Metadata metadata);
|
Task putAll(Map<String, String> metadata);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the metadata for the particular key for the media to the value provided. Note: this
|
* Sets the metadata for the particular key for the media to the value
|
||||||
* will replace any existing metadata information
|
* provided. Note: this will replace any existing metadata information
|
||||||
*
|
*
|
||||||
* @return a task. This operation is asynchronous and the user should monitor the returned
|
* @return a task. This operation is asynchronous and the user should
|
||||||
* task status in order to check when it is completed.
|
* 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.
|
* Deletes a metadata entry.
|
||||||
*
|
*
|
||||||
* @return a task. This operation is asynchronous and the user should monitor the returned
|
* @return a task. This operation is asynchronous and the user should
|
||||||
* task status in order to check when it is completed.
|
* monitor the returned task status in order to check when it is
|
||||||
|
* completed.
|
||||||
*/
|
*/
|
||||||
Task removeEntry(String key);
|
Task remove(String key);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.vcloud.director.v1_5.features;
|
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.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
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.ExceptionParser;
|
||||||
import org.jclouds.rest.annotations.JAXBResponseParser;
|
import org.jclouds.rest.annotations.JAXBResponseParser;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
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.rest.functions.ReturnNullOnNotFoundOr404;
|
||||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
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.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.Task;
|
||||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
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;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see MetadataApi
|
* @see MetadataApi
|
||||||
* @author danikov
|
* @author Adrian Cole, danikov
|
||||||
*/
|
*/
|
||||||
// TODO: take out the endpoint params and supply them in the Delegate calls.
|
|
||||||
public interface MetadataAsyncApi {
|
public interface MetadataAsyncApi {
|
||||||
|
|
||||||
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
|
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
|
||||||
public static interface Readable extends MetadataAsyncApi {
|
public static interface Readable extends MetadataAsyncApi {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see MetadataApi.Readable#get(URI)
|
* @see MetadataApi.Readable#get()
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path("/metadata")
|
@Path("/metadata")
|
||||||
|
@ -65,14 +65,14 @@ public interface MetadataAsyncApi {
|
||||||
ListenableFuture<Metadata> get();
|
ListenableFuture<Metadata> get();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see MetadataApi.Readable#getValue(String)
|
* @see MetadataApi.Readable#get(String)
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path("/metadata/{key}")
|
@Path("/metadata/{key}")
|
||||||
@Consumes
|
@Consumes
|
||||||
@JAXBResponseParser
|
@ResponseParser(RegexValueParser.class)
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
ListenableFuture<MetadataValue> getValue(@PathParam("key") String key);
|
ListenableFuture<String> get(@PathParam("key") String key);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,35 +80,34 @@ public interface MetadataAsyncApi {
|
||||||
public static interface Writeable extends Readable {
|
public static interface Writeable extends Readable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see MetadataApi.Writable#merge(Metadata)
|
* @see MetadataApi.Writable#putAll
|
||||||
*/
|
*/
|
||||||
@POST
|
@POST
|
||||||
@Path("/metadata")
|
@Path("/metadata")
|
||||||
@Consumes(VCloudDirectorMediaType.TASK)
|
@Consumes(VCloudDirectorMediaType.TASK)
|
||||||
@Produces(VCloudDirectorMediaType.METADATA)
|
@Produces(VCloudDirectorMediaType.METADATA)
|
||||||
@JAXBResponseParser
|
@JAXBResponseParser
|
||||||
ListenableFuture<Task> merge(@BinderParam(BindToXMLPayload.class) Metadata metadata);
|
ListenableFuture<Task> putAll(@BinderParam(BindMapAsMetadata.class) Map<String, String> metadata);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see MetadataApi.Writeable#putEntry(String, MetadataEntry)
|
* @see MetadataApi.Writeable#put
|
||||||
*/
|
*/
|
||||||
@PUT
|
@PUT
|
||||||
@Path("/metadata/{key}")
|
@Path("/metadata/{key}")
|
||||||
@Consumes(VCloudDirectorMediaType.TASK)
|
@Consumes(VCloudDirectorMediaType.TASK)
|
||||||
@Produces(VCloudDirectorMediaType.METADATA_VALUE)
|
@Produces(VCloudDirectorMediaType.METADATA_VALUE)
|
||||||
@JAXBResponseParser
|
@JAXBResponseParser
|
||||||
// TODO: this is rediculous. get rid of the MetadataValue type, as it is only a string!
|
ListenableFuture<Task> put(@PathParam("key") String key,
|
||||||
ListenableFuture<Task> putEntry(@PathParam("key") String key,
|
@BinderParam(BindStringAsMetadataValue.class) String metadataValue);
|
||||||
@BinderParam(BindToXMLPayload.class) MetadataValue metadataValue);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see MetadataApi.Writable#removeEntry(String)
|
* @see MetadataApi.Writable#remove
|
||||||
*/
|
*/
|
||||||
@DELETE
|
@DELETE
|
||||||
@Path("/metadata/{key}")
|
@Path("/metadata/{key}")
|
||||||
@Consumes(VCloudDirectorMediaType.TASK)
|
@Consumes(VCloudDirectorMediaType.TASK)
|
||||||
@JAXBResponseParser
|
@JAXBResponseParser
|
||||||
ListenableFuture<Task> removeEntry(@PathParam("key") String key);
|
ListenableFuture<Task> remove(@PathParam("key") String key);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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<HttpResponse, String> {
|
||||||
|
Pattern pattern = Pattern.compile("<Value>([^<]+)</Value>");
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -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"+
|
||||||
|
"<Metadata xmlns=\"http://www.vmware.com/vcloud/v1.5\">" + "\n"+
|
||||||
|
" <MetadataEntry>" + "\n" +
|
||||||
|
" <Key>foo</Key>" + "\n" +
|
||||||
|
" <Value>bar</Value>" + "\n" +
|
||||||
|
" </MetadataEntry>" + "\n" +
|
||||||
|
"</Metadata>" + "\n");
|
||||||
|
assertEquals(request.getPayload().getContentMetadata().getContentType(), MediaType.APPLICATION_XML);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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"+
|
||||||
|
"<MetadataValue xmlns=\"http://www.vmware.com/vcloud/v1.5\">" + "\n"+
|
||||||
|
" <Value>foo</Value>" + "\n" +
|
||||||
|
"</MetadataValue>" + "\n");
|
||||||
|
assertEquals(request.getPayload().getContentMetadata().getContentType(), MediaType.APPLICATION_XML);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -141,7 +141,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check parent type
|
// Check parent type
|
||||||
checkResourceType(entity);
|
checkResource(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -173,20 +173,20 @@ public class Checks {
|
||||||
/**
|
/**
|
||||||
* Assumes the validTypes to be vcloud-specific types.
|
* Assumes the validTypes to be vcloud-specific types.
|
||||||
*
|
*
|
||||||
* @see #checkResourceType(ResourceType, Collection)
|
* @see #checkResource(Resource, Collection)
|
||||||
*/
|
*/
|
||||||
public static void checkResourceType(Resource resource) {
|
public static void checkResource(Resource resource) {
|
||||||
checkResourceType(resource, VCloudDirectorMediaType.ALL);
|
checkResource(resource, VCloudDirectorMediaType.ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #checkResourceType(ResourceType, Collection)
|
* @see #checkResource(Resource, Collection)
|
||||||
*/
|
*/
|
||||||
public static void checkResourceType(Resource resource, String type) {
|
public static void checkResource(Resource resource, String type) {
|
||||||
checkResourceType(resource, ImmutableSet.of(type));
|
checkResource(resource, ImmutableSet.of(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkResourceType(Resource resource, Collection<String> validTypes) {
|
public static void checkResource(Resource resource, Collection<String> validTypes) {
|
||||||
// Check optional fields
|
// Check optional fields
|
||||||
URI href = resource.getHref();
|
URI href = resource.getHref();
|
||||||
if (href != null) checkHref(href);
|
if (href != null) checkHref(href);
|
||||||
|
@ -294,7 +294,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check parent type
|
// Check parent type
|
||||||
checkResourceType(metadata);
|
checkResource(metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkMetadataEntry(MetadataEntry metadataEntry) {
|
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"));
|
assertNotNull(metadataEntry.getValue(), String.format(NOT_NULL_OBJ_FIELD_FMT, "Value", "MetadataEntry"));
|
||||||
|
|
||||||
// Check parent type
|
// Check parent type
|
||||||
checkResourceType(metadataEntry);
|
checkResource(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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkProgress(Integer progress) {
|
public static void checkProgress(Integer progress) {
|
||||||
|
@ -339,7 +331,7 @@ public class Checks {
|
||||||
public static void checkAdminOrg(AdminOrg org) {
|
public static void checkAdminOrg(AdminOrg org) {
|
||||||
// required
|
// required
|
||||||
assertNotNull(org.getSettings(), String.format(NOT_NULL_OBJ_FIELD_FMT, "settings", "AdminOrg"));
|
assertNotNull(org.getSettings(), String.format(NOT_NULL_OBJ_FIELD_FMT, "settings", "AdminOrg"));
|
||||||
checkResourceType(org, VCloudDirectorMediaType.ADMIN_ORG);
|
checkResource(org, VCloudDirectorMediaType.ADMIN_ORG);
|
||||||
|
|
||||||
// optional
|
// optional
|
||||||
for (Reference user : org.getUsers()) {
|
for (Reference user : org.getUsers()) {
|
||||||
|
@ -387,7 +379,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check parent type
|
// Check parent type
|
||||||
checkResourceType(owner);
|
checkResource(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkCatalogItem(CatalogItem catalogItem) {
|
public static void checkCatalogItem(CatalogItem catalogItem) {
|
||||||
|
@ -573,29 +565,13 @@ public class Checks {
|
||||||
String.format(OBJ_FIELD_ATTRB_REQ, api, "MetadataEntry", entry.getValue(), "value"));
|
String.format(OBJ_FIELD_ATTRB_REQ, api, "MetadataEntry", entry.getValue(), "value"));
|
||||||
|
|
||||||
// Check parent type
|
// Check parent type
|
||||||
checkResourceType(entry);
|
checkResource(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check parent type
|
// 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) {
|
public static void checkMetadataKeyAbsentFor(String api, Metadata metadata, String key) {
|
||||||
Map<String,String> metadataMap = metadataToMap(metadata);
|
Map<String,String> metadataMap = metadataToMap(metadata);
|
||||||
|
@ -628,7 +604,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check parent type
|
// Check parent type
|
||||||
checkResourceType(question);
|
checkResource(question);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkVmQuestionAnswerChoice(VmQuestionAnswerChoice choice) {
|
public static void checkVmQuestionAnswerChoice(VmQuestionAnswerChoice choice) {
|
||||||
|
@ -848,7 +824,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(settings);
|
checkResource(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkEmailSettings(OrgEmailSettings settings) {
|
public static void checkEmailSettings(OrgEmailSettings settings) {
|
||||||
|
@ -864,7 +840,7 @@ public class Checks {
|
||||||
// NOTE alertEmailsTo cannot be checked
|
// NOTE alertEmailsTo cannot be checked
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(settings);
|
checkResource(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkEmailAddress(String email) {
|
public static void checkEmailAddress(String email) {
|
||||||
|
@ -889,7 +865,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(settings);
|
checkResource(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkLdapSettings(OrgLdapSettings settings) {
|
public static void checkLdapSettings(OrgLdapSettings settings) {
|
||||||
|
@ -905,7 +881,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(settings);
|
checkResource(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkCustomOrgLdapSettings(CustomOrgLdapSettings settings) {
|
public static void checkCustomOrgLdapSettings(CustomOrgLdapSettings settings) {
|
||||||
|
@ -980,7 +956,7 @@ public class Checks {
|
||||||
String.format(OBJ_FIELD_GTE_0, "OrgPasswordPolicySettings", "accountLockoutIntervalMinutes", settings.getAccountLockoutIntervalMinutes()));
|
String.format(OBJ_FIELD_GTE_0, "OrgPasswordPolicySettings", "accountLockoutIntervalMinutes", settings.getAccountLockoutIntervalMinutes()));
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(settings);
|
checkResource(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkVAppLeaseSettings(OrgLeaseSettings settings) {
|
public static void checkVAppLeaseSettings(OrgLeaseSettings settings) {
|
||||||
|
@ -996,7 +972,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(settings);
|
checkResource(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkVAppTemplateLeaseSettings(OrgVAppTemplateLeaseSettings settings) {
|
public static void checkVAppTemplateLeaseSettings(OrgVAppTemplateLeaseSettings settings) {
|
||||||
|
@ -1008,7 +984,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(settings);
|
checkResource(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkUser(User user) {
|
public static void checkUser(User user) {
|
||||||
|
@ -1087,7 +1063,7 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check parent type
|
// Check parent type
|
||||||
checkResourceType(sections);
|
checkResource(sections);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkGuestCustomizationSection(GuestCustomizationSection section) {
|
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"));
|
assertNotNull(val.getNetworkName(), String.format(NOT_NULL_OBJ_FIELD_FMT, "NetworkName", "VAppNetworkConfiguration"));
|
||||||
checkNetworkConfiguration(val.getConfiguration());
|
checkNetworkConfiguration(val.getConfiguration());
|
||||||
|
|
||||||
checkResourceType(val);
|
checkResource(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkNetworkConnectionSection(NetworkConnectionSection val) {
|
public static void checkNetworkConnectionSection(NetworkConnectionSection val) {
|
||||||
|
@ -1517,6 +1493,6 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(container);
|
checkResource(container);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.Link;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.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.Reference;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
|
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.net.HttpHeaders;
|
import com.google.common.net.HttpHeaders;
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
|
||||||
@Test
|
@Test
|
||||||
public void testGetCatalogMetadataEntryHref() {
|
public void testGetCatalogMetadataEntryHref() {
|
||||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse);
|
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";
|
static String item = "a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df";
|
||||||
|
@ -328,9 +328,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
|
||||||
@Test
|
@Test
|
||||||
public void testMergeCatalogItemMetadataHref() {
|
public void testMergeCatalogItemMetadataHref() {
|
||||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, mergeItemMetadata, mergeItemMetadataResponse);
|
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, mergeItemMetadata, mergeItemMetadataResponse);
|
||||||
// TODO: horrendous way of representing Map<String,String>
|
assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).putAll(ImmutableMap.of("KEY", "VALUE")), mergeMetadataTask());
|
||||||
Metadata metadata = Metadata.builder().entry(MetadataEntry.builder().entry("KEY", "VALUE").build()).build();
|
|
||||||
assertEquals(api.getCatalogApi().getItemMetadataApi(itemHref).merge(metadata), mergeMetadataTask());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpRequest getItemMetadataValue = HttpRequest.builder()
|
HttpRequest getItemMetadataValue = HttpRequest.builder()
|
||||||
|
@ -348,7 +346,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
|
||||||
@Test
|
@Test
|
||||||
public void testGetCatalogItemMetadataEntryHref() {
|
public void testGetCatalogItemMetadataEntryHref() {
|
||||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getItemMetadataValue, getItemMetadataValueResponse);
|
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()
|
HttpRequest putItemMetadata = HttpRequest.builder()
|
||||||
|
@ -368,7 +366,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
|
||||||
@Test
|
@Test
|
||||||
public void testSetCatalogItemMetadataEntryHref() {
|
public void testSetCatalogItemMetadataEntryHref() {
|
||||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, putItemMetadata, putItemMetadataResponse);
|
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()
|
HttpRequest removeItemMetadataEntry = HttpRequest.builder()
|
||||||
|
@ -386,7 +384,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
|
||||||
@Test
|
@Test
|
||||||
public void testRemoveCatalogItemMetadataEntryHref() {
|
public void testRemoveCatalogItemMetadataEntryHref() {
|
||||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, removeItemMetadataEntry, removeItemMetadataEntryResponse);
|
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() {
|
public static final Catalog catalog() {
|
||||||
|
@ -486,30 +484,6 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
|
||||||
.entry("KEY", "VALUE")
|
.entry("KEY", "VALUE")
|
||||||
.build();
|
.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() {
|
public static CatalogItem catalogItem() {
|
||||||
return CatalogItem.builder()
|
return CatalogItem.builder()
|
||||||
|
@ -607,7 +581,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Task removeEntryTask() {
|
public static Task removeTask() {
|
||||||
return Task.builder()
|
return Task.builder()
|
||||||
.name("task")
|
.name("task")
|
||||||
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
|
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
|
||||||
|
|
|
@ -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.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.checkCatalogItem;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
|
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.domain.Checks.checkTask;
|
||||||
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals;
|
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals;
|
||||||
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.typeEquals;
|
import static org.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.Link;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Media;
|
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.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.Reference;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
|
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
|
||||||
|
@ -51,8 +48,7 @@ import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
|
||||||
import org.testng.annotations.AfterClass;
|
import org.testng.annotations.AfterClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests live behavior of {@link CatalogApi}.
|
* Tests live behavior of {@link CatalogApi}.
|
||||||
|
@ -180,29 +176,19 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
Metadata catalogMetadata = catalogApi.getMetadataApi(catalogUrn).get();
|
Metadata catalogMetadata = catalogApi.getMetadataApi(catalogUrn).get();
|
||||||
checkMetadata(catalogMetadata);
|
checkMetadata(catalogMetadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "GET /catalog/{id}/metadata/{key}")
|
@Test(description = "GET /catalog/{id}/metadata/{key}")
|
||||||
public void testGetCatalogMetadataValue() {
|
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);
|
assertTaskSucceedsLong(mergeCatalogMetadata);
|
||||||
|
|
||||||
Metadata catalogMetadata = catalogApi.getMetadataApi(catalogUrn).get();
|
Metadata catalogMetadata = catalogApi.getMetadataApi(catalogUrn).get();
|
||||||
MetadataEntry existingMetadataEntry = Iterables.find(catalogMetadata.getMetadataEntries(),
|
|
||||||
new Predicate<MetadataEntry>() {
|
String metadataValue = catalogApi.getMetadataApi(catalogUrn).get("KEY");
|
||||||
@Override
|
assertEquals(metadataValue, catalogMetadata.get("KEY"), String.format(CORRECT_VALUE_OBJECT_FMT, "Value",
|
||||||
public boolean apply(MetadataEntry input) {
|
"MetadataValue", catalogMetadata.get("KEY"), metadataValue));
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "GET /catalogItem/{id}/metadata", dependsOnMethods = "testAddCatalogItem")
|
@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")
|
@Test(description = "POST /catalogItem/{id}/metadata", dependsOnMethods = "testAddCatalogItem")
|
||||||
public void testMergeCatalogItemMetadata() {
|
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();
|
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);
|
checkTask(mergeCatalogItemMetadata);
|
||||||
assertTrue(retryTaskSuccess.apply(mergeCatalogItemMetadata),
|
assertTrue(retryTaskSuccess.apply(mergeCatalogItemMetadata),
|
||||||
String.format(TASK_COMPLETE_TIMELY, "mergeCatalogItemMetadata"));
|
String.format(TASK_COMPLETE_TIMELY, "mergeCatalogItemMetadata"));
|
||||||
Metadata mergedCatalogItemMetadata = catalogApi.getItemMetadataApi(catalogItem.getId()).get();
|
Metadata mergedCatalogItemMetadata = catalogApi.getItemMetadataApi(catalogItem.getId()).get();
|
||||||
|
|
||||||
assertTrue(mergedCatalogItemMetadata.getMetadataEntries().size() > before.getMetadataEntries().size(),
|
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");
|
String keyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).get("KEY");
|
||||||
assertEquals(keyMetadataValue.getValue(), "MARMALADE",
|
assertEquals(keyMetadataValue, "MARMALADE", "The Value of the MetadataValue for KEY should have changed");
|
||||||
"The Value of the MetadataValue for KEY should have changed");
|
|
||||||
checkMetadataValue(keyMetadataValue);
|
|
||||||
|
|
||||||
MetadataValue newKeyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("VEGIMITE");
|
String newKeyMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).get("VEGIMITE");
|
||||||
|
|
||||||
assertEquals(newKeyMetadataValue.getValue(), "VALUE",
|
assertEquals(newKeyMetadataValue, "VALUE", "The Value of the MetadataValue for NEW_KEY should have been set");
|
||||||
"The Value of the MetadataValue for NEW_KEY should have been set");
|
|
||||||
checkMetadataValue(newKeyMetadataValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "GET /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testSetCatalogItemMetadataValue")
|
@Test(description = "GET /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testSetCatalogItemMetadataValue")
|
||||||
public void testGetCatalogItemMetadataValue() {
|
public void testGetCatalogItemMetadataValue() {
|
||||||
MetadataValue metadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY");
|
String metadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).get("KEY");
|
||||||
checkMetadataValue(metadataValue);
|
assertNotNull(metadataValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "PUT /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testMergeCatalogItemMetadata")
|
@Test(description = "PUT /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testMergeCatalogItemMetadata")
|
||||||
public void testSetCatalogItemMetadataValue() {
|
public void testSetCatalogItemMetadataValue() {
|
||||||
MetadataValue newMetadataValue = MetadataValue.builder().value("NEW").build();
|
|
||||||
|
|
||||||
Task setCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).putEntry("KEY",
|
Task setCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).put("KEY", "NEW");
|
||||||
newMetadataValue);
|
|
||||||
checkTask(setCatalogItemMetadataValue);
|
checkTask(setCatalogItemMetadataValue);
|
||||||
assertTrue(retryTaskSuccess.apply(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");
|
String editedMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).get("KEY");
|
||||||
assertEquals(editedMetadataValue.getValue(), newMetadataValue.getValue(), String.format(CORRECT_VALUE_OBJECT_FMT,
|
assertEquals(editedMetadataValue, "NEW",
|
||||||
"Value", "MetadataValue", newMetadataValue.getValue(), editedMetadataValue.getValue()));
|
String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", "NEW", editedMetadataValue));
|
||||||
checkMetadataValue(editedMetadataValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "DELETE /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testGetCatalogItemMetadataValue")
|
@Test(description = "DELETE /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testGetCatalogItemMetadataValue")
|
||||||
public void testRemoveCatalogItemMetadataValue() {
|
public void testRemoveCatalogItemMetadataValue() {
|
||||||
Task removeCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).removeEntry("KEY");
|
Task removeCatalogItemMetadataValue = catalogApi.getItemMetadataApi(catalogItem.getId()).remove("KEY");
|
||||||
checkTask(removeCatalogItemMetadataValue);
|
checkTask(removeCatalogItemMetadataValue);
|
||||||
assertTrue(retryTaskSuccess.apply(removeCatalogItemMetadataValue),
|
assertTrue(retryTaskSuccess.apply(removeCatalogItemMetadataValue),
|
||||||
String.format(TASK_COMPLETE_TIMELY, "removeCatalogItemMetadataValue"));
|
String.format(TASK_COMPLETE_TIMELY, "removeCatalogItemMetadataValue"));
|
||||||
MetadataValue removed = catalogApi.getItemMetadataApi(catalogItem.getId()).getValue("KEY");
|
String removed = catalogApi.getItemMetadataApi(catalogItem.getId()).get("KEY");
|
||||||
assertNull(removed);
|
assertNull(removed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.Media.ImageType;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.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.Owner;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
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.Task;
|
||||||
|
@ -259,7 +258,7 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
Metadata inputMetadata = metadata();
|
Metadata inputMetadata = metadata();
|
||||||
Task expectedTask = mergeMetadataTask();
|
Task expectedTask = mergeMetadataTask();
|
||||||
|
|
||||||
assertEquals(api.getMediaApi().getMetadataApi(mediaUri).merge(inputMetadata), expectedTask);
|
assertEquals(api.getMediaApi().getMetadataApi(mediaUri).putAll(inputMetadata), expectedTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetMetadataValue() {
|
public void testGetMetadataValue() {
|
||||||
|
@ -273,11 +272,8 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
new VcloudHttpResponsePrimer()
|
new VcloudHttpResponsePrimer()
|
||||||
.xmlFilePayload("/media/metadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE)
|
.xmlFilePayload("/media/metadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE)
|
||||||
.httpResponseBuilder().build());
|
.httpResponseBuilder().build());
|
||||||
|
|
||||||
MetadataValue expected = metadataValue();
|
assertEquals(api.getMediaApi().getMetadataApi(mediaUri).get("key"), "value");
|
||||||
|
|
||||||
|
|
||||||
assertEquals(api.getMediaApi().getMetadataApi(mediaUri).getValue("key"), expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -293,12 +289,10 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
new VcloudHttpResponsePrimer()
|
new VcloudHttpResponsePrimer()
|
||||||
.xmlFilePayload("/media/setMetadataValueTask.xml", VCloudDirectorMediaType.TASK)
|
.xmlFilePayload("/media/setMetadataValueTask.xml", VCloudDirectorMediaType.TASK)
|
||||||
.httpResponseBuilder().build());
|
.httpResponseBuilder().build());
|
||||||
|
|
||||||
MetadataValue inputMetadataValue = MetadataValue.builder().value("value").build();
|
|
||||||
|
|
||||||
Task expectedTask = setMetadataEntryTask();
|
Task expectedTask = setMetadataEntryTask();
|
||||||
|
|
||||||
assertEquals(api.getMediaApi().getMetadataApi(mediaUri).putEntry("key", inputMetadataValue), expectedTask);
|
assertEquals(api.getMediaApi().getMetadataApi(mediaUri).put("key", "value"), expectedTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -314,9 +308,9 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
.xmlFilePayload("/media/removeMetadataEntryTask.xml", VCloudDirectorMediaType.TASK)
|
.xmlFilePayload("/media/removeMetadataEntryTask.xml", VCloudDirectorMediaType.TASK)
|
||||||
.httpResponseBuilder().build());
|
.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
|
@Test
|
||||||
|
@ -635,27 +629,6 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
.build();
|
.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() {
|
private Task mergeMetadataTask() {
|
||||||
return Task.builder()
|
return Task.builder()
|
||||||
.status("running")
|
.status("running")
|
||||||
|
@ -722,7 +695,7 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Task removeEntryTask() {
|
public static Task removeTask() {
|
||||||
return Task.builder()
|
return Task.builder()
|
||||||
.name("task")
|
.name("task")
|
||||||
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
|
.id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c")
|
||||||
|
|
|
@ -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_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_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_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_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_EQ;
|
||||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_LIST_SIZE_GE;
|
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.Link;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Media;
|
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.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.Owner;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
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.Task;
|
||||||
|
@ -69,7 +66,7 @@ import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,7 +92,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
private Media media, oldMedia;
|
private Media media, oldMedia;
|
||||||
private Owner owner;
|
private Owner owner;
|
||||||
private Metadata metadata;
|
private Metadata metadata;
|
||||||
private MetadataValue metadataValue;
|
private String metadataValue;
|
||||||
private String metadataEntryValue = "value";
|
private String metadataEntryValue = "value";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -179,7 +176,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
|
|
||||||
owner = media.getOwner();
|
owner = media.getOwner();
|
||||||
assertNotNull(owner, String.format(OBJ_FIELD_REQ_LIVE, MEDIA, "owner"));
|
assertNotNull(owner, String.format(OBJ_FIELD_REQ_LIVE, MEDIA, "owner"));
|
||||||
Checks.checkResourceType(media.getOwner());
|
Checks.checkResource(media.getOwner());
|
||||||
|
|
||||||
Checks.checkMediaFor(MEDIA, media);
|
Checks.checkMediaFor(MEDIA, media);
|
||||||
}
|
}
|
||||||
|
@ -193,7 +190,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
directOwner.toString()));
|
directOwner.toString()));
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
Checks.checkResourceType(directOwner);
|
Checks.checkResource(directOwner);
|
||||||
|
|
||||||
// required
|
// required
|
||||||
assertNotNull(directOwner.getUser(), String.format(OBJ_FIELD_REQ, "Owner", "user"));
|
assertNotNull(directOwner.getUser(), String.format(OBJ_FIELD_REQ, "Owner", "user"));
|
||||||
|
@ -223,7 +220,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
assertTrue(media.clone(oldMedia),
|
assertTrue(media.clone(oldMedia),
|
||||||
String.format(OBJ_FIELD_CLONE, MEDIA, "copied media", media.toString(), oldMedia.toString()));
|
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
|
media = vdcApi
|
||||||
.cloneMedia(vdcUrn, CloneMediaParams.builder().source(Reference.builder().fromEntity(media).build())
|
.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" })
|
@Test(description = "POST /media/{id}/metadata", dependsOnMethods = { "testGetMedia" })
|
||||||
public void testMergeMetadata() {
|
public void testMergeMetadata() {
|
||||||
// test new
|
// test new
|
||||||
Set<MetadataEntry> inputEntries = ImmutableSet.of(MetadataEntry.builder().entry("testKey", "testValue").build());
|
Task mergeMetadata = mediaApi.getMetadataApi(media.getId()).putAll(ImmutableMap.of("testKey", "testValue"));
|
||||||
Metadata inputMetadata = Metadata.builder().entries(inputEntries).build();
|
|
||||||
|
|
||||||
Task mergeMetadata = mediaApi.getMetadataApi(media.getId()).merge(inputMetadata);
|
|
||||||
Checks.checkTask(mergeMetadata);
|
Checks.checkTask(mergeMetadata);
|
||||||
assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(new)"));
|
assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(new)"));
|
||||||
metadata = mediaApi.getMetadataApi(media.getId()).get();
|
metadata = mediaApi.getMetadataApi(media.getId()).get();
|
||||||
Checks.checkMetadataFor(MEDIA, metadata);
|
Checks.checkMetadataFor(MEDIA, metadata);
|
||||||
checkMetadataContainsEntries(metadata, inputEntries);
|
assertEquals(metadata.get("testKey"), "testValue");
|
||||||
|
|
||||||
media = mediaApi.get(media.getId());
|
media = mediaApi.get(media.getId());
|
||||||
Checks.checkMediaFor(MEDIA, media);
|
Checks.checkMediaFor(MEDIA, media);
|
||||||
|
|
||||||
// test edit
|
// test edit
|
||||||
inputEntries = ImmutableSet.of(MetadataEntry.builder().entry("testKey", "new testValue").build());
|
mergeMetadata = mediaApi.getMetadataApi(media.getId()).put("testKey", "new testValue");
|
||||||
inputMetadata = Metadata.builder().entries(inputEntries).build();
|
|
||||||
|
|
||||||
mergeMetadata = mediaApi.getMetadataApi(media.getId()).merge(inputMetadata);
|
|
||||||
Checks.checkTask(mergeMetadata);
|
Checks.checkTask(mergeMetadata);
|
||||||
assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(edit)"));
|
assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(edit)"));
|
||||||
metadata = mediaApi.getMetadataApi(media.getId()).get();
|
metadata = mediaApi.getMetadataApi(media.getId()).get();
|
||||||
Checks.checkMetadataFor(MEDIA, metadata);
|
Checks.checkMetadataFor(MEDIA, metadata);
|
||||||
checkMetadataContainsEntries(metadata, inputEntries);
|
assertEquals(metadata.get("testKey"), "new testValue");
|
||||||
|
|
||||||
media = mediaApi.get(media.getId());
|
media = mediaApi.get(media.getId());
|
||||||
Checks.checkMediaFor(MEDIA, media);
|
Checks.checkMediaFor(MEDIA, media);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkMetadataContainsEntries(Metadata metadata, Set<MetadataEntry> entries) {
|
|
||||||
for (MetadataEntry inputEntry : entries) {
|
|
||||||
boolean found = false;
|
|
||||||
for (MetadataEntry entry : metadata.getMetadataEntries()) {
|
|
||||||
if (equal(inputEntry.getKey(), entry.getKey())) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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" })
|
@Test(description = "GET /media/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
|
||||||
public void testGetMetadataValue() {
|
public void testGetMetadataValue() {
|
||||||
metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("key");
|
metadataValue = mediaApi.getMetadataApi(media.getId()).get("key");
|
||||||
Checks.checkMetadataValueFor(MEDIA, metadataValue);
|
assertNotNull(metadataValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "PUT /media/{id}/metadata/{key}", dependsOnMethods = { "testMergeMetadata" })
|
@Test(description = "PUT /media/{id}/metadata/{key}", dependsOnMethods = { "testMergeMetadata" })
|
||||||
public void testSetMetadataValue() {
|
public void testSetMetadataValue() {
|
||||||
metadataEntryValue = "value";
|
metadataEntryValue = "value";
|
||||||
MetadataValue newValue = MetadataValue.builder().value(metadataEntryValue).build();
|
|
||||||
|
Task setMetadataEntry = mediaApi.getMetadataApi(media.getId()).put("key", metadataEntryValue);
|
||||||
Task setMetadataEntry = mediaApi.getMetadataApi(media.getId()).putEntry("key", newValue);
|
|
||||||
Checks.checkTask(setMetadataEntry);
|
Checks.checkTask(setMetadataEntry);
|
||||||
assertTrue(retryTaskSuccess.apply(setMetadataEntry), String.format(TASK_COMPLETE_TIMELY, "setMetadataEntry"));
|
assertTrue(retryTaskSuccess.apply(setMetadataEntry), String.format(TASK_COMPLETE_TIMELY, "setMetadataEntry"));
|
||||||
metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("key");
|
metadataValue = mediaApi.getMetadataApi(media.getId()).get("key");
|
||||||
Checks.checkMetadataValueFor(MEDIA, metadataValue);
|
assertNotNull(metadataValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "DELETE /media/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata",
|
@Test(description = "DELETE /media/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata",
|
||||||
"testGetMetadataValue" })
|
"testGetMetadataValue" })
|
||||||
public void testRemoveMetadata() {
|
public void testRemoveMetadata() {
|
||||||
Task removeEntry = mediaApi.getMetadataApi(media.getId()).removeEntry("testKey");
|
Task remove = mediaApi.getMetadataApi(media.getId()).remove("testKey");
|
||||||
Checks.checkTask(removeEntry);
|
Checks.checkTask(remove);
|
||||||
assertTrue(retryTaskSuccess.apply(removeEntry), String.format(TASK_COMPLETE_TIMELY, "removeEntry"));
|
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",
|
assertNull(metadataValue, String.format(OBJ_FIELD_ATTRB_DEL, MEDIA, "Metadata",
|
||||||
metadataValue != null ? metadataValue.toString() : "", "MetadataEntry",
|
metadataValue != null ? metadataValue.toString() : "", "MetadataEntry",
|
||||||
metadataValue != null ? metadataValue.toString() : ""));
|
metadataValue != null ? metadataValue.toString() : ""));
|
||||||
|
|
||||||
metadataValue = mediaApi.getMetadataApi(media.getId()).getValue("key");
|
metadataValue = mediaApi.getMetadataApi(media.getId()).get("key");
|
||||||
Checks.checkMetadataValueFor(MEDIA, metadataValue);
|
assertNotNull(metadataValue);
|
||||||
|
|
||||||
media = mediaApi.get(media.getId());
|
media = mediaApi.get(media.getId());
|
||||||
Checks.checkMediaFor(MEDIA, media);
|
Checks.checkMediaFor(MEDIA, media);
|
||||||
|
|
|
@ -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.Link;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.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.DhcpService;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpAddresses;
|
import org.jclouds.vcloud.director.v1_5.domain.network.IpAddresses;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
|
import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
|
||||||
|
@ -216,22 +215,9 @@ public class NetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
@Test
|
@Test
|
||||||
public void testGetNetworkMetadataEntryHref() {
|
public void testGetNetworkMetadataEntryHref() {
|
||||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse);
|
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() {
|
public static OrgNetwork network() {
|
||||||
return OrgNetwork.builder()
|
return OrgNetwork.builder()
|
||||||
.name("ilsolation01-Jclouds")
|
.name("ilsolation01-Jclouds")
|
||||||
|
|
|
@ -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.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.REQUIRED_VALUE_OBJECT_FMT;
|
||||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
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.assertEquals;
|
||||||
import static org.testng.Assert.assertFalse;
|
import static org.testng.Assert.assertFalse;
|
||||||
import static org.testng.Assert.assertNotNull;
|
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.Checks;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.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.Task;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
|
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
|
import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
|
||||||
|
@ -71,7 +70,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
public void cleanUp() {
|
public void cleanUp() {
|
||||||
if (metadataSet) {
|
if (metadataSet) {
|
||||||
try {
|
try {
|
||||||
Task remove = adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn).removeEntry("key");
|
Task remove = adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn).remove("key");
|
||||||
taskDoneEventually(remove);
|
taskDoneEventually(remove);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn(e, "Error when deleting metadata");
|
logger.warn(e, "Error when deleting metadata");
|
||||||
|
@ -95,8 +94,8 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupMetadata() {
|
private void setupMetadata() {
|
||||||
adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn)
|
//TODO: block until complete
|
||||||
.putEntry("key", MetadataValue.builder().value("value").build());
|
adminContext.getApi().getNetworkApi().getMetadataApi(networkUrn).put("key", "value");
|
||||||
metadataSet = true;
|
metadataSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +111,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
String.format(OBJ_FIELD_REQ_LIVE, NETWORK, "metadata.entries"));
|
String.format(OBJ_FIELD_REQ_LIVE, NETWORK, "metadata.entries"));
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(metadata);
|
checkResource(metadata);
|
||||||
|
|
||||||
for (MetadataEntry entry : metadata.getMetadataEntries()) {
|
for (MetadataEntry entry : metadata.getMetadataEntries()) {
|
||||||
// required elements and attributes
|
// required elements and attributes
|
||||||
|
@ -122,21 +121,14 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
String.format(OBJ_FIELD_ATTRB_REQ, networkApi, "MetadataEntry", entry.getValue(), "value"));
|
String.format(OBJ_FIELD_ATTRB_REQ, networkApi, "MetadataEntry", entry.getValue(), "value"));
|
||||||
|
|
||||||
// parent type
|
// parent type
|
||||||
checkResourceType(entry);
|
checkResource(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "GET /network/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
|
@Test(description = "GET /network/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
|
||||||
public void testGetMetadataValue() {
|
public void testGetMetadataValue() {
|
||||||
MetadataValue metadataValue = networkApi.getMetadataApi(networkUrn).getValue("key");
|
String metadataValue = networkApi.getMetadataApi(networkUrn).get("key");
|
||||||
|
|
||||||
// Check parent type
|
assertEquals(metadataValue, "value", String.format(OBJ_FIELD_EQ, NETWORK, "metadataEntry.value", "value", metadataValue));
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.Link;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.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.Reference;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
|
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
|
||||||
|
@ -179,7 +178,7 @@ public class OrgApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
@Test
|
@Test
|
||||||
public void testGetOrgMetadataEntryHref() {
|
public void testGetOrgMetadataEntryHref() {
|
||||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse);
|
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() {
|
public static Org org() {
|
||||||
|
@ -243,16 +242,4 @@ public class OrgApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
.entry("KEY", "VALUE")
|
.entry("KEY", "VALUE")
|
||||||
.build();
|
.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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.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.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.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.checkOrg;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkReferenceType;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkReferenceType;
|
||||||
import static org.testng.Assert.assertEquals;
|
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.VCloudDirectorMediaType;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
|
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.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.Reference;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
|
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
|
||||||
|
@ -67,7 +65,7 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
public void cleanUp() throws Exception {
|
public void cleanUp() throws Exception {
|
||||||
if (adminMembersSet) {
|
if (adminMembersSet) {
|
||||||
try {
|
try {
|
||||||
Task remove = adminContext.getApi().getOrgApi().getMetadataApi(orgUrn).removeEntry("KEY");
|
Task remove = adminContext.getApi().getOrgApi().getMetadataApi(orgUrn).remove("KEY");
|
||||||
taskDoneEventually(remove);
|
taskDoneEventually(remove);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn(e, "Error when deleting metadata entry");
|
logger.warn(e, "Error when deleting metadata entry");
|
||||||
|
@ -126,8 +124,8 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
* the need for configuration
|
* the need for configuration
|
||||||
*/
|
*/
|
||||||
private void setupAdminMembers() {
|
private void setupAdminMembers() {
|
||||||
adminContext.getApi().getOrgApi().getMetadataApi(orgUrn)
|
//TODO: block until complete
|
||||||
.putEntry("KEY", MetadataValue.builder().value("VALUE").build());
|
adminContext.getApi().getOrgApi().getMetadataApi(orgUrn).put("KEY", "VALUE");
|
||||||
|
|
||||||
AdminCatalog newCatalog = AdminCatalog.builder().name("Test Catalog " + getTestDateTimeStamp())
|
AdminCatalog newCatalog = AdminCatalog.builder().name("Test Catalog " + getTestDateTimeStamp())
|
||||||
.description("created by testOrg()").build();
|
.description("created by testOrg()").build();
|
||||||
|
@ -156,16 +154,14 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
@Test(description = "GET /org/{id}/metadata/{key}", dependsOnMethods = { "testGetOrgMetadata" })
|
@Test(description = "GET /org/{id}/metadata/{key}", dependsOnMethods = { "testGetOrgMetadata" })
|
||||||
public void testGetOrgMetadataValue() {
|
public void testGetOrgMetadataValue() {
|
||||||
// Call the method being tested
|
// 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"
|
// NOTE The environment MUST have configured the metadata entry as '{ key="KEY", value="VALUE"
|
||||||
// )'
|
// )'
|
||||||
|
|
||||||
String expected = "VALUE";
|
String expected = "VALUE";
|
||||||
|
|
||||||
checkMetadataValue(value);
|
assertEquals(value, expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value));
|
||||||
assertEquals(value.getValue(), expected,
|
|
||||||
String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value.getValue()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.checkMetadata;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataFor;
|
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.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.checkNetworkConfigSection;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkSection;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkSection;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOwner;
|
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.AccessSetting;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Checks;
|
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.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.Owner;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
|
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||||
|
@ -117,7 +113,6 @@ import com.google.common.collect.Sets;
|
||||||
@Test(singleThreaded = true, testName = "VAppApiLiveTest")
|
@Test(singleThreaded = true, testName = "VAppApiLiveTest")
|
||||||
public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
private MetadataValue metadataValue;
|
|
||||||
private String key;
|
private String key;
|
||||||
private boolean testUserCreated = false;
|
private boolean testUserCreated = false;
|
||||||
private User user;
|
private User user;
|
||||||
|
@ -751,22 +746,20 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
public void testSetMetadataValue() {
|
public void testSetMetadataValue() {
|
||||||
key = name("key-");
|
key = name("key-");
|
||||||
String value = name("value-");
|
String value = name("value-");
|
||||||
metadataValue = MetadataValue.builder().value(value).build();
|
vAppApi.getMetadataApi(vAppUrn).put(key, value);
|
||||||
vAppApi.getMetadataApi(vAppUrn).putEntry(key, metadataValue);
|
|
||||||
|
|
||||||
// Retrieve the value, and assert it was set correctly
|
// 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
|
// 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" })
|
@Test(groups = { "live", "user" }, description = "GET /vApp/{id}/metadata", dependsOnMethods = { "testSetMetadataValue" })
|
||||||
public void testGetMetadata() {
|
public void testGetMetadata() {
|
||||||
key = name("key-");
|
key = name("key-");
|
||||||
String value = name("value-");
|
String value = name("value-");
|
||||||
metadataValue = MetadataValue.builder().value(value).build();
|
vAppApi.getMetadataApi(vAppUrn).put(key, value);
|
||||||
vAppApi.getMetadataApi(vAppUrn).putEntry(key, metadataValue);
|
|
||||||
|
|
||||||
// Call the method being tested
|
// Call the method being tested
|
||||||
Metadata metadata = vAppApi.getMetadataApi(vAppUrn).get();
|
Metadata metadata = vAppApi.getMetadataApi(vAppUrn).get();
|
||||||
|
@ -783,23 +776,18 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
key = name("key-");
|
key = name("key-");
|
||||||
String value = name("value-");
|
String value = name("value-");
|
||||||
metadataValue = MetadataValue.builder().value(value).build();
|
vAppApi.getMetadataApi(vAppUrn).put(key, value);
|
||||||
vAppApi.getMetadataApi(vAppUrn).putEntry(key, metadataValue);
|
|
||||||
|
|
||||||
// Call the method being tested
|
// Call the method being tested
|
||||||
MetadataValue newValue = vAppApi.getMetadataApi(vAppUrn).getValue(key);
|
String newValue = vAppApi.getMetadataApi(vAppUrn).get(key);
|
||||||
|
|
||||||
String expected = metadataValue.getValue();
|
assertEquals(newValue, value, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", value, newValue));
|
||||||
|
|
||||||
checkMetadataValue(newValue);
|
|
||||||
assertEquals(newValue.getValue(), expected,
|
|
||||||
String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, newValue.getValue()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(groups = { "live", "user" }, description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
|
@Test(groups = { "live", "user" }, description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
|
||||||
public void testRemoveMetadataEntry() {
|
public void testRemoveMetadataEntry() {
|
||||||
// Delete the entry
|
// Delete the entry
|
||||||
Task task = vAppApi.getMetadataApi(vAppUrn).removeEntry(key);
|
Task task = vAppApi.getMetadataApi(vAppUrn).remove(key);
|
||||||
retryTaskSuccess.apply(task);
|
retryTaskSuccess.apply(task);
|
||||||
|
|
||||||
// Confirm the entry has been removed
|
// Confirm the entry has been removed
|
||||||
|
@ -817,8 +805,7 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
// Store a value, to be removed
|
// Store a value, to be removed
|
||||||
String key = name("key-");
|
String key = name("key-");
|
||||||
String value = name("value-");
|
String value = name("value-");
|
||||||
Metadata addedMetadata = Metadata.builder().entry(MetadataEntry.builder().key(key).value(value).build()).build();
|
Task task = vAppApi.getMetadataApi(vAppUrn).putAll(ImmutableMap.of(key, value));
|
||||||
Task task = vAppApi.getMetadataApi(vAppUrn).merge(addedMetadata);
|
|
||||||
retryTaskSuccess.apply(task);
|
retryTaskSuccess.apply(task);
|
||||||
|
|
||||||
// Confirm the entry contains everything that was there, and everything that was being added
|
// Confirm the entry contains everything that was there, and everything that was being added
|
||||||
|
|
|
@ -78,7 +78,7 @@ public class VAppNetworksLiveTest extends AbstractVAppApiLiveTest {
|
||||||
protected void tidyUp() {
|
protected void tidyUp() {
|
||||||
if (key != null) {
|
if (key != null) {
|
||||||
try {
|
try {
|
||||||
Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key);
|
Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).remove(key);
|
||||||
taskDoneEventually(remove);
|
taskDoneEventually(remove);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn(e, "Error when deleting metadata entry '%s'", key);
|
logger.warn(e, "Error when deleting metadata entry '%s'", key);
|
||||||
|
|
|
@ -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.Link;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.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.Owner;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
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.Task;
|
||||||
|
@ -251,7 +250,7 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
|
|
||||||
assertEquals(metadata, exampleMetadata());
|
assertEquals(metadata, exampleMetadata());
|
||||||
|
|
||||||
Task task = api.getMetadataApi(uri).merge(exampleMetadata());
|
Task task = api.getMetadataApi(uri).putAll(exampleMetadata());
|
||||||
assertNotNull(task);
|
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 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();
|
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() {
|
public void testVappTemplateMetadataValue() {
|
||||||
|
@ -293,14 +292,14 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
).getVAppTemplateApi();
|
).getVAppTemplateApi();
|
||||||
|
|
||||||
assertNotNull(api);
|
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);
|
assertNotNull(task);
|
||||||
|
|
||||||
task = api.getMetadataApi(uri).removeEntry("12345");
|
task = api.getMetadataApi(uri).remove("12345");
|
||||||
assertNotNull(task);
|
assertNotNull(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,7 +311,7 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
new VcloudHttpRequestPrimer().apiCommand("GET", templateId + "/metadata/12345").acceptMedia(METADATA_ENTRY).httpRequestBuilder().build(),
|
new VcloudHttpRequestPrimer().apiCommand("GET", templateId + "/metadata/12345").acceptMedia(METADATA_ENTRY).httpRequestBuilder().build(),
|
||||||
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error403.xml", ERROR).httpResponseBuilder().statusCode(403).build()).getVAppTemplateApi();
|
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)
|
@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 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();
|
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)
|
@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 VcloudHttpRequestPrimer().apiCommand("DELETE", templateId + "/metadata/12345").acceptMedia(TASK).httpRequestBuilder().build(),
|
||||||
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error403.xml", ERROR).httpResponseBuilder().statusCode(403).build()).getVAppTemplateApi();
|
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)
|
@Test(expectedExceptions = VCloudDirectorException.class)
|
||||||
|
@ -437,8 +436,4 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
.entry(MetadataEntry.builder().key("key").value("value").build()).build();
|
.entry(MetadataEntry.builder().key("key").value("value").build()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private MetadataValue exampleMetadataValue() {
|
|
||||||
return MetadataValue.builder().value("some value").build();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.checkMetadata;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataFor;
|
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.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.checkNetworkConfigSection;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfEnvelope;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfEnvelope;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfNetworkSection;
|
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.Link.Rel;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.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.Owner;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
|
import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||||
|
@ -84,7 +82,7 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
protected void tidyUp() {
|
protected void tidyUp() {
|
||||||
if (key != null) {
|
if (key != null) {
|
||||||
try {
|
try {
|
||||||
Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key);
|
Task remove = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).remove(key);
|
||||||
taskDoneEventually(remove);
|
taskDoneEventually(remove);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn(e, "Error when deleting metadata entry '%s'", key);
|
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();
|
Metadata metadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
|
||||||
MetadataEntry entry = Iterables.get(metadata.getMetadataEntries(), 0);
|
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, entry.getValue());
|
||||||
assertEquals(val.getValue(), entry.getValue());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "GET /vAppTemplate/{id}/networkConfigSection")
|
@Test(description = "GET /vAppTemplate/{id}/networkConfigSection")
|
||||||
|
@ -205,10 +202,8 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
key = name("key-");
|
key = name("key-");
|
||||||
val = name("value-");
|
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);
|
assertTaskSucceeds(task);
|
||||||
|
|
||||||
Metadata newMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
|
Metadata newMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
|
||||||
|
@ -220,18 +215,17 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
@Test(description = "PUT /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testEditMetadata" })
|
@Test(description = "PUT /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testEditMetadata" })
|
||||||
public void testEditMetadataValue() {
|
public void testEditMetadataValue() {
|
||||||
val = "new" + val;
|
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);
|
retryTaskSuccess.apply(task);
|
||||||
|
|
||||||
MetadataValue newMetadataValue = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).getValue(key);
|
String newMetadataValue = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get(key);
|
||||||
assertEquals(newMetadataValue.getValue(), metadataValue.getValue());
|
assertEquals(newMetadataValue, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "DELETE /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" })
|
@Test(description = "DELETE /vAppTemplate/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" })
|
||||||
public void testRemoveVAppTemplateMetadataValue() {
|
public void testRemoveVAppTemplateMetadataValue() {
|
||||||
final Task deletionTask = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).removeEntry(key);
|
final Task deletionTask = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).remove(key);
|
||||||
assertTaskSucceeds(deletionTask);
|
assertTaskSucceeds(deletionTask);
|
||||||
|
|
||||||
Metadata newMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
|
Metadata newMetadata = vAppTemplateApi.getMetadataApi(vAppTemplateUrn).get();
|
||||||
|
|
|
@ -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;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Media.ImageType;
|
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.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.Owner;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.User;
|
import org.jclouds.vcloud.director.v1_5.domain.User;
|
||||||
|
@ -371,9 +370,7 @@ public class VdcApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
.xmlFilePayload("/vdc/metadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE)
|
.xmlFilePayload("/vdc/metadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE)
|
||||||
.httpResponseBuilder().build());
|
.httpResponseBuilder().build());
|
||||||
|
|
||||||
MetadataValue expected = metadataValue();
|
assertEquals(api.getVdcApi().getMetadataApi(vdcUri).get("key"), "");
|
||||||
|
|
||||||
assertEquals(api.getVdcApi().getMetadataApi(vdcUri).getValue("key"), expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vdc getVdc() {
|
public static Vdc getVdc() {
|
||||||
|
@ -582,9 +579,4 @@ public class VdcApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MetadataValue metadataValue() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
import static org.testng.Assert.assertFalse;
|
import static org.testng.Assert.assertFalse;
|
||||||
import static org.testng.Assert.assertTrue;
|
|
||||||
import static org.testng.Assert.assertNotNull;
|
import static org.testng.Assert.assertNotNull;
|
||||||
|
import static org.testng.Assert.assertTrue;
|
||||||
import static org.testng.Assert.fail;
|
import static org.testng.Assert.fail;
|
||||||
|
|
||||||
import java.util.Map;
|
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.Checks;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.Reference;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.ResourceEntity;
|
import org.jclouds.vcloud.director.v1_5.domain.ResourceEntity;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||||
|
@ -123,7 +121,7 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
|
|
||||||
if (metadataSet) {
|
if (metadataSet) {
|
||||||
try {
|
try {
|
||||||
Task remove = adminContext.getApi().getVdcApi().getMetadataApi(vdcUrn).removeEntry("key");
|
Task remove = adminContext.getApi().getVdcApi().getMetadataApi(vdcUrn).remove("key");
|
||||||
taskDoneEventually(remove);
|
taskDoneEventually(remove);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn(e, "Error deleting metadata entry");
|
logger.warn(e, "Error deleting metadata entry");
|
||||||
|
@ -323,13 +321,9 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
String key = Iterables.getFirst(metadataMap.keySet(), "MadeUpKey!");
|
String key = Iterables.getFirst(metadataMap.keySet(), "MadeUpKey!");
|
||||||
String value = metadataMap.get(key);
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.checkMetadata;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataFor;
|
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.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.checkNetworkConnectionSection;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOperatingSystemSection;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOperatingSystemSection;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkProductSectionList;
|
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.AbstractVAppApiLiveTest;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Checks;
|
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.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.ProductSectionList;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList;
|
import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
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")
|
@Test(groups = { "live", "user" }, singleThreaded = true, testName = "VmApiLiveTest")
|
||||||
public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
private MetadataValue metadataValue;
|
private String metadataValue;
|
||||||
private String key;
|
private String key;
|
||||||
private boolean testUserCreated = false;
|
private boolean testUserCreated = false;
|
||||||
|
|
||||||
|
@ -872,15 +868,16 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
@Test(description = "PUT /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetVm" })
|
@Test(description = "PUT /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetVm" })
|
||||||
public void testSetMetadataValue() {
|
public void testSetMetadataValue() {
|
||||||
key = name("key-");
|
key = name("key-");
|
||||||
String value = name("value-");
|
metadataValue = name("value-");
|
||||||
metadataValue = MetadataValue.builder().value(value).build();
|
//TODO: block!!
|
||||||
vmApi.getMetadataApi(vmUrn).putEntry(key, metadataValue);
|
vmApi.getMetadataApi(vmUrn).put(key, metadataValue);
|
||||||
|
|
||||||
// Retrieve the value, and assert it was set correctly
|
// 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
|
// 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" })
|
@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" })
|
@Test(description = "GET /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
|
||||||
public void testGetOrgMetadataValue() {
|
public void testGetOrgMetadataValue() {
|
||||||
key = name("key-");
|
key = name("key-");
|
||||||
String value = name("value-");
|
metadataValue = name("value-");
|
||||||
metadataValue = MetadataValue.builder().value(value).build();
|
|
||||||
vmApi.getMetadataApi(vmUrn).putEntry(key, metadataValue);
|
//TODO: block!!
|
||||||
|
vmApi.getMetadataApi(vmUrn).put(key, metadataValue);
|
||||||
|
|
||||||
// Call the method being tested
|
// Call the method being tested
|
||||||
MetadataValue metadataValue = vmApi.getMetadataApi(vmUrn).getValue(key);
|
String newMetadataValue = vmApi.getMetadataApi(vmUrn).get(key);
|
||||||
|
|
||||||
String expected = metadataValue.getValue();
|
assertEquals(newMetadataValue, metadataValue,
|
||||||
|
String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", metadataValue, newMetadataValue));
|
||||||
checkMetadataValue(metadataValue);
|
|
||||||
assertEquals(metadataValue.getValue(), expected,
|
|
||||||
String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, metadataValue.getValue()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
|
@Test(description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
|
||||||
public void testRemoveMetadataEntry() {
|
public void testRemoveMetadataEntry() {
|
||||||
// Delete the entry
|
// Delete the entry
|
||||||
Task task = vmApi.getMetadataApi(vmUrn).removeEntry(key);
|
Task task = vmApi.getMetadataApi(vmUrn).remove(key);
|
||||||
retryTaskSuccess.apply(task);
|
retryTaskSuccess.apply(task);
|
||||||
|
|
||||||
// Confirm the entry has been removed
|
// Confirm the entry has been removed
|
||||||
|
@ -933,8 +928,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
// Store a value, to be removed
|
// Store a value, to be removed
|
||||||
String key = name("key-");
|
String key = name("key-");
|
||||||
String value = name("value-");
|
String value = name("value-");
|
||||||
Metadata addedMetadata = Metadata.builder().entry(MetadataEntry.builder().key(key).value(value).build()).build();
|
Task task = vmApi.getMetadataApi(vmUrn).putAll(ImmutableMap.of(key, value));
|
||||||
Task task = vmApi.getMetadataApi(vmUrn).merge(addedMetadata);
|
|
||||||
retryTaskSuccess.apply(task);
|
retryTaskSuccess.apply(task);
|
||||||
|
|
||||||
// Confirm the entry contains everything that was there, and everything that was being added
|
// Confirm the entry contains everything that was there, and everything that was being added
|
||||||
|
|
|
@ -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.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
import static org.testng.Assert.assertNotNull;
|
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.VCloudDirectorException;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
|
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.Checks;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
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.Task;
|
||||||
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
|
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
|
||||||
import org.jclouds.vcloud.director.v1_5.features.VdcApi;
|
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.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests behavior of {@link VdcApi}
|
* Tests behavior of {@link VdcApi}
|
||||||
*
|
*
|
||||||
|
@ -67,7 +67,7 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
public void cleanUp() throws Exception {
|
public void cleanUp() throws Exception {
|
||||||
if (metadataKey != null) {
|
if (metadataKey != null) {
|
||||||
try {
|
try {
|
||||||
Task task = metadataApi.removeEntry(metadataKey);
|
Task task = metadataApi.remove(metadataKey);
|
||||||
taskDoneEventually(task);
|
taskDoneEventually(task);
|
||||||
} catch (VCloudDirectorException e) {
|
} catch (VCloudDirectorException e) {
|
||||||
logger.warn(e, "Error deleting metadata-value (perhaps it doesn't exist?); continuing...");
|
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 {
|
public void testSetMetadata() throws Exception {
|
||||||
metadataKey = name("key-");
|
metadataKey = name("key-");
|
||||||
metadataValue = name("value-");
|
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);
|
assertTaskSucceeds(task);
|
||||||
|
|
||||||
MetadataValue modified = metadataApi.getValue(metadataKey);
|
String modified = metadataApi.get(metadataKey);
|
||||||
Checks.checkMetadataValueFor("AdminVdc", modified, metadataValue);
|
assertEquals(modified, metadataValue);
|
||||||
Checks.checkMetadata(metadata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO insufficient permissions to test
|
// TODO insufficient permissions to test
|
||||||
@Test(description = "GET /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadata" }, enabled = false)
|
@Test(description = "GET /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadata" }, enabled = false)
|
||||||
public void testGetMetadataValue() throws Exception {
|
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
|
// TODO insufficient permissions to test
|
||||||
@Test(description = "PUT /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" }, enabled = false)
|
@Test(description = "PUT /admin/vdc/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadataValue" }, enabled = false)
|
||||||
public void testSetMetadataValue() throws Exception {
|
public void testSetMetadataValue() throws Exception {
|
||||||
metadataValue = name("value-");
|
metadataValue = name("value-");
|
||||||
MetadataValue newV = MetadataValue.builder().value(metadataValue).build();
|
|
||||||
|
|
||||||
Task task = metadataApi.putEntry(metadataKey, newV);
|
Task task = metadataApi.put(metadataKey, metadataValue);
|
||||||
assertTaskSucceeds(task);
|
assertTaskSucceeds(task);
|
||||||
|
|
||||||
MetadataValue retrievedMetadataValue = metadataApi.getValue(metadataKey);
|
String retrievedMetadataValue = metadataApi.get(metadataKey);
|
||||||
Checks.checkMetadataValueFor("AdminVdc", retrievedMetadataValue, metadataValue);
|
assertEquals(retrievedMetadataValue, metadataValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO insufficient permissions to test
|
// TODO insufficient permissions to test
|
||||||
|
@ -208,14 +205,9 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||||
public void testRemoveMetadataValue() throws Exception {
|
public void testRemoveMetadataValue() throws Exception {
|
||||||
// TODO Remove dependency on other tests; make cleanUp remove a list of metadata entries?
|
// 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);
|
assertTaskSucceeds(task);
|
||||||
|
|
||||||
try {
|
assertNull(metadataApi.get(metadataKey));
|
||||||
metadataApi.getValue(metadataKey);
|
|
||||||
fail("Retrieval of metadata value " + metadataKey + " should have fail after deletion");
|
|
||||||
} catch (VCloudDirectorException e) {
|
|
||||||
// success; should not be accessible
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,7 +234,7 @@ public abstract class BaseVCloudDirectorExpectTest<T> extends BaseRestApiExpectT
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
protected class VcloudHttpResponsePrimer {
|
protected class VcloudHttpResponsePrimer {
|
||||||
private HttpResponse.Builder<?> builder = HttpResponse.builder();
|
private HttpResponse.Builder<?> builder = HttpResponse.builder().statusCode(200);
|
||||||
|
|
||||||
public VcloudHttpResponsePrimer() {
|
public VcloudHttpResponsePrimer() {
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
<MetadataValue
|
<MetadataValue xmlns="http://www.vmware.com/vcloud/v1.5">
|
||||||
xmlns="http://www.vmware.com/vcloud/v1.5">
|
|
||||||
<Value>some value</Value>
|
<Value>some value</Value>
|
||||||
</MetadataValue>
|
</MetadataValue>
|
Loading…
Reference in New Issue