mirror of https://github.com/apache/jclouds.git
Issue 830: refactored Org, Network, Task, User apis to support URN; removed 'id' from Reference type
This commit is contained in:
parent
9e69626413
commit
206af90b77
|
@ -44,8 +44,10 @@
|
|||
<test.vcloud-director.catalog-id></test.vcloud-director.catalog-id>
|
||||
<test.vcloud-director.media-id></test.vcloud-director.media-id>
|
||||
<test.vcloud-director.vapptemplate-id></test.vcloud-director.vapptemplate-id>
|
||||
<!-- URN format: ex. urn:vcloud:network:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
|
||||
<test.vcloud-director.network-id></test.vcloud-director.network-id>
|
||||
<test.vcloud-director.vdc-id></test.vcloud-director.vdc-id>
|
||||
<!-- URN format: ex. urn:vcloud:user:7212e451-76e1-4631-b2de-ba1dfd8080e4 -->
|
||||
<test.vcloud-director.user-id></test.vcloud-director.user-id>
|
||||
|
||||
<jclouds.osgi.export>org.jclouds.vcloud.director.v1_5*;version="${project.version}"</jclouds.osgi.export>
|
||||
|
|
|
@ -53,8 +53,8 @@ public class CatalogReference extends Reference {
|
|||
super(builder);
|
||||
}
|
||||
|
||||
public CatalogReference(URI href, String id, String name, String type) {
|
||||
super(href, id, name, type);
|
||||
public CatalogReference(URI href, String name, String type) {
|
||||
super(href, name, type);
|
||||
}
|
||||
|
||||
protected CatalogReference() {
|
||||
|
|
|
@ -29,26 +29,24 @@ import javax.xml.bind.annotation.XmlSeeAlso;
|
|||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.base.Objects.ToStringHelper;
|
||||
|
||||
/**
|
||||
* A reference to a resource.
|
||||
*
|
||||
*
|
||||
* Contains an href attribute and optional name and type attributes.
|
||||
* <p>
|
||||
*
|
||||
* <pre>
|
||||
* <xs:complexType name="ReferenceType">
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* @author grkvlt@apache.org
|
||||
*/
|
||||
@XmlSeeAlso({
|
||||
VAppReference.class,
|
||||
CatalogReference.class,
|
||||
RoleReference.class
|
||||
})
|
||||
@XmlSeeAlso({ VAppReference.class, CatalogReference.class, RoleReference.class })
|
||||
@XmlRootElement(name = "Reference")
|
||||
@XmlType(name = "ReferenceType")
|
||||
public class Reference {
|
||||
|
@ -66,14 +64,13 @@ public class Reference {
|
|||
|
||||
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
|
||||
}
|
||||
|
||||
|
||||
public static class Builder<B extends Builder<B>> {
|
||||
|
||||
private URI href;
|
||||
private String id;
|
||||
private String name;
|
||||
private String type;
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected B self() {
|
||||
return (B) this;
|
||||
|
@ -87,14 +84,6 @@ public class Reference {
|
|||
return self();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Reference#getId()
|
||||
*/
|
||||
public B id(String id) {
|
||||
this.id = id;
|
||||
return self();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Reference#getType()
|
||||
*/
|
||||
|
@ -116,37 +105,33 @@ public class Reference {
|
|||
}
|
||||
|
||||
public B fromReference(Reference in) {
|
||||
return href(in.getHref()).id(in.getId()).name(in.getName()).type(in.getType());
|
||||
return href(in.getHref()).name(in.getName()).type(in.getType());
|
||||
}
|
||||
|
||||
public B fromEntity(Entity in) {
|
||||
return href(in.getHref()).id(in.getId()).name(in.getName()).type(in.getType());
|
||||
return href(in.getHref()).name(in.getName()).type(in.getType());
|
||||
}
|
||||
|
||||
|
||||
protected B fromAttributes(Map<String, String> attributes) {
|
||||
return href(URI.create(attributes.get("href"))).id(attributes.get("id")).name(attributes.get("name")).type(attributes.get("type"));
|
||||
return href(URI.create(attributes.get("href"))).name(attributes.get("name")).type(attributes.get("type"));
|
||||
}
|
||||
}
|
||||
|
||||
@XmlAttribute(required = true)
|
||||
private URI href;
|
||||
@XmlAttribute
|
||||
private String id;
|
||||
@XmlAttribute
|
||||
private String name;
|
||||
@XmlAttribute
|
||||
private String type;
|
||||
|
||||
protected Reference(Builder<?> builder) {
|
||||
this.href = builder.href;
|
||||
this.id = builder.id;
|
||||
this.name = builder.name;
|
||||
this.type = builder.type;
|
||||
}
|
||||
|
||||
protected Reference(URI href, String id, String name, String type) {
|
||||
protected Reference(URI href, String name, String type) {
|
||||
this.href = href;
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
}
|
||||
|
@ -165,29 +150,19 @@ public class Reference {
|
|||
* particular context. Although URLs have a well-known syntax and a well-understood
|
||||
* interpretation, a api should treat each href as an opaque string. The rules that govern how
|
||||
* the server constructs href strings might change in future releases.
|
||||
*
|
||||
*
|
||||
* @return an opaque reference and should never be parsed
|
||||
*/
|
||||
public URI getHref() {
|
||||
return href;
|
||||
}
|
||||
|
||||
/**
|
||||
* The resource identifier, expressed in URN format.
|
||||
* <p/>
|
||||
* The value of this attribute uniquely identifies the resource, persists for the life of the
|
||||
* resource, and is never reused.
|
||||
*/
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contains the name of the the entity.
|
||||
* <p/>
|
||||
* The object type, specified as a MIME content type, of the object that the link references.
|
||||
* This attribute is present only for links to objects. It is not present for links to actions.
|
||||
*
|
||||
*
|
||||
* @return type definition, type, expressed as an HTTP Content-Type
|
||||
*/
|
||||
public String getName() {
|
||||
|
@ -199,7 +174,7 @@ public class Reference {
|
|||
* <p/>
|
||||
* The object type, specified as a MIME content type, of the object that the link references.
|
||||
* This attribute is present only for links to objects. It is not present for links to actions.
|
||||
*
|
||||
*
|
||||
* @return type definition, type, expressed as an HTTP Content-Type
|
||||
*/
|
||||
public String getType() {
|
||||
|
@ -213,12 +188,12 @@ public class Reference {
|
|||
if (o == null || getClass() != o.getClass())
|
||||
return false;
|
||||
Reference that = Reference.class.cast(o);
|
||||
return equal(this.href, that.href) && equal(this.id, that.id) && equal(this.name, that.name) && equal(this.type, that.type);
|
||||
return equal(this.href, that.href) && equal(this.name, that.name) && equal(this.type, that.type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(href, id, name, type);
|
||||
return Objects.hashCode(href, name, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -227,13 +202,15 @@ public class Reference {
|
|||
}
|
||||
|
||||
protected ToStringHelper string() {
|
||||
return Objects.toStringHelper("").add("href", href).add("id", id).add("name", name).add("type", type);
|
||||
return Objects.toStringHelper("").add("href", href).add("name", name).add("type", type);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see VCloudDirectorApi#resolveEntity
|
||||
*/
|
||||
@Deprecated
|
||||
public Reference toAdminReference(String endpoint) {
|
||||
return toBuilder()
|
||||
.type(null)
|
||||
.href(URI.create(getHref().toASCIIString().replace(endpoint, endpoint+"/admin")))
|
||||
.build();
|
||||
return toBuilder().type(null).href(URI.create(getHref().toASCIIString().replace(endpoint, endpoint + "/admin")))
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,8 +53,8 @@ public class RoleReference extends Reference {
|
|||
super(builder);
|
||||
}
|
||||
|
||||
public RoleReference(URI href, String id, String name, String type) {
|
||||
super(href, id, name, type);
|
||||
public RoleReference(URI href, String name, String type) {
|
||||
super(href, name, type);
|
||||
}
|
||||
|
||||
protected RoleReference() {
|
||||
|
|
|
@ -70,7 +70,7 @@ public class Session {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see Session#getOrg()
|
||||
* @see Session#get()
|
||||
*/
|
||||
public Builder org(String org) {
|
||||
this.org = org;
|
||||
|
@ -106,7 +106,7 @@ public class Session {
|
|||
}
|
||||
|
||||
public Builder fromSession(Session in) {
|
||||
return user(in.getUser()).org(in.getOrg()).href(in.getHref()).links(in.getLinks());
|
||||
return user(in.getUser()).org(in.get()).href(in.getHref()).links(in.getLinks());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,7 +144,7 @@ public class Session {
|
|||
/**
|
||||
* @return is the name of an organization of which the user is a member
|
||||
*/
|
||||
public String getOrg() {
|
||||
public String get() {
|
||||
return org;
|
||||
}
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ public class Task extends Entity {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see Task#getOrg()
|
||||
* @see Task#get()
|
||||
*/
|
||||
public B org(Reference org) {
|
||||
this.org = org;
|
||||
|
@ -241,7 +241,7 @@ public class Task extends Entity {
|
|||
public B fromTask(Task in) {
|
||||
return fromEntityType(in)
|
||||
.error(in.getError())
|
||||
.org(in.getOrg())
|
||||
.org(in.get())
|
||||
.progress(in.getProgress())
|
||||
.owner(in.getOwner())
|
||||
.user(in.getUser())
|
||||
|
@ -310,7 +310,7 @@ public class Task extends Entity {
|
|||
/**
|
||||
* The organization that started the task.
|
||||
*/
|
||||
public Reference getOrg() {
|
||||
public Reference get() {
|
||||
return org;
|
||||
}
|
||||
|
||||
|
|
|
@ -53,8 +53,8 @@ public class VAppReference extends Reference {
|
|||
super(builder);
|
||||
}
|
||||
|
||||
public VAppReference(URI href, String id, String name, String type) {
|
||||
super(href, id, name, type);
|
||||
public VAppReference(URI href, String name, String type) {
|
||||
super(href, name, type);
|
||||
}
|
||||
|
||||
protected VAppReference() {
|
||||
|
|
|
@ -64,7 +64,7 @@ public class QueryResultAdminGroupRecord extends QueryResultRecordType {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see QueryResultAdminGroupRecord#getOrg()
|
||||
* @see QueryResultAdminGroupRecord#get()
|
||||
*/
|
||||
public B org(String val) {
|
||||
this.org = val;
|
||||
|
@ -95,7 +95,7 @@ public class QueryResultAdminGroupRecord extends QueryResultRecordType {
|
|||
public B fromQueryResultAdminGroupRecord(QueryResultAdminGroupRecord in) {
|
||||
return fromQueryResultRecordType(in)
|
||||
.name(in.getName())
|
||||
.org(in.getOrg())
|
||||
.org(in.get())
|
||||
.roleName(in.getRoleName())
|
||||
.isReadOnly(in.isReadOnly());
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ public class QueryResultAdminGroupRecord extends QueryResultRecordType {
|
|||
/**
|
||||
* Organization reference or id
|
||||
*/
|
||||
public String getOrg() {
|
||||
public String get() {
|
||||
return org;
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ public class QueryResultAdminUserRecord extends QueryResultRecordType {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see QueryResultAdminUserRecord#getOrg()
|
||||
* @see QueryResultAdminUserRecord#get()
|
||||
*/
|
||||
public B org(String val) {
|
||||
this.org = val;
|
||||
|
@ -158,7 +158,7 @@ public class QueryResultAdminUserRecord extends QueryResultRecordType {
|
|||
public B fromQueryResultAdminUserRecord(QueryResultAdminUserRecord in) {
|
||||
return fromQueryResultRecordType(in)
|
||||
.name(in.getName())
|
||||
.org(in.getOrg())
|
||||
.org(in.get())
|
||||
.fullName(in.getFullName())
|
||||
.isEnabled(in.isEnabled())
|
||||
.numberOfDeployedVMs(in.getNumberOfDeployedVMs())
|
||||
|
@ -224,7 +224,7 @@ public class QueryResultAdminUserRecord extends QueryResultRecordType {
|
|||
/**
|
||||
* Organization reference or id
|
||||
*/
|
||||
public String getOrg() {
|
||||
public String get() {
|
||||
return org;
|
||||
}
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ public class QueryResultAdminVdcRecord extends QueryResultRecordType {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see QueryResultAdminVdcRecord#getOrg()
|
||||
* @see QueryResultAdminVdcRecord#get()
|
||||
*/
|
||||
public B org(String val) {
|
||||
this.org = val;
|
||||
|
@ -270,7 +270,7 @@ public class QueryResultAdminVdcRecord extends QueryResultRecordType {
|
|||
.providerVdcName(in.getProviderVdcName())
|
||||
.providerVdc(in.getProviderVdc())
|
||||
.orgName(in.getOrgName())
|
||||
.org(in.getOrg())
|
||||
.org(in.get())
|
||||
.numberOfVApps(in.getNumberOfVApps())
|
||||
.numberOfMedia(in.getNumberOfMedia())
|
||||
.numberOfVAppTemplates(in.getNumberOfVAppTemplates())
|
||||
|
@ -458,7 +458,7 @@ public class QueryResultAdminVdcRecord extends QueryResultRecordType {
|
|||
/**
|
||||
* Organization reference or id
|
||||
*/
|
||||
public String getOrg() {
|
||||
public String get() {
|
||||
return org;
|
||||
}
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ public class QueryResultMediaRecord extends QueryResultRecordType {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see QueryResultMediaRecord#getOrg()
|
||||
* @see QueryResultMediaRecord#get()
|
||||
*/
|
||||
public B org(String val) {
|
||||
this.org = val;
|
||||
|
@ -188,7 +188,7 @@ public class QueryResultMediaRecord extends QueryResultRecordType {
|
|||
.name(in.getName())
|
||||
.vdc(in.getVdc())
|
||||
.vdcName(in.getVdcName())
|
||||
.org(in.getOrg())
|
||||
.org(in.get())
|
||||
.creationDate(in.getCreationDate())
|
||||
.isBusy(in.isBusy())
|
||||
.storageB(in.getStorageB())
|
||||
|
@ -296,7 +296,7 @@ public class QueryResultMediaRecord extends QueryResultRecordType {
|
|||
/**
|
||||
* Organization reference or id
|
||||
*/
|
||||
public String getOrg() {
|
||||
public String get() {
|
||||
return org;
|
||||
}
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ public class QueryResultVAppTemplateRecord extends QueryResultRecordType {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see QueryResultVAppTemplateRecord#getOrg()
|
||||
* @see QueryResultVAppTemplateRecord#get()
|
||||
*/
|
||||
public B org(String val) {
|
||||
this.org = val;
|
||||
|
@ -187,7 +187,7 @@ public class QueryResultVAppTemplateRecord extends QueryResultRecordType {
|
|||
.isPublished(in.isPublished())
|
||||
.vdc(in.getVdc())
|
||||
.vdcName(in.getVdcName())
|
||||
.org(in.getOrg())
|
||||
.org(in.get())
|
||||
.creationDate(in.getCreationDate())
|
||||
.isBusy(in.isBusy())
|
||||
.isGoldMaster(in.isGoldMaster())
|
||||
|
@ -292,7 +292,7 @@ public class QueryResultVAppTemplateRecord extends QueryResultRecordType {
|
|||
/**
|
||||
* Organization reference or id
|
||||
*/
|
||||
public String getOrg() {
|
||||
public String get() {
|
||||
return org;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,13 +23,14 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
import org.jclouds.concurrent.Timeout;
|
||||
import org.jclouds.rest.annotations.Delegate;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
|
||||
|
||||
/**
|
||||
* Provides synchronous access to {@link Network}.
|
||||
*
|
||||
* @see NetworkAsyncApi
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||
public interface NetworkApi {
|
||||
|
@ -39,7 +40,9 @@ public interface NetworkApi {
|
|||
*
|
||||
* @return the network or null if not found
|
||||
*/
|
||||
Network getNetwork(URI networkUri);
|
||||
Network get(String networkUrn);
|
||||
|
||||
Network get(URI networkHref);
|
||||
|
||||
/**
|
||||
* @return synchronous access to {@link Metadata.Readable} features
|
||||
|
|
|
@ -29,8 +29,10 @@ import org.jclouds.rest.annotations.ExceptionParser;
|
|||
import org.jclouds.rest.annotations.JAXBResponseParser;
|
||||
import org.jclouds.rest.annotations.RequestFilters;
|
||||
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
|
||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.NetworkURNToHref;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
|
@ -42,18 +44,27 @@ import com.google.common.util.concurrent.ListenableFuture;
|
|||
public interface NetworkAsyncApi {
|
||||
|
||||
/**
|
||||
* @see NetworkApi#getNetwork(URI)
|
||||
* @see NetworkApi#get(String)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<? extends Network> getNetwork(@EndpointParam URI networkUri);
|
||||
|
||||
ListenableFuture<? extends Network> get(@EndpointParam(parser = NetworkURNToHref.class) String networkUrn);
|
||||
|
||||
/**
|
||||
* @see NetworkApi#get(URI)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<? extends Network> get(@EndpointParam URI networkHref);
|
||||
|
||||
/**
|
||||
* @return asynchronous access to {@link Metadata.Readable} features
|
||||
*/
|
||||
@Delegate
|
||||
MetadataAsyncApi.Readable getMetadataApi();
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -23,9 +23,9 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
import org.jclouds.concurrent.Timeout;
|
||||
import org.jclouds.rest.annotations.Delegate;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
|
||||
|
||||
/**
|
||||
* Provides synchronous access to {@link Org}.
|
||||
|
@ -38,48 +38,28 @@ public interface OrgApi {
|
|||
|
||||
/**
|
||||
* Retrieves a list of organizations.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /org
|
||||
* GET / org
|
||||
* </pre>
|
||||
*
|
||||
* @return a list of organizations
|
||||
*/
|
||||
OrgList getOrgList();
|
||||
OrgList list();
|
||||
|
||||
/**
|
||||
* Retrieves an organization.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /org/{id}
|
||||
* </pre>
|
||||
*
|
||||
* @return the org or null if not found
|
||||
*/
|
||||
Org getOrg(URI orgRef);
|
||||
Org get(String orgUrn);
|
||||
|
||||
/**
|
||||
* Modifies a catalog control access.
|
||||
*
|
||||
* <pre>
|
||||
* POST /org/{id}/catalog/{catalogId}/action/controlAccess
|
||||
* </pre>
|
||||
*
|
||||
* @return the control access information
|
||||
*/
|
||||
ControlAccessParams modifyControlAccess(URI orgRef, String catalogId, ControlAccessParams params);
|
||||
Org get(URI orgHref);
|
||||
|
||||
/**
|
||||
* Retrieves the catalog control access information.
|
||||
*
|
||||
* <pre>
|
||||
* GET /org/{id}/catalog/{catalogId}/controlAccess
|
||||
* </pre>
|
||||
*
|
||||
* @return the control access information
|
||||
*/
|
||||
ControlAccessParams getControlAccess(URI orgRef, String catalogId);
|
||||
|
||||
/**
|
||||
* @return synchronous access to {@link Metadata.Readable} features
|
||||
*/
|
||||
|
|
|
@ -18,29 +18,23 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CONTROL_ACCESS;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
|
||||
import org.jclouds.rest.annotations.BinderParam;
|
||||
import org.jclouds.rest.annotations.Delegate;
|
||||
import org.jclouds.rest.annotations.EndpointParam;
|
||||
import org.jclouds.rest.annotations.ExceptionParser;
|
||||
import org.jclouds.rest.annotations.JAXBResponseParser;
|
||||
import org.jclouds.rest.annotations.RequestFilters;
|
||||
import org.jclouds.rest.binders.BindToXMLPayload;
|
||||
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
|
||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToHref;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
|
@ -52,45 +46,31 @@ import com.google.common.util.concurrent.ListenableFuture;
|
|||
public interface OrgAsyncApi {
|
||||
|
||||
/**
|
||||
* @see OrgApi#getOrgList()
|
||||
* @see OrgApi#list()
|
||||
*/
|
||||
@GET
|
||||
@Path("/org/")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgList> getOrgList();
|
||||
ListenableFuture<OrgList> list();
|
||||
|
||||
/**
|
||||
* @see OrgApi#getOrg(URI)
|
||||
* @see OrgApi#get(String)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<? extends Org> getOrg(@EndpointParam URI orgUri);
|
||||
ListenableFuture<? extends Org> get(@EndpointParam(parser = OrgURNToHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see OrgApi#modifyControlAccess(URI, URI, ControlAccessParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/catalog/{catalogId}/action/controlAccess")
|
||||
@Produces(CONTROL_ACCESS)
|
||||
@Consumes(CONTROL_ACCESS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<ControlAccessParams> modifyControlAccess(@EndpointParam URI orgRef,
|
||||
@PathParam("catalogId") String catalogId,
|
||||
@BinderParam(BindToXMLPayload.class) ControlAccessParams params);
|
||||
|
||||
/**
|
||||
* @see OrgApi#getControlAccess(URI, URI, ControlAccessParams)
|
||||
* @see OrgApi#get(URI)
|
||||
*/
|
||||
@GET
|
||||
@Path("/catalog/{catalogId}/controlAccess")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<ControlAccessParams> getControlAccess(@EndpointParam URI orgRef,
|
||||
@PathParam("catalogId") String catalogId);
|
||||
ListenableFuture<? extends Org> get(@EndpointParam URI orgHref);
|
||||
|
||||
/**
|
||||
* @return asynchronous access to {@link Metadata.Readable} features
|
||||
|
|
|
@ -22,47 +22,56 @@ import java.net.URI;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.jclouds.concurrent.Timeout;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
|
||||
/**
|
||||
* Provides synchronous access to {@link Task} objects.
|
||||
*
|
||||
* @see TaskAsyncApi
|
||||
* @author grkvlt@apache.org
|
||||
* @author grkvlt@apache.org, Adrian Cole
|
||||
*/
|
||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||
public interface TaskApi {
|
||||
|
||||
/**
|
||||
* Retrieves a list of tasks.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /tasksList/{id}
|
||||
* </pre>
|
||||
*
|
||||
* @param orgURI the URI of the organization
|
||||
* @param tasksListUrn
|
||||
* from {@link Org#getLinks()} where {@link Link#getType} is
|
||||
* {@link VCloudDirectorMediaType#TASKS_LIST}
|
||||
* @return a list of tasks
|
||||
*/
|
||||
TasksList getTaskList(URI orgURI);
|
||||
TasksList getTasksList(URI tasksListHref);
|
||||
|
||||
/**
|
||||
* Retrieves a task.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /task/{id}
|
||||
* </pre>
|
||||
*
|
||||
* @return the task or null if not found
|
||||
*/
|
||||
Task getTask(URI taskUri);
|
||||
Task get(String taskUrn);
|
||||
|
||||
Task get(URI taskHref);
|
||||
|
||||
/**
|
||||
* Cancels a task.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* POST /task/{id}/action/cancel
|
||||
* </pre>
|
||||
*/
|
||||
void cancelTask(URI taskUri);
|
||||
void cancel(String taskUrn);
|
||||
|
||||
void cancel(URI taskHref);
|
||||
}
|
||||
|
|
|
@ -33,41 +33,59 @@ import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
|
||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.OrgReferenceToTaskListEndpoint;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.TaskURNToHref;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
/**
|
||||
* @see TaskApi
|
||||
* @author grkvlt@apache.org
|
||||
* @author grkvlt@apache.org, Adrian Cole
|
||||
*/
|
||||
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
|
||||
public interface TaskAsyncApi {
|
||||
|
||||
|
||||
/**
|
||||
* @see TaskApi#getTaskList(URISupplier)
|
||||
* @see TaskApi#getTasksList(URI)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<TasksList> getTaskList(@EndpointParam(parser = OrgReferenceToTaskListEndpoint.class) URI orgURI);
|
||||
ListenableFuture<TasksList> getTasksList(@EndpointParam URI tasksListHref);
|
||||
|
||||
/**
|
||||
* @see TaskApi#getTask(URI)
|
||||
* @see TaskApi#get(String)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<Task> getTask(@EndpointParam URI taskURI);
|
||||
|
||||
ListenableFuture<Task> get(@EndpointParam(parser = TaskURNToHref.class) String taskUrn);
|
||||
|
||||
/**
|
||||
* @see TaskApi#cancelTask(URI)
|
||||
* @see TaskApi#get(URI)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<Task> get(@EndpointParam URI taskURI);
|
||||
|
||||
/**
|
||||
* @see TaskApi#cancel(String)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/cancel")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> cancelTask(@EndpointParam URI taskURI);
|
||||
ListenableFuture<Void> cancel(@EndpointParam(parser = TaskURNToHref.class) String taskUrn);
|
||||
|
||||
/**
|
||||
* @see TaskApi#cancel(URI)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/cancel")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> cancel(@EndpointParam URI taskURI);
|
||||
}
|
||||
|
|
|
@ -225,6 +225,7 @@ public interface VAppApi {
|
|||
*
|
||||
* @since 0.9
|
||||
*/
|
||||
//TODO: revise
|
||||
ControlAccessParams getControlAccess(URI vAppURI);
|
||||
|
||||
/**
|
||||
|
|
|
@ -40,8 +40,7 @@ import org.jclouds.vcloud.director.v1_5.domain.params.UploadVAppTemplateParams;
|
|||
* Provides synchronous access to a vDC.
|
||||
*
|
||||
* @see VdcAsyncApi
|
||||
* @see <a href= "http://support.theenterprisecloud.com/kb/default.asp?id=984&Lang=1&SID=" />
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||
public interface VdcApi {
|
||||
|
|
|
@ -26,6 +26,7 @@ import org.jclouds.rest.annotations.Delegate;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Owner;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
|
||||
import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
|
||||
import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
|
||||
|
@ -52,7 +53,7 @@ public interface AdminCatalogApi extends CatalogApi {
|
|||
*/
|
||||
AdminCatalog createCatalogInOrg(AdminCatalog catalog, String orgUrn);
|
||||
|
||||
AdminCatalog createCatalogInOrg(AdminCatalog catalog, URI adminCatalogHref);
|
||||
AdminCatalog createCatalogInOrg(AdminCatalog catalog, URI catalogAdminHref);
|
||||
|
||||
/**
|
||||
* Retrieves a catalog.
|
||||
|
@ -69,7 +70,7 @@ public interface AdminCatalogApi extends CatalogApi {
|
|||
AdminCatalog get(String catalogUrn);
|
||||
|
||||
@Override
|
||||
AdminCatalog get(URI adminCatalogHref);
|
||||
AdminCatalog get(URI catalogAdminHref);
|
||||
|
||||
/**
|
||||
* Modifies a catalog. A catalog could be published or unpublished. The IsPublished property is
|
||||
|
@ -84,7 +85,7 @@ public interface AdminCatalogApi extends CatalogApi {
|
|||
*/
|
||||
AdminCatalog update(String catalogUrn, AdminCatalog catalog);
|
||||
|
||||
AdminCatalog update(URI adminCatalogHref, AdminCatalog catalog);
|
||||
AdminCatalog update(URI catalogAdminHref, AdminCatalog catalog);
|
||||
|
||||
/**
|
||||
* Deletes a catalog. The catalog could be deleted if it is either published or unpublished.
|
||||
|
@ -95,7 +96,7 @@ public interface AdminCatalogApi extends CatalogApi {
|
|||
*/
|
||||
void delete(String catalogUrn);
|
||||
|
||||
void delete(URI adminCatalogHref);
|
||||
void delete(URI catalogAdminHref);
|
||||
|
||||
/**
|
||||
* Retrieves the owner of a catalog.
|
||||
|
@ -108,7 +109,7 @@ public interface AdminCatalogApi extends CatalogApi {
|
|||
*/
|
||||
Owner getOwner(String catalogUrn);
|
||||
|
||||
Owner getOwner(URI adminCatalogHref);
|
||||
Owner getOwner(URI catalogAdminHref);
|
||||
|
||||
/**
|
||||
* Changes owner for catalog.
|
||||
|
@ -119,8 +120,12 @@ public interface AdminCatalogApi extends CatalogApi {
|
|||
*/
|
||||
void setOwner(String catalogUrn, Owner newOwner);
|
||||
|
||||
void setOwner(URI adminCatalogHref, Owner newOwner);
|
||||
void setOwner(URI catalogAdminHref, Owner newOwner);
|
||||
|
||||
// TODO: lot of work to pass in a single boolean, would like to polymorphically include something
|
||||
// like:
|
||||
// void publishCatalog(String catalogUrn)
|
||||
|
||||
/**
|
||||
* Publish a catalog. Publishing a catalog makes the catalog visible to all organizations in a
|
||||
* vCloud.
|
||||
|
@ -128,11 +133,33 @@ public interface AdminCatalogApi extends CatalogApi {
|
|||
*/
|
||||
void publish(String catalogUrn, PublishCatalogParams params);
|
||||
|
||||
void publish(URI adminCatalogHref, PublishCatalogParams params);
|
||||
void publish(URI catalogAdminHref, PublishCatalogParams params);
|
||||
|
||||
// TODO: lot of work to pass in a single boolean, would like to polymorphically include something
|
||||
// like:
|
||||
// void publishCatalog(String catalogUrn)
|
||||
/**
|
||||
* Modifies a catalog control access.
|
||||
*
|
||||
* <pre>
|
||||
* POST /org/{id}/catalog/{catalogId}/action/controlAccess
|
||||
* </pre>
|
||||
*
|
||||
* @return the control access information
|
||||
*/
|
||||
ControlAccessParams modifyAccessControl(String catalogUrn, ControlAccessParams params);
|
||||
|
||||
ControlAccessParams modifyAccessControl(URI catalogAdminHref, ControlAccessParams params);
|
||||
|
||||
/**
|
||||
* Retrieves the catalog control access information.
|
||||
*
|
||||
* <pre>
|
||||
* GET /org/{id}/catalog/{catalogId}/controlAccess
|
||||
* </pre>
|
||||
*
|
||||
* @return the control access information
|
||||
*/
|
||||
ControlAccessParams getAccessControl(String catalogUrn);
|
||||
|
||||
ControlAccessParams getAccessControl(URI catalogAdminHref);
|
||||
|
||||
/**
|
||||
* @return synchronous access to {@link Metadata.Writeable} features
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features.admin;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CONTROL_ACCESS;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
|
@ -40,6 +42,7 @@ import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Owner;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
|
||||
import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
|
||||
|
@ -115,7 +118,7 @@ public interface AdminCatalogAsyncApi extends CatalogAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
|
||||
@Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<AdminCatalog> update(@EndpointParam URI adminCatalogHref,
|
||||
ListenableFuture<AdminCatalog> update(@EndpointParam URI catalogAdminHref,
|
||||
@BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
|
||||
|
||||
/**
|
||||
|
@ -132,7 +135,7 @@ public interface AdminCatalogAsyncApi extends CatalogAsyncApi {
|
|||
@DELETE
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> delete(@EndpointParam URI adminCatalogHref);
|
||||
ListenableFuture<Void> delete(@EndpointParam URI catalogAdminHref);
|
||||
|
||||
/**
|
||||
* @see AdminCatalogApi#getOwner(String)
|
||||
|
@ -152,7 +155,7 @@ public interface AdminCatalogAsyncApi extends CatalogAsyncApi {
|
|||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<Owner> getOwner(@EndpointParam URI adminCatalogHref);
|
||||
ListenableFuture<Owner> getOwner(@EndpointParam URI catalogAdminHref);
|
||||
|
||||
/**
|
||||
* @see AdminCatalogApi#setOwner(String, Owner)
|
||||
|
@ -173,7 +176,7 @@ public interface AdminCatalogAsyncApi extends CatalogAsyncApi {
|
|||
@Consumes
|
||||
@Produces(VCloudDirectorMediaType.OWNER)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> setOwner(@EndpointParam URI adminCatalogHref,
|
||||
ListenableFuture<Void> setOwner(@EndpointParam URI catalogAdminHref,
|
||||
@BinderParam(BindToXMLPayload.class) Owner newOwner);
|
||||
|
||||
/**
|
||||
|
@ -195,9 +198,51 @@ public interface AdminCatalogAsyncApi extends CatalogAsyncApi {
|
|||
@Consumes
|
||||
@Produces(VCloudDirectorMediaType.PUBLISH_CATALOG_PARAMS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> publish(@EndpointParam URI adminCatalogHref,
|
||||
ListenableFuture<Void> publish(@EndpointParam URI catalogAdminHref,
|
||||
@BinderParam(BindToXMLPayload.class) PublishCatalogParams params);
|
||||
|
||||
/**
|
||||
* @see AdminCatalogApi#modifyAccessControl(String, ControlAccessParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/controlAccess")
|
||||
@Produces(CONTROL_ACCESS)
|
||||
@Consumes(CONTROL_ACCESS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<ControlAccessParams> modifyAccessControl(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn,
|
||||
@BinderParam(BindToXMLPayload.class) ControlAccessParams params);
|
||||
|
||||
/**
|
||||
* @see AdminCatalogApi#modifyAccessControl(URI, ControlAccessParams)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/controlAccess")
|
||||
@Produces(CONTROL_ACCESS)
|
||||
@Consumes(CONTROL_ACCESS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<ControlAccessParams> modifyAccessControl(@EndpointParam URI catalogAdminHref,
|
||||
@BinderParam(BindToXMLPayload.class) ControlAccessParams params);
|
||||
|
||||
/**
|
||||
* @see AdminCatalogApi#getAccessControl(String)
|
||||
*/
|
||||
@GET
|
||||
@Path("/controlAccess")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam(parser = CatalogURNToAdminHref.class) String catalogUrn);
|
||||
|
||||
/**
|
||||
* @see AdminCatalogApi#getAccessControl(URI)
|
||||
*/
|
||||
@GET
|
||||
@Path("/controlAccess")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam URI catalogAdminHref);
|
||||
|
||||
/**
|
||||
* @return synchronous access to {@link Metadata.Writeable} features
|
||||
*/
|
||||
|
|
|
@ -33,61 +33,68 @@ import org.jclouds.vcloud.director.v1_5.features.NetworkApi;
|
|||
* Provides synchronous access to admin {@link Network} objects.
|
||||
*
|
||||
* @see AdminNetworkAsyncApi
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||
public interface AdminNetworkApi extends NetworkApi {
|
||||
|
||||
|
||||
/**
|
||||
* Gets admin representation of network. This operation could return admin
|
||||
* representation of organization network or external network. vApp networks
|
||||
* do not have admin representation.
|
||||
*
|
||||
* Gets admin representation of network. This operation could return admin representation of
|
||||
* organization network or external network. vApp networks do not have admin representation.
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/network/{id}
|
||||
* </pre>
|
||||
*
|
||||
* @param networkRef the reference for the network
|
||||
*
|
||||
* @param networkUrn
|
||||
* the reference for the network
|
||||
* @return the network
|
||||
*/
|
||||
@Override
|
||||
Network getNetwork(URI networkRef);
|
||||
|
||||
Network get(String networkUrn);
|
||||
|
||||
@Override
|
||||
Network get(URI networkAdminHref);
|
||||
|
||||
/**
|
||||
* Modifies an org network
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* PUT /admin/network/{id}
|
||||
* </pre>
|
||||
*
|
||||
* @param networkRef the reference for the network
|
||||
* @param network the updated network
|
||||
* @return a task. This operation is asynchronous and the user should monitor the
|
||||
* returned task status in order to check when it is completed.
|
||||
*
|
||||
* @param networkUrn
|
||||
* the reference for the network
|
||||
* @param network
|
||||
* the updated network
|
||||
* @return a task. This operation is asynchronous and the user should monitor the returned task
|
||||
* status in order to check when it is completed.
|
||||
*/
|
||||
Task updateNetwork(URI networkRef, OrgNetwork network);
|
||||
|
||||
Task update(String networkUrn, OrgNetwork network);
|
||||
|
||||
Task update(URI networkAdminHref, OrgNetwork network);
|
||||
|
||||
/**
|
||||
* Reset(undeploy & redeploy) networking services on a logical network.
|
||||
* The reset operation can be performed on:
|
||||
* - external networks
|
||||
* - organization networks
|
||||
* - vApp networks
|
||||
* The reset operation can be performed only on deployed networks.
|
||||
*
|
||||
* Reset(undeploy & redeploy) networking services on a logical network. The reset operation can
|
||||
* be performed on: - external networks - organization networks - vApp networks The reset
|
||||
* operation can be performed only on deployed networks.
|
||||
*
|
||||
* <pre>
|
||||
* POST /admin/network/{id}/action/reset
|
||||
* </pre>
|
||||
*
|
||||
* @param networkRef the reference for the network
|
||||
* @return a task. This operation is asynchronous and the user should monitor the
|
||||
* returned task status in order to check when it is completed.
|
||||
*
|
||||
* @param networkUrn
|
||||
* the reference for the network
|
||||
* @return a task. This operation is asynchronous and the user should monitor the returned task
|
||||
* status in order to check when it is completed.
|
||||
*/
|
||||
Task resetNetwork(URI networkRef);
|
||||
Task reset(String networkUrn);
|
||||
|
||||
Task reset(URI networkAdminHref);
|
||||
|
||||
/**
|
||||
* @return synchronous access to admin {@link MetadataApi.Writeable} features
|
||||
*/
|
||||
* @return synchronous access to admin {@link MetadataApi.Writeable} features
|
||||
*/
|
||||
@Override
|
||||
@Delegate
|
||||
MetadataApi.Writeable getMetadataApi();
|
||||
|
|
|
@ -37,11 +37,12 @@ import org.jclouds.rest.binders.BindToXMLPayload;
|
|||
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.ExternalNetwork;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
|
||||
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.NetworkURNToAdminHref;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
|
@ -51,36 +52,65 @@ import com.google.common.util.concurrent.ListenableFuture;
|
|||
*/
|
||||
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
|
||||
public interface AdminNetworkAsyncApi extends NetworkAsyncApi {
|
||||
|
||||
|
||||
/**
|
||||
* @see AdminNetworkApi#getNetwork(URI)
|
||||
* @see AdminNetworkApi#get(String)
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<ExternalNetwork> getNetwork(@EndpointParam URI networkRef);
|
||||
|
||||
ListenableFuture<? extends Network> get(@EndpointParam(parser = NetworkURNToAdminHref.class) String networkUrn);
|
||||
|
||||
/**
|
||||
* @see AdminNetworkApi#updateNetwork(URI, OrgNetwork)
|
||||
* @see AdminNetworkApi#get(URI)
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<? extends Network> get(@EndpointParam URI networkAdminHref);
|
||||
|
||||
/**
|
||||
* @see AdminNetworkApi#update(String, OrgNetwork)
|
||||
*/
|
||||
@PUT
|
||||
@Consumes(VCloudDirectorMediaType.TASK)
|
||||
@Produces(VCloudDirectorMediaType.ADMIN_ORG_NETWORK)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Task> updateNetwork(@EndpointParam URI networkRef,
|
||||
@BinderParam(BindToXMLPayload.class) OrgNetwork network);
|
||||
|
||||
ListenableFuture<Task> update(@EndpointParam(parser = NetworkURNToAdminHref.class) String networkUrn,
|
||||
@BinderParam(BindToXMLPayload.class) OrgNetwork network);
|
||||
|
||||
/**
|
||||
* @see AdminNetworkApi#resetNetwork(URI)
|
||||
* @see AdminNetworkApi#update(URI, OrgNetwork)
|
||||
*/
|
||||
@PUT
|
||||
@Consumes(VCloudDirectorMediaType.TASK)
|
||||
@Produces(VCloudDirectorMediaType.ADMIN_ORG_NETWORK)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Task> update(@EndpointParam URI networkAdminHref,
|
||||
@BinderParam(BindToXMLPayload.class) OrgNetwork network);
|
||||
|
||||
/**
|
||||
* @see AdminNetworkApi#reset(String)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/reset")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Task> resetNetwork(@EndpointParam URI networkRef);
|
||||
|
||||
ListenableFuture<Task> reset(@EndpointParam(parser = NetworkURNToAdminHref.class) String networkUrn);
|
||||
|
||||
/**
|
||||
* @see AdminNetworkApi#reset(URI)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/reset")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Task> reset(@EndpointParam URI networkAdminHref);
|
||||
|
||||
/**
|
||||
* @return asynchronous access to admin {@link MetadataAsyncApi.Writeable} features
|
||||
*/
|
||||
|
|
|
@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit;
|
|||
import org.jclouds.concurrent.Timeout;
|
||||
import org.jclouds.rest.annotations.Delegate;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.AdminOrg;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgEmailSettings;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgGeneralSettings;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgLdapSettings;
|
||||
|
@ -37,193 +38,242 @@ import org.jclouds.vcloud.director.v1_5.features.OrgApi;
|
|||
/**
|
||||
* Provides synchronous access to {@link Org} objects.
|
||||
*
|
||||
* @see GroupAsyncApi
|
||||
* @author danikov
|
||||
* @see AdminOrgAsyncApi
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||
public interface AdminOrgApi extends OrgApi {
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves an admin view of an organization.
|
||||
* The organization might be enabled or disabled.
|
||||
* If enabled, the organization allows login and all other operations.
|
||||
*
|
||||
* Retrieves an admin view of an organization. The organization might be enabled or disabled. If
|
||||
* enabled, the organization allows login and all other operations.
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/org/{id}
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the admin org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @return the admin org
|
||||
*/
|
||||
@Override
|
||||
AdminOrg getOrg(URI orgRef);
|
||||
|
||||
AdminOrg get(String orgUrn);
|
||||
|
||||
@Override
|
||||
AdminOrg get(URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Gets organizational settings for this organization.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/org/{id}/settings
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the admin org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @return the settings
|
||||
*/
|
||||
OrgSettings getSettings(URI orgRef);
|
||||
|
||||
OrgSettings getSettings(String orgUrn);
|
||||
|
||||
OrgSettings getSettings(URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Updates organizational settings for this organization.
|
||||
*
|
||||
* <pre>
|
||||
* PUT /admin/org/{id}/settings
|
||||
* </pre>
|
||||
* @param orgRef the reference for the admin org
|
||||
* @param newSettings the requested updated settings
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @param newSettings
|
||||
* the requested updated settings
|
||||
* @return the resultant settings
|
||||
*/
|
||||
OrgSettings updateSettings(URI orgRef, OrgSettings newSettings);
|
||||
|
||||
OrgSettings updateSettings(String orgUrn, OrgSettings newSettings);
|
||||
|
||||
OrgSettings updateSettings(URI orgAdminHref, OrgSettings newSettings);
|
||||
|
||||
/**
|
||||
* Retrieves email settings for an organization.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/org/{id}/settings/email
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the admin org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @return the email settings
|
||||
*/
|
||||
OrgEmailSettings getEmailSettings(URI orgRef);
|
||||
|
||||
OrgEmailSettings getEmailSettings(String orgUrn);
|
||||
|
||||
OrgEmailSettings getEmailSettings(URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Updates email policy settings for organization.
|
||||
*
|
||||
* <pre>
|
||||
* PUT /admin/org/{id}/settings/email
|
||||
* </pre>
|
||||
* @param orgRef the reference for the admin org
|
||||
* @param newSettings the requested updated settings
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @param newSettings
|
||||
* the requested updated settings
|
||||
* @return the resultant settings
|
||||
*/
|
||||
OrgEmailSettings updateEmailSettings(URI orgRef,
|
||||
OrgEmailSettings newSettings);
|
||||
|
||||
OrgEmailSettings updateEmailSettings(String orgUrn, OrgEmailSettings newSettings);
|
||||
|
||||
OrgEmailSettings updateEmailSettings(URI orgAdminHref, OrgEmailSettings newSettings);
|
||||
|
||||
/**
|
||||
* Gets general organization settings.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/org/{id}/settings/general
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the admin org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @return the lease settings
|
||||
*/
|
||||
OrgGeneralSettings getGeneralSettings(URI orgRef);
|
||||
|
||||
OrgGeneralSettings getGeneralSettings(String orgUrn);
|
||||
|
||||
OrgGeneralSettings getGeneralSettings(URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Updates general organization settings.
|
||||
*
|
||||
* <pre>
|
||||
* PUT /admin/org/{id}/settings/general
|
||||
* </pre>
|
||||
* @param orgRef the reference for the admin org
|
||||
* @param newSettings the requested updated settings
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @param newSettings
|
||||
* the requested updated settings
|
||||
* @return the resultant settings
|
||||
*/
|
||||
OrgGeneralSettings updateGeneralSettings(URI orgRef,
|
||||
OrgGeneralSettings newSettings);
|
||||
|
||||
OrgGeneralSettings updateGeneralSettings(String orgUrn, OrgGeneralSettings newSettings);
|
||||
|
||||
OrgGeneralSettings updateGeneralSettings(URI orgAdminHref, OrgGeneralSettings newSettings);
|
||||
|
||||
/**
|
||||
* Retrieves LDAP settings for an organization.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/org/{id}/settings/ldap
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the admin org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @return the ldap settings
|
||||
*/
|
||||
OrgLdapSettings getLdapSettings(URI orgRef);
|
||||
|
||||
OrgLdapSettings getLdapSettings(String orgUrn);
|
||||
|
||||
OrgLdapSettings getLdapSettings(URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Retrieves password policy settings for an organization.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/org/{id}/settings/passwordPolicy
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the admin org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @return the lease settings
|
||||
*/
|
||||
OrgPasswordPolicySettings getPasswordPolicy(URI orgRef);
|
||||
|
||||
OrgPasswordPolicySettings getPasswordPolicy(String orgUrn);
|
||||
|
||||
OrgPasswordPolicySettings getPasswordPolicy(URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Updates password policy settings for organization.
|
||||
*
|
||||
* <pre>
|
||||
* PUT /admin/org/{id}/settings/passwordPolicy
|
||||
* </pre>
|
||||
* @param orgRef the reference for the admin org
|
||||
* @param newSettings the requested updated settings
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @param newSettings
|
||||
* the requested updated settings
|
||||
* @return the resultant settings
|
||||
*/
|
||||
OrgPasswordPolicySettings updatePasswordPolicy(URI orgRef,
|
||||
OrgPasswordPolicySettings newSettings);
|
||||
|
||||
OrgPasswordPolicySettings updatePasswordPolicy(String orgUrn, OrgPasswordPolicySettings newSettings);
|
||||
|
||||
OrgPasswordPolicySettings updatePasswordPolicy(URI orgAdminHref, OrgPasswordPolicySettings newSettings);
|
||||
|
||||
/**
|
||||
* Gets organization resource cleanup settings on the level of vApp.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/org/{id}/settings/vAppLeaseSettings
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the admin org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @return the lease settings
|
||||
*/
|
||||
OrgLeaseSettings getVAppLeaseSettings(URI orgRef);
|
||||
|
||||
OrgLeaseSettings getVAppLeaseSettings(String orgUrn);
|
||||
|
||||
OrgLeaseSettings getVAppLeaseSettings(URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Updates organization resource cleanup settings on the level of vApp.
|
||||
*
|
||||
* <pre>
|
||||
* PUT /admin/org/{id}/settings/vAppLeaseSettings
|
||||
* </pre>
|
||||
* @param orgRef the reference for the admin org
|
||||
* @param newSettings the requested updated settings
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @param newSettings
|
||||
* the requested updated settings
|
||||
* @return the resultant settings
|
||||
*/
|
||||
OrgLeaseSettings updateVAppLeaseSettings(URI orgRef,
|
||||
OrgLeaseSettings newSettings);
|
||||
|
||||
OrgLeaseSettings updateVAppLeaseSettings(String orgUrn, OrgLeaseSettings newSettings);
|
||||
|
||||
OrgLeaseSettings updateVAppLeaseSettings(URI orgAdminHref, OrgLeaseSettings newSettings);
|
||||
|
||||
/**
|
||||
* Retrieves expiration and storage policy for vApp templates in an organization.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/org/{id}/settings/vAppTemplateLeaseSettings
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the admin org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @return the lease settings
|
||||
*/
|
||||
OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(URI orgRef);
|
||||
|
||||
OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(String orgUrn);
|
||||
|
||||
OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Updates vApp template policy settings for organization.
|
||||
*
|
||||
* <pre>
|
||||
* PUT /admin/org/{id}/settings/vAppTemplateLeaseSettings
|
||||
* </pre>
|
||||
* @param orgRef the reference for the admin org
|
||||
* @param newSettings the requested updated settings
|
||||
*
|
||||
* @param orgUrn
|
||||
* the reference for the admin org
|
||||
* @param newSettings
|
||||
* the requested updated settings
|
||||
* @return the resultant settings
|
||||
*/
|
||||
OrgVAppTemplateLeaseSettings updateVAppTemplateLeaseSettings(URI orgRef,
|
||||
OrgVAppTemplateLeaseSettings newSettings);
|
||||
|
||||
OrgVAppTemplateLeaseSettings updateVAppTemplateLeaseSettings(String orgUrn, OrgVAppTemplateLeaseSettings newSettings);
|
||||
|
||||
OrgVAppTemplateLeaseSettings updateVAppTemplateLeaseSettings(URI orgAdminHref, OrgVAppTemplateLeaseSettings newSettings);
|
||||
|
||||
/**
|
||||
* @return synchronous access to admin {@link MetadataApi.Writeable} features
|
||||
*/
|
||||
@Override
|
||||
@Delegate
|
||||
MetadataApi.Writeable getMetadataApi();
|
||||
@Override
|
||||
@Delegate
|
||||
MetadataApi.Writeable getMetadataApi();
|
||||
|
||||
}
|
||||
|
|
|
@ -46,26 +46,47 @@ import org.jclouds.vcloud.director.v1_5.domain.org.OrgVAppTemplateLeaseSettings;
|
|||
import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToAdminHref;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
|
||||
public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
||||
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getOrg(URI)
|
||||
* @see AdminOrgApi#get(String)
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<AdminOrg> getOrg(@EndpointParam URI orgRef);
|
||||
|
||||
ListenableFuture<AdminOrg> get(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#get(URI)
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<AdminOrg> get(@EndpointParam URI adminOrgHref);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getSettings(String)
|
||||
*/
|
||||
@GET
|
||||
@Path("/settings")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgSettings> getSettings(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getSettings(URI)
|
||||
*/
|
||||
|
@ -74,7 +95,18 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgSettings> getSettings(@EndpointParam URI orgRef);
|
||||
ListenableFuture<OrgSettings> getSettings(@EndpointParam URI adminOrgHref);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateSettings(String, OrgSettings)
|
||||
*/
|
||||
@PUT
|
||||
@Path("/settings")
|
||||
@Consumes(VCloudDirectorMediaType.ORG_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgSettings> updateSettings(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
|
||||
@BinderParam(BindToXMLPayload.class) OrgSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateSettings(URI, OrgSettings)
|
||||
|
@ -84,9 +116,19 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.ORG_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgSettings> updateSettings(@EndpointParam URI orgRef,
|
||||
@BinderParam(BindToXMLPayload.class) OrgSettings settings);
|
||||
|
||||
ListenableFuture<OrgSettings> updateSettings(@EndpointParam URI adminOrgHref,
|
||||
@BinderParam(BindToXMLPayload.class) OrgSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getEmailSettings(String)
|
||||
*/
|
||||
@GET
|
||||
@Path("/settings/email")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgEmailSettings> getEmailSettings(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getEmailSettings(URI)
|
||||
*/
|
||||
|
@ -95,7 +137,19 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgEmailSettings> getEmailSettings(@EndpointParam URI orgRef);
|
||||
ListenableFuture<OrgEmailSettings> getEmailSettings(@EndpointParam URI adminOrgHref);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateEmailSettings(String, OrgEmailSettings)
|
||||
*/
|
||||
@PUT
|
||||
@Path("/settings/email")
|
||||
@Consumes(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgEmailSettings> updateEmailSettings(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
|
||||
@BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateEmailSettings(URI, OrgEmailSettings)
|
||||
|
@ -105,9 +159,20 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgEmailSettings> updateEmailSettings(@EndpointParam URI orgRef,
|
||||
@BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
|
||||
|
||||
ListenableFuture<OrgEmailSettings> updateEmailSettings(@EndpointParam URI adminOrgHref,
|
||||
@BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getGeneralSettings(String)
|
||||
*/
|
||||
@GET
|
||||
@Path("/settings/general")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgGeneralSettings> getGeneralSettings(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getGeneralSettings(URI)
|
||||
*/
|
||||
|
@ -116,7 +181,19 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgGeneralSettings> getGeneralSettings(@EndpointParam URI orgRef);
|
||||
ListenableFuture<OrgGeneralSettings> getGeneralSettings(@EndpointParam URI adminOrgHref);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateGeneralSettings(String, OrgGeneralSettings)
|
||||
*/
|
||||
@PUT
|
||||
@Path("/settings/general")
|
||||
@Consumes(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgGeneralSettings> updateGeneralSettings(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
|
||||
@BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateGeneralSettings(URI, OrgGeneralSettings)
|
||||
|
@ -126,10 +203,19 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgGeneralSettings> updateGeneralSettings(
|
||||
@EndpointParam URI orgRef,
|
||||
@BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
|
||||
|
||||
ListenableFuture<OrgGeneralSettings> updateGeneralSettings(@EndpointParam URI adminOrgHref,
|
||||
@BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getPasswordPolicy(String)
|
||||
*/
|
||||
@GET
|
||||
@Path("/settings/ldap")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgLdapSettings> getLdapSettings(@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getPasswordPolicy(URI)
|
||||
*/
|
||||
|
@ -138,8 +224,19 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgLdapSettings> getLdapSettings(@EndpointParam URI orgRef);
|
||||
|
||||
ListenableFuture<OrgLdapSettings> getLdapSettings(@EndpointParam URI adminOrgHref);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getPasswordPolicy(String)
|
||||
*/
|
||||
@GET
|
||||
@Path("/settings/passwordPolicy")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgPasswordPolicySettings> getPasswordPolicy(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getPasswordPolicy(URI)
|
||||
*/
|
||||
|
@ -148,7 +245,19 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgPasswordPolicySettings> getPasswordPolicy(@EndpointParam URI orgRef);
|
||||
ListenableFuture<OrgPasswordPolicySettings> getPasswordPolicy(@EndpointParam URI adminOrgHref);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updatePasswordPolicy(String, OrgPasswordPolicySettings)
|
||||
*/
|
||||
@PUT
|
||||
@Path("/settings/passwordPolicy")
|
||||
@Consumes(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgPasswordPolicySettings> updatePasswordPolicy(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
|
||||
@BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updatePasswordPolicy(URI, OrgPasswordPolicySettings)
|
||||
|
@ -158,9 +267,20 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgPasswordPolicySettings> updatePasswordPolicy(@EndpointParam URI orgRef,
|
||||
@BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
|
||||
|
||||
ListenableFuture<OrgPasswordPolicySettings> updatePasswordPolicy(@EndpointParam URI adminOrgHref,
|
||||
@BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getVAppLeaseSettings(String)
|
||||
*/
|
||||
@GET
|
||||
@Path("/settings/vAppLeaseSettings")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgLeaseSettings> getVAppLeaseSettings(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getVAppLeaseSettings(URI)
|
||||
*/
|
||||
|
@ -169,7 +289,19 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgLeaseSettings> getVAppLeaseSettings(@EndpointParam URI orgRef);
|
||||
ListenableFuture<OrgLeaseSettings> getVAppLeaseSettings(@EndpointParam URI adminOrgHref);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateVAppLeaseSettings(String, OrgVAppLeaseSettings)
|
||||
*/
|
||||
@PUT
|
||||
@Path("/settings/vAppLeaseSettings")
|
||||
@Consumes(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgLeaseSettings> updateVAppLeaseSettings(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
|
||||
@BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateVAppLeaseSettings(URI, OrgVAppLeaseSettings)
|
||||
|
@ -179,9 +311,20 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgLeaseSettings> updateVAppLeaseSettings(@EndpointParam URI orgRef,
|
||||
@BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
|
||||
|
||||
ListenableFuture<OrgLeaseSettings> updateVAppLeaseSettings(@EndpointParam URI adminOrgHref,
|
||||
@BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getVAppTemplateLeaseSettings(String)
|
||||
*/
|
||||
@GET
|
||||
@Path("/settings/vAppTemplateLeaseSettings")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgVAppTemplateLeaseSettings> getVAppTemplateLeaseSettings(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#getVAppTemplateLeaseSettings(URI)
|
||||
*/
|
||||
|
@ -190,7 +333,19 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<OrgVAppTemplateLeaseSettings> getVAppTemplateLeaseSettings(@EndpointParam URI orgRef);
|
||||
ListenableFuture<OrgVAppTemplateLeaseSettings> getVAppTemplateLeaseSettings(@EndpointParam URI adminOrgHref);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateVAppTemplateLeaseSettings(String, OrgVAppTemplateLeaseSettings)
|
||||
*/
|
||||
@PUT
|
||||
@Path("/settings/vAppTemplateLeaseSettings")
|
||||
@Consumes(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgVAppTemplateLeaseSettings> updateVAppTemplateLeaseSettings(
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn,
|
||||
@BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
|
||||
|
||||
/**
|
||||
* @see AdminOrgApi#updateVAppTemplateLeaseSettings(URI, OrgVAppTemplateLeaseSettings)
|
||||
|
@ -200,9 +355,9 @@ public interface AdminOrgAsyncApi extends OrgAsyncApi {
|
|||
@Consumes(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
|
||||
@Produces(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<OrgVAppTemplateLeaseSettings> updateVAppTemplateLeaseSettings(@EndpointParam URI orgRef,
|
||||
@BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
|
||||
|
||||
ListenableFuture<OrgVAppTemplateLeaseSettings> updateVAppTemplateLeaseSettings(@EndpointParam URI adminOrgHref,
|
||||
@BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
|
||||
|
||||
/**
|
||||
* @return asynchronous access to admin {@link MetadataAsyncApi.Writeable} features
|
||||
*/
|
||||
|
|
|
@ -28,48 +28,57 @@ import org.jclouds.vcloud.director.v1_5.domain.User;
|
|||
* Provides synchronous access to {@link User} objects.
|
||||
*
|
||||
* @see UserAsyncApi
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||
public interface UserApi {
|
||||
|
||||
/**
|
||||
* Creates or imports a user in an organization. The user could be enabled or disabled.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* POST /admin/org/{id}/users
|
||||
* </pre>
|
||||
*
|
||||
* @param orgRef the reference for the org
|
||||
*
|
||||
* @param orgUrn
|
||||
* the urn for the org
|
||||
* @return the created user
|
||||
*/
|
||||
User createUser(URI orgRef, User user);
|
||||
|
||||
User createUserInOrg(User user, String orgUrn);
|
||||
|
||||
User createUserInOrg(User user, URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* Retrieves a user. This entity could be enabled or disabled.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* GET /admin/user/{id}
|
||||
* </pre>
|
||||
*
|
||||
* @param userRef the reference for the user
|
||||
*
|
||||
* @param userUrn
|
||||
* the reference for the user
|
||||
* @return a user
|
||||
*/
|
||||
User getUser(URI userRef);
|
||||
|
||||
User get(String userUrn);
|
||||
|
||||
User get(URI userHref);
|
||||
|
||||
/**
|
||||
* Modifies a user. The user object could be enabled or disabled.
|
||||
* Note: the lock status cannot be changed using this call: use unlockUser.
|
||||
*
|
||||
* Modifies a user. The user object could be enabled or disabled. Note: the lock status cannot be
|
||||
* changed using this call: use unlockUser.
|
||||
*
|
||||
* <pre>
|
||||
* PUT /admin/user/{id}
|
||||
* </pre>
|
||||
*
|
||||
* @param userRef the reference for the user
|
||||
*
|
||||
* @param userUrn
|
||||
* the reference for the user
|
||||
* @return the modified user
|
||||
*/
|
||||
User updateUser(URI userRef, User user);
|
||||
User update(String userUrn, User user);
|
||||
|
||||
User update(URI userHref, User user);
|
||||
|
||||
/**
|
||||
* Deletes a user. Enabled and disabled users could be deleted.
|
||||
*
|
||||
|
@ -77,8 +86,10 @@ public interface UserApi {
|
|||
* DELETE /admin/catalog/{id}
|
||||
* </pre>
|
||||
*/
|
||||
void deleteUser(URI userRef);
|
||||
void delete(String userUrn);
|
||||
|
||||
void delete(URI userHref);
|
||||
|
||||
/**
|
||||
* Unlocks a user.
|
||||
*
|
||||
|
@ -86,5 +97,7 @@ public interface UserApi {
|
|||
* POST /admin/user/{id}/action/unlock
|
||||
* </pre>
|
||||
*/
|
||||
void unlockUser(URI userRef);
|
||||
void unlock(String userUrn);
|
||||
|
||||
void unlock(URI userHref);
|
||||
}
|
||||
|
|
|
@ -38,60 +38,108 @@ import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
|||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.User;
|
||||
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.OrgURNToAdminHref;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.href.UserURNToHref;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
|
||||
/**
|
||||
* @see UserApi
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
|
||||
public interface UserAsyncApi {
|
||||
|
||||
/**
|
||||
* @see UserApi#createUser(URI, User)
|
||||
* @see UserApi#createUserInOrg(User, String)
|
||||
*/
|
||||
@POST
|
||||
@Path("/users")
|
||||
@Consumes(VCloudDirectorMediaType.USER)
|
||||
@Produces(VCloudDirectorMediaType.USER)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<User> createUser(@EndpointParam URI userRef,
|
||||
@BinderParam(BindToXMLPayload.class) User user);
|
||||
|
||||
ListenableFuture<User> createUserInOrg(@BinderParam(BindToXMLPayload.class) User user,
|
||||
@EndpointParam(parser = OrgURNToAdminHref.class) String orgUrn);
|
||||
|
||||
/**
|
||||
* @see UserApi#getUser(URI)
|
||||
* @see UserApi#createUserInOrg(User, URI)
|
||||
*/
|
||||
@POST
|
||||
@Path("/users")
|
||||
@Consumes(VCloudDirectorMediaType.USER)
|
||||
@Produces(VCloudDirectorMediaType.USER)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<User> createUserInOrg(@BinderParam(BindToXMLPayload.class) User user,
|
||||
@EndpointParam URI orgAdminHref);
|
||||
|
||||
/**
|
||||
* @see UserApi#get(String)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<User> getUser(@EndpointParam URI userRef);
|
||||
|
||||
ListenableFuture<User> get(@EndpointParam(parser = UserURNToHref.class) String userUrn);
|
||||
|
||||
/**
|
||||
* @see UserApi#updateUser(URI, User)
|
||||
* @see UserApi#get(URI)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<User> get(@EndpointParam URI userHref);
|
||||
|
||||
/**
|
||||
* @see UserApi#update(String, User)
|
||||
*/
|
||||
@PUT
|
||||
@Consumes(VCloudDirectorMediaType.USER)
|
||||
@Produces(VCloudDirectorMediaType.USER)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<User> updateUser(@EndpointParam URI userRef,
|
||||
@BinderParam(BindToXMLPayload.class) User user);
|
||||
|
||||
ListenableFuture<User> update(@EndpointParam(parser = UserURNToHref.class) String userUrn,
|
||||
@BinderParam(BindToXMLPayload.class) User user);
|
||||
|
||||
/**
|
||||
* @see UserApi#deleteUser(URI)
|
||||
* @see UserApi#update(URI, User)
|
||||
*/
|
||||
@PUT
|
||||
@Consumes(VCloudDirectorMediaType.USER)
|
||||
@Produces(VCloudDirectorMediaType.USER)
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<User> update(@EndpointParam URI userHref, @BinderParam(BindToXMLPayload.class) User user);
|
||||
|
||||
/**
|
||||
* @see UserApi#delete(String)
|
||||
*/
|
||||
@DELETE
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> deleteUser(@EndpointParam URI userRef);
|
||||
|
||||
ListenableFuture<Void> delete(@EndpointParam(parser = UserURNToHref.class) String userUrn);
|
||||
|
||||
/**
|
||||
* @see UserApi#unlockUser(URI)
|
||||
* @see UserApi#delete(URI)
|
||||
*/
|
||||
@DELETE
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> delete(@EndpointParam URI userHref);
|
||||
|
||||
/**
|
||||
* @see UserApi#unlock(String)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/unlock")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> unlockUser(@EndpointParam URI userRef);
|
||||
ListenableFuture<Void> unlock(@EndpointParam(parser = UserURNToHref.class) String userUrn);
|
||||
|
||||
/**
|
||||
* @see UserApi#unlock(URI)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/unlock")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
ListenableFuture<Void> unlock(@EndpointParam URI userHref);
|
||||
}
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
/**
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.functions;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.rest.ResourceNotFoundException;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.features.OrgApi;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
/**
|
||||
* @author grkvlt@apache.org
|
||||
*/
|
||||
@Singleton
|
||||
public class OrgReferenceToTaskListEndpoint implements Function<Object, URI> {
|
||||
private final OrgApi api;
|
||||
|
||||
@Inject
|
||||
public OrgReferenceToTaskListEndpoint(OrgApi api) {
|
||||
this.api = api;
|
||||
}
|
||||
|
||||
@Override
|
||||
public URI apply(Object input) {
|
||||
Preconditions.checkNotNull(input);
|
||||
Preconditions.checkArgument(input instanceof URI);
|
||||
URI reference = (URI) input;
|
||||
Org org = api.getOrg(reference);
|
||||
if (org == null) {
|
||||
throw new ResourceNotFoundException();
|
||||
}
|
||||
for (Link link : org.getLinks()) {
|
||||
if (link.getType().equals(VCloudDirectorMediaType.TASKS_LIST)) {
|
||||
return link.getHref();
|
||||
}
|
||||
}
|
||||
throw new RuntimeException(String.format("Could not find a link of type %s", VCloudDirectorMediaType.TASKS_LIST));
|
||||
};
|
||||
}
|
|
@ -18,75 +18,52 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.functions;
|
||||
|
||||
import static com.google.common.collect.Iterables.filter;
|
||||
import static com.google.common.collect.Iterables.transform;
|
||||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.Constants;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.location.predicates.LocationPredicates;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Sets;
|
||||
import static com.google.common.collect.FluentIterable.*;
|
||||
|
||||
/**
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class OrgsForLocations implements Function<Iterable<Location>, Iterable<? extends Org>> {
|
||||
@Resource
|
||||
public Logger logger = Logger.NULL;
|
||||
private final VCloudDirectorAsyncApi aapi;
|
||||
private final ExecutorService executor;
|
||||
|
||||
private final VCloudDirectorApi api;
|
||||
|
||||
@Inject
|
||||
OrgsForLocations(VCloudDirectorAsyncApi aapi, @Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
|
||||
this.aapi = aapi;
|
||||
this.executor = executor;
|
||||
OrgsForLocations(VCloudDirectorApi api) {
|
||||
this.api = api;
|
||||
}
|
||||
|
||||
/**
|
||||
* Zones are assignable, but we want regions. so we look for zones, whose
|
||||
* parent is region. then, we use a set to extract the unique set.
|
||||
* Zones are assignable, but we want regions. so we look for zones, whose parent is region. then,
|
||||
* we use a set to extract the unique set.
|
||||
*/
|
||||
@Override
|
||||
public Iterable<? extends Org> apply(Iterable<Location> from) {
|
||||
|
||||
return transformParallel(Sets.newLinkedHashSet(transform(filter(from, new Predicate<Location>() {
|
||||
|
||||
@Override
|
||||
public boolean apply(Location input) {
|
||||
return input.getScope() == LocationScope.ZONE;
|
||||
}
|
||||
|
||||
}), new Function<Location, URI>() {
|
||||
|
||||
@Override
|
||||
public URI apply(Location from) {
|
||||
return URI.create(from.getParent().getId());
|
||||
}
|
||||
|
||||
})), new Function<URI, Future<? extends Org>>() {
|
||||
|
||||
@Override
|
||||
public Future<? extends Org> apply(URI from) {
|
||||
return aapi.getOrgApi().getOrg(from);
|
||||
}
|
||||
|
||||
}, executor, null, logger, "organizations for uris");
|
||||
return from(from)
|
||||
.filter(LocationPredicates.isZone())
|
||||
.transform(new Function<Location, String>() {
|
||||
@Override
|
||||
public String apply(Location from) {
|
||||
return from.getParent().getId();
|
||||
}
|
||||
})
|
||||
.transform(new Function<String, Org>() {
|
||||
|
||||
@Override
|
||||
public Org apply(String from) {
|
||||
return api.getOrgApi().get(from);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,26 +18,17 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.functions;
|
||||
|
||||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||
import static org.jclouds.vcloud.director.v1_5.predicates.ReferencePredicates.nameEquals;
|
||||
import static com.google.common.collect.FluentIterable.from;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.Constants;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
/**
|
||||
|
@ -45,33 +36,28 @@ import com.google.common.collect.Iterables;
|
|||
*/
|
||||
@Singleton
|
||||
public class OrgsForNames implements Function<Iterable<String>, Iterable<? extends Org>> {
|
||||
@Resource
|
||||
public Logger logger = Logger.NULL;
|
||||
private final VCloudDirectorAsyncApi aapi;
|
||||
private final VCloudDirectorApi sapi;
|
||||
private final ExecutorService executor;
|
||||
private final VCloudDirectorApi api;
|
||||
|
||||
@Inject
|
||||
OrgsForNames(VCloudDirectorAsyncApi aapi,
|
||||
VCloudDirectorApi sapi,
|
||||
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
|
||||
this.aapi = aapi;
|
||||
this.sapi = sapi;
|
||||
this.executor = executor;
|
||||
OrgsForNames(VCloudDirectorApi api) {
|
||||
this.api = api;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<? extends Org> apply(Iterable<String> from) {
|
||||
final Set<Reference> orgs = sapi.getOrgApi().getOrgList();
|
||||
|
||||
return transformParallel(from, new Function<String, Future<? extends Org>>() {
|
||||
|
||||
public Iterable<? extends Org> apply(final Iterable<String> from) {
|
||||
return from(api.getOrgApi().list()).filter(new Predicate<Reference>() {
|
||||
@Override
|
||||
public Future<? extends Org> apply(String from) {
|
||||
return aapi.getOrgApi().getOrg(Iterables.find(orgs, nameEquals(from)).getHref());
|
||||
public boolean apply(Reference in) {
|
||||
return Iterables.contains(from, in.getName());
|
||||
}
|
||||
}).transform(new Function<Reference, Org>() {
|
||||
|
||||
@Override
|
||||
public Org apply(Reference in) {
|
||||
return api.getOrgApi().get(in.getHref());
|
||||
}
|
||||
|
||||
}, executor, null, logger, "organizations for names");
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.functions.href;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Entity;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
|
||||
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
||||
@Singleton
|
||||
public class NetworkURNToAdminHref extends URNToHref {
|
||||
|
||||
@Inject
|
||||
public NetworkURNToAdminHref(LoadingCache<String, Entity> resolveEntityCache) {
|
||||
super(resolveEntityCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String type() {
|
||||
return VCloudDirectorMediaType.ADMIN_NETWORK;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.functions.href;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Entity;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
|
||||
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
||||
@Singleton
|
||||
public class NetworkURNToHref extends URNToHref {
|
||||
|
||||
@Inject
|
||||
public NetworkURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
|
||||
super(resolveEntityCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String type() {
|
||||
return VCloudDirectorMediaType.NETWORK;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.functions.href;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Entity;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
|
||||
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
||||
@Singleton
|
||||
public class TaskURNToHref extends URNToHref {
|
||||
|
||||
@Inject
|
||||
public TaskURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
|
||||
super(resolveEntityCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String type() {
|
||||
return VCloudDirectorMediaType.TASK;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.functions.href;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Entity;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
|
||||
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
||||
@Singleton
|
||||
public class TasksListURNToHref extends URNToHref {
|
||||
|
||||
@Inject
|
||||
public TasksListURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
|
||||
super(resolveEntityCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String type() {
|
||||
return VCloudDirectorMediaType.TASKS_LIST;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.functions.href;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Entity;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
|
||||
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
||||
@Singleton
|
||||
public class UserURNToHref extends URNToHref {
|
||||
|
||||
@Inject
|
||||
public UserURNToHref(LoadingCache<String, Entity> resolveEntityCache) {
|
||||
super(resolveEntityCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String type() {
|
||||
return VCloudDirectorMediaType.USER;
|
||||
}
|
||||
|
||||
}
|
|
@ -30,9 +30,32 @@ import com.google.common.collect.Iterables;
|
|||
/**
|
||||
* Predicates for working with {@link EntityType} collections.
|
||||
*
|
||||
* @author grkvlt@apache.org
|
||||
* @author grkvlt@apache.org, Adrian Cole
|
||||
*/
|
||||
public class EntityPredicates {
|
||||
|
||||
/**
|
||||
* Matches {@link EntityType entities} with the given id.
|
||||
*
|
||||
* @param T type of the entity, for example {@link Vm}
|
||||
* @param id value of the id attribute of the entity
|
||||
* @return predicate that will match entities of the given id
|
||||
*/
|
||||
public static <T extends Entity> Predicate<T> idEquals(final String id) {
|
||||
checkNotNull(id, "id must be defined");
|
||||
|
||||
return new Predicate<T>() {
|
||||
@Override
|
||||
public boolean apply(T entity) {
|
||||
return id.equals(entity.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "idEquals(" + id + ")";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches {@link EntityType entities} with the given name.
|
||||
|
|
|
@ -39,7 +39,7 @@ public class LinkPredicates {
|
|||
/**
|
||||
* matches links of the given relation
|
||||
*
|
||||
* @param rel from {@code context.getApi().getCurrentSession().getOrg().getLinks()}
|
||||
* @param rel from {@code context.getApi().getCurrentSession().get().getLinks()}
|
||||
* @return predicate that will match links of the given rel
|
||||
*/
|
||||
public static Predicate<Link> relEquals(final String rel) {
|
||||
|
|
|
@ -67,7 +67,7 @@ public class TaskStatusEquals implements Predicate<Task> {
|
|||
logger.trace("looking for status on task %s", task);
|
||||
|
||||
// TODO shouldn't we see if it's already done before getting it from API server?
|
||||
task = taskApi.getTask(task.getHref());
|
||||
task = taskApi.get(task.getHref());
|
||||
|
||||
// perhaps task isn't available, yet
|
||||
if (task == null) return false;
|
||||
|
|
|
@ -58,7 +58,7 @@ public class TaskSuccess implements Predicate<Task> {
|
|||
logger.trace("looking for status on task %s", task.getOperationName());
|
||||
|
||||
// TODO shouldn't we see if it's already done before getting it from API server?
|
||||
task = taskApi.getTask(task.getHref());
|
||||
task = taskApi.get(task.getHref());
|
||||
|
||||
// perhaps task isn't available, yet
|
||||
if (task == null) return false;
|
||||
|
|
|
@ -54,7 +54,7 @@ public interface VCloudDirectorApi {
|
|||
* GET /entity/{id}
|
||||
* </pre>
|
||||
*/
|
||||
Entity resolveEntity(String id);
|
||||
Entity resolveEntity(String urn);
|
||||
|
||||
/**
|
||||
* @return the current login session
|
||||
|
|
|
@ -79,7 +79,7 @@ public class HttpClientLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
sessionWithToken = SessionWithToken.builder().session(session).token(response.getFirstHeaderOrNull("x-vcloud-authorization")).build();
|
||||
|
||||
assertEquals(sessionWithToken.getSession().getUser(), user);
|
||||
assertEquals(sessionWithToken.getSession().getOrg(), org);
|
||||
assertEquals(sessionWithToken.getSession().get(), org);
|
||||
assertTrue(sessionWithToken.getSession().getLinks().size() > 0);
|
||||
assertNotNull(sessionWithToken.getToken());
|
||||
|
||||
|
@ -87,7 +87,7 @@ public class HttpClientLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
assertTrue(orgList.size() > 0, "must have orgs");
|
||||
|
||||
context.getApi().getOrgApi().getOrg(Iterables.getLast(orgList).getHref());
|
||||
context.getApi().getOrgApi().get(Iterables.getLast(orgList).getHref());
|
||||
}
|
||||
|
||||
@Test(description = "GET /schema/{schemaFileName}", dependsOnMethods = { "testPostLogin", "testGetLogin" })
|
||||
|
|
|
@ -38,8 +38,8 @@ public class VCloudDirectorApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "GET /entity/{id}")
|
||||
public void testResolveEntity() {
|
||||
for (Reference orgRef : context.getApi().getOrgApi().getOrgList()) {
|
||||
Org org = context.getApi().getOrgApi().getOrg(orgRef.getHref());
|
||||
for (Reference orgRef : context.getApi().getOrgApi().list()) {
|
||||
Org org = context.getApi().getOrgApi().get(orgRef.getHref());
|
||||
Entity entity = context.getApi().resolveEntity(org.getId());
|
||||
checkEntityType(entity);
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ public class VCloudDirectorLiveTestConstants {
|
|||
|
||||
/* Error codes from 100 to 199 reflect parsing and other errors in domain object fields and attributes. */
|
||||
|
||||
public static final String REF_REQ_LIVE = "ERR-101: %s reference required to perform live tests";
|
||||
public static final String URN_REQ_LIVE = "ERR-101: %s urn required to perform live tests";
|
||||
|
||||
public static final String OBJ_REQ_LIVE = "ERR-102: %s instance required to perform live tests";
|
||||
|
||||
|
|
|
@ -165,8 +165,6 @@ public class Checks {
|
|||
assertNotNull(reference.getHref(), String.format(NOT_NULL_OBJ_FIELD_FMT, "Href", "ReferenceType"));
|
||||
|
||||
// Check optional fields
|
||||
String id = reference.getId();
|
||||
if (id != null) checkId(id);
|
||||
String type = reference.getType();
|
||||
if (type != null) checkType(type, validTypes);
|
||||
// NOTE name cannot be checked
|
||||
|
@ -257,7 +255,7 @@ public class Checks {
|
|||
if (error != null) checkError(error);
|
||||
Reference user = task.getUser();
|
||||
if (user != null) checkReferenceType(user);
|
||||
Reference org = task.getOrg();
|
||||
Reference org = task.get();
|
||||
if (org != null) checkReferenceType(org);
|
||||
Integer progress = task.getProgress();
|
||||
if (progress != null) checkProgress(progress);
|
||||
|
|
|
@ -388,7 +388,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
|
|||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, deleteItemMetadataEntry, deleteItemMetadataEntryResponse);
|
||||
assertEquals(api.getCatalogApi().getItemMetadataApi().deleteEntry(itemHref, "KEY"), deleteEntryTask());
|
||||
}
|
||||
|
||||
|
||||
public static final Catalog catalog() {
|
||||
return Catalog.builder()
|
||||
.name("QunyingTestCatalog")
|
||||
|
|
|
@ -22,7 +22,7 @@ import static com.google.common.base.Predicates.and;
|
|||
import static com.google.common.collect.Iterables.find;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CORRECT_VALUE_OBJECT_FMT;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkCatalogItem;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
|
||||
|
@ -83,7 +83,7 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
if (adminCatalog != null)
|
||||
return;
|
||||
catalogApi = context.getApi().getCatalogApi();
|
||||
Org org = context.getApi().getOrgApi().getOrg(Iterables.get(context.getApi().getOrgApi().getOrgList(), 0).getHref());
|
||||
Org org = context.getApi().getOrgApi().get(Iterables.get(context.getApi().getOrgApi().list(), 0).getHref());
|
||||
|
||||
if (adminContext != null) {
|
||||
AdminCatalog newCatalog = AdminCatalog.builder().name(name("Test Catalog "))
|
||||
|
@ -149,7 +149,7 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "POST /catalog/{id}/catalogItems")
|
||||
public void testAddCatalogItem() {
|
||||
assertNotNull(vdcURI, String.format(REF_REQ_LIVE, VDC));
|
||||
assertNotNull(vdcURI, String.format(URN_REQ_LIVE, VDC));
|
||||
|
||||
byte[] iso = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
|
||||
Vdc vdc = context.getApi().getVdcApi().getVdc(vdcURI);
|
||||
|
|
|
@ -98,7 +98,6 @@ public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.source(Reference.builder()
|
||||
.type("application/vnd.vmware.vcloud.media+xml")
|
||||
.name("copied test media")
|
||||
.id("urn:vcloud:media:da8361af-cccd-4103-a71c-493513c49094")
|
||||
.href(URI.create("https://mycloud.greenhousedata.com/api/media/da8361af-cccd-4103-a71c-493513c49094"))
|
||||
.build())
|
||||
.isSourceDelete(false)
|
||||
|
|
|
@ -35,7 +35,7 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.O
|
|||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
||||
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.relEquals;
|
||||
import static org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates.typeEquals;
|
||||
|
@ -128,7 +128,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "POST /vdc/{id}/media")
|
||||
public void testCreateMedia() throws URISyntaxException {
|
||||
assertNotNull(vdcURI, String.format(REF_REQ_LIVE, VDC));
|
||||
assertNotNull(vdcURI, String.format(URN_REQ_LIVE, VDC));
|
||||
Vdc vdc = vdcApi.getVdc(vdcURI);
|
||||
assertNotNull(vdc, String.format(OBJ_REQ_LIVE, VDC));
|
||||
Link addMedia = find(vdc.getLinks(), and(relEquals("add"), typeEquals(VCloudDirectorMediaType.MEDIA)));
|
||||
|
@ -190,7 +190,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
public void testGetMediaOwner() {
|
||||
Owner directOwner = mediaApi.getOwner(media.getHref());
|
||||
assertEquals(owner.toBuilder()
|
||||
.user(owner.getUser().toBuilder().id(null).build())
|
||||
.user(owner.getUser())
|
||||
.build(),
|
||||
directOwner.toBuilder().links(Collections.<Link>emptySet()).build(),
|
||||
String.format(GETTER_RETURNS_SAME_OBJ,
|
||||
|
|
|
@ -18,14 +18,22 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_NETWORK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ERROR;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_VALUE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNull;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Error;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
|
@ -36,7 +44,6 @@ import org.jclouds.vcloud.director.v1_5.domain.network.IpAddresses;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpRanges;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkFeatures;
|
||||
|
@ -47,6 +54,7 @@ import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.net.HttpHeaders;
|
||||
|
||||
/**
|
||||
* Test the {@link NetworkApi} via its side effects.
|
||||
|
@ -55,37 +63,40 @@ import com.google.common.collect.ImmutableSet;
|
|||
*/
|
||||
@Test(groups = { "unit", "user" }, singleThreaded = true, testName = "NetworkApiExpectTest")
|
||||
public class NetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||
|
||||
@Test
|
||||
public void testGetNetwork() {
|
||||
URI networkUri = URI.create(endpoint + "/network/f3ba8256-6f48-4512-aad6-600e85b4dc38");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/network/f3ba8256-6f48-4512-aad6-600e85b4dc38")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/network.xml", VCloudDirectorMediaType.ORG_NETWORK)
|
||||
.httpResponseBuilder().build());
|
||||
|
||||
OrgNetwork expected = orgNetwork();
|
||||
assertEquals(Network.<OrgNetwork>toSubType(api.getNetworkApi().getNetwork(networkUri)), expected);
|
||||
static String network = "55a677cf-ab3f-48ae-b880-fab90421980c";
|
||||
static String networkUrn = "urn:vcloud:network:" + network;
|
||||
static URI networkHref = URI.create(endpoint + "/network/" + network);
|
||||
|
||||
HttpRequest get = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(networkHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
HttpResponse getResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/network/network.xml", ORG + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetNetworkHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
|
||||
assertEquals(api.getNetworkApi().get(networkHref), network());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetNetworkWithInvalidId() {
|
||||
URI networkUri = URI.create(endpoint + "/network/NOTAUUID");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/network/NOTAUUID")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/error400.xml", VCloudDirectorMediaType.ERROR)
|
||||
.httpResponseBuilder().statusCode(400).build());
|
||||
|
||||
@Test
|
||||
public void testGetNetworkHrefInvalidId() {
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
get.toBuilder().endpoint(endpoint + "/network/NOTAUUID").build(),
|
||||
HttpResponse.builder()
|
||||
.statusCode(400)
|
||||
.payload(payloadFromResourceWithContentType("/network/error400.xml", ERROR + ";version=1.5"))
|
||||
.build());
|
||||
|
||||
Error expected = Error.builder()
|
||||
.message("validation error : EntityRef has incorrect type, expected type is com.vmware.vcloud.entity.network.")
|
||||
.majorErrorCode(400)
|
||||
|
@ -93,7 +104,7 @@ public class NetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.build();
|
||||
|
||||
try {
|
||||
api.getNetworkApi().getNetwork(networkUri);
|
||||
api.getNetworkApi().get(URI.create(endpoint + "/network/NOTAUUID"));
|
||||
fail("Should give HTTP 400 error");
|
||||
} catch (VCloudDirectorException vde) {
|
||||
assertEquals(vde.getError(), expected);
|
||||
|
@ -103,91 +114,125 @@ public class NetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testGetNetworkWithCatalogId() {
|
||||
URI networkUri = URI.create(endpoint + "/network/9e08c2f6-077a-42ce-bece-d5332e2ebb5c");
|
||||
|
||||
public void testGetNetworkHrefCatalogId() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/network/9e08c2f6-077a-42ce-bece-d5332e2ebb5c")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/error403-catalog.xml", VCloudDirectorMediaType.ERROR)
|
||||
.httpResponseBuilder().statusCode(403).build());
|
||||
get.toBuilder().endpoint(endpoint + "/network/9e08c2f6-077a-42ce-bece-d5332e2ebb5c").build(),
|
||||
HttpResponse.builder()
|
||||
.statusCode(403)
|
||||
.payload(payloadFromResourceWithContentType("/network/error403-catalog.xml", ERROR + ";version=1.5"))
|
||||
.build());
|
||||
|
||||
assertNull(api.getNetworkApi().getNetwork(networkUri));
|
||||
assertNull(api.getNetworkApi().get(URI.create(endpoint + "/network/9e08c2f6-077a-42ce-bece-d5332e2ebb5c")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetNetworkWithFakeId() {
|
||||
URI networkUri = URI.create(endpoint + "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
|
||||
|
||||
public void testGetNetworkHrefFakeId() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/error403-fake.xml", VCloudDirectorMediaType.ERROR)
|
||||
.httpResponseBuilder().statusCode(403).build());
|
||||
get.toBuilder().endpoint(endpoint + "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee").build(),
|
||||
HttpResponse.builder()
|
||||
.statusCode(403)
|
||||
.payload(payloadFromResourceWithContentType("/network/error403-fake.xml", ERROR + ";version=1.5"))
|
||||
.build());
|
||||
|
||||
assertNull(api.getNetworkApi().getNetwork(networkUri));
|
||||
assertNull(api.getNetworkApi().get(URI.create(endpoint + "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
|
||||
}
|
||||
|
||||
HttpRequest resolveNetwork = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/entity/" + networkUrn)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
String networkEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
|
||||
.a("name", networkUrn)
|
||||
.a("id", networkUrn)
|
||||
.a("type", ENTITY)
|
||||
.a("href", endpoint + "/entity/" + networkUrn)
|
||||
.e("Link").a("rel", "alternate").a("type", NETWORK).a("href", networkHref.toString()).up()
|
||||
// TODO: remove this when VCloudDirectorApiExpectTest no longer inherits from VCloudDirectorAdminApiExpectTest
|
||||
.e("Link").a("rel", "alternate").a("type", ADMIN_NETWORK).a("href", networkHref.toString()).up());
|
||||
|
||||
HttpResponse resolveNetworkResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromStringWithContentType(networkEntity, ENTITY + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetMetadata() {
|
||||
URI networkUri = URI.create(endpoint + "/network/55a677cf-ab3f-48ae-b880-fab90421980c");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/metadata.xml", VCloudDirectorMediaType.METADATA)
|
||||
.httpResponseBuilder().build());
|
||||
|
||||
Metadata expected = Metadata.builder()
|
||||
.type("application/vnd.vmware.vcloud.metadata+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata"))
|
||||
.link(Link.builder()
|
||||
.rel("up")
|
||||
.type("application/vnd.vmware.vcloud.network+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c"))
|
||||
.build())
|
||||
.entries(ImmutableSet.of(MetadataEntry.builder().entry("key", "value").build()))
|
||||
.build();
|
||||
|
||||
assertEquals(api.getNetworkApi().getMetadataApi().get(networkUri), expected);
|
||||
public void testGetNetworkUrn() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, get, getResponse);
|
||||
assertEquals(api.getNetworkApi().get(networkUrn), network());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetMetadataValue() {
|
||||
URI networkUri = URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata/KEY")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/metadataValue.xml", VCloudDirectorMediaType.METADATA_ENTRY)
|
||||
.httpResponseBuilder().build());
|
||||
|
||||
MetadataValue expected = MetadataValue.builder()
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata/key"))
|
||||
.link(Link.builder()
|
||||
.rel("up")
|
||||
.type("application/vnd.vmware.vcloud.metadata+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata"))
|
||||
.build())
|
||||
.value("value")
|
||||
.build();
|
||||
|
||||
assertEquals(api.getNetworkApi().getMetadataApi().getValue(networkUri, "KEY"), expected);
|
||||
HttpRequest getMetadata = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(networkHref + "/metadata")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse getMetadataResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/network/metadata.xml", METADATA))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetNetworkMetadataHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadata, getMetadataResponse);
|
||||
assertEquals(api.getNetworkApi().getMetadataApi().get(networkHref), metadata());
|
||||
}
|
||||
|
||||
static Metadata metadata() {
|
||||
return Metadata.builder()
|
||||
.type("application/vnd.vmware.vcloud.metadata+xml")
|
||||
.href(URI.create(endpoint + "/network/" + network + "/metadata"))
|
||||
.link(Link.builder()
|
||||
.rel("up")
|
||||
.type("application/vnd.vmware.vcloud.network+xml")
|
||||
.href(networkHref)
|
||||
.build())
|
||||
.entries(ImmutableSet.of(metadataEntry()))
|
||||
.build();
|
||||
}
|
||||
|
||||
public static OrgNetwork orgNetwork() {
|
||||
private static MetadataEntry metadataEntry() {
|
||||
return MetadataEntry.builder().entry("key", "value").build();
|
||||
}
|
||||
|
||||
HttpRequest getMetadataValue = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(networkHref + "/metadata/KEY")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse getMetadataValueResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/network/metadataValue.xml", METADATA_VALUE))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetNetworkMetadataEntryHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse);
|
||||
assertEquals(api.getNetworkApi().getMetadataApi().getValue(networkHref, "KEY"), metadataValue());
|
||||
}
|
||||
|
||||
private MetadataValue metadataValue() {
|
||||
return MetadataValue.builder()
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata/key"))
|
||||
.link(Link.builder()
|
||||
.rel("up")
|
||||
.type("application/vnd.vmware.vcloud.metadata+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/55a677cf-ab3f-48ae-b880-fab90421980c/metadata"))
|
||||
.build())
|
||||
.value("value")
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
public static OrgNetwork network() {
|
||||
return OrgNetwork.builder()
|
||||
.name("ilsolation01-Jclouds")
|
||||
.id("urn:vcloud:network:f3ba8256-6f48-4512-aad6-600e85b4dc38")
|
||||
|
|
|
@ -22,7 +22,7 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.O
|
|||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_EQ;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REQUIRED_VALUE_OBJECT_FMT;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkResourceType;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
@ -60,18 +60,20 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
protected NetworkApi networkApi;
|
||||
|
||||
private boolean metadataSet = false;
|
||||
private Network network;
|
||||
|
||||
@Override
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setupRequiredApis() {
|
||||
networkApi = context.getApi().getNetworkApi();
|
||||
network = lazyGetNetwork();
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void cleanUp() {
|
||||
if (metadataSet) {
|
||||
try {
|
||||
Task delete = adminContext.getApi().getNetworkApi().getMetadataApi().deleteEntry(toAdminUri(networkURI), "key");
|
||||
Task delete = adminContext.getApi().getNetworkApi().getMetadataApi().deleteEntry(network.getHref(), "key");
|
||||
taskDoneEventually(delete);
|
||||
} catch (Exception e) {
|
||||
logger.warn(e, "Error when deleting metadata");
|
||||
|
@ -82,9 +84,9 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
@Test(description = "GET /network/{id}")
|
||||
public void testGetNetwork() {
|
||||
// required for testing
|
||||
assertNotNull(networkURI, String.format(REF_REQ_LIVE, NETWORK));
|
||||
assertNotNull(networkUrn, String.format(URN_REQ_LIVE, NETWORK));
|
||||
|
||||
Network abstractNetwork = networkApi.getNetwork(networkURI);
|
||||
Network abstractNetwork = networkApi.get(networkUrn);
|
||||
assertTrue(abstractNetwork instanceof OrgNetwork, String.format(REQUIRED_VALUE_OBJECT_FMT,
|
||||
".class", NETWORK, abstractNetwork.getClass(),"OrgNetwork"));
|
||||
OrgNetwork network = Network.toSubType(abstractNetwork);
|
||||
|
@ -95,7 +97,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
}
|
||||
|
||||
private void setupMetadata() {
|
||||
adminContext.getApi().getNetworkApi().getMetadataApi().putEntry(toAdminUri(networkURI),
|
||||
adminContext.getApi().getNetworkApi().getMetadataApi().putEntry(network.getHref(),
|
||||
"key", MetadataValue.builder().value("value").build());
|
||||
metadataSet = true;
|
||||
}
|
||||
|
@ -106,7 +108,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
setupMetadata();
|
||||
}
|
||||
|
||||
Metadata metadata = networkApi.getMetadataApi().get(networkURI);
|
||||
Metadata metadata = networkApi.getMetadataApi().get(network.getHref());
|
||||
// required for testing
|
||||
assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
|
||||
String.format(OBJ_FIELD_REQ_LIVE, NETWORK, "metadata.entries"));
|
||||
|
@ -128,7 +130,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "GET /network/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
|
||||
public void testGetMetadataValue() {
|
||||
MetadataValue metadataValue = networkApi.getMetadataApi().getValue(networkURI, "key");
|
||||
MetadataValue metadataValue = networkApi.getMetadataApi().getValue(network.getHref(), "key");
|
||||
|
||||
// Check parent type
|
||||
checkResourceType(metadataValue);
|
||||
|
|
|
@ -18,15 +18,18 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_ORG;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_VALUE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_LIST;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNull;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Error;
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry;
|
||||
|
@ -39,7 +42,7 @@ import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.net.HttpHeaders;
|
||||
|
||||
/**
|
||||
* Allows us to test the {@link OrgApi} via its side effects.
|
||||
|
@ -51,9 +54,21 @@ public class OrgApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
|
||||
@Test
|
||||
public void testGetOrgList() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
getStandardRequest("GET", "/org/"),
|
||||
getStandardPayloadResponse("/org/orglist.xml", VCloudDirectorMediaType.ORG_LIST));
|
||||
HttpRequest list = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/org/")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
HttpResponse listResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/org/orglist.xml", ORG_LIST + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, list, listResponse);
|
||||
|
||||
|
||||
OrgList expected = OrgList.builder()
|
||||
.org(Reference.builder()
|
||||
|
@ -63,130 +78,110 @@ public class OrgApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.build())
|
||||
.build();
|
||||
|
||||
assertEquals(api.getOrgApi().getOrgList(), expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOrgFromOrgListReference() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
getStandardRequest("GET", "/org/"),
|
||||
getStandardPayloadResponse("/org/orglist.xml", VCloudDirectorMediaType.ORG_LIST));
|
||||
|
||||
Reference org = Iterables.getOnlyElement(api.getOrgApi().getOrgList());
|
||||
|
||||
api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
getStandardRequest("GET", org.getHref()),
|
||||
getStandardPayloadResponse("/org/org.xml", VCloudDirectorMediaType.ORG));
|
||||
|
||||
Org expected = org();
|
||||
|
||||
assertEquals(api.getOrgApi().getOrg(org.getHref()), expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOrg() {
|
||||
URI orgUri = URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
getStandardRequest("GET", "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"),
|
||||
getStandardPayloadResponse("/org/org.xml", VCloudDirectorMediaType.ORG));
|
||||
|
||||
Org expected = org();
|
||||
|
||||
assertEquals(api.getOrgApi().getOrg(orgUri), expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOrgFailOnInvalidOrgId() {
|
||||
URI orgUri = URI.create(endpoint + "/org/NOTAUUID");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
getStandardRequest("GET", "/org/NOTAUUID"),
|
||||
getStandardPayloadResponse(400, "/org/error400.xml", VCloudDirectorMediaType.ERROR));
|
||||
|
||||
Error expected = Error.builder()
|
||||
.message("validation error on field 'id': String value has invalid format or length")
|
||||
.majorErrorCode(400)
|
||||
.minorErrorCode("BAD_REQUEST")
|
||||
.build();
|
||||
|
||||
try {
|
||||
api.getOrgApi().getOrg(orgUri);
|
||||
fail("Should give HTTP 400 error");
|
||||
} catch (VCloudDirectorException vde) {
|
||||
assertEquals(vde.getError(), expected);
|
||||
} catch (Exception e) {
|
||||
fail("Should have thrown a VCloudDirectorException");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOrgFailOnWrongOrgId() {
|
||||
URI orgUri = URI.create(endpoint + "/org/9e08c2f6-077a-42ce-bece-d5332e2ebb5c");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
getStandardRequest("GET", "/org/9e08c2f6-077a-42ce-bece-d5332e2ebb5c"),
|
||||
getStandardPayloadResponse(403, "/org/error403-catalog.xml", VCloudDirectorMediaType.ERROR));
|
||||
|
||||
assertNull(api.getOrgApi().getOrg(orgUri));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOrgFailOnFakeOrgId() {
|
||||
URI orgUri = URI.create(endpoint + "/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
getStandardRequest("GET", "/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"),
|
||||
getStandardPayloadResponse(403, "/org/error403-fake.xml", VCloudDirectorMediaType.ERROR));
|
||||
|
||||
assertNull(api.getOrgApi().getOrg(orgUri));
|
||||
assertEquals(api.getOrgApi().list(), expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOrgMetadata() {
|
||||
URI orgUri = URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/org/orgMetadata.xml", VCloudDirectorMediaType.METADATA)
|
||||
.httpResponseBuilder().build());
|
||||
|
||||
Metadata expected = Metadata.builder()
|
||||
.type("application/vnd.vmware.vcloud.metadata+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata"))
|
||||
.link(Link.builder()
|
||||
.rel("up")
|
||||
.type("application/vnd.vmware.vcloud.org+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build())
|
||||
.entries(ImmutableSet.of(metadataEntry()))
|
||||
static String org = "6f312e42-cd2b-488d-a2bb-97519cd57ed0";
|
||||
static String orgUrn = "urn:vcloud:org:" + org;
|
||||
static URI orgHref = URI.create(endpoint + "/org/" + org);
|
||||
|
||||
HttpRequest get = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(orgHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
assertEquals(api.getOrgApi().getMetadataApi().get(orgUri), expected);
|
||||
|
||||
HttpResponse getResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/org/org.xml", ORG + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetOrgHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
|
||||
assertEquals(api.getOrgApi().get(orgHref), org());
|
||||
}
|
||||
|
||||
HttpRequest resolveOrg = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/entity/" + orgUrn)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
String orgEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
|
||||
.a("name", orgUrn)
|
||||
.a("id", orgUrn)
|
||||
.a("type", ENTITY)
|
||||
.a("href", endpoint + "/entity/" + orgUrn)
|
||||
.e("Link").a("rel", "alternate").a("type", ORG).a("href", orgHref.toString()).up()
|
||||
// TODO: remove this when VCloudDirectorApiExpectTest no longer inherits from VCloudDirectorAdminApiExpectTest
|
||||
.e("Link").a("rel", "alternate").a("type", ADMIN_ORG).a("href", orgHref.toString()).up());
|
||||
|
||||
HttpResponse resolveOrgResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromStringWithContentType(orgEntity, ENTITY + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetOrgMetadataValue() {
|
||||
URI orgUri = URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0");
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata/KEY")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/org/orgMetadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE)
|
||||
.httpResponseBuilder().build());
|
||||
|
||||
MetadataValue expected = metadataValue();
|
||||
public void testGetOrgUrn() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveOrg, resolveOrgResponse, get, getResponse);
|
||||
assertEquals(api.getOrgApi().get(orgUrn), org());
|
||||
}
|
||||
|
||||
|
||||
assertEquals(api.getOrgApi().getMetadataApi().getValue(orgUri, "KEY"), expected);
|
||||
HttpRequest getMetadata = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(orgHref + "/metadata")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse getMetadataResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/org/orgMetadata.xml", METADATA))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetOrgMetadataHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadata, getMetadataResponse);
|
||||
assertEquals(api.getOrgApi().getMetadataApi().get(orgHref), metadata());
|
||||
}
|
||||
|
||||
static Metadata metadata() {
|
||||
return Metadata.builder()
|
||||
.type("application/vnd.vmware.vcloud.metadata+xml")
|
||||
.href(URI.create(endpoint + "/org/" + org + "/metadata"))
|
||||
.link(Link.builder()
|
||||
.rel("up")
|
||||
.type("application/vnd.vmware.vcloud.org+xml")
|
||||
.href(orgHref)
|
||||
.build())
|
||||
.entries(ImmutableSet.of(metadataEntry()))
|
||||
.build();
|
||||
}
|
||||
|
||||
HttpRequest getMetadataValue = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(orgHref + "/metadata/KEY")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse getMetadataValueResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/org/orgMetadataValue.xml", METADATA_VALUE))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetOrgMetadataEntryHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getMetadataValue, getMetadataValueResponse);
|
||||
assertEquals(api.getOrgApi().getMetadataApi().getValue(orgHref, "KEY"), metadataValue());
|
||||
}
|
||||
|
||||
public static Org org() {
|
||||
return Org.builder()
|
||||
.name("JClouds")
|
||||
|
|
|
@ -21,7 +21,6 @@ package org.jclouds.vcloud.director.v1_5.features;
|
|||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CONDITION_FMT;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CORRECT_VALUE_OBJECT_FMT;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.NOT_EMPTY_OBJECT_FMT;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkControlAccessParams;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOrg;
|
||||
|
@ -40,7 +39,6 @@ import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
|
||||
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
|
@ -97,7 +95,7 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
@Test(description = "GET /org")
|
||||
public void testGetOrgList() {
|
||||
// Call the method being tested
|
||||
orgList = orgApi.getOrgList();
|
||||
orgList = orgApi.list();
|
||||
|
||||
// NOTE The environment MUST have at least one organisation configured
|
||||
|
||||
|
@ -118,8 +116,10 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
orgURI = orgRef.getHref();
|
||||
|
||||
// Call the method being tested
|
||||
org = orgApi.getOrg(orgURI);
|
||||
|
||||
org = orgApi.get(orgURI);
|
||||
|
||||
assertEquals(orgApi.get(org.getId()), org);
|
||||
|
||||
checkOrg(org);
|
||||
|
||||
if (adminContext != null) {
|
||||
|
@ -172,24 +172,4 @@ public class OrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
assertEquals(value.getValue(), expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value.getValue()));
|
||||
}
|
||||
|
||||
@Test(description = "GET /org/{id}/catalog/{catalogId}/controlAccess", dependsOnMethods = { "testGetOrg" })
|
||||
public void testGetControlAccess() {
|
||||
// Call the method being tested
|
||||
ControlAccessParams params = orgApi.getControlAccess(orgURI, catalogUrn);
|
||||
|
||||
// Check params are well formed
|
||||
checkControlAccessParams(params);
|
||||
}
|
||||
|
||||
@Test(description = "POST /org/{id}/catalog/{catalogId}/action/controlAccess", dependsOnMethods = { "testGetControlAccess" })
|
||||
public void testModifyControlAccess() {
|
||||
// Setup params
|
||||
ControlAccessParams params = orgApi.getControlAccess(orgURI, catalogUrn);
|
||||
|
||||
// Call the method being tested
|
||||
ControlAccessParams modified = orgApi.modifyControlAccess(orgURI, catalogUrn, params);
|
||||
|
||||
// Check params are well formed
|
||||
checkControlAccessParams(modified);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -156,25 +156,21 @@ public class QueryApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.reference(CatalogReference.builder()
|
||||
.type("application/vnd.vmware.vcloud.catalog+xml")
|
||||
.name("QunyingTestCatalog")
|
||||
.id("urn:vcloud:catalog:7212e451-76e1-4631-b2de-ba1dfd8080e4")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
|
||||
.build())
|
||||
.reference(CatalogReference.builder()
|
||||
.type("application/vnd.vmware.vcloud.catalog+xml")
|
||||
.name("Public")
|
||||
.id("urn:vcloud:catalog:9e08c2f6-077a-42ce-bece-d5332e2ebb5c")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/9e08c2f6-077a-42ce-bece-d5332e2ebb5c"))
|
||||
.build())
|
||||
.reference(CatalogReference.builder()
|
||||
.type("application/vnd.vmware.vcloud.catalog+xml")
|
||||
.name("dantest")
|
||||
.id("urn:vcloud:catalog:b542aff4-9f97-4f51-a126-4330fbf62f02")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/b542aff4-9f97-4f51-a126-4330fbf62f02"))
|
||||
.build())
|
||||
.reference(CatalogReference.builder()
|
||||
.type("application/vnd.vmware.vcloud.catalog+xml")
|
||||
.name("test")
|
||||
.id("urn:vcloud:catalog:b7289d54-4ca4-497f-9a93-2d4afc97e3da")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/b7289d54-4ca4-497f-9a93-2d4afc97e3da"))
|
||||
.build())
|
||||
.build();
|
||||
|
|
|
@ -18,9 +18,10 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASKS_LIST;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNull;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
|
@ -28,9 +29,6 @@ import javax.ws.rs.core.HttpHeaders;
|
|||
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Error;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
|
||||
|
@ -45,183 +43,140 @@ import org.testng.annotations.Test;
|
|||
*/
|
||||
@Test(groups = { "unit", "user" }, singleThreaded = true, testName = "TaskApiExpectTest")
|
||||
public class TaskApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||
|
||||
@Test
|
||||
public void testTaskListForValidOrg() {
|
||||
HttpRequest taskRequest = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse taskResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/task/taskslist.xml", VCloudDirectorMediaType.TASKS_LIST + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
HttpRequest orgRequest = HttpRequest.builder().method("GET")
|
||||
.endpoint(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")
|
||||
static String tasksList = "6f312e42-cd2b-488d-a2bb-97519cd57ed0";
|
||||
static URI tasksListHref = URI.create(endpoint + "/tasksList/" + tasksList);
|
||||
|
||||
HttpRequest getTasksList = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(tasksListHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
HttpResponse orgResponse = HttpResponse.builder()
|
||||
HttpResponse getTasksListResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/org/org.xml", VCloudDirectorMediaType.TASKS_LIST + ";version=1.5"))
|
||||
.payload(payloadFromResourceWithContentType("/task/tasksList.xml", TASKS_LIST + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse, orgRequest, orgResponse);
|
||||
|
||||
TasksList expected = TasksList.builder()
|
||||
.name("Tasks Lists")
|
||||
.type("application/vnd.vmware.vcloud.tasksList+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.task(taskOne())
|
||||
.task(taskTwo())
|
||||
.build();
|
||||
|
||||
assertEquals(api.getTaskApi().getTaskList(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")), expected);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testTaskListForInvalidOrgId() {
|
||||
HttpRequest taskRequest = HttpRequest.builder().method("GET")
|
||||
.endpoint(endpoint + "/tasksList/NOTAUUID")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token).build();
|
||||
|
||||
HttpResponse taskResponse = HttpResponse.builder().build();
|
||||
|
||||
HttpRequest orgRequest = HttpRequest.builder().method("GET")
|
||||
.endpoint(endpoint + "/org/NOTAUUID")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse orgResponse = HttpResponse.builder()
|
||||
.statusCode(400)
|
||||
.payload(payloadFromResourceWithContentType("/org/error400.xml", VCloudDirectorMediaType.ERROR + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse, orgRequest, orgResponse);
|
||||
|
||||
Error expected = Error.builder()
|
||||
.message("validation error on field 'id': String value has invalid format or length")
|
||||
.majorErrorCode(400)
|
||||
.minorErrorCode("BAD_REQUEST")
|
||||
.build();
|
||||
|
||||
try {
|
||||
api.getTaskApi().getTaskList(URI.create("https://vcloudbeta.bluelock.com/api/org/NOTAUUID"));
|
||||
fail("Should give HTTP 400 error");
|
||||
} catch (VCloudDirectorException vde) {
|
||||
assertEquals(vde.getError(), expected);
|
||||
} catch (Exception e) {
|
||||
fail("Should have thrown a VCloudDirectorException");
|
||||
}
|
||||
public void testGetTasksListHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getTasksList, getTasksListResponse);
|
||||
assertEquals(api.getTaskApi().getTasksList(tasksListHref), tasksList());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTaskListForNotFoundOrgId() {
|
||||
HttpRequest taskRequest = HttpRequest.builder().method("GET")
|
||||
.endpoint(endpoint + "/tasksList/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse taskResponse = HttpResponse.builder().build();
|
||||
|
||||
HttpRequest orgRequest = HttpRequest.builder().method("GET")
|
||||
.endpoint(endpoint + "/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse orgResponse = HttpResponse.builder()
|
||||
.statusCode(403)
|
||||
.payload(payloadFromResourceWithContentType("/org/error403-fake.xml", VCloudDirectorMediaType.ERROR + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse, orgRequest, orgResponse);
|
||||
|
||||
assertNull(api.getTaskApi().getTaskList(URI.create("https://vcloudbeta.bluelock.com/api/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskForTaskRef() {
|
||||
HttpRequest taskRequest = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse taskResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/task/task.xml", VCloudDirectorMediaType.TASK + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse);
|
||||
|
||||
URI taskUri = URI.create(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b");
|
||||
|
||||
//TODO: incorrect relationship, as task should not have a nested task container!!
|
||||
Task expected = taskOne();
|
||||
|
||||
assertEquals(api.getTaskApi().getTask(taskUri), expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCancelTaskByTaskRef() {
|
||||
HttpRequest taskRequest = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b/action/cancel")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse taskResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.build();
|
||||
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse);
|
||||
|
||||
URI taskUri = URI.create(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b");
|
||||
|
||||
api.getTaskApi().cancelTask(taskUri);
|
||||
}
|
||||
|
||||
public static Task taskOne() {
|
||||
return Task.builder()
|
||||
.type("application/vnd.vmware.vcloud.task+xml")
|
||||
.name("task")
|
||||
.id("urn:vcloud:task:5fcd2af3-d0ec-45ce-9451-8c585a2c766b")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b"))
|
||||
.status("success")
|
||||
.operation("Created Catalog QunyingTestCatalog(7212e451-76e1-4631-b2de-ba1dfd8080e4)")
|
||||
.operationName("catalogCreateCatalog")
|
||||
.startTime(dateService.iso8601DateParse("2012-02-07T00:16:28.450-05:00"))
|
||||
.endTime(dateService.iso8601DateParse("2012-02-07T00:16:28.867-05:00"))
|
||||
.expiryTime(dateService.iso8601DateParse("2012-05-07T00:16:28.450-04:00"))
|
||||
.owner(Reference.builder()
|
||||
.type("application/vnd.vmware.vcloud.catalog+xml")
|
||||
.name("QunyingTestCatalog")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
|
||||
.build())
|
||||
.user(Reference.builder()
|
||||
.type("application/vnd.vmware.admin.user+xml")
|
||||
.name("JClouds")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build())
|
||||
.org(Reference.builder()
|
||||
.type("application/vnd.vmware.vcloud.org+xml")
|
||||
.name("JClouds")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build())
|
||||
.build();
|
||||
|
||||
private TasksList tasksList() {
|
||||
return TasksList.builder()
|
||||
.name("Tasks Lists")
|
||||
.type("application/vnd.vmware.vcloud.tasksList+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.task(task())
|
||||
.task(taskTwo())
|
||||
.build();
|
||||
}
|
||||
|
||||
static String task = "5fcd2af3-d0ec-45ce-9451-8c585a2c766b";
|
||||
static String taskUrn = "urn:vcloud:task:" + task;
|
||||
static URI taskHref = URI.create(endpoint + "/task/" + task);
|
||||
|
||||
HttpRequest get = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(taskHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
HttpResponse getResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/task/task.xml", TASK + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetTaskHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
|
||||
assertEquals(api.getTaskApi().get(taskHref), task());
|
||||
}
|
||||
|
||||
HttpRequest resolveTask = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/entity/" + taskUrn)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
String taskEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
|
||||
.a("name", taskUrn)
|
||||
.a("id", taskUrn)
|
||||
.a("type", ENTITY)
|
||||
.a("href", endpoint + "/entity/" + taskUrn)
|
||||
.e("Link").a("rel", "alternate").a("type", TASK).a("href", taskHref.toString()).up());
|
||||
|
||||
HttpResponse resolveTaskResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromStringWithContentType(taskEntity, ENTITY + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetTaskUrn() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveTask, resolveTaskResponse, get, getResponse);
|
||||
assertEquals(api.getTaskApi().get(taskUrn), task());
|
||||
}
|
||||
|
||||
public static Task task() {
|
||||
return Task.builder()
|
||||
.type("application/vnd.vmware.vcloud.task+xml")
|
||||
.name("task")
|
||||
.id("urn:vcloud:task:5fcd2af3-d0ec-45ce-9451-8c585a2c766b")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b"))
|
||||
.status("success")
|
||||
.operation("Created Catalog QunyingTestCatalog(7212e451-76e1-4631-b2de-ba1dfd8080e4)")
|
||||
.operationName("catalogCreateCatalog")
|
||||
.startTime(dateService.iso8601DateParse("2012-02-07T00:16:28.450-05:00"))
|
||||
.endTime(dateService.iso8601DateParse("2012-02-07T00:16:28.867-05:00"))
|
||||
.expiryTime(dateService.iso8601DateParse("2012-05-07T00:16:28.450-04:00"))
|
||||
.owner(Reference.builder()
|
||||
.type("application/vnd.vmware.vcloud.catalog+xml")
|
||||
.name("QunyingTestCatalog")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4"))
|
||||
.build())
|
||||
.user(Reference.builder()
|
||||
.type("application/vnd.vmware.admin.user+xml")
|
||||
.name("JClouds")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build())
|
||||
.org(Reference.builder()
|
||||
.type("application/vnd.vmware.vcloud.org+xml")
|
||||
.name("JClouds")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build())
|
||||
.build();
|
||||
}
|
||||
|
||||
HttpRequest cancel = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint(taskHref+ "/action/cancel")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse cancelResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testCancelTaskHref() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, cancel, cancelResponse);
|
||||
api.getTaskApi().cancel(taskHref);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCancelTaskUrn() {
|
||||
VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveTask, resolveTaskResponse, cancel, cancelResponse);
|
||||
api.getTaskApi().cancel(taskHref);
|
||||
}
|
||||
|
||||
public static Task taskTwo() {
|
||||
return Task.builder()
|
||||
.type("application/vnd.vmware.vcloud.task+xml")
|
||||
|
|
|
@ -25,12 +25,15 @@ import static org.testng.Assert.assertNotNull;
|
|||
|
||||
import java.net.URI;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.VApp;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
|
||||
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
|
||||
import org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
@ -79,13 +82,17 @@ public class TaskApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "GET /tasksList/{id}")
|
||||
public void testGetTaskList() {
|
||||
orgList = orgApi.getOrgList();
|
||||
orgList = orgApi.list();
|
||||
Reference orgRef = Iterables.getFirst(orgList, null);
|
||||
assertNotNull(orgRef);
|
||||
orgURI = orgRef.getHref();
|
||||
|
||||
Org org = orgApi.get(orgURI);
|
||||
|
||||
URI taskListHref = Iterables.find(org.getLinks(), LinkPredicates.typeEquals(VCloudDirectorMediaType.TASKS_LIST)).getHref();
|
||||
|
||||
// Call the method being tested
|
||||
taskList = taskApi.getTaskList(orgURI);
|
||||
taskList = taskApi.getTasksList(taskListHref);
|
||||
|
||||
// NOTE The environment MUST have ...
|
||||
|
||||
|
@ -105,7 +112,7 @@ public class TaskApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
taskURI = taskRef.getHref();
|
||||
|
||||
// Call the method being tested
|
||||
task = taskApi.getTask(taskURI);
|
||||
task = taskApi.get(taskURI);
|
||||
|
||||
// Check required elements and attributes
|
||||
checkTask(task);
|
||||
|
@ -122,7 +129,7 @@ public class TaskApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
assertTaskStatusEventually(task, Task.Status.RUNNING, ImmutableSet.of(Task.Status.ERROR, Task.Status.ABORTED));
|
||||
|
||||
// Call the method being tested
|
||||
taskApi.cancelTask(taskURI);
|
||||
taskApi.cancel(taskURI);
|
||||
assertTaskStatusEventually(task, Task.Status.CANCELED, ImmutableSet.of(Task.Status.ERROR, Task.Status.ABORTED, Task.Status.SUCCESS));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,6 +75,7 @@ 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.ResourceEntity.Status;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.User;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.VApp;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Vm;
|
||||
|
@ -117,9 +118,9 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
|
||||
private MetadataValue metadataValue;
|
||||
private String key;
|
||||
private URI testUserURI;
|
||||
private boolean mediaCreated = false;
|
||||
private boolean testUserCreated = false;
|
||||
private User user;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
protected void setupRequiredEntities() {
|
||||
|
@ -161,10 +162,10 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
|
||||
if (adminContext != null) {
|
||||
Link orgLink = find(links, and(relEquals("up"), typeEquals(VCloudDirectorMediaType.ORG)));
|
||||
testUserURI = adminContext.getApi().getUserApi().createUser(toAdminUri(orgLink), randomTestUser("VAppAccessTest")).getHref();
|
||||
} else {
|
||||
testUserURI = userURI;
|
||||
userUrn = adminContext.getApi().getUserApi()
|
||||
.createUserInOrg(randomTestUser("VAppAccessTest"), toAdminUri(orgLink)).getId();
|
||||
}
|
||||
user = lazyGetUser();
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true, dependsOnMethods = { "cleanUpEnvironment" })
|
||||
|
@ -177,9 +178,9 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
logger.warn(e, "Error when deleting media");
|
||||
}
|
||||
}
|
||||
if (adminContext != null && testUserCreated && testUserURI != null) {
|
||||
if (adminContext != null && testUserCreated && userUrn != null) {
|
||||
try {
|
||||
adminContext.getApi().getUserApi().deleteUser(testUserURI);
|
||||
adminContext.getApi().getUserApi().delete(userUrn);
|
||||
} catch (Exception e) {
|
||||
logger.warn(e, "Error when deleting user");
|
||||
}
|
||||
|
@ -436,7 +437,7 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
ControlAccessParams params = ControlAccessParams.builder()
|
||||
.notSharedToEveryone()
|
||||
.accessSetting(AccessSetting.builder()
|
||||
.subject(Reference.builder().href(testUserURI).type(ADMIN_USER).build())
|
||||
.subject(Reference.builder().href(user.getHref()).type(ADMIN_USER).build())
|
||||
.accessLevel("ReadOnly")
|
||||
.build())
|
||||
.build();
|
||||
|
@ -653,7 +654,7 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
|
||||
@Test(description = "PUT /vApp/{id}/owner", dependsOnMethods = { "testGetOwner" })
|
||||
public void testModifyOwner() {
|
||||
Owner newOwner = Owner.builder().user(Reference.builder().href(testUserURI).type(ADMIN_USER).build()).build();
|
||||
Owner newOwner = Owner.builder().user(Reference.builder().href(user.getHref()).type(ADMIN_USER).build()).build();
|
||||
|
||||
// The method under test
|
||||
vAppApi.modifyOwner(vApp.getHref(), newOwner);
|
||||
|
|
|
@ -18,12 +18,9 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.ENTITY_NON_NULL;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkConfigSection;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.List;
|
||||
|
@ -33,7 +30,6 @@ import java.util.Set;
|
|||
import org.jclouds.vcloud.director.v1_5.AbstractVAppApiLiveTest;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Vm;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.FirewallRule;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.FirewallRuleProtocols;
|
||||
|
@ -42,6 +38,7 @@ import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.network.IpRanges;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.NatService;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection;
|
||||
|
@ -57,11 +54,8 @@ import org.testng.annotations.BeforeClass;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
|
@ -78,9 +72,8 @@ public class VAppNetworksLiveTest extends AbstractVAppApiLiveTest {
|
|||
private static final String HTTP_SECURITY_GROUP = "http";
|
||||
private static final String DEFAULT_SECURITY_GROUP = "default";
|
||||
private String key;
|
||||
private Reference parentNetworkRef;
|
||||
private Map<String, NetworkConfiguration> securityGroupToNetworkConfig;
|
||||
private String orgNetworkName;
|
||||
private Network network;
|
||||
|
||||
@AfterClass(alwaysRun = true, dependsOnMethods = { "cleanUpEnvironment" })
|
||||
protected void tidyUp() {
|
||||
|
@ -96,9 +89,8 @@ public class VAppNetworksLiveTest extends AbstractVAppApiLiveTest {
|
|||
|
||||
@BeforeClass
|
||||
void setUp() {
|
||||
parentNetworkRef = lookUpNewtorkInVdc(networkURI);
|
||||
securityGroupToNetworkConfig = createSecurityGroupToNetworkConfiguration(parentNetworkRef);
|
||||
orgNetworkName = parentNetworkRef.getName();
|
||||
network = lazyGetNetwork();
|
||||
securityGroupToNetworkConfig = createSecurityGroupToNetworkConfiguration(Reference.builder().fromEntity(network).build());
|
||||
}
|
||||
|
||||
@AfterMethod
|
||||
|
@ -164,7 +156,7 @@ public class VAppNetworksLiveTest extends AbstractVAppApiLiveTest {
|
|||
}
|
||||
|
||||
private void createVAppNetworkWithSecurityGroupOnVApp(ImmutableList<String> securityGroups, URI vAppURI) {
|
||||
String newVAppNetworkName = generateVAppNetworkName(orgNetworkName, securityGroups);
|
||||
String newVAppNetworkName = generateVAppNetworkName(network.getName(), securityGroups);
|
||||
// Create a vAppNetwork with firewall rules
|
||||
NetworkConfigSection newSection = generateNetworkConfigSection(securityGroups, newVAppNetworkName);
|
||||
Task modifyNetworkConfigSection = vAppApi.modifyNetworkConfigSection(vAppURI, newSection);
|
||||
|
@ -185,7 +177,7 @@ public class VAppNetworksLiveTest extends AbstractVAppApiLiveTest {
|
|||
IpScope ipScope = createNewIpScope();
|
||||
NetworkConfiguration newConfiguration = NetworkConfiguration.builder()
|
||||
.ipScope(ipScope)
|
||||
.parentNetwork(parentNetworkRef)
|
||||
.parentNetwork(Reference.builder().fromEntity(network).build())
|
||||
.fenceMode(FenceMode.NAT_ROUTED)
|
||||
.retainNetInfoAcrossDeployments(false)
|
||||
.features(createNetworkFeatures(ImmutableSet.of(firewallService, natService)))
|
||||
|
@ -241,25 +233,6 @@ public class VAppNetworksLiveTest extends AbstractVAppApiLiveTest {
|
|||
return newIpRange;
|
||||
}
|
||||
|
||||
private Reference lookUpNewtorkInVdc(final URI networkURI) {
|
||||
Vdc vdc = context.getApi().getVdcApi().getVdc(vdcURI);
|
||||
assertNotNull(vdc, String.format(ENTITY_NON_NULL, VDC));
|
||||
|
||||
Set<Reference> networks = vdc.getAvailableNetworks();
|
||||
|
||||
// Look up the network in the Vdc with the id configured for the tests
|
||||
Optional<Reference> parentNetwork = Iterables.tryFind(networks, new Predicate<Reference>() {
|
||||
@Override
|
||||
public boolean apply(Reference reference) {
|
||||
return reference.getHref().equals(networkURI);
|
||||
}
|
||||
});
|
||||
if (!parentNetwork.isPresent()) {
|
||||
fail(String.format("Could not find network %s in vdc", networkURI.toASCIIString()));
|
||||
}
|
||||
return parentNetwork.get();
|
||||
}
|
||||
|
||||
private Set<FirewallRule> retrieveAllFirewallRules(NetworkFeatures networkFeatures) {
|
||||
Set<FirewallRule> firewallRules = Sets.newLinkedHashSet();
|
||||
for (NetworkServiceType<?> networkServiceType : networkFeatures.getNetworkServices()) {
|
||||
|
|
|
@ -331,7 +331,6 @@ public class VdcApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.source(Reference.builder()
|
||||
.type("application/vnd.vmware.vcloud.media+xml")
|
||||
.name("copied test media")
|
||||
.id("urn:vcloud:media:da8361af-cccd-4103-a71c-493513c49094")
|
||||
.href(URI.create("https://mycloud.greenhousedata.com/api/media/da8361af-cccd-4103-a71c-493513c49094"))
|
||||
.build())
|
||||
.isSourceDelete(false)
|
||||
|
|
|
@ -21,7 +21,7 @@ package org.jclouds.vcloud.director.v1_5.features;
|
|||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_EQ;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertFalse;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
|
@ -40,6 +40,7 @@ import org.jclouds.vcloud.director.v1_5.domain.Task;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.VApp;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.VAppNetworkConfiguration;
|
||||
|
@ -85,6 +86,7 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
private VAppTemplate capturedVAppTemplate;
|
||||
private VAppTemplate uploadedVAppTemplate;
|
||||
private boolean metadataSet = false;
|
||||
private Network network;
|
||||
|
||||
@Override
|
||||
@BeforeClass(alwaysRun = true)
|
||||
|
@ -93,7 +95,8 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
vappTemplateApi = context.getApi().getVAppTemplateApi();
|
||||
vappApi = context.getApi().getVAppApi();
|
||||
|
||||
assertNotNull(vdcURI, String.format(REF_REQ_LIVE, VDC));
|
||||
assertNotNull(vdcURI, String.format(URN_REQ_LIVE, VDC));
|
||||
network = lazyGetNetwork();
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
|
@ -241,12 +244,12 @@ public class VdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
networks, new Predicate<Reference>() {
|
||||
@Override
|
||||
public boolean apply(Reference reference) {
|
||||
return reference.getHref().equals(networkURI);
|
||||
return reference.getHref().equals(network.getHref());
|
||||
}
|
||||
});
|
||||
|
||||
if (!parentNetwork.isPresent()) {
|
||||
fail(String.format("Could not find network %s in vdc", networkURI.toASCIIString()));
|
||||
fail(String.format("Could not find network %s in vdc", network.getHref().toASCIIString()));
|
||||
}
|
||||
|
||||
NetworkConfiguration networkConfiguration = NetworkConfiguration.builder()
|
||||
|
|
|
@ -117,7 +117,6 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
|
||||
private MetadataValue metadataValue;
|
||||
private String key;
|
||||
private URI testUserURI;
|
||||
private boolean mediaCreated = false;
|
||||
private boolean testUserCreated = false;
|
||||
|
||||
|
@ -161,9 +160,8 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
|
||||
if (adminContext != null) {
|
||||
Link orgLink = find(links, and(relEquals("up"), typeEquals(VCloudDirectorMediaType.ORG)));
|
||||
testUserURI = adminContext.getApi().getUserApi().createUser(toAdminUri(orgLink), randomTestUser("VAppAccessTest")).getHref();
|
||||
} else {
|
||||
testUserURI = userURI;
|
||||
userUrn = adminContext.getApi().getUserApi()
|
||||
.createUserInOrg(randomTestUser("VAppAccessTest"), toAdminUri(orgLink)).getId();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -177,9 +175,9 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
|||
logger.warn("Error when deleting media: %s", e.getMessage());
|
||||
}
|
||||
}
|
||||
if (adminContext != null && testUserCreated && testUserURI != null) {
|
||||
if (adminContext != null && testUserCreated && userUrn != null) {
|
||||
try {
|
||||
adminContext.getApi().getUserApi().deleteUser(testUserURI);
|
||||
adminContext.getApi().getUserApi().delete(userUrn);
|
||||
} catch (Exception e) {
|
||||
logger.warn("Error when deleting user: %s", e.getMessage());
|
||||
}
|
||||
|
|
|
@ -55,12 +55,12 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
|
||||
static String catalog = "7212e451-76e1-4631-b2de-ba1dfd8080e4";
|
||||
static String catalogUrn = "urn:vcloud:catalog:" + catalog;
|
||||
static URI adminCatalogHref = URI.create(endpoint + "/admin/catalog/" + catalog);
|
||||
static URI catalogAdminHref = URI.create(endpoint + "/admin/catalog/" + catalog);
|
||||
static URI catalogHref = URI.create(endpoint + "/catalog/" + catalog);
|
||||
|
||||
HttpRequest get = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(adminCatalogHref)
|
||||
.endpoint(catalogAdminHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
|
@ -74,7 +74,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
@Test
|
||||
public void testGetCatalogHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
|
||||
assertEquals(api.getCatalogApi().get(adminCatalogHref), catalog());
|
||||
assertEquals(api.getCatalogApi().get(catalogAdminHref), catalog());
|
||||
}
|
||||
|
||||
HttpRequest resolveCatalog = HttpRequest.builder()
|
||||
|
@ -91,7 +91,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
.a("type", ENTITY)
|
||||
.a("href", endpoint + "/entity/" + catalogUrn)
|
||||
.e("Link").a("rel", "alternate").a("type", CATALOG).a("href", catalogHref.toString()).up()
|
||||
.e("Link").a("rel", "alternate").a("type", ADMIN_CATALOG).a("href", adminCatalogHref.toString()).up());
|
||||
.e("Link").a("rel", "alternate").a("type", ADMIN_CATALOG).a("href", catalogAdminHref.toString()).up());
|
||||
|
||||
HttpResponse resolveCatalogResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
|
@ -107,11 +107,11 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
static String org = "7212e451-76e1-4631-b2de-asdasdasd";
|
||||
static String orgUrn = "urn:vcloud:org:" + org;
|
||||
static URI orgHref = URI.create(endpoint + "/org/" + org);
|
||||
static URI adminOrgHref = URI.create(endpoint + "/admin/org/" + org);
|
||||
static URI orgAdminHref = URI.create(endpoint + "/admin/org/" + org);
|
||||
|
||||
HttpRequest create = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint(adminOrgHref + "/catalogs")
|
||||
.endpoint(orgAdminHref + "/catalogs")
|
||||
.addHeader("Accept", ADMIN_CATALOG)
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
|
@ -126,7 +126,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
@Test
|
||||
public void testCreateCatalogHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, create, createResponse);
|
||||
assertEquals(api.getCatalogApi().createCatalogInOrg(createCatalogInOrgSource(), adminOrgHref), createCatalogInOrg());
|
||||
assertEquals(api.getCatalogApi().createCatalogInOrg(createCatalogInOrgSource(), orgAdminHref), createCatalogInOrg());
|
||||
}
|
||||
|
||||
HttpRequest resolveOrg = HttpRequest.builder()
|
||||
|
@ -143,7 +143,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
.a("type", ENTITY)
|
||||
.a("href", endpoint + "/entity/" + catalogUrn)
|
||||
.e("Link").a("rel", "alternate").a("type", ORG).a("href", orgHref.toString()).up()
|
||||
.e("Link").a("rel", "alternate").a("type", ADMIN_ORG).a("href", adminOrgHref.toString()).up());
|
||||
.e("Link").a("rel", "alternate").a("type", ADMIN_ORG).a("href", orgAdminHref.toString()).up());
|
||||
|
||||
HttpResponse resolveOrgResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
|
@ -158,7 +158,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
|
||||
HttpRequest update = HttpRequest.builder()
|
||||
.method("PUT")
|
||||
.endpoint(adminCatalogHref)
|
||||
.endpoint(catalogAdminHref)
|
||||
.addHeader("Accept", ADMIN_CATALOG)
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
|
@ -173,7 +173,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
@Test
|
||||
public void testUpdateCatalogHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, update, updateResponse);
|
||||
assertEquals(api.getCatalogApi().update(adminCatalogHref, updateCatalog()), updateCatalog());
|
||||
assertEquals(api.getCatalogApi().update(catalogAdminHref, updateCatalog()), updateCatalog());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -184,7 +184,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
|
||||
HttpRequest getOwner = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(adminCatalogHref + "/owner")
|
||||
.endpoint(catalogAdminHref + "/owner")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
|
@ -211,7 +211,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
@Test
|
||||
public void testGetCatalogOwnerHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, getOwner, getOwnerResponse);
|
||||
assertEquals(api.getCatalogApi().getOwner(adminCatalogHref), expectedGetOwner);
|
||||
assertEquals(api.getCatalogApi().getOwner(catalogAdminHref), expectedGetOwner);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -222,7 +222,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
|
||||
HttpRequest setOwner = HttpRequest.builder()
|
||||
.method("PUT")
|
||||
.endpoint(adminCatalogHref + "/owner")
|
||||
.endpoint(catalogAdminHref + "/owner")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
|
@ -245,7 +245,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
@Test
|
||||
public void testSetCatalogOwnerHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, setOwner, setOwnerResponse);
|
||||
api.getCatalogApi().setOwner(adminCatalogHref, ownerToSet);
|
||||
api.getCatalogApi().setOwner(catalogAdminHref, ownerToSet);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -256,7 +256,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
|
||||
HttpRequest publishCatalog = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint(adminCatalogHref + "/action/publish")
|
||||
.endpoint(catalogAdminHref + "/action/publish")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
|
@ -271,7 +271,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
public void testPublishCatalogHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, publishCatalog,
|
||||
publishCatalogResponse);
|
||||
api.getCatalogApi().publish(adminCatalogHref, PublishCatalogParams.builder().isPublished(true).build());
|
||||
api.getCatalogApi().publish(catalogAdminHref, PublishCatalogParams.builder().isPublished(true).build());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -284,7 +284,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
|
||||
HttpRequest deleteCatalog = HttpRequest.builder()
|
||||
.method("DELETE")
|
||||
.endpoint(adminCatalogHref)
|
||||
.endpoint(catalogAdminHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
|
@ -298,7 +298,7 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
public void testDeleteCatalogHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, deleteCatalog,
|
||||
deleteCatalogResponse);
|
||||
api.getCatalogApi().delete(adminCatalogHref);
|
||||
api.getCatalogApi().delete(catalogAdminHref);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -307,6 +307,8 @@ public class AdminCatalogApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
|||
resolveCatalogResponse, deleteCatalog, deleteCatalogResponse);
|
||||
api.getCatalogApi().delete(catalogUrn);
|
||||
}
|
||||
|
||||
//TODO: tests for access control!
|
||||
|
||||
public static final AdminCatalog createCatalogInOrgSource() {
|
||||
return AdminCatalog.builder()
|
||||
|
|
|
@ -23,14 +23,13 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.N
|
|||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_DEL;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_EQ;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
|
||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkControlAccessParams;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Collections;
|
||||
|
||||
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.Checks;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||
|
@ -38,9 +37,9 @@ import org.jclouds.vcloud.director.v1_5.domain.Owner;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.User;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.Org;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
|
||||
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
|
||||
import org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
@ -75,7 +74,7 @@ public class AdminCatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
@BeforeClass(alwaysRun = true)
|
||||
protected void setupRequiredApis() {
|
||||
catalogApi = adminContext.getApi().getCatalogApi();
|
||||
org = context.getApi().getOrgApi().getOrg(Iterables.get(context.getApi().getOrgApi().getOrgList(), 0).getHref());
|
||||
org = context.getApi().getOrgApi().get(Iterables.get(context.getApi().getOrgApi().list(), 0).getHref());
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
|
@ -115,10 +114,8 @@ public class AdminCatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
@Test(description = "PUT /admin/catalog/{id}/owner", dependsOnMethods = { "testGetCatalog" })
|
||||
public void updateCatalogOwner() {
|
||||
URI adminOrgHref = Iterables.find(context.getApi().resolveEntity(org.getId()).getLinks(),
|
||||
LinkPredicates.typeEquals(VCloudDirectorMediaType.ADMIN_ORG)).getHref();
|
||||
User newOwnerUser = randomTestUser("testUpdateCatalogOwner");
|
||||
newOwnerUser = adminContext.getApi().getUserApi().createUser(adminOrgHref, newOwnerUser);
|
||||
newOwnerUser = adminContext.getApi().getUserApi().createUserInOrg(newOwnerUser, org.getId());
|
||||
assertNotNull(newOwnerUser, "failed to create temp user to test updateCatalogOwner");
|
||||
|
||||
Owner oldOwner = owner;
|
||||
|
@ -131,12 +128,12 @@ public class AdminCatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
Checks.checkOwner(owner);
|
||||
assertTrue(
|
||||
equal(owner.toBuilder().links(Collections.<Link> emptySet()).build(),
|
||||
newOwner.toBuilder().user(newOwner.getUser().toBuilder().id(null).build()).build()),
|
||||
newOwner.toBuilder().user(newOwner.getUser()).build()),
|
||||
String.format(OBJ_FIELD_UPDATABLE, CATALOG, "owner"));
|
||||
} finally {
|
||||
catalogApi.setOwner(catalog.getId(), oldOwner);
|
||||
owner = catalogApi.getOwner(catalog.getId());
|
||||
adminContext.getApi().getUserApi().deleteUser(newOwnerUser.getHref());
|
||||
adminContext.getApi().getUserApi().delete(newOwnerUser.getHref());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -192,6 +189,27 @@ public class AdminCatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
String.format(OBJ_FIELD_EQ, CATALOG, "isPublished", true, catalog.isPublished()));
|
||||
}
|
||||
|
||||
@Test(description = "GET /org/{id}/catalog/{catalogId}/controlAccess", dependsOnMethods = { "testCreateCatalog" })
|
||||
public void testGetControlAccessControl() {
|
||||
// Call the method being tested
|
||||
ControlAccessParams params = catalogApi.getAccessControl(catalog.getId());
|
||||
|
||||
// Check params are well formed
|
||||
checkControlAccessParams(params);
|
||||
}
|
||||
|
||||
@Test(description = "POST /org/{id}/catalog/{catalogId}/action/controlAccess", dependsOnMethods = { "testCreateCatalog" })
|
||||
public void testModifyAccessControl() {
|
||||
// Setup params
|
||||
ControlAccessParams params = catalogApi.getAccessControl(catalog.getId());
|
||||
|
||||
// Call the method being tested
|
||||
ControlAccessParams modified = catalogApi.modifyAccessControl(catalog.getId(), params);
|
||||
|
||||
// Check params are well formed
|
||||
checkControlAccessParams(modified);
|
||||
}
|
||||
|
||||
@Test(description = "DELETE /admin/catalog/{id}", dependsOnMethods = { "testCreateCatalog" })
|
||||
public void testDeleteCatalog() {
|
||||
// assertEquals(catalog.getCatalogItems().getCatalogItems().size(), 0,
|
||||
|
@ -205,4 +223,6 @@ public class AdminCatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
deleteCatalog = catalogApi.get(deleteCatalog.getId());
|
||||
assertNull(deleteCatalog, String.format(OBJ_DEL, CATALOG, deleteCatalog != null ? deleteCatalog.toString() : ""));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -18,130 +18,234 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features.admin;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_NETWORK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_NETWORK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.DhcpService;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpAddresses;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpRanges;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkFeatures;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.SyslogServerSettings;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
|
||||
import org.jclouds.vcloud.director.v1_5.features.NetworkApiExpectTest;
|
||||
import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorAdminApiExpectTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.net.HttpHeaders;
|
||||
|
||||
/**
|
||||
* Test the {@link AdminNetworkApi} by observing its side effects.
|
||||
*
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Test(groups = { "unit", "admin" }, singleThreaded = true, testName = "AdminNetworkApiExpectTest")
|
||||
public class AdminNetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||
|
||||
static String network = "55a677cf-ab3f-48ae-b880-fab90421980c";
|
||||
static String networkUrn = "urn:vcloud:network:" + network;
|
||||
static URI networkHref = URI.create(endpoint + "/network/" + network);
|
||||
static URI networkAdminHref = URI.create(endpoint + "/admin/network/" + network);
|
||||
|
||||
Reference networkRef = Reference.builder()
|
||||
.href(URI.create(endpoint+"/admin/network/b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1"))
|
||||
.build();
|
||||
HttpRequest get = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(networkAdminHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
HttpResponse getResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/network/network.xml", ORG + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetNetworkHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
|
||||
assertEquals(api.getNetworkApi().get(networkAdminHref), network());
|
||||
}
|
||||
|
||||
HttpRequest resolveNetwork = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/entity/" + networkUrn)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
String networkEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
|
||||
.a("name", networkUrn)
|
||||
.a("id", networkUrn)
|
||||
.a("type", ENTITY)
|
||||
.a("href", endpoint + "/entity/" + networkUrn)
|
||||
.e("Link").a("rel", "alternate").a("type", NETWORK).a("href", networkHref.toString()).up()
|
||||
.e("Link").a("rel", "alternate").a("type", ADMIN_NETWORK).a("href", networkAdminHref.toString()).up());
|
||||
|
||||
HttpResponse resolveNetworkResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromStringWithContentType(networkEntity, ENTITY + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetNetworkWithOrgNetwork() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/admin/network/b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/admin/orgNetwork.xml", VCloudDirectorMediaType.ORG_NETWORK)
|
||||
.httpResponseBuilder().build());
|
||||
public void testGetNetworkUrn() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, get, getResponse);
|
||||
assertEquals(api.getNetworkApi().get(networkUrn), network());
|
||||
}
|
||||
|
||||
HttpRequest update = HttpRequest.builder()
|
||||
.method("PUT")
|
||||
.endpoint(networkAdminHref )
|
||||
.addHeader("Accept", TASK)
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.payload(payloadFromResourceWithContentType("/network/admin/updateNetworkSource.xml", ORG_NETWORK))
|
||||
.build();
|
||||
|
||||
OrgNetwork expected = orgNetwork();
|
||||
HttpResponse updateResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/network/admin/updateNetworkTask.xml", TASK))
|
||||
.build();
|
||||
|
||||
assertEquals(api.getNetworkApi().getNetwork(networkRef.getHref()), expected);
|
||||
@Test
|
||||
public void testUpdateNetworkHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, update, updateResponse);
|
||||
assertEquals(api.getNetworkApi().update(networkAdminHref, updateNetwork()), updateNetworkTask());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNetwork() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("PUT", "/admin/network/b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1")
|
||||
.xmlFilePayload("/network/admin/updateNetworkSource.xml", VCloudDirectorMediaType.ORG_NETWORK)
|
||||
.acceptMedia(VCloudDirectorMediaType.TASK)
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/admin/updateNetworkTask.xml", VCloudDirectorMediaType.TASK)
|
||||
.httpResponseBuilder().build());
|
||||
|
||||
Task expected = updateNetworkTask();
|
||||
|
||||
assertEquals(api.getNetworkApi().updateNetwork(networkRef.getHref(), updateNetwork()), expected);
|
||||
public void testUpdateNetworkUrn() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, update, updateResponse);
|
||||
assertEquals(api.getNetworkApi().update(networkUrn, updateNetwork()), updateNetworkTask());
|
||||
}
|
||||
|
||||
@Test(enabled = false)
|
||||
public void testResetNetwork() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("POST", "/admin/network/b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1/action/reset")
|
||||
.acceptMedia(VCloudDirectorMediaType.TASK)
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/network/admin/resetNetworkTask.xml", VCloudDirectorMediaType.TASK)
|
||||
.httpResponseBuilder().build());
|
||||
HttpRequest reset = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint(networkAdminHref + "/action/reset")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
Task expected = resetNetworkTask();
|
||||
HttpResponse resetResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/network/admin/resetNetworkTask.xml", TASK))
|
||||
.build();
|
||||
|
||||
assertEquals(api.getNetworkApi().resetNetwork(networkRef.getHref()), expected);
|
||||
@Test
|
||||
public void testResetNetworkHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, reset, resetResponse);
|
||||
assertEquals(api.getNetworkApi().reset(networkAdminHref), resetNetworkTask());
|
||||
}
|
||||
|
||||
public final OrgNetwork orgNetwork() {
|
||||
return NetworkApiExpectTest.orgNetwork().toBuilder()
|
||||
.href(toAdminUri(NetworkApiExpectTest.orgNetwork().getHref()))
|
||||
.links(ImmutableSet.of(
|
||||
Link.builder()
|
||||
.rel("alternate")
|
||||
.type("application/vnd.vmware.vcloud.orgNetwork+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
|
||||
.build(),
|
||||
Link.builder()
|
||||
.rel("edit")
|
||||
.type("application/vnd.vmware.admin.orgNetwork+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
|
||||
.build(),
|
||||
Link.builder()
|
||||
.rel("up")
|
||||
.type("application/vnd.vmware.admin.organization+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build(),
|
||||
Link.builder()
|
||||
.rel("repair")
|
||||
.type("application/vnd.vmware.admin.orgNetwork+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/action/reset"))
|
||||
.build(),
|
||||
Link.builder()
|
||||
.rel("down")
|
||||
.type("application/vnd.vmware.vcloud.metadata+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/metadata"))
|
||||
.build()))
|
||||
.networkPool(Reference.builder()
|
||||
.type("application/vnd.vmware.admin.networkPool+xml")
|
||||
.name("vcdni01")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/extension/networkPool/e86bfdb5-b3e0-4ece-9125-e764ac64c95c"))
|
||||
@Test
|
||||
public void testResetNetworkUrn() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, reset, resetResponse);
|
||||
assertEquals(api.getNetworkApi().reset(networkUrn), resetNetworkTask());
|
||||
}
|
||||
|
||||
public static OrgNetwork network() {
|
||||
return OrgNetwork.builder()
|
||||
.name("ilsolation01-Jclouds")
|
||||
.id("urn:vcloud:network:f3ba8256-6f48-4512-aad6-600e85b4dc38")
|
||||
.type("application/vnd.vmware.vcloud.orgNetwork+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
|
||||
.link(Link.builder()
|
||||
.rel("up")
|
||||
.type("application/vnd.vmware.vcloud.org+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build())
|
||||
.link(Link.builder()
|
||||
.rel("down")
|
||||
.type("application/vnd.vmware.vcloud.metadata+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/metadata"))
|
||||
.build())
|
||||
.description("")
|
||||
.configuration(NetworkConfiguration.builder()
|
||||
.ipScope(IpScope.builder()
|
||||
.isInherited(false)
|
||||
.gateway("192.168.1.1")
|
||||
.netmask("255.255.255.0")
|
||||
.dns1("173.240.111.52")
|
||||
.dns2("173.240.111.53")
|
||||
.ipRanges(IpRanges.builder()
|
||||
.ipRange(IpRange.builder()
|
||||
.startAddress("192.168.1.100")
|
||||
.endAddress("192.168.1.199")
|
||||
.build())
|
||||
.build())
|
||||
.build())
|
||||
.fenceMode(FenceMode.ISOLATED)
|
||||
.retainNetInfoAcrossDeployments(false)
|
||||
.features(NetworkFeatures.builder()
|
||||
.service(DhcpService.builder()
|
||||
.enabled(false)
|
||||
.defaultLeaseTime(3600)
|
||||
.maxLeaseTime(7200)
|
||||
.ipRange(IpRange.builder()
|
||||
.startAddress("192.168.1.2")
|
||||
.endAddress("192.168.1.99")
|
||||
.build())
|
||||
.build())
|
||||
.build())
|
||||
.syslogServerSettings(SyslogServerSettings.builder().build())
|
||||
.build())
|
||||
.allowedExternalIpAddresses(IpAddresses.builder().build())
|
||||
.build();
|
||||
}
|
||||
|
||||
public final OrgNetwork updateNetwork() {
|
||||
return orgNetwork().toBuilder()
|
||||
return network().toBuilder()
|
||||
|
||||
.build();
|
||||
}
|
||||
|
||||
public final Task resetNetworkTask() {
|
||||
return Task.builder()
|
||||
|
||||
.build();
|
||||
.status("running")
|
||||
.startTime(dateService.iso8601DateParse("2012-03-14T12:39:23.720-04:00"))
|
||||
.operationName("networkResetNetwork")
|
||||
.operation("Resetting Network ilsolation01-Jclouds(f3ba8256-6f48-4512-aad6-600e85b4dc38)")
|
||||
.expiryTime(dateService.iso8601DateParse("2012-06-12T12:39:23.720-04:00"))
|
||||
.name("task")
|
||||
.id("urn:vcloud:task:49d2e180-7921-4902-ac39-b4ff5406bb94")
|
||||
.type("application/vnd.vmware.vcloud.task+xml")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/task/49d2e180-7921-4902-ac39-b4ff5406bb94"))
|
||||
.link(Link.builder()
|
||||
.rel("task:cancel")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/task/49d2e180-7921-4902-ac39-b4ff5406bb94/action/cancel"))
|
||||
.build())
|
||||
.owner(Reference.builder()
|
||||
.type("application/vnd.vmware.vcloud.network+xml")
|
||||
.name("ilsolation01-Jclouds")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"))
|
||||
.build())
|
||||
.user(Reference.builder()
|
||||
.type("application/vnd.vmware.admin.user+xml")
|
||||
.name("dan@cloudsoftcorp.com")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/ae75edd2-12de-414c-8e85-e6ea10442c08"))
|
||||
.build())
|
||||
.org(Reference.builder()
|
||||
.type("application/vnd.vmware.vcloud.org+xml")
|
||||
.name("JClouds")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build())
|
||||
.build();
|
||||
}
|
||||
|
||||
public final Task updateNetworkTask() {
|
||||
|
|
|
@ -20,18 +20,15 @@ package org.jclouds.vcloud.director.v1_5.features.admin;
|
|||
|
||||
import static com.google.common.base.Objects.equal;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REQUIRED_VALUE_OBJECT_FMT;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Checks;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.ExternalNetwork;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
|
||||
|
@ -60,24 +57,19 @@ public class AdminNetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
*/
|
||||
private AdminNetworkApi networkApi;
|
||||
|
||||
/*
|
||||
* Shared state between dependant tests.
|
||||
*/
|
||||
Reference networkRef;
|
||||
Network network;
|
||||
private Network network;
|
||||
|
||||
@Override
|
||||
@BeforeClass(alwaysRun = true)
|
||||
protected void setupRequiredApis() {
|
||||
networkApi = adminContext.getApi().getNetworkApi();
|
||||
networkRef = Reference.builder().href(networkURI).build().toAdminReference(endpoint);
|
||||
}
|
||||
|
||||
@Test(description = "GET /admin/network/{id}")
|
||||
public void testGetNetwork() {
|
||||
//TODO: test both org and external networks
|
||||
assertNotNull(networkRef, String.format(OBJ_REQ_LIVE, NETWORK));
|
||||
network = networkApi.getNetwork(networkRef.getHref());
|
||||
network = lazyGetNetwork();
|
||||
|
||||
|
||||
if(network instanceof ExternalNetwork) {
|
||||
Checks.checkExternalNetwork(Network.<ExternalNetwork>toSubType(network));
|
||||
|
@ -93,7 +85,7 @@ public class AdminNetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
@Test(description = "PUT /admin/network/{id}" )
|
||||
public void testUpdateNetwork() {
|
||||
//TODO: ensure network instanceof OrgNetwork, may require queries
|
||||
assertTrue(network instanceof OrgNetwork, String.format(REF_REQ_LIVE, "OrgNetwork"));
|
||||
assertTrue(network instanceof OrgNetwork, String.format(URN_REQ_LIVE, "OrgNetwork"));
|
||||
|
||||
OrgNetwork oldNetwork = Network.<OrgNetwork>toSubType(network)
|
||||
.toBuilder()
|
||||
|
@ -103,10 +95,10 @@ public class AdminNetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
OrgNetwork updateNetwork = getMutatedOrgNetwork(oldNetwork);
|
||||
|
||||
try {
|
||||
Task updateNetworkTask = networkApi.updateNetwork(network.getHref(), updateNetwork);
|
||||
Task updateNetworkTask = networkApi.update(networkUrn, updateNetwork);
|
||||
Checks.checkTask(updateNetworkTask);
|
||||
assertTrue(retryTaskSuccess.apply(updateNetworkTask), String.format(TASK_COMPLETE_TIMELY, "updateNetworkTask"));
|
||||
network = networkApi.getNetwork(network.getHref());
|
||||
network = networkApi.get(networkUrn);
|
||||
|
||||
Checks.checkOrgNetwork(Network.<OrgNetwork>toSubType(network));
|
||||
|
||||
|
@ -140,20 +132,20 @@ public class AdminNetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
// updateNetwork.getAllowedExternalIpAddresses()),
|
||||
// String.format(OBJ_FIELD_UPDATABLE, NETWORK, "allowedExternalIpAddresses"));
|
||||
} finally {
|
||||
Task updateNetworkTask = networkApi.updateNetwork(network.getHref(), oldNetwork);
|
||||
Task updateNetworkTask = networkApi.update(networkUrn, oldNetwork);
|
||||
Checks.checkTask(updateNetworkTask);
|
||||
assertTrue(retryTaskSuccess.apply(updateNetworkTask), String.format(TASK_COMPLETE_TIMELY, "updateNetworkTask"));
|
||||
network = networkApi.getNetwork(network.getHref());
|
||||
network = networkApi.get(networkUrn);
|
||||
}
|
||||
}
|
||||
|
||||
@Test(description = "POST /admin/network/{id}/action/reset")
|
||||
public void testResetNetwork() {
|
||||
// TODO assert that network is deployed somehow
|
||||
Task resetNetworkTask = networkApi.resetNetwork(networkRef.getHref());
|
||||
Task resetNetworkTask = networkApi.reset(networkUrn);
|
||||
Checks.checkTask(resetNetworkTask);
|
||||
assertTrue(retryTaskSuccess.apply(resetNetworkTask), String.format(TASK_COMPLETE_TIMELY, "resetNetworkTask"));
|
||||
network = networkApi.getNetwork(network.getHref());
|
||||
network = networkApi.get(networkUrn);
|
||||
|
||||
Checks.checkOrgNetwork(Network.<OrgNetwork>toSubType(network));
|
||||
// TODO: other assertions about the reset? that network is deployed when task is complete, for example
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -20,12 +20,9 @@ package org.jclouds.vcloud.director.v1_5.features.admin;
|
|||
|
||||
import static com.google.common.base.Objects.equal;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Checks;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.network.SmtpServerSettings;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.AdminOrg;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.org.OrgEmailSettings;
|
||||
|
@ -39,16 +36,14 @@ import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorApiLiveTest;
|
|||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
/**
|
||||
* Tests live behavior of {@link AdminGroupApi}.
|
||||
* Tests live behavior of {@link AdminOrgApi}.
|
||||
*
|
||||
* @author danikov
|
||||
*/
|
||||
@Test(groups = { "live", "admin" }, singleThreaded = true, testName = "AdminOrgApiLiveTest")
|
||||
public class AdminOrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
||||
|
||||
|
||||
public static final String ORG = "admin org";
|
||||
|
||||
/*
|
||||
|
@ -60,7 +55,6 @@ public class AdminOrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
/*
|
||||
* Shared state between dependant tests.
|
||||
*/
|
||||
private Reference orgRef;
|
||||
private OrgSettings settings;
|
||||
private OrgEmailSettings emailSettings;
|
||||
private OrgGeneralSettings generalSettings;
|
||||
|
@ -73,338 +67,278 @@ public class AdminOrgApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
@BeforeClass(alwaysRun = true)
|
||||
public void setupRequiredApis() {
|
||||
orgApi = adminContext.getApi().getOrgApi();
|
||||
orgRef = Iterables.getFirst(orgApi.getOrgList(), null).toAdminReference(endpoint);
|
||||
assertNotNull(orgRef, String.format(REF_REQ_LIVE, "admin org"));
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "GET /admin/org/{id}")
|
||||
public void testGetAdminOrg() {
|
||||
AdminOrg adminOrg = orgApi.getOrg(orgRef.getHref());
|
||||
|
||||
AdminOrg adminOrg = orgApi.get(org.getId());
|
||||
|
||||
Checks.checkAdminOrg(adminOrg);
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "GET /admin/org/{id}/settings/email")
|
||||
public void testGetEmailSettings() {
|
||||
emailSettings = orgApi.getEmailSettings(orgRef.getHref());
|
||||
|
||||
emailSettings = orgApi.getEmailSettings(org.getId());
|
||||
|
||||
Checks.checkEmailSettings(emailSettings);
|
||||
}
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/email",
|
||||
dependsOnMethods = { "testGetEmailSettings" })
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/email", dependsOnMethods = { "testGetEmailSettings" })
|
||||
public void testUpdateEmailSettings() {
|
||||
boolean isDefaultSmtpServer = emailSettings.isDefaultSmtpServer();
|
||||
boolean isDefaultOrgEmail = emailSettings.isDefaultOrgEmail();
|
||||
String oldFromEmailAddress = emailSettings.getFromEmailAddress();
|
||||
String newFromEmailAddress = "test@test.com";
|
||||
String oldDefaultSubjectPrefix = emailSettings.getDefaultSubjectPrefix();
|
||||
String newDefaultSubjectPrefix = "new"+oldDefaultSubjectPrefix;
|
||||
String newDefaultSubjectPrefix = "new" + oldDefaultSubjectPrefix;
|
||||
boolean isAlertEmailToAllAdmins = emailSettings.isAlertEmailToAllAdmins();
|
||||
SmtpServerSettings oldSmtpServerSettings = emailSettings.getSmtpServerSettings();
|
||||
SmtpServerSettings newSmtpServerSettings = oldSmtpServerSettings.toBuilder()
|
||||
.useAuthentication(!oldSmtpServerSettings.useAuthentication())
|
||||
.host("new"+oldSmtpServerSettings.getHost())
|
||||
.username("new"+oldSmtpServerSettings.getUsername())
|
||||
.password("new"+oldSmtpServerSettings.getPassword())
|
||||
.build();
|
||||
|
||||
.useAuthentication(!oldSmtpServerSettings.useAuthentication())
|
||||
.host("new" + oldSmtpServerSettings.getHost()).username("new" + oldSmtpServerSettings.getUsername())
|
||||
.password("new" + oldSmtpServerSettings.getPassword()).build();
|
||||
|
||||
try {
|
||||
OrgEmailSettings newEmailSettings = emailSettings.toBuilder()
|
||||
.isDefaultSmtpServer(!isDefaultSmtpServer)
|
||||
.isDefaultOrgEmail(!isDefaultOrgEmail)
|
||||
.fromEmailAddress(newFromEmailAddress)
|
||||
.defaultSubjectPrefix(newDefaultSubjectPrefix)
|
||||
.isAlertEmailToAllAdmins(!isAlertEmailToAllAdmins)
|
||||
.smtpServerSettings(newSmtpServerSettings)
|
||||
.build();
|
||||
|
||||
emailSettings = orgApi.updateEmailSettings(
|
||||
orgRef.getHref(), newEmailSettings);
|
||||
|
||||
assertTrue(equal(emailSettings.isDefaultSmtpServer(), !isDefaultSmtpServer),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"emailSettings", "isDefaultSmtpServer"));
|
||||
assertTrue(equal(emailSettings.isDefaultOrgEmail(), !isDefaultOrgEmail),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"emailSettings", "isDefaultOrgEmail"));
|
||||
assertTrue(equal(emailSettings.getFromEmailAddress(), newFromEmailAddress),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"emailSettings", "fromEmailAddress"));
|
||||
assertTrue(equal(emailSettings.getDefaultSubjectPrefix(), newDefaultSubjectPrefix),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"emailSettings", "defaultSubjectPrefix"));
|
||||
assertTrue(equal(emailSettings.isAlertEmailToAllAdmins(), !isAlertEmailToAllAdmins),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"emailSettings", "isAlertEmailToAllAdmins"));
|
||||
assertTrue(equal(emailSettings.getSmtpServerSettings(), newSmtpServerSettings),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"emailSettings", "smtpServerSettings"));
|
||||
|
||||
//TODO negative tests?
|
||||
|
||||
OrgEmailSettings newEmailSettings = emailSettings.toBuilder().isDefaultSmtpServer(!isDefaultSmtpServer)
|
||||
.isDefaultOrgEmail(!isDefaultOrgEmail).fromEmailAddress(newFromEmailAddress)
|
||||
.defaultSubjectPrefix(newDefaultSubjectPrefix).isAlertEmailToAllAdmins(!isAlertEmailToAllAdmins)
|
||||
.smtpServerSettings(newSmtpServerSettings).build();
|
||||
|
||||
emailSettings = orgApi.updateEmailSettings(org.getId(), newEmailSettings);
|
||||
|
||||
assertTrue(equal(emailSettings.isDefaultSmtpServer(), !isDefaultSmtpServer),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "isDefaultSmtpServer"));
|
||||
assertTrue(equal(emailSettings.isDefaultOrgEmail(), !isDefaultOrgEmail),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "isDefaultOrgEmail"));
|
||||
assertTrue(equal(emailSettings.getFromEmailAddress(), newFromEmailAddress),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "fromEmailAddress"));
|
||||
assertTrue(equal(emailSettings.getDefaultSubjectPrefix(), newDefaultSubjectPrefix),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "defaultSubjectPrefix"));
|
||||
assertTrue(equal(emailSettings.isAlertEmailToAllAdmins(), !isAlertEmailToAllAdmins),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "isAlertEmailToAllAdmins"));
|
||||
assertTrue(equal(emailSettings.getSmtpServerSettings(), newSmtpServerSettings),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "emailSettings", "smtpServerSettings"));
|
||||
|
||||
// TODO negative tests?
|
||||
|
||||
Checks.checkEmailSettings(emailSettings);
|
||||
} finally {
|
||||
emailSettings = emailSettings.toBuilder()
|
||||
.isDefaultSmtpServer(isDefaultSmtpServer)
|
||||
.isDefaultOrgEmail(isDefaultOrgEmail)
|
||||
.fromEmailAddress(oldFromEmailAddress)
|
||||
.defaultSubjectPrefix(oldDefaultSubjectPrefix)
|
||||
.isAlertEmailToAllAdmins(isAlertEmailToAllAdmins)
|
||||
.smtpServerSettings(oldSmtpServerSettings)
|
||||
.build();
|
||||
|
||||
emailSettings = orgApi.updateEmailSettings(
|
||||
orgRef.getHref(), emailSettings);
|
||||
emailSettings = emailSettings.toBuilder().isDefaultSmtpServer(isDefaultSmtpServer)
|
||||
.isDefaultOrgEmail(isDefaultOrgEmail).fromEmailAddress(oldFromEmailAddress)
|
||||
.defaultSubjectPrefix(oldDefaultSubjectPrefix).isAlertEmailToAllAdmins(isAlertEmailToAllAdmins)
|
||||
.smtpServerSettings(oldSmtpServerSettings).build();
|
||||
|
||||
emailSettings = orgApi.updateEmailSettings(org.getId(), emailSettings);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "GET /admin/org/{id}/settings/general")
|
||||
public void testGetGeneralSettings() {
|
||||
generalSettings = orgApi.getGeneralSettings(orgRef.getHref());
|
||||
|
||||
generalSettings = orgApi.getGeneralSettings(org.getId());
|
||||
|
||||
Checks.checkGeneralSettings(generalSettings);
|
||||
}
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/general",
|
||||
dependsOnMethods = { "testGetGeneralSettings" } )
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/general", dependsOnMethods = { "testGetGeneralSettings" })
|
||||
public void testUpdateGeneralSettings() {
|
||||
// FIXME: canPublishCatalogs does not update
|
||||
//boolean canPublishCatalogs = generalSettings.canPublishCatalogs();
|
||||
// boolean canPublishCatalogs = generalSettings.canPublishCatalogs();
|
||||
Integer deployedVMQuota = generalSettings.getDeployedVMQuota();
|
||||
Integer storedVmQuota = generalSettings.getStoredVmQuota();
|
||||
boolean useServerBootSequence = generalSettings.useServerBootSequence();
|
||||
Integer delayAfterPowerOnSeconds = generalSettings.getDelayAfterPowerOnSeconds();
|
||||
|
||||
|
||||
try {
|
||||
OrgGeneralSettings newGeneralSettings = generalSettings.toBuilder()
|
||||
//.canPublishCatalogs(!canPublishCatalogs)
|
||||
.deployedVMQuota(deployedVMQuota+1)
|
||||
.storedVmQuota(storedVmQuota+1)
|
||||
.useServerBootSequence(!useServerBootSequence)
|
||||
.delayAfterPowerOnSeconds(delayAfterPowerOnSeconds+1)
|
||||
.build();
|
||||
|
||||
generalSettings = orgApi.updateGeneralSettings(
|
||||
orgRef.getHref(), newGeneralSettings);
|
||||
|
||||
// assertTrue(equal(generalSettings.canPublishCatalogs(), !canPublishCatalogs),
|
||||
// String.format(OBJ_FIELD_UPDATABLE,
|
||||
// "generalSettings", "canPublishCatalogs"));
|
||||
assertTrue(equal(generalSettings.getDeployedVMQuota(), deployedVMQuota+1),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"generalSettings", "deployedVMQuota"));
|
||||
assertTrue(equal(generalSettings.getStoredVmQuota(), storedVmQuota+1),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"generalSettings", "storedVmQuota"));
|
||||
assertTrue(equal(generalSettings.useServerBootSequence(), !useServerBootSequence),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"generalSettings", "useServerBootSequence"));
|
||||
assertTrue(equal(generalSettings.getDelayAfterPowerOnSeconds(), delayAfterPowerOnSeconds+1),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"generalSettings", "delayAfterPowerOnSeconds"));
|
||||
|
||||
//TODO negative tests?
|
||||
|
||||
OrgGeneralSettings newGeneralSettings = generalSettings
|
||||
.toBuilder()
|
||||
// .canPublishCatalogs(!canPublishCatalogs)
|
||||
.deployedVMQuota(deployedVMQuota + 1).storedVmQuota(storedVmQuota + 1)
|
||||
.useServerBootSequence(!useServerBootSequence).delayAfterPowerOnSeconds(delayAfterPowerOnSeconds + 1)
|
||||
.build();
|
||||
|
||||
generalSettings = orgApi.updateGeneralSettings(org.getId(), newGeneralSettings);
|
||||
|
||||
// assertTrue(equal(generalSettings.canPublishCatalogs(), !canPublishCatalogs),
|
||||
// String.format(OBJ_FIELD_UPDATABLE,
|
||||
// "generalSettings", "canPublishCatalogs"));
|
||||
assertTrue(equal(generalSettings.getDeployedVMQuota(), deployedVMQuota + 1),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "generalSettings", "deployedVMQuota"));
|
||||
assertTrue(equal(generalSettings.getStoredVmQuota(), storedVmQuota + 1),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "generalSettings", "storedVmQuota"));
|
||||
assertTrue(equal(generalSettings.useServerBootSequence(), !useServerBootSequence),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "generalSettings", "useServerBootSequence"));
|
||||
assertTrue(equal(generalSettings.getDelayAfterPowerOnSeconds(), delayAfterPowerOnSeconds + 1),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "generalSettings", "delayAfterPowerOnSeconds"));
|
||||
|
||||
// TODO negative tests?
|
||||
|
||||
Checks.checkGeneralSettings(generalSettings);
|
||||
} finally {
|
||||
generalSettings = generalSettings.toBuilder()
|
||||
// .canPublishCatalogs(canPublishCatalogs)
|
||||
.deployedVMQuota(deployedVMQuota)
|
||||
.storedVmQuota(storedVmQuota)
|
||||
.useServerBootSequence(useServerBootSequence)
|
||||
.delayAfterPowerOnSeconds(delayAfterPowerOnSeconds)
|
||||
.build();
|
||||
|
||||
generalSettings = orgApi.updateGeneralSettings(
|
||||
orgRef.getHref(), generalSettings);
|
||||
generalSettings = generalSettings
|
||||
.toBuilder()
|
||||
// .canPublishCatalogs(canPublishCatalogs)
|
||||
.deployedVMQuota(deployedVMQuota).storedVmQuota(storedVmQuota)
|
||||
.useServerBootSequence(useServerBootSequence).delayAfterPowerOnSeconds(delayAfterPowerOnSeconds)
|
||||
.build();
|
||||
|
||||
generalSettings = orgApi.updateGeneralSettings(org.getId(), generalSettings);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "GET /admin/org/{id}/settings/ldap")
|
||||
public void testGetLdapSettings() {
|
||||
ldapSettings = orgApi.getLdapSettings(orgRef.getHref());
|
||||
|
||||
ldapSettings = orgApi.getLdapSettings(org.getId());
|
||||
|
||||
Checks.checkLdapSettings(ldapSettings);
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "GET /admin/org/{id}/settings/passwordPolicy")
|
||||
public void testGetPasswordPolicy() {
|
||||
passwordPolicy = orgApi.getPasswordPolicy(orgRef.getHref());
|
||||
|
||||
passwordPolicy = orgApi.getPasswordPolicy(org.getId());
|
||||
|
||||
Checks.checkPasswordPolicySettings(passwordPolicy);
|
||||
}
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/passwordPolicy",
|
||||
dependsOnMethods = { "testGetPasswordPolicy" })
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/passwordPolicy", dependsOnMethods = { "testGetPasswordPolicy" })
|
||||
public void testUpdatePasswordPolicy() {
|
||||
boolean accountLockoutEnabled = passwordPolicy.isAccountLockoutEnabled();
|
||||
Integer invalidLoginsBeforeLockout = passwordPolicy.getInvalidLoginsBeforeLockout();
|
||||
Integer accountLockoutIntervalMinutes = passwordPolicy.getAccountLockoutIntervalMinutes();
|
||||
|
||||
|
||||
try {
|
||||
OrgPasswordPolicySettings newPasswordPolicy = passwordPolicy.toBuilder()
|
||||
.accountLockoutEnabled(!accountLockoutEnabled)
|
||||
.invalidLoginsBeforeLockout(invalidLoginsBeforeLockout+1)
|
||||
.accountLockoutIntervalMinutes(accountLockoutIntervalMinutes+1)
|
||||
.build();
|
||||
|
||||
passwordPolicy = orgApi.updatePasswordPolicy(
|
||||
orgRef.getHref(), newPasswordPolicy);
|
||||
|
||||
assertTrue(equal(passwordPolicy.isAccountLockoutEnabled(), !accountLockoutEnabled),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"PasswordPolicySettings", "deleteOnStorageLeaseExpiration"));
|
||||
assertTrue(equal(passwordPolicy.getInvalidLoginsBeforeLockout(), invalidLoginsBeforeLockout+1),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"PasswordPolicySettings", "storageLeaseSeconds"));
|
||||
assertTrue(equal(passwordPolicy.getAccountLockoutIntervalMinutes(), accountLockoutIntervalMinutes+1),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"PasswordPolicySettings", "deploymentLeaseSeconds"));
|
||||
|
||||
//TODO negative tests?
|
||||
|
||||
.accountLockoutEnabled(!accountLockoutEnabled)
|
||||
.invalidLoginsBeforeLockout(invalidLoginsBeforeLockout + 1)
|
||||
.accountLockoutIntervalMinutes(accountLockoutIntervalMinutes + 1).build();
|
||||
|
||||
passwordPolicy = orgApi.updatePasswordPolicy(org.getId(), newPasswordPolicy);
|
||||
|
||||
assertTrue(equal(passwordPolicy.isAccountLockoutEnabled(), !accountLockoutEnabled),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "PasswordPolicySettings", "deleteOnStorageLeaseExpiration"));
|
||||
assertTrue(equal(passwordPolicy.getInvalidLoginsBeforeLockout(), invalidLoginsBeforeLockout + 1),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "PasswordPolicySettings", "storageLeaseSeconds"));
|
||||
assertTrue(equal(passwordPolicy.getAccountLockoutIntervalMinutes(), accountLockoutIntervalMinutes + 1),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "PasswordPolicySettings", "deploymentLeaseSeconds"));
|
||||
|
||||
// TODO negative tests?
|
||||
|
||||
Checks.checkPasswordPolicySettings(passwordPolicy);
|
||||
} finally {
|
||||
passwordPolicy = passwordPolicy.toBuilder()
|
||||
.accountLockoutEnabled(accountLockoutEnabled)
|
||||
.invalidLoginsBeforeLockout(invalidLoginsBeforeLockout)
|
||||
.accountLockoutIntervalMinutes(accountLockoutIntervalMinutes)
|
||||
.build();
|
||||
|
||||
passwordPolicy = orgApi.updatePasswordPolicy(
|
||||
orgRef.getHref(), passwordPolicy);
|
||||
passwordPolicy = passwordPolicy.toBuilder().accountLockoutEnabled(accountLockoutEnabled)
|
||||
.invalidLoginsBeforeLockout(invalidLoginsBeforeLockout)
|
||||
.accountLockoutIntervalMinutes(accountLockoutIntervalMinutes).build();
|
||||
|
||||
passwordPolicy = orgApi.updatePasswordPolicy(org.getId(), passwordPolicy);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "GET /admin/org/{id}/settings/vAppLeaseSettings")
|
||||
public void testGetVAppLeaseSettings() {
|
||||
vAppLeaseSettings = orgApi.getVAppLeaseSettings(orgRef.getHref());
|
||||
|
||||
vAppLeaseSettings = orgApi.getVAppLeaseSettings(org.getId());
|
||||
|
||||
Checks.checkVAppLeaseSettings(vAppLeaseSettings);
|
||||
}
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/vAppLeaseSettings",
|
||||
dependsOnMethods = { "testGetVAppLeaseSettings" } ) // FIXME: fails with 403 forbidden
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/vAppLeaseSettings", dependsOnMethods = { "testGetVAppLeaseSettings" })
|
||||
// FIXME: fails with 403 forbidden
|
||||
public void testUpdateVAppLeaseSettings() {
|
||||
boolean deleteOnStorageLeaseExpiration = vAppLeaseSettings.deleteOnStorageLeaseExpiration();
|
||||
Integer storageLeaseSeconds = vAppLeaseSettings.getStorageLeaseSeconds();
|
||||
Integer deploymentLeaseSeconds = vAppLeaseSettings.getDeploymentLeaseSeconds();
|
||||
|
||||
|
||||
try {
|
||||
OrgLeaseSettings newVAppLeaseSettings = vAppLeaseSettings.toBuilder()
|
||||
.deleteOnStorageLeaseExpiration(!deleteOnStorageLeaseExpiration)
|
||||
.storageLeaseSeconds(storageLeaseSeconds+1)
|
||||
.deploymentLeaseSeconds(deploymentLeaseSeconds+1)
|
||||
.build();
|
||||
|
||||
vAppLeaseSettings = orgApi.updateVAppLeaseSettings(
|
||||
orgRef.getHref(), newVAppLeaseSettings);
|
||||
|
||||
assertTrue(equal(vAppLeaseSettings.deleteOnStorageLeaseExpiration(), !deleteOnStorageLeaseExpiration),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"vAppLeaseSettings", "deleteOnStorageLeaseExpiration"));
|
||||
assertTrue(equal(vAppLeaseSettings.getStorageLeaseSeconds(), storageLeaseSeconds+1),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"vAppLeaseSettings", "storageLeaseSeconds"));
|
||||
assertTrue(equal(vAppLeaseSettings.getDeploymentLeaseSeconds(), deploymentLeaseSeconds+1),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"vAppLeaseSettings", "deploymentLeaseSeconds"));
|
||||
|
||||
//TODO negative tests?
|
||||
|
||||
.deleteOnStorageLeaseExpiration(!deleteOnStorageLeaseExpiration)
|
||||
.storageLeaseSeconds(storageLeaseSeconds + 1).deploymentLeaseSeconds(deploymentLeaseSeconds + 1)
|
||||
.build();
|
||||
|
||||
vAppLeaseSettings = orgApi.updateVAppLeaseSettings(org.getId(), newVAppLeaseSettings);
|
||||
|
||||
assertTrue(equal(vAppLeaseSettings.deleteOnStorageLeaseExpiration(), !deleteOnStorageLeaseExpiration),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "vAppLeaseSettings", "deleteOnStorageLeaseExpiration"));
|
||||
assertTrue(equal(vAppLeaseSettings.getStorageLeaseSeconds(), storageLeaseSeconds + 1),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "vAppLeaseSettings", "storageLeaseSeconds"));
|
||||
assertTrue(equal(vAppLeaseSettings.getDeploymentLeaseSeconds(), deploymentLeaseSeconds + 1),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "vAppLeaseSettings", "deploymentLeaseSeconds"));
|
||||
|
||||
// TODO negative tests?
|
||||
|
||||
Checks.checkVAppLeaseSettings(vAppLeaseSettings);
|
||||
} finally {
|
||||
vAppLeaseSettings = vAppLeaseSettings.toBuilder()
|
||||
.deleteOnStorageLeaseExpiration(deleteOnStorageLeaseExpiration)
|
||||
.storageLeaseSeconds(storageLeaseSeconds)
|
||||
.deploymentLeaseSeconds(deploymentLeaseSeconds)
|
||||
.build();
|
||||
|
||||
vAppLeaseSettings = orgApi.updateVAppLeaseSettings(
|
||||
orgRef.getHref(), vAppLeaseSettings);
|
||||
.deleteOnStorageLeaseExpiration(deleteOnStorageLeaseExpiration)
|
||||
.storageLeaseSeconds(storageLeaseSeconds).deploymentLeaseSeconds(deploymentLeaseSeconds).build();
|
||||
|
||||
vAppLeaseSettings = orgApi.updateVAppLeaseSettings(org.getId(), vAppLeaseSettings);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "GET /admin/org/{id}/settings/vAppTemplateLeaseSettings")
|
||||
public void testGetVAppTemplateLeaseSettings() {
|
||||
vAppTemplateLeaseSettings = orgApi.getVAppTemplateLeaseSettings(orgRef.getHref());
|
||||
|
||||
vAppTemplateLeaseSettings = orgApi.getVAppTemplateLeaseSettings(org.getId());
|
||||
|
||||
Checks.checkVAppTemplateLeaseSettings(vAppTemplateLeaseSettings);
|
||||
}
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/vAppTemplateLeaseSettings",
|
||||
dependsOnMethods = { "testGetVAppTemplateLeaseSettings" }) // FIXME: fails with 403 forbidden
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings/vAppTemplateLeaseSettings", dependsOnMethods = { "testGetVAppTemplateLeaseSettings" })
|
||||
// FIXME: fails with 403 forbidden
|
||||
public void testUpdateVAppTemplateLeaseSettings() {
|
||||
boolean deleteOnStorageLeaseExpiration = vAppTemplateLeaseSettings.deleteOnStorageLeaseExpiration();
|
||||
Integer storageLeaseSeconds = vAppTemplateLeaseSettings.getStorageLeaseSeconds();
|
||||
|
||||
|
||||
try {
|
||||
OrgVAppTemplateLeaseSettings newVAppTemplateLeaseSettings = vAppTemplateLeaseSettings.toBuilder()
|
||||
.deleteOnStorageLeaseExpiration(!deleteOnStorageLeaseExpiration)
|
||||
.storageLeaseSeconds(storageLeaseSeconds+1)
|
||||
.build();
|
||||
|
||||
vAppTemplateLeaseSettings = orgApi.updateVAppTemplateLeaseSettings(
|
||||
orgRef.getHref(), newVAppTemplateLeaseSettings);
|
||||
|
||||
assertTrue(equal(vAppTemplateLeaseSettings.deleteOnStorageLeaseExpiration(), !deleteOnStorageLeaseExpiration),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"vAppTemplateLeaseSettings", "deleteOnStorageLeaseExpiration"));
|
||||
assertTrue(equal(vAppTemplateLeaseSettings.getStorageLeaseSeconds(), storageLeaseSeconds+1),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"vAppTemplateLeaseSettings", "storageLeaseSeconds"));
|
||||
|
||||
//TODO negative tests?
|
||||
|
||||
.deleteOnStorageLeaseExpiration(!deleteOnStorageLeaseExpiration)
|
||||
.storageLeaseSeconds(storageLeaseSeconds + 1).build();
|
||||
|
||||
vAppTemplateLeaseSettings = orgApi.updateVAppTemplateLeaseSettings(org.getId(), newVAppTemplateLeaseSettings);
|
||||
|
||||
assertTrue(equal(vAppTemplateLeaseSettings.deleteOnStorageLeaseExpiration(), !deleteOnStorageLeaseExpiration),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "vAppTemplateLeaseSettings", "deleteOnStorageLeaseExpiration"));
|
||||
assertTrue(equal(vAppTemplateLeaseSettings.getStorageLeaseSeconds(), storageLeaseSeconds + 1),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "vAppTemplateLeaseSettings", "storageLeaseSeconds"));
|
||||
|
||||
// TODO negative tests?
|
||||
|
||||
Checks.checkVAppTemplateLeaseSettings(vAppTemplateLeaseSettings);
|
||||
} finally {
|
||||
vAppTemplateLeaseSettings = vAppTemplateLeaseSettings.toBuilder()
|
||||
.deleteOnStorageLeaseExpiration(deleteOnStorageLeaseExpiration)
|
||||
.storageLeaseSeconds(storageLeaseSeconds)
|
||||
.build();
|
||||
|
||||
vAppTemplateLeaseSettings = orgApi.updateVAppTemplateLeaseSettings(
|
||||
orgRef.getHref(), vAppTemplateLeaseSettings);
|
||||
.deleteOnStorageLeaseExpiration(deleteOnStorageLeaseExpiration)
|
||||
.storageLeaseSeconds(storageLeaseSeconds).build();
|
||||
|
||||
vAppTemplateLeaseSettings = orgApi.updateVAppTemplateLeaseSettings(org.getId(), vAppTemplateLeaseSettings);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "GET /admin/org/{id}/settings")
|
||||
public void testGetSettings() {
|
||||
settings = orgApi.getSettings(orgRef.getHref());
|
||||
|
||||
settings = orgApi.getSettings(org.getId());
|
||||
|
||||
Checks.checkOrgSettings(settings);
|
||||
}
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings",
|
||||
dependsOnMethods = { "testGetEmailSettings" } )
|
||||
|
||||
@Test(description = "PUT /admin/org/{id}/settings", dependsOnMethods = { "testGetEmailSettings" })
|
||||
public void testUpdateSettings() throws Exception {
|
||||
String newFromEmailAddress = "test"+random.nextInt(Integer.MAX_VALUE)+"@test.com";
|
||||
String newFromEmailAddress = "test" + random.nextInt(Integer.MAX_VALUE) + "@test.com";
|
||||
Exception exception = null;
|
||||
|
||||
|
||||
try {
|
||||
OrgSettings newSettings = OrgSettings.builder()
|
||||
.emailSettings(emailSettings.toBuilder().fromEmailAddress(newFromEmailAddress).build())
|
||||
.build();
|
||||
|
||||
OrgSettings modified = orgApi.updateSettings(
|
||||
orgRef.getHref(), newSettings);
|
||||
|
||||
.emailSettings(emailSettings.toBuilder().fromEmailAddress(newFromEmailAddress).build()).build();
|
||||
|
||||
OrgSettings modified = orgApi.updateSettings(org.getId(), newSettings);
|
||||
|
||||
Checks.checkOrgSettings(settings);
|
||||
assertTrue(equal(modified.getEmailSettings().getFromEmailAddress(), newFromEmailAddress),
|
||||
String.format(OBJ_FIELD_UPDATABLE,
|
||||
"orgSettings", "emailSettings"));
|
||||
|
||||
assertTrue(equal(modified.getEmailSettings().getFromEmailAddress(), newFromEmailAddress),
|
||||
String.format(OBJ_FIELD_UPDATABLE, "orgSettings", "emailSettings"));
|
||||
|
||||
} catch (Exception e) {
|
||||
exception = e;
|
||||
} finally {
|
||||
try {
|
||||
OrgSettings restorableSettings = OrgSettings.builder()
|
||||
.emailSettings(emailSettings)
|
||||
.build();
|
||||
|
||||
settings = orgApi.updateSettings(
|
||||
orgRef.getHref(), restorableSettings);
|
||||
OrgSettings restorableSettings = OrgSettings.builder().emailSettings(emailSettings).build();
|
||||
|
||||
settings = orgApi.updateSettings(org.getId(), restorableSettings);
|
||||
} catch (Exception e) {
|
||||
if (exception != null) {
|
||||
logger.warn(e, "Error resetting settings; rethrowing original test exception...");
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
package org.jclouds.vcloud.director.v1_5.features.admin;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.fail;
|
||||
|
@ -66,7 +66,7 @@ public class AdminVdcApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
public void setupRequiredApis() {
|
||||
vdcApi = adminContext.getApi().getVdcApi();
|
||||
metadataApi = vdcApi.getMetadataApi();
|
||||
assertNotNull(vdcURI, String.format(REF_REQ_LIVE, VDC));
|
||||
assertNotNull(vdcURI, String.format(URN_REQ_LIVE, VDC));
|
||||
adminVdcUri = toAdminUri(vdcURI);
|
||||
}
|
||||
|
||||
|
|
|
@ -18,11 +18,18 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features.admin;
|
||||
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_ORG;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ERROR;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.USER;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.rest.ResourceNotFoundException;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
|
||||
|
@ -32,38 +39,197 @@ import org.jclouds.vcloud.director.v1_5.domain.User;
|
|||
import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorAdminApiExpectTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.net.HttpHeaders;
|
||||
|
||||
/**
|
||||
* Test the {@link UserApi} by observing its side effects.
|
||||
*
|
||||
* @author danikov
|
||||
* @author danikov, Adrian Cole
|
||||
*/
|
||||
@Test(groups = { "unit", "admin" }, singleThreaded = true, testName = "UserApiExpectTest")
|
||||
public class UserApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
||||
|
||||
private Reference orgRef = Reference.builder()
|
||||
.href(URI.create(endpoint + "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.build();
|
||||
private static String user = "7212e451-76e1-4631-b2de-ba1dfd8080e4";
|
||||
private static String userUrn = "urn:vcloud:user:" + user;
|
||||
private static URI userHref = URI.create(endpoint + "/user/" + user);
|
||||
|
||||
private Reference userRef = Reference.builder()
|
||||
.href(URI.create(endpoint + "/admin/user/b37223f3-8792-477a-820f-334998f61cd6"))
|
||||
.build();
|
||||
private static String org = "7212e451-76e1-4631-b2de-asdasdasd";
|
||||
private static String orgUrn = "urn:vcloud:org:" + org;
|
||||
private static URI orgHref = URI.create(endpoint + "/org/" + org);
|
||||
private static URI orgAdminHref = URI.create(endpoint + "/admin/org/" + org);
|
||||
|
||||
private HttpRequest create = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint(orgAdminHref + "/users")
|
||||
.addHeader("Accept", USER)
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.payload(payloadFromResourceWithContentType("/user/createUserSource.xml", VCloudDirectorMediaType.USER))
|
||||
.build();
|
||||
|
||||
private HttpResponse createResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/user/createUser.xml", USER + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testCreateUserHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, create, createResponse);
|
||||
assertEquals(api.getUserApi().createUserInOrg(createUserSource(), orgAdminHref), createUser());
|
||||
}
|
||||
|
||||
private HttpRequest resolveOrg = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/entity/" + orgUrn)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
private String orgEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
|
||||
.a("name", orgUrn)
|
||||
.a("id", orgUrn)
|
||||
.a("type", ENTITY)
|
||||
.a("href", endpoint + "/entity/" + userUrn)
|
||||
.e("Link").a("rel", "alternate").a("type", ORG).a("href", orgHref.toString()).up()
|
||||
.e("Link").a("rel", "alternate").a("type", ADMIN_ORG).a("href", orgAdminHref.toString()).up());
|
||||
|
||||
private HttpResponse resolveOrgResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromStringWithContentType(orgEntity, ENTITY + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testCreateUser() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("POST", "/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/users")
|
||||
.xmlFilePayload("/user/createUserSource.xml", VCloudDirectorMediaType.USER)
|
||||
.acceptMedia(VCloudDirectorMediaType.USER)
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/user/createUser.xml", VCloudDirectorMediaType.USER)
|
||||
.httpResponseBuilder().build());
|
||||
public void testCreateUserUrn() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveOrg, resolveOrgResponse, create, createResponse);
|
||||
assertEquals(api.getUserApi().createUserInOrg(createUserSource(), orgUrn), createUser());
|
||||
}
|
||||
|
||||
HttpRequest get = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(userHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
User source = createUserSource();
|
||||
User expected = createUser();
|
||||
HttpResponse getResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/user/user.xml", ORG + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetUserHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
|
||||
assertEquals(api.getUserApi().get(userHref), user());
|
||||
}
|
||||
|
||||
HttpRequest resolveUser = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(endpoint + "/entity/" + userUrn)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
String userEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
|
||||
.a("name", userUrn)
|
||||
.a("id", userUrn)
|
||||
.a("type", ENTITY)
|
||||
.a("href", endpoint + "/entity/" + userUrn)
|
||||
.e("Link").a("rel", "alternate").a("type", USER).a("href", userHref.toString()).up());
|
||||
|
||||
HttpResponse resolveUserResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromStringWithContentType(userEntity, ENTITY + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testGetUserUrn() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveUser, resolveUserResponse, get, getResponse);
|
||||
assertEquals(api.getUserApi().get(userUrn), user());
|
||||
}
|
||||
|
||||
HttpRequest update = HttpRequest.builder()
|
||||
.method("PUT")
|
||||
.endpoint(userHref)
|
||||
.addHeader("Accept", USER)
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.payload(payloadFromResourceWithContentType("/user/updateUserSource.xml", USER))
|
||||
.build();
|
||||
|
||||
assertEquals(api.getUserApi().createUser(orgRef.getHref(), source), expected);
|
||||
HttpResponse updateResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/user/updateUser.xml", USER))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testUpdateUserHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, update, updateResponse);
|
||||
assertEquals(api.getUserApi().update(userHref, updateUserSource()), updateUser());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateUserUrn() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveUser, resolveUserResponse, update, updateResponse);
|
||||
assertEquals(api.getUserApi().update(userUrn, updateUserSource()), updateUser());
|
||||
}
|
||||
|
||||
HttpRequest unlock = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint(userHref + "/action/unlock")
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
|
||||
.build();
|
||||
|
||||
HttpResponse unlockResponse = HttpResponse.builder()
|
||||
.statusCode(204)
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testUnlockUserHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, unlock, unlockResponse);
|
||||
api.getUserApi().unlock(userHref);
|
||||
}
|
||||
|
||||
@Test(expectedExceptions = ResourceNotFoundException.class)
|
||||
public void testUnlockUserHrefNotFound() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, unlock, HttpResponse.builder()
|
||||
.statusCode(403)
|
||||
.payload(payloadFromResourceWithContentType("/org/error400.xml", ERROR))
|
||||
.build());
|
||||
api.getUserApi().unlock(userHref);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnlockUserUrn() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveUser, resolveUserResponse, unlock, unlockResponse);
|
||||
api.getUserApi().unlock(userUrn);
|
||||
}
|
||||
|
||||
HttpRequest delete = HttpRequest.builder()
|
||||
.method("DELETE")
|
||||
.endpoint(userHref)
|
||||
.addHeader("Accept", "*/*")
|
||||
.addHeader("x-vcloud-authorization", token)
|
||||
.addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
|
||||
|
||||
HttpResponse deleteResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void testDeleteUserHref() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, delete, deleteResponse);
|
||||
api.getUserApi().delete(userHref);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteUserUrn() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse, resolveUser, resolveUserResponse, delete, deleteResponse);
|
||||
api.getUserApi().delete(userUrn);
|
||||
}
|
||||
|
||||
public static final User createUserSource() {
|
||||
|
@ -111,46 +277,12 @@ public class UserApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUser() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("GET", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/user/user.xml", VCloudDirectorMediaType.USER)
|
||||
.httpResponseBuilder().build());
|
||||
|
||||
User expected = user();
|
||||
|
||||
assertEquals(api.getUserApi().getUser(userRef.getHref()), expected);
|
||||
}
|
||||
|
||||
public static final User user() {
|
||||
return createUser().toBuilder()
|
||||
.nameInSource("test")
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateUser() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("PUT", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6")
|
||||
.xmlFilePayload("/user/updateUserSource.xml", VCloudDirectorMediaType.USER)
|
||||
.acceptMedia(VCloudDirectorMediaType.USER)
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.xmlFilePayload("/user/updateUser.xml", VCloudDirectorMediaType.USER)
|
||||
.httpResponseBuilder().build());
|
||||
|
||||
User source = updateUserSource();
|
||||
User expected = updateUser();
|
||||
|
||||
assertEquals(api.getUserApi().updateUser(userRef.getHref(), source), expected);
|
||||
}
|
||||
|
||||
public static final User updateUserSource() {
|
||||
return user().toBuilder()
|
||||
.fullName("new"+user().getFullName())
|
||||
|
@ -173,44 +305,4 @@ public class UserApiExpectTest extends VCloudDirectorAdminApiExpectTest {
|
|||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteUser() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("DELETE", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.httpResponseBuilder().statusCode(204).build());
|
||||
|
||||
api.getUserApi().deleteUser(userRef.getHref());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnlockUser() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("POST", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6/action/unlock")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.httpResponseBuilder().statusCode(204).build());
|
||||
|
||||
api.getUserApi().unlockUser(userRef.getHref());
|
||||
}
|
||||
|
||||
@Test(expectedExceptions = ResourceNotFoundException.class)
|
||||
public void testUnlockUserFailNotFound() {
|
||||
VCloudDirectorAdminApi api = requestsSendResponses(loginRequest, sessionResponse,
|
||||
new VcloudHttpRequestPrimer()
|
||||
.apiCommand("POST", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6/action/unlock")
|
||||
.acceptAnyMedia()
|
||||
.httpRequestBuilder().build(),
|
||||
new VcloudHttpResponsePrimer()
|
||||
.httpResponseBuilder().statusCode(403)
|
||||
.payload(payloadFromResourceWithContentType("/org/error400.xml", VCloudDirectorMediaType.ERROR))
|
||||
.build());
|
||||
|
||||
api.getUserApi().unlockUser(userRef.getHref());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@ import static org.testng.AssertJUnit.assertFalse;
|
|||
import java.net.URI;
|
||||
|
||||
import org.jclouds.rest.AuthorizationException;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Role.DefaultRoles;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.User;
|
||||
|
@ -41,8 +40,6 @@ import org.testng.annotations.AfterClass;
|
|||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
/**
|
||||
* Tests live behavior of {@link UserApi}.
|
||||
*
|
||||
|
@ -61,21 +58,19 @@ public class UserApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
/*
|
||||
* Shared state between dependant tests.
|
||||
*/
|
||||
private Reference orgRef;
|
||||
private User user;
|
||||
|
||||
@Override
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setupRequiredApis() {
|
||||
userApi = adminContext.getApi().getUserApi();
|
||||
orgRef = Iterables.getFirst(context.getApi().getOrgApi().getOrgList(), null).toAdminReference(endpoint);
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void cleanUp() throws Exception {
|
||||
if (user != null) {
|
||||
try {
|
||||
userApi.deleteUser(user.getHref());
|
||||
userApi.delete(user.getHref());
|
||||
} catch (Exception e) {
|
||||
logger.warn(e, "Error deleting user '%s'", user.getName());
|
||||
}
|
||||
|
@ -85,13 +80,13 @@ public class UserApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
@Test(description = "POST /admin/org/{id}/users")
|
||||
public void testCreateUser() {
|
||||
User newUser = randomTestUser("testCreateUser");
|
||||
user = userApi.createUser(orgRef.getHref(), newUser);
|
||||
user = userApi.createUserInOrg(newUser, org.getId());
|
||||
checkUser(newUser);
|
||||
}
|
||||
|
||||
@Test(description = "GET /admin/user/{id}", dependsOnMethods = { "testCreateUser" })
|
||||
public void testGetUser() {
|
||||
user = userApi.getUser(user.getHref());
|
||||
user = userApi.get(user.getHref());
|
||||
|
||||
checkUser(user);
|
||||
}
|
||||
|
@ -116,8 +111,8 @@ public class UserApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
.role(getRoleReferenceFor(DefaultRoles.AUTHOR.value()))
|
||||
.build();
|
||||
|
||||
userApi.updateUser(user.getHref(), newUser);
|
||||
user = userApi.getUser(user.getHref());
|
||||
userApi.update(user.getHref(), newUser);
|
||||
user = userApi.get(user.getHref());
|
||||
|
||||
checkUser(user);
|
||||
assertTrue(equal(user.getFullName(), newUser.getFullName()),
|
||||
|
@ -148,7 +143,7 @@ public class UserApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
|
||||
// Check the user can really login with the changed password
|
||||
// NOTE: the password is NOT returned in the User object returned from the server
|
||||
SessionWithToken sessionWithToken = sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "newPassword");
|
||||
SessionWithToken sessionWithToken = sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), org.getName(), "newPassword");
|
||||
assertNotNull(sessionWithToken.getToken());
|
||||
sessionApi.logoutSessionWithToken(sessionWithToken.getSession().getHref(), sessionWithToken.getToken());
|
||||
}
|
||||
|
@ -162,21 +157,21 @@ public class UserApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
// session api isn't typically exposed to the user, as it is implicit
|
||||
SessionApi sessionApi = context.utils().injector().getInstance(SessionApi.class);
|
||||
|
||||
OrgPasswordPolicySettings settings = adminOrgApi.getSettings(orgRef.getHref()).getPasswordPolicy();
|
||||
OrgPasswordPolicySettings settings = adminOrgApi.getSettings(org.getId()).getPasswordPolicy();
|
||||
assertNotNull(settings);
|
||||
|
||||
// Adjust account settings so we can lock the account - be careful to not set invalidLoginsBeforeLockout too low!
|
||||
if (!settings.isAccountLockoutEnabled()) {
|
||||
settingsToRevertTo = settings;
|
||||
settings = settings.toBuilder().accountLockoutEnabled(true).invalidLoginsBeforeLockout(5).build();
|
||||
settings = adminOrgApi.updatePasswordPolicy(orgRef.getHref(), settings);
|
||||
settings = adminOrgApi.updatePasswordPolicy(org.getId(), settings);
|
||||
}
|
||||
|
||||
assertTrue(settings.isAccountLockoutEnabled());
|
||||
|
||||
for (int i = 0; i < settings.getInvalidLoginsBeforeLockout() + 1; i++) {
|
||||
try {
|
||||
sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "wrongpassword!");
|
||||
sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), org.getName(), "wrongpassword!");
|
||||
fail("Managed to login using the wrong password!");
|
||||
} catch (AuthorizationException e) {
|
||||
} catch (Exception e) {
|
||||
|
@ -184,30 +179,30 @@ public class UserApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
}
|
||||
}
|
||||
|
||||
user = userApi.getUser(user.getHref());
|
||||
user = userApi.get(user.getHref());
|
||||
assertTrue(user.isLocked());
|
||||
|
||||
try {
|
||||
sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "newPassword");
|
||||
sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), org.getName(), "newPassword");
|
||||
fail("Managed to login to locked account!");
|
||||
} catch (AuthorizationException e) {
|
||||
} catch (Exception e) {
|
||||
fail("Expected AuthorizationException", e);
|
||||
}
|
||||
|
||||
userApi.unlockUser(user.getHref());
|
||||
userApi.unlock(user.getHref());
|
||||
|
||||
user = userApi.getUser(user.getHref());
|
||||
user = userApi.get(user.getHref());
|
||||
assertFalse(user.isLocked());
|
||||
|
||||
// Double-check the user can now login again
|
||||
SessionWithToken sessionWithToken = sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "newPassword");
|
||||
SessionWithToken sessionWithToken = sessionApi.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), org.getName(), "newPassword");
|
||||
assertNotNull(sessionWithToken.getToken());
|
||||
sessionApi.logoutSessionWithToken(sessionWithToken.getSession().getHref(), sessionWithToken.getToken());
|
||||
|
||||
// Return account settings to the previous values, if necessary
|
||||
if (settingsToRevertTo != null) {
|
||||
adminOrgApi.updatePasswordPolicy(orgRef.getHref(), settingsToRevertTo);
|
||||
adminOrgApi.updatePasswordPolicy(org.getId(), settingsToRevertTo);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -215,13 +210,13 @@ public class UserApiLiveTest extends BaseVCloudDirectorApiLiveTest {
|
|||
public void testDeleteUser() {
|
||||
// Create a user to be deleted (so we remove dependencies on test ordering)
|
||||
User newUser = randomTestUser("testDeleteUser"+getTestDateTimeStamp());
|
||||
User userToBeDeleted = userApi.createUser(orgRef.getHref(), newUser);
|
||||
User userToBeDeleted = userApi.createUserInOrg(newUser, org.getId());
|
||||
|
||||
// Delete the user
|
||||
userApi.deleteUser(userToBeDeleted.getHref());
|
||||
userApi.delete(userToBeDeleted.getHref());
|
||||
|
||||
// Confirm cannot no longer be accessed
|
||||
User deleted = userApi.getUser(userToBeDeleted.getHref());
|
||||
User deleted = userApi.get(userToBeDeleted.getHref());
|
||||
assertNull(deleted);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,8 +18,21 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.internal;
|
||||
|
||||
import static com.google.common.base.Strings.emptyToNull;
|
||||
import static com.google.common.base.Strings.isNullOrEmpty;
|
||||
import static com.google.common.collect.FluentIterable.from;
|
||||
import static com.google.common.collect.Iterables.any;
|
||||
import static com.google.common.collect.Iterables.find;
|
||||
import static com.google.common.collect.Iterables.getFirst;
|
||||
import static com.google.common.collect.Iterables.getLast;
|
||||
import static com.google.common.collect.Iterables.tryFind;
|
||||
import static com.google.common.io.Closeables.closeQuietly;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.ENTITY_NON_NULL;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.URN_REQ_LIVE;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK;
|
||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_NETWORK;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
import static org.testng.Assert.fail;
|
||||
|
@ -43,9 +56,8 @@ import org.jclouds.rest.RestContext;
|
|||
import org.jclouds.vcloud.director.testng.FormatApiResultsListener;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorApiMetadata;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorContext;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
|
||||
import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.ResourceEntity.Status;
|
||||
|
@ -69,26 +81,26 @@ import org.jclouds.vcloud.director.v1_5.features.TaskApi;
|
|||
import org.jclouds.vcloud.director.v1_5.features.VAppApi;
|
||||
import org.jclouds.vcloud.director.v1_5.features.VAppTemplateApi;
|
||||
import org.jclouds.vcloud.director.v1_5.features.VdcApi;
|
||||
import org.jclouds.vcloud.director.v1_5.predicates.EntityPredicates;
|
||||
import org.jclouds.vcloud.director.v1_5.predicates.LinkPredicates;
|
||||
import org.jclouds.vcloud.director.v1_5.predicates.ReferencePredicates;
|
||||
import org.jclouds.vcloud.director.v1_5.predicates.TaskStatusEquals;
|
||||
import org.jclouds.vcloud.director.v1_5.predicates.TaskSuccess;
|
||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
|
||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
|
||||
import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Listeners;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.io.Closeables;
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import com.google.inject.Guice;
|
||||
|
||||
|
@ -125,9 +137,11 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
protected String catalogUrn;
|
||||
protected URI vAppTemplateURI;
|
||||
protected URI mediaURI;
|
||||
protected URI networkURI;
|
||||
protected String networkUrn;
|
||||
private Network network;
|
||||
protected URI vdcURI;
|
||||
protected URI userURI;
|
||||
protected String userUrn;
|
||||
private User user;
|
||||
|
||||
protected final Set<String> vAppNames = Sets.newLinkedHashSet();
|
||||
protected static final Random random = new Random();
|
||||
|
@ -140,6 +154,8 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
|
||||
protected VCloudDirectorTestSession testSession;
|
||||
|
||||
protected Org org;
|
||||
|
||||
protected static String testStamp;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
|
@ -163,7 +179,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
|
||||
@AfterClass(alwaysRun = true)
|
||||
protected void tearDownTestSession() {
|
||||
Closeables.closeQuietly(testSession);
|
||||
closeQuietly(testSession);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -207,7 +223,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
public static Reference getRoleReferenceFor(String name, RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext) {
|
||||
RoleReferences roles = adminContext.getApi().getQueryApi().roleReferencesQueryAll();
|
||||
// backend in a builder to strip out unwanted xml cruft that the api chokes on
|
||||
return Reference.builder().fromReference(Iterables.find(roles.getReferences(), ReferencePredicates.nameEquals(name))).build();
|
||||
return Reference.builder().fromReference(find(roles.getReferences(), ReferencePredicates.nameEquals(name))).build();
|
||||
}
|
||||
|
||||
public User randomTestUser(String prefix) {
|
||||
|
@ -233,50 +249,71 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
}
|
||||
|
||||
protected void initTestParametersFromPropertiesOrLazyDiscover() {
|
||||
catalogUrn = Strings.emptyToNull(System.getProperty("test." + provider + ".catalog-id"));
|
||||
catalogUrn = emptyToNull(System.getProperty("test." + provider + ".catalog-id"));
|
||||
|
||||
String vAppTemplateId = Strings.emptyToNull(System.getProperty("test." + provider + ".vapptemplate-id"));
|
||||
String vAppTemplateId = emptyToNull(System.getProperty("test." + provider + ".vapptemplate-id"));
|
||||
if (vAppTemplateId != null)
|
||||
vAppTemplateURI = URI.create(endpoint + "/vAppTemplate/" + vAppTemplateId);
|
||||
|
||||
String vdcId = Strings.emptyToNull(System.getProperty("test." + provider + ".vdc-id"));
|
||||
String vdcId = emptyToNull(System.getProperty("test." + provider + ".vdc-id"));
|
||||
if (vdcId != null)
|
||||
vdcURI = URI.create(endpoint + "/vdc/" + vdcId);
|
||||
|
||||
String mediaId = Strings.emptyToNull(System.getProperty("test." + provider + ".media-id"));
|
||||
String mediaId = emptyToNull(System.getProperty("test." + provider + ".media-id"));
|
||||
if (mediaId != null)
|
||||
mediaURI = URI.create(endpoint + "/media/" + mediaId);
|
||||
|
||||
String networkId = Strings.emptyToNull(System.getProperty("test." + provider + ".network-id"));
|
||||
if (networkId != null)
|
||||
networkURI = URI.create(endpoint + "/network/" + networkId);
|
||||
networkUrn = emptyToNull(System.getProperty("test." + provider + ".network-id"));
|
||||
|
||||
String userId = Strings.emptyToNull(System.getProperty("test." + provider + ".user-id"));
|
||||
if (userId != null)
|
||||
userURI = URI.create(endpoint + "/admin/user/" + userId);
|
||||
userUrn = emptyToNull(System.getProperty("test." + provider + ".user-id"));
|
||||
|
||||
if (Iterables.any(Lists.newArrayList(vAppTemplateURI, networkURI, vdcURI), Predicates.isNull())) {
|
||||
Org thisOrg = context.getApi().getOrgApi().getOrg(
|
||||
Iterables.find(context.getApi().getOrgApi().getOrgList(),
|
||||
ReferencePredicates.<Reference> nameEquals(session.getOrg())).getHref());
|
||||
org = context.getApi().getOrgApi().get(
|
||||
find(context.getApi().getOrgApi().list(),
|
||||
ReferencePredicates.<Reference> nameEquals(session.get())).getHref());
|
||||
|
||||
if (any(Lists.newArrayList(vAppTemplateURI, networkUrn, vdcURI), Predicates.isNull())) {
|
||||
|
||||
if (vdcURI == null)
|
||||
vdcURI = Iterables.find(thisOrg.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(VCloudDirectorMediaType.VDC)).getHref();
|
||||
vdcURI = find(org.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(VDC)).getHref();
|
||||
|
||||
if (networkURI == null)
|
||||
networkURI = Iterables.find(thisOrg.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(VCloudDirectorMediaType.ORG_NETWORK)).getHref();
|
||||
if (networkUrn == null) {
|
||||
network = context.getApi().getNetworkApi().get(find(org.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(ORG_NETWORK)).getHref());
|
||||
networkUrn = network.getId();
|
||||
}
|
||||
|
||||
// FIXME the URI should be opaque
|
||||
if (Strings.isNullOrEmpty(catalogUrn)) {
|
||||
String uri = Iterables.find(thisOrg.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(VCloudDirectorMediaType.CATALOG)).getHref().toASCIIString();
|
||||
catalogUrn = Iterables.getLast(Splitter.on('/').split(uri));
|
||||
if (isNullOrEmpty(catalogUrn)) {
|
||||
String uri = find(org.getLinks(),
|
||||
ReferencePredicates.<Link> typeEquals(CATALOG)).getHref().toASCIIString();
|
||||
catalogUrn = getLast(Splitter.on('/').split(uri));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected Network lazyGetNetwork() {
|
||||
if (network == null) {
|
||||
assertNotNull(networkUrn, String.format(URN_REQ_LIVE, NETWORK));
|
||||
network = from(org.getLinks()).filter(LinkPredicates.typeEquals(ORG_NETWORK))
|
||||
.transform(new Function<Link, Network>() {
|
||||
|
||||
@Override
|
||||
public Network apply(Link in) {
|
||||
return context.getApi().getNetworkApi().get(in.getHref());
|
||||
}
|
||||
}).firstMatch(EntityPredicates.idEquals(networkUrn)).get();
|
||||
}
|
||||
return network;
|
||||
}
|
||||
|
||||
protected User lazyGetUser() {
|
||||
if (user == null) {
|
||||
user = adminContext.getApi().getUserApi().get(userUrn);
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
public URI toAdminUri(Reference ref) {
|
||||
return toAdminUri(ref.getHref());
|
||||
}
|
||||
|
@ -343,7 +380,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
VApp vAppInstantiated = vdcApi.instantiateVApp(vdcURI, instantiate);
|
||||
assertNotNull(vAppInstantiated, String.format(ENTITY_NON_NULL, VAPP));
|
||||
|
||||
Task instantiationTask = Iterables.getFirst(vAppInstantiated.getTasks(), null);
|
||||
Task instantiationTask = getFirst(vAppInstantiated.getTasks(), null);
|
||||
if (instantiationTask != null) assertTaskSucceedsLong(instantiationTask);
|
||||
|
||||
// Save VApp name for cleanUp
|
||||
|
@ -384,16 +421,16 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
|
|||
Set<Reference> networks = vdc.getAvailableNetworks();
|
||||
|
||||
// Look up the network in the Vdc with the id configured for the tests
|
||||
Optional<Reference> parentNetwork = Iterables.tryFind(networks, new Predicate<Reference>() {
|
||||
Optional<Reference> parentNetwork = tryFind(networks, new Predicate<Reference>() {
|
||||
@Override
|
||||
public boolean apply(Reference reference) {
|
||||
return reference.getHref().equals(networkURI);
|
||||
return reference.getHref().equals(network.getHref());
|
||||
}
|
||||
});
|
||||
|
||||
// Check we actually found a network reference
|
||||
if (!parentNetwork.isPresent()) {
|
||||
fail(String.format("Could not find network %s in vdc", networkURI.toASCIIString()));
|
||||
fail(String.format("Could not find network %s in vdc", network.getHref().toASCIIString()));
|
||||
}
|
||||
|
||||
// Build the configuration object
|
||||
|
|
|
@ -92,12 +92,12 @@ public class VCloudDirectorTestSession implements Closeable {
|
|||
adminContext = userContext.getAdminContext();
|
||||
|
||||
// Lookup the user details
|
||||
Reference orgRef = Iterables.getFirst(userContext.getApi().getOrgApi().getOrgList(), null)
|
||||
Reference orgRef = Iterables.getFirst(userContext.getApi().getOrgApi().list(), null)
|
||||
.toAdminReference(endpoint);
|
||||
Reference userRef = Iterables.find(
|
||||
adminContext.getApi().getOrgApi().getOrg(orgRef.getHref()).getUsers(),
|
||||
adminContext.getApi().getOrgApi().get(orgRef.getHref()).getUsers(),
|
||||
ReferencePredicates.nameEquals(adminContext.getApi().getCurrentSession().getUser()));
|
||||
User user = adminContext.getApi().getUserApi().getUser(userRef.getHref());
|
||||
User user = adminContext.getApi().getUserApi().get(userRef.getHref());
|
||||
|
||||
// Check that the user has the org admin role
|
||||
Reference userRole = user.getRole();
|
||||
|
|
|
@ -72,7 +72,7 @@ public class SessionApiLiveTest extends BaseContextLiveTest<RestContext<SessionA
|
|||
|
||||
sessionWithToken = api.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user, org, password);
|
||||
assertEquals(sessionWithToken.getSession().getUser(), user);
|
||||
assertEquals(sessionWithToken.getSession().getOrg(), org);
|
||||
assertEquals(sessionWithToken.getSession().get(), org);
|
||||
assertTrue(sessionWithToken.getSession().getLinks().size() > 0);
|
||||
assertNotNull(sessionWithToken.getToken());
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<CloneMediaParams name="moved test media" xmlns="http://www.vmware.com/vcloud/v1.5">
|
||||
<Description>moved by testCloneMedia()</Description>
|
||||
<Source type="application/vnd.vmware.vcloud.media+xml" name="copied test media" id="urn:vcloud:media:da8361af-cccd-4103-a71c-493513c49094" href="https://mycloud.greenhousedata.com/api/media/da8361af-cccd-4103-a71c-493513c49094"/>
|
||||
<Source type="application/vnd.vmware.vcloud.media+xml" name="copied test media" href="https://mycloud.greenhousedata.com/api/media/da8361af-cccd-4103-a71c-493513c49094"/>
|
||||
<IsSourceDelete>false</IsSourceDelete>
|
||||
</CloneMediaParams>
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Task xmlns="http://www.vmware.com/vcloud/v1.5" status="running" startTime="2012-03-14T12:39:23.720-04:00" operationName="networkResetNetwork" operation="Resetting Network ilsolation01-Jclouds(f3ba8256-6f48-4512-aad6-600e85b4dc38)" expiryTime="2012-06-12T12:39:23.720-04:00" name="task" id="urn:vcloud:task:49d2e180-7921-4902-ac39-b4ff5406bb94" type="application/vnd.vmware.vcloud.task+xml" href="https://vcloudbeta.bluelock.com/api/task/49d2e180-7921-4902-ac39-b4ff5406bb94" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://vcloudbeta.bluelock.com/api/v1.5/schema/master.xsd">
|
||||
<Link rel="task:cancel" href="https://vcloudbeta.bluelock.com/api/task/49d2e180-7921-4902-ac39-b4ff5406bb94/action/cancel"/>
|
||||
<Owner type="application/vnd.vmware.vcloud.network+xml" name="ilsolation01-Jclouds" href="https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"/>
|
||||
<User type="application/vnd.vmware.admin.user+xml" name="dan@cloudsoftcorp.com" href="https://vcloudbeta.bluelock.com/api/admin/user/ae75edd2-12de-414c-8e85-e6ea10442c08"/>
|
||||
<Organization type="application/vnd.vmware.vcloud.org+xml" name="JClouds" href="https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"/>
|
||||
</Task>
|
|
@ -1,10 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<OrgNetwork name="ilsolation01-Jclouds" id="urn:vcloud:network:f3ba8256-6f48-4512-aad6-600e85b4dc38" type="application/vnd.vmware.vcloud.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38" xmlns="http://www.vmware.com/vcloud/v1.5">
|
||||
<Link rel="alternate" type="application/vnd.vmware.vcloud.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"/>
|
||||
<Link rel="edit" type="application/vnd.vmware.admin.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38"/>
|
||||
<Link rel="up" type="application/vnd.vmware.admin.organization+xml" href="https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"/>
|
||||
<Link rel="repair" type="application/vnd.vmware.admin.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/action/reset"/>
|
||||
<Link rel="down" type="application/vnd.vmware.vcloud.metadata+xml" href="https://vcloudbeta.bluelock.com/api/admin/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/metadata"/>
|
||||
<OrgNetwork name="ilsolation01-Jclouds" id="urn:vcloud:network:f3ba8256-6f48-4512-aad6-600e85b4dc38" type="application/vnd.vmware.vcloud.orgNetwork+xml" href="https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38" xmlns="http://www.vmware.com/vcloud/v1.5">
|
||||
<Link rel="up" type="application/vnd.vmware.vcloud.org+xml" href="https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"/>
|
||||
<Link rel="down" type="application/vnd.vmware.vcloud.metadata+xml" href="https://vcloudbeta.bluelock.com/api/network/f3ba8256-6f48-4512-aad6-600e85b4dc38/metadata"/>
|
||||
<Description></Description>
|
||||
<Configuration>
|
||||
<IpScope>
|
||||
|
@ -35,6 +32,5 @@
|
|||
</Features>
|
||||
<SyslogServerSettings/>
|
||||
</Configuration>
|
||||
<NetworkPool type="application/vnd.vmware.admin.networkPool+xml" name="vcdni01" href="https://vcloudbeta.bluelock.com/api/admin/extension/networkPool/e86bfdb5-b3e0-4ece-9125-e764ac64c95c"/>
|
||||
<AllowedExternalIpAddresses/>
|
||||
</OrgNetwork>
|
Loading…
Reference in New Issue