mirror of https://github.com/apache/jclouds.git
Issue 280: added screen thumbnail
This commit is contained in:
parent
9a3b8e151f
commit
60bd5ede4f
|
@ -27,6 +27,7 @@ import static org.jclouds.vcloud.VCloudMediaType.VAPPTEMPLATE_XML;
|
||||||
import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
|
import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
|
||||||
import static org.jclouds.vcloud.VCloudMediaType.VM_XML;
|
import static org.jclouds.vcloud.VCloudMediaType.VM_XML;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -89,6 +90,17 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
*/
|
*/
|
||||||
@RequestFilters(SetVCloudTokenCookie.class)
|
@RequestFilters(SetVCloudTokenCookie.class)
|
||||||
public interface VCloudAsyncClient extends CommonVCloudAsyncClient {
|
public interface VCloudAsyncClient extends CommonVCloudAsyncClient {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @see VCloudClient#getThumbnailOfVm
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/screen")
|
||||||
|
@Consumes("image/png")
|
||||||
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<InputStream> getThumbnailOfVm(@EndpointParam URI vm);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @see VCloudClient#listOrgs
|
* @see VCloudClient#listOrgs
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
package org.jclouds.vcloud;
|
package org.jclouds.vcloud;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
|
@ -46,6 +47,14 @@ import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
|
||||||
*/
|
*/
|
||||||
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
|
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
|
||||||
public interface VCloudClient extends CommonVCloudClient {
|
public interface VCloudClient extends CommonVCloudClient {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a Screen Thumbnail for a Virtual Machine
|
||||||
|
*
|
||||||
|
* @param vm to snapshot
|
||||||
|
*/
|
||||||
|
InputStream getThumbnailOfVm(URI vm);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The response to a login request includes a list of the organizations to which the
|
* The response to a login request includes a list of the organizations to which the
|
||||||
* authenticated user has access.
|
* authenticated user has access.
|
||||||
|
|
|
@ -41,6 +41,7 @@ import org.jclouds.http.HttpRequest;
|
||||||
import org.jclouds.http.RequiresHttp;
|
import org.jclouds.http.RequiresHttp;
|
||||||
import org.jclouds.http.functions.ParseSax;
|
import org.jclouds.http.functions.ParseSax;
|
||||||
import org.jclouds.http.functions.ReleasePayloadAndReturn;
|
import org.jclouds.http.functions.ReleasePayloadAndReturn;
|
||||||
|
import org.jclouds.http.functions.ReturnInputStream;
|
||||||
import org.jclouds.rest.ConfiguresRestClient;
|
import org.jclouds.rest.ConfiguresRestClient;
|
||||||
import org.jclouds.rest.RestClientTest;
|
import org.jclouds.rest.RestClientTest;
|
||||||
import org.jclouds.rest.RestContextFactory;
|
import org.jclouds.rest.RestContextFactory;
|
||||||
|
@ -98,6 +99,23 @@ import domain.VCloudVersionsAsyncClient;
|
||||||
*/
|
*/
|
||||||
@Test(groups = "unit", testName = "vcloud.VCloudAsyncClientTest")
|
@Test(groups = "unit", testName = "vcloud.VCloudAsyncClientTest")
|
||||||
public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
|
|
||||||
|
public void testGetThumbnailOfVm() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VCloudAsyncClient.class.getMethod("getThumbnailOfVm", URI.class);
|
||||||
|
HttpRequest request = processor
|
||||||
|
.createRequest(method, URI.create("http://vcloud.example.com/api/v1.0/vApp/vm-12"));
|
||||||
|
|
||||||
|
assertRequestLineEquals(request, "GET http://vcloud.example.com/api/v1.0/vApp/vm-12/screen HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(request, "Accept: image/png\n");
|
||||||
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, request, ReturnInputStream.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(request);
|
||||||
|
}
|
||||||
|
|
||||||
public void testUpdateGuestConfiguration() throws SecurityException, NoSuchMethodException, IOException {
|
public void testUpdateGuestConfiguration() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Method method = VCloudAsyncClient.class.getMethod("updateGuestCustomizationOfVm", URI.class,
|
Method method = VCloudAsyncClient.class.getMethod("updateGuestCustomizationOfVm", URI.class,
|
||||||
GuestCustomizationSection.class);
|
GuestCustomizationSection.class);
|
||||||
|
@ -111,8 +129,7 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
"PUT http://vcloud.example.com/api/v1.0/vApp/vm-12/guestCustomizationSection HTTP/1.1");
|
"PUT http://vcloud.example.com/api/v1.0/vApp/vm-12/guestCustomizationSection HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n");
|
||||||
assertPayloadEquals(request, Utils.toStringAndClose(getClass().getResourceAsStream(
|
assertPayloadEquals(request, Utils.toStringAndClose(getClass().getResourceAsStream(
|
||||||
"/guestCustomizationSection.xml")), "application/vnd.vmware.vcloud.guestCustomizationSection+xml",
|
"/guestCustomizationSection.xml")), "application/vnd.vmware.vcloud.guestCustomizationSection+xml", false);
|
||||||
false);
|
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, ParseSax.class);
|
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||||
assertSaxResponseParserClassEquals(method, TaskHandler.class);
|
assertSaxResponseParserClassEquals(method, TaskHandler.class);
|
||||||
|
|
|
@ -116,6 +116,27 @@ public class VCloudClientLiveTest extends CommonVCloudClientLiveTest<VCloudClien
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetThumbnailOfVm() throws Exception {
|
||||||
|
Org org = connection.findOrgNamed(null);
|
||||||
|
for (ReferenceType vdc : org.getVDCs().values()) {
|
||||||
|
VDC response = connection.getVDC(vdc.getHref());
|
||||||
|
for (ReferenceType item : response.getResourceEntities().values()) {
|
||||||
|
if (item.getType().equals(VCloudMediaType.VAPP_XML)) {
|
||||||
|
try {
|
||||||
|
VApp app = connection.getVApp(item.getHref());
|
||||||
|
assertNotNull(app);
|
||||||
|
for (Vm vm : app.getChildren()) {
|
||||||
|
assert connection.getThumbnailOfVm(vm.getHref()) != null;
|
||||||
|
}
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetVm() throws Exception {
|
public void testGetVm() throws Exception {
|
||||||
Org org = connection.findOrgNamed(null);
|
Org org = connection.findOrgNamed(null);
|
||||||
|
|
Loading…
Reference in New Issue