mirror of https://github.com/apache/jclouds.git
Created new TaskClient and updated domain objects and tests accordingly
This commit is contained in:
parent
3623918de5
commit
78fb8bd919
|
@ -22,13 +22,13 @@ import org.jclouds.rest.annotations.Delegate;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.Session;
|
||||
import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncClient;
|
||||
import org.jclouds.vcloud.director.v1_5.features.OrgAsyncClient;
|
||||
import org.jclouds.vcloud.director.v1_5.features.TaskAsyncClient;
|
||||
|
||||
import com.google.inject.Provides;
|
||||
|
||||
|
||||
/**
|
||||
* Provides asynchronous access to VCloudDirector via their REST API.
|
||||
* <p/>
|
||||
*
|
||||
* @see VCloudDirectorClient
|
||||
* @author Adrian Cole
|
||||
|
@ -47,6 +47,12 @@ public interface VCloudDirectorAsyncClient {
|
|||
@Delegate
|
||||
OrgAsyncClient getOrgClient();
|
||||
|
||||
/**
|
||||
* @return asynchronous access to Task features
|
||||
*/
|
||||
@Delegate
|
||||
TaskAsyncClient getTaskClient();
|
||||
|
||||
/**
|
||||
* @return asynchronous access to Network features
|
||||
*/
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.jclouds.rest.annotations.Delegate;
|
|||
import org.jclouds.vcloud.director.v1_5.domain.Session;
|
||||
import org.jclouds.vcloud.director.v1_5.features.NetworkClient;
|
||||
import org.jclouds.vcloud.director.v1_5.features.OrgClient;
|
||||
import org.jclouds.vcloud.director.v1_5.features.TaskClient;
|
||||
|
||||
import com.google.inject.Provides;
|
||||
|
||||
|
@ -50,6 +51,12 @@ public interface VCloudDirectorClient {
|
|||
@Delegate
|
||||
OrgClient getOrgClient();
|
||||
|
||||
/**
|
||||
* @return synchronous access to Task features
|
||||
*/
|
||||
@Delegate
|
||||
TaskClient getTaskClient();
|
||||
|
||||
/**
|
||||
* @return synchronous access to Network features
|
||||
*/
|
||||
|
|
|
@ -18,16 +18,13 @@
|
|||
*/
|
||||
package org.jclouds.vcloud.director.v1_5;
|
||||
|
||||
import javax.ws.rs.core.MediaType;
|
||||
|
||||
/**
|
||||
* Resource Types used in VCloud
|
||||
* Resource Types used in VCloud.
|
||||
*
|
||||
* <br/>
|
||||
* 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.
|
||||
*
|
||||
* @see MediaType
|
||||
* @see javax.ws.rs.core.MediaType;
|
||||
*/
|
||||
public interface VCloudDirectorMediaType {
|
||||
public final static String NS = "http://www.vmware.com/vcloud/v1.5";
|
||||
|
@ -44,4 +41,8 @@ public interface VCloudDirectorMediaType {
|
|||
|
||||
public static final String ORG_NETWORK_XML = "application/vnd.vmware.vcloud.orgNetwork+xml";
|
||||
|
||||
public final static String TASK_XML = "application/vnd.vmware.vcloud.task+xml";
|
||||
|
||||
public static final String TASKSLIST_XML = "application/vnd.vmware.vcloud.tasksList+xml";
|
||||
|
||||
}
|
||||
|
|
|
@ -46,6 +46,8 @@ import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncClient;
|
|||
import org.jclouds.vcloud.director.v1_5.features.NetworkClient;
|
||||
import org.jclouds.vcloud.director.v1_5.features.OrgAsyncClient;
|
||||
import org.jclouds.vcloud.director.v1_5.features.OrgClient;
|
||||
import org.jclouds.vcloud.director.v1_5.features.TaskAsyncClient;
|
||||
import org.jclouds.vcloud.director.v1_5.features.TaskClient;
|
||||
import org.jclouds.vcloud.director.v1_5.functions.LoginUserInOrgWithPassword;
|
||||
import org.jclouds.vcloud.director.v1_5.handlers.InvalidateSessionAndRetryOn401AndLogoutOnClose;
|
||||
import org.jclouds.vcloud.director.v1_5.handlers.VCloudDirectorErrorHandler;
|
||||
|
@ -75,6 +77,7 @@ public class VCloudDirectorRestClientModule extends RestClientModule<VCloudDirec
|
|||
public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
|
||||
.put(OrgClient.class, OrgAsyncClient.class)
|
||||
.put(NetworkClient.class, NetworkAsyncClient.class)
|
||||
.put(TaskClient.class, TaskAsyncClient.class)
|
||||
.build();
|
||||
|
||||
public VCloudDirectorRestClientModule() {
|
||||
|
|
|
@ -59,7 +59,10 @@ public class Task extends EntityType<Task> {
|
|||
public static class Builder extends EntityType.Builder<Task> {
|
||||
|
||||
private Error error;
|
||||
private Org org;
|
||||
private Reference org;
|
||||
private Reference owner;
|
||||
private Reference user;
|
||||
private Object params;
|
||||
private Integer progress;
|
||||
private String status;
|
||||
private String operation;
|
||||
|
@ -79,11 +82,35 @@ public class Task extends EntityType<Task> {
|
|||
/**
|
||||
* @see Task#getOrg()
|
||||
*/
|
||||
public Builder org(Org org) {
|
||||
public Builder org(Reference org) {
|
||||
this.org = org;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Task#getOwner()
|
||||
*/
|
||||
public Builder owner(Reference owner) {
|
||||
this.owner = owner;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Task#getUser()
|
||||
*/
|
||||
public Builder user(Reference user) {
|
||||
this.user = user;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Task#getParams()
|
||||
*/
|
||||
public Builder params(Object params) {
|
||||
this.params = params;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Task#getProgress()
|
||||
*/
|
||||
|
@ -143,8 +170,16 @@ public class Task extends EntityType<Task> {
|
|||
@Override
|
||||
public Task build() {
|
||||
Task task = new Task(href, name);
|
||||
task.setDescription(description);
|
||||
task.setTasksInProgress(tasksInProgress);
|
||||
task.setId(id);
|
||||
task.setType(type);
|
||||
task.setLinks(links);
|
||||
task.setError(error);
|
||||
task.setOrg(org);
|
||||
task.setOwner(owner);
|
||||
task.setUser(user);
|
||||
task.setParams(params);
|
||||
task.setProgress(progress);
|
||||
task.setStatus(status);
|
||||
task.setOperation(operation);
|
||||
|
@ -250,28 +285,31 @@ public class Task extends EntityType<Task> {
|
|||
@XmlElement(namespace = NS, name = "Error")
|
||||
private Error error;
|
||||
@XmlElement(namespace = NS, name = "Organization")
|
||||
private Org org;
|
||||
private Reference org;
|
||||
@XmlElement(namespace = NS, name = "Progress")
|
||||
private Integer progress;
|
||||
@XmlElement(namespace = NS, name = "Owner")
|
||||
private Entity owner;
|
||||
private Reference owner;
|
||||
@XmlElement(namespace = NS, name = "User")
|
||||
private Entity user;
|
||||
private Reference user;
|
||||
@XmlElement(namespace = NS, name = "Params")
|
||||
private Object params;
|
||||
@XmlAttribute(namespace = NS, name = "status")
|
||||
@XmlAttribute
|
||||
private String status;
|
||||
@XmlAttribute(namespace = NS, name = "operation")
|
||||
@XmlAttribute
|
||||
private String operation;
|
||||
@XmlAttribute(namespace = NS, name = "operationName")
|
||||
@XmlAttribute
|
||||
private String operationName;
|
||||
@XmlAttribute(namespace = NS, name = "startTime")
|
||||
@XmlAttribute
|
||||
private Date startTime;
|
||||
@XmlAttribute(namespace = NS, name = "endTime")
|
||||
@XmlAttribute
|
||||
private Date endTime;
|
||||
@XmlAttribute(namespace = NS, name = "expiryTime")
|
||||
@XmlAttribute
|
||||
private Date expiryTime;
|
||||
|
||||
/**
|
||||
* Represents an error information if the task failed.
|
||||
*/
|
||||
public Error getError() {
|
||||
return error;
|
||||
}
|
||||
|
@ -280,14 +318,56 @@ public class Task extends EntityType<Task> {
|
|||
this.error = error;
|
||||
}
|
||||
|
||||
public Org getOrg() {
|
||||
/**
|
||||
* The organization that started the task.
|
||||
*/
|
||||
public Reference getOrg() {
|
||||
return org;
|
||||
}
|
||||
|
||||
public void setOrg(Org org) {
|
||||
public void setOrg(Reference org) {
|
||||
this.org = org;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reference to the owner of the task.
|
||||
*/
|
||||
public Reference getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public void setOwner(Reference owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
/**
|
||||
* The user who started the task.
|
||||
*/
|
||||
public Reference getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setUser(Reference user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
/**
|
||||
* The parameters with which this task has been run.
|
||||
*/
|
||||
public Object getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
public void setParams(Object params) {
|
||||
this.params = params;
|
||||
}
|
||||
|
||||
/**
|
||||
* The progress of a long running asynchronous task.
|
||||
*
|
||||
* The value is between 0 - 100. Not all tasks have progress, the value is not
|
||||
* present for task which progress is not available.
|
||||
*/
|
||||
public Integer getProgress() {
|
||||
return progress;
|
||||
}
|
||||
|
@ -296,6 +376,20 @@ public class Task extends EntityType<Task> {
|
|||
this.progress = progress;
|
||||
}
|
||||
|
||||
/**
|
||||
* The execution status of the task.
|
||||
*
|
||||
* One of:
|
||||
* <ul>
|
||||
* <li>queued - The task has been queued for execution.
|
||||
* <li>preRunning - The task is awaiting preprocessing or, if it is a blocking task, administrative action.
|
||||
* <li>running - The task is runnning.
|
||||
* <li>success - The task completed with a status of success.
|
||||
* <li>error - The task encountered an error while running.
|
||||
* <li>canceled - The task was canceled by the owner or an administrator.
|
||||
* <li>aborted - The task was aborted by an administrative action.
|
||||
* </ul>
|
||||
*/
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
@ -304,6 +398,9 @@ public class Task extends EntityType<Task> {
|
|||
this.status = status;
|
||||
}
|
||||
|
||||
/**
|
||||
* The display name of the operation that is tracked by this task.
|
||||
*/
|
||||
public String getOperation() {
|
||||
return operation;
|
||||
}
|
||||
|
@ -312,6 +409,9 @@ public class Task extends EntityType<Task> {
|
|||
this.operation = operation;
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the operation that is tracked by this task.
|
||||
*/
|
||||
public String getOperationName() {
|
||||
return operationName;
|
||||
}
|
||||
|
@ -320,6 +420,11 @@ public class Task extends EntityType<Task> {
|
|||
this.operationName = operationName;
|
||||
}
|
||||
|
||||
/**
|
||||
* The date and time the system started executing the task.
|
||||
*
|
||||
* May not be present if the task hasn't been executed yet.
|
||||
*/
|
||||
public Date getStartTime() {
|
||||
return startTime;
|
||||
}
|
||||
|
@ -328,6 +433,11 @@ public class Task extends EntityType<Task> {
|
|||
this.startTime = startTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* The date and time that processing of the task was completed.
|
||||
*
|
||||
* May not be present if the task is still being executed.
|
||||
*/
|
||||
public Date getEndTime() {
|
||||
return endTime;
|
||||
}
|
||||
|
@ -336,6 +446,11 @@ public class Task extends EntityType<Task> {
|
|||
this.endTime = endTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* The date and time at which the task resource will be destroyed and no longer available for retrieval.
|
||||
*
|
||||
* May not be present if the task has not been executed or is still being executed.
|
||||
*/
|
||||
public Date getExpiryTime() {
|
||||
return expiryTime;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,8 @@ import java.util.Set;
|
|||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Org.Builder;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Sets;
|
||||
|
@ -81,8 +83,85 @@ public class TasksList extends EntityType<TasksList> {
|
|||
return taskslist;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see EntityType#getName()
|
||||
*/
|
||||
@Override
|
||||
public Builder name(String name) {
|
||||
this.name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see EntityType#getDescription()
|
||||
*/
|
||||
@Override
|
||||
public Builder description(String description) {
|
||||
this.description = description;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see EntityType#getId()
|
||||
*/
|
||||
@Override
|
||||
public Builder id(String id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see EntityType#getTasksInProgress()
|
||||
*/
|
||||
@Override
|
||||
public Builder tasksInProgress(TasksInProgress tasksInProgress) {
|
||||
this.tasksInProgress = tasksInProgress;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ReferenceType#getHref()
|
||||
*/
|
||||
@Override
|
||||
public Builder href(URI href) {
|
||||
this.href = href;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ReferenceType#getType()
|
||||
*/
|
||||
@Override
|
||||
public Builder type(String type) {
|
||||
this.type = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ReferenceType#getLinks()
|
||||
*/
|
||||
@Override
|
||||
public Builder links(Set<Link> links) {
|
||||
this.links = Sets.newLinkedHashSet(checkNotNull(links, "links"));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ReferenceType#getLinks()
|
||||
*/
|
||||
@Override
|
||||
public Builder link(Link link) {
|
||||
this.links.add(checkNotNull(link, "link"));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Builder fromEntityType(EntityType<TasksList> in) {
|
||||
return Builder.class.cast(super.fromEntityType(in));
|
||||
}
|
||||
|
||||
public Builder fromTasksList(TasksList in) {
|
||||
return tasks(in.getTasks());
|
||||
return fromEntityType(in).tasks(in.getTasks());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@ import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
|
|||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
/**
|
||||
|
||||
* @see OrgClient
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* 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.features;
|
||||
|
||||
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 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.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.AddVCloudAuthorizationToRequest;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
/**
|
||||
* @see TaskClient
|
||||
* @author grkvlt@apache.org
|
||||
*/
|
||||
@RequestFilters(AddVCloudAuthorizationToRequest.class)
|
||||
public interface TaskAsyncClient {
|
||||
|
||||
/**
|
||||
* @see TaskClient#getTaskList(URI)
|
||||
*/
|
||||
@GET
|
||||
@Path("/tasksList/{id}")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<TasksList> getTaskList(@PathParam("id") String orgId);
|
||||
|
||||
/**
|
||||
* @see TaskClient#getTask(URI)
|
||||
*/
|
||||
@GET
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
ListenableFuture<Task> getTask(@EndpointParam URI taskHref);
|
||||
|
||||
/**
|
||||
* @see TaskClient#cancelTask(URI)
|
||||
*/
|
||||
@POST
|
||||
@Path("/action/cancel")
|
||||
@Consumes
|
||||
@JAXBResponseParser
|
||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||
void cancelTask(@EndpointParam URI taskHref);
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
/**
|
||||
* 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.features;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.jclouds.concurrent.Timeout;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||
import org.jclouds.vcloud.director.v1_5.domain.TasksList;
|
||||
|
||||
/**
|
||||
* Provides synchronous access to {@link Task} objects.
|
||||
*
|
||||
* @see TaskAsyncClient
|
||||
* @author grkvlt@apache.org
|
||||
*/
|
||||
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
|
||||
public interface TaskClient {
|
||||
|
||||
/**
|
||||
* Retrieves a list of tasks.
|
||||
*
|
||||
* @param orgId the unique id for the organization
|
||||
* @return a list of tasks
|
||||
*/
|
||||
TasksList getTaskList(String orgId);
|
||||
|
||||
/**
|
||||
* Retrieves a task.
|
||||
*
|
||||
* @return the task or null if not found
|
||||
*/
|
||||
Task getTask(URI taskHref);
|
||||
|
||||
/**
|
||||
* Cancels a task.
|
||||
*/
|
||||
void cancelTask(URI taskHref);
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
/**
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
*(Link.builder().regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless(Link.builder().required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.vcloud.director.v1_5.features;
|
||||
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorClient;
|
||||
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.internal.BaseVCloudDirectorRestClientExpectTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.ImmutableMultimap;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
/**
|
||||
* Test the {@link TaskClient} by observing its side effects.
|
||||
*
|
||||
* @author grkvlt@apache.org
|
||||
*/
|
||||
@Test(groups = "unit", singleThreaded = true, testName = "TaskClientExpectTest")
|
||||
public class TaskClientExpectTest extends BaseVCloudDirectorRestClientExpectTest {
|
||||
|
||||
@Test
|
||||
public void testTaskListForValidOrg() {
|
||||
HttpRequest orgListRequest = HttpRequest.builder()
|
||||
.method("GET")
|
||||
.endpoint(URI.create("http://localhost/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0"))
|
||||
.headers(ImmutableMultimap.<String, String> builder()
|
||||
.put("Accept", "*/*")
|
||||
.put("x-vcloud-authorization", token)
|
||||
.build())
|
||||
.build();
|
||||
|
||||
HttpResponse orgListResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(payloadFromResourceWithContentType("/taskslist.xml", VCloudDirectorMediaType.TASKSLIST_XML + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, orgListRequest, orgListResponse);
|
||||
|
||||
String orgId =Iterables.getLast(Splitter.on("/").split(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0").getPath()));
|
||||
|
||||
assertEquals(client.getTaskClient().getTaskList(orgId), 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.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())
|
||||
.task(Task.builder()
|
||||
.type("application/vnd.vmware.vcloud.task+xml")
|
||||
.name("task")
|
||||
.id("urn:vcloud:task:bd22e745-9c2a-4f82-a954-0e35b6f76ba5")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/task/bd22e745-9c2a-4f82-a954-0e35b6f76ba5"))
|
||||
.status("success")
|
||||
.operation("Enabled User (967d317c-4273-4a95-b8a4-bf63b78e9c69)")
|
||||
.operationName("jobEnable")
|
||||
.startTime(dateService.iso8601DateParse("2012-02-06T17:30:38.507-05:00"))
|
||||
.endTime(dateService.iso8601DateParse("2012-02-06T17:30:38.507-05:00"))
|
||||
.expiryTime(dateService.iso8601DateParse("2012-05-06T17:30:38.507-04:00"))
|
||||
.user(Reference.builder()
|
||||
.type("application/vnd.vmware.admin.user+xml")
|
||||
.name("adrian@jclouds.org")
|
||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/8c360b93-ed25-4c9a-8e24-d48cd9966d93"))
|
||||
.build())
|
||||
.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())
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
|
@ -20,13 +20,16 @@ package org.jclouds.vcloud.director.v1_5.internal;
|
|||
|
||||
import java.net.URI;
|
||||
|
||||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.rest.BaseRestClientExpectTest;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorClient;
|
||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
|
||||
import com.google.common.collect.ImmutableMultimap;
|
||||
import com.google.inject.Guice;
|
||||
|
||||
/**
|
||||
* Base class for writing KeyStone Rest Client Expect tests
|
||||
|
@ -40,16 +43,31 @@ public class BaseVCloudDirectorRestClientExpectTest extends BaseRestClientExpect
|
|||
public static final String password = "password";
|
||||
public static final String token = "mIaR3/6Lna8DWImd7/JPR5rK8FcUHabt+G/UCJV5pJQ=";
|
||||
|
||||
protected HttpRequest loginRequest = HttpRequest.builder().method("POST").endpoint(
|
||||
URI.create("http://localhost/api/sessions")).headers(
|
||||
ImmutableMultimap.<String, String> builder().put("Accept", "*/*").put("Authorization",
|
||||
"Basic YWRyaWFuQGpjbG91ZHMub3JnQEpDbG91ZHM6cGFzc3dvcmQ=").build()).build();
|
||||
protected DateService dateService;
|
||||
|
||||
protected HttpResponse sessionResponse = HttpResponse.builder().statusCode(200).headers(
|
||||
ImmutableMultimap.<String, String> builder().put("x-vcloud-authorization", token).put("Set-Cookie",
|
||||
String.format("vcloud-token=%s; Secure; Path=/", token)).build()).payload(
|
||||
payloadFromResourceWithContentType("/session.xml", VCloudDirectorMediaType.SESSION_XML + ";version=1.5"))
|
||||
.build();
|
||||
@BeforeTest
|
||||
protected void setUpInjector() {
|
||||
dateService = Guice.createInjector().getInstance(DateService.class);
|
||||
assert dateService != null;
|
||||
}
|
||||
|
||||
protected HttpRequest loginRequest = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint(URI.create("http://localhost/api/sessions"))
|
||||
.headers(ImmutableMultimap.<String, String>builder()
|
||||
.put("Accept", "*/*")
|
||||
.put("Authorization", "Basic YWRyaWFuQGpjbG91ZHMub3JnQEpDbG91ZHM6cGFzc3dvcmQ=")
|
||||
.build())
|
||||
.build();
|
||||
|
||||
protected HttpResponse sessionResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.headers(ImmutableMultimap.<String, String> builder()
|
||||
.put("x-vcloud-authorization", token)
|
||||
.put("Set-Cookie", String.format("vcloud-token=%s; Secure; Path=/", token))
|
||||
.build())
|
||||
.payload(payloadFromResourceWithContentType("/session.xml", VCloudDirectorMediaType.SESSION_XML + ";version=1.5"))
|
||||
.build();
|
||||
|
||||
public BaseVCloudDirectorRestClientExpectTest() {
|
||||
provider = "vcloud-director";
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TasksList xmlns="http://www.vmware.com/vcloud/v1.5" 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"
|
||||
name="Tasks Lists"
|
||||
type="application/vnd.vmware.vcloud.tasksList+xml"
|
||||
href="https://vcloudbeta.bluelock.com/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0">
|
||||
<Task
|
||||
status="success"
|
||||
startTime="2012-02-07T00:16:28.450-05:00"
|
||||
operationName="catalogCreateCatalog"
|
||||
operation="Created Catalog QunyingTestCatalog(7212e451-76e1-4631-b2de-ba1dfd8080e4)"
|
||||
expiryTime="2012-05-07T00:16:28.450-04:00"
|
||||
endTime="2012-02-07T00:16:28.867-05:00"
|
||||
name="task"
|
||||
id="urn:vcloud:task:5fcd2af3-d0ec-45ce-9451-8c585a2c766b"
|
||||
type="application/vnd.vmware.vcloud.task+xml"
|
||||
href="https://vcloudbeta.bluelock.com/api/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b">
|
||||
<Owner
|
||||
type="application/vnd.vmware.vcloud.catalog+xml"
|
||||
name="QunyingTestCatalog"
|
||||
href="https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4" />
|
||||
<User
|
||||
type="application/vnd.vmware.admin.user+xml"
|
||||
name="qunying.huang@enstratus.com"
|
||||
href="https://vcloudbeta.bluelock.com/api/admin/user/967d317c-4273-4a95-b8a4-bf63b78e9c69" />
|
||||
<Organization
|
||||
type="application/vnd.vmware.vcloud.org+xml"
|
||||
name="JClouds"
|
||||
href="https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0" />
|
||||
</Task>
|
||||
<Task
|
||||
status="success"
|
||||
startTime="2012-02-06T17:30:38.507-05:00"
|
||||
operationName="jobEnable"
|
||||
operation="Enabled User (967d317c-4273-4a95-b8a4-bf63b78e9c69)"
|
||||
expiryTime="2012-05-06T17:30:38.507-04:00"
|
||||
endTime="2012-02-06T17:30:38.507-05:00"
|
||||
name="task"
|
||||
id="urn:vcloud:task:bd22e745-9c2a-4f82-a954-0e35b6f76ba5"
|
||||
type="application/vnd.vmware.vcloud.task+xml"
|
||||
href="https://vcloudbeta.bluelock.com/api/task/bd22e745-9c2a-4f82-a954-0e35b6f76ba5">
|
||||
<User
|
||||
type="application/vnd.vmware.admin.user+xml"
|
||||
name="adrian@jclouds.org"
|
||||
href="https://vcloudbeta.bluelock.com/api/admin/user/8c360b93-ed25-4c9a-8e24-d48cd9966d93" />
|
||||
<Organization
|
||||
type="application/vnd.vmware.vcloud.org+xml"
|
||||
name="JClouds"
|
||||
href="https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0" />
|
||||
</Task>
|
||||
</TasksList>
|
Loading…
Reference in New Issue