mirror of https://github.com/apache/jclouds.git
Issue 125: applied to cloudservers
This commit is contained in:
parent
b86fe9eec3
commit
d4018a5828
|
@ -32,16 +32,7 @@ import javax.ws.rs.PathParam;
|
||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
import org.jclouds.http.functions.ReturnFalseOn404;
|
|
||||||
import org.jclouds.cloudservers.binders.BindAdminPassToJsonPayload;
|
|
||||||
import org.jclouds.cloudservers.binders.BindBackupScheduleToJsonPayload;
|
import org.jclouds.cloudservers.binders.BindBackupScheduleToJsonPayload;
|
||||||
import org.jclouds.cloudservers.binders.BindConfirmResizeToJsonPayload;
|
|
||||||
import org.jclouds.cloudservers.binders.BindCreateImageToJsonPayload;
|
|
||||||
import org.jclouds.cloudservers.binders.BindRebootTypeToJsonPayload;
|
|
||||||
import org.jclouds.cloudservers.binders.BindResizeFlavorToJsonPayload;
|
|
||||||
import org.jclouds.cloudservers.binders.BindRevertResizeToJsonPayload;
|
|
||||||
import org.jclouds.cloudservers.binders.BindServerNameToJsonPayload;
|
|
||||||
import org.jclouds.cloudservers.binders.BindSharedIpGroupToJsonPayload;
|
|
||||||
import org.jclouds.cloudservers.domain.Addresses;
|
import org.jclouds.cloudservers.domain.Addresses;
|
||||||
import org.jclouds.cloudservers.domain.BackupSchedule;
|
import org.jclouds.cloudservers.domain.BackupSchedule;
|
||||||
import org.jclouds.cloudservers.domain.Flavor;
|
import org.jclouds.cloudservers.domain.Flavor;
|
||||||
|
@ -53,12 +44,14 @@ import org.jclouds.cloudservers.options.CreateServerOptions;
|
||||||
import org.jclouds.cloudservers.options.CreateSharedIpGroupOptions;
|
import org.jclouds.cloudservers.options.CreateSharedIpGroupOptions;
|
||||||
import org.jclouds.cloudservers.options.ListOptions;
|
import org.jclouds.cloudservers.options.ListOptions;
|
||||||
import org.jclouds.cloudservers.options.RebuildServerOptions;
|
import org.jclouds.cloudservers.options.RebuildServerOptions;
|
||||||
|
import org.jclouds.http.functions.ReturnFalseOn404;
|
||||||
import org.jclouds.openstack.filters.AddTimestampQuery;
|
import org.jclouds.openstack.filters.AddTimestampQuery;
|
||||||
import org.jclouds.openstack.filters.AuthenticateRequest;
|
import org.jclouds.openstack.filters.AuthenticateRequest;
|
||||||
import org.jclouds.rest.annotations.BinderParam;
|
import org.jclouds.rest.annotations.BinderParam;
|
||||||
import org.jclouds.rest.annotations.Endpoint;
|
import org.jclouds.rest.annotations.Endpoint;
|
||||||
import org.jclouds.rest.annotations.ExceptionParser;
|
import org.jclouds.rest.annotations.ExceptionParser;
|
||||||
import org.jclouds.rest.annotations.MapBinder;
|
import org.jclouds.rest.annotations.MapBinder;
|
||||||
|
import org.jclouds.rest.annotations.Payload;
|
||||||
import org.jclouds.rest.annotations.PayloadParam;
|
import org.jclouds.rest.annotations.PayloadParam;
|
||||||
import org.jclouds.rest.annotations.QueryParams;
|
import org.jclouds.rest.annotations.QueryParams;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
|
@ -82,8 +75,8 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
* @see <a href="http://docs.rackspacecloud.com/servers/api/cs-devguide-latest.pdf" />
|
* @see <a href="http://docs.rackspacecloud.com/servers/api/cs-devguide-latest.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@SkipEncoding( { '/', '=' })
|
@SkipEncoding({ '/', '=' })
|
||||||
@RequestFilters( { AuthenticateRequest.class, AddTimestampQuery.class })
|
@RequestFilters({ AuthenticateRequest.class, AddTimestampQuery.class })
|
||||||
@Endpoint(ServerManagement.class)
|
@Endpoint(ServerManagement.class)
|
||||||
public interface CloudServersAsyncClient {
|
public interface CloudServersAsyncClient {
|
||||||
|
|
||||||
|
@ -123,8 +116,9 @@ public interface CloudServersAsyncClient {
|
||||||
@POST
|
@POST
|
||||||
@QueryParams(keys = "format", values = "json")
|
@QueryParams(keys = "format", values = "json")
|
||||||
@Path("/servers/{id}/action")
|
@Path("/servers/{id}/action")
|
||||||
ListenableFuture<Void> rebootServer(@PathParam("id") int id,
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@BinderParam(BindRebootTypeToJsonPayload.class) RebootType rebootType);
|
@Payload("%7B\"reboot\":%7B\"type\":\"{type}\"%7D%7D")
|
||||||
|
ListenableFuture<Void> rebootServer(@PathParam("id") int id, @PayloadParam("type") RebootType rebootType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#resizeServer
|
* @see CloudServersClient#resizeServer
|
||||||
|
@ -132,8 +126,9 @@ public interface CloudServersAsyncClient {
|
||||||
@POST
|
@POST
|
||||||
@QueryParams(keys = "format", values = "json")
|
@QueryParams(keys = "format", values = "json")
|
||||||
@Path("/servers/{id}/action")
|
@Path("/servers/{id}/action")
|
||||||
ListenableFuture<Void> resizeServer(@PathParam("id") int id,
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@BinderParam(BindResizeFlavorToJsonPayload.class) int flavorId);
|
@Payload("%7B\"resize\":%7B\"flavorId\":{flavorId}%7D%7D")
|
||||||
|
ListenableFuture<Void> resizeServer(@PathParam("id") int id, @PayloadParam("flavorId") int flavorId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#confirmResizeServer
|
* @see CloudServersClient#confirmResizeServer
|
||||||
|
@ -142,7 +137,8 @@ public interface CloudServersAsyncClient {
|
||||||
@QueryParams(keys = "format", values = "json")
|
@QueryParams(keys = "format", values = "json")
|
||||||
@Path("/servers/{id}/action")
|
@Path("/servers/{id}/action")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
ListenableFuture<Void> confirmResizeServer(@PathParam("id") @BinderParam(BindConfirmResizeToJsonPayload.class) int id);
|
@Payload("{\"confirmResize\":null}")
|
||||||
|
ListenableFuture<Void> confirmResizeServer(@PathParam("id") int id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#revertResizeServer
|
* @see CloudServersClient#revertResizeServer
|
||||||
|
@ -151,7 +147,8 @@ public interface CloudServersAsyncClient {
|
||||||
@QueryParams(keys = "format", values = "json")
|
@QueryParams(keys = "format", values = "json")
|
||||||
@Path("/servers/{id}/action")
|
@Path("/servers/{id}/action")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
ListenableFuture<Void> revertResizeServer(@PathParam("id") @BinderParam(BindRevertResizeToJsonPayload.class) int id);
|
@Payload("{\"revertResize\":null}")
|
||||||
|
ListenableFuture<Void> revertResizeServer(@PathParam("id") int id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#createServer
|
* @see CloudServersClient#createServer
|
||||||
|
@ -163,7 +160,7 @@ public interface CloudServersAsyncClient {
|
||||||
@Path("/servers")
|
@Path("/servers")
|
||||||
@MapBinder(CreateServerOptions.class)
|
@MapBinder(CreateServerOptions.class)
|
||||||
ListenableFuture<Server> createServer(@PayloadParam("name") String name, @PayloadParam("imageId") int imageId,
|
ListenableFuture<Server> createServer(@PayloadParam("name") String name, @PayloadParam("imageId") int imageId,
|
||||||
@PayloadParam("flavorId") int flavorId, CreateServerOptions... options);
|
@PayloadParam("flavorId") int flavorId, CreateServerOptions... options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#rebuildServer
|
* @see CloudServersClient#rebuildServer
|
||||||
|
@ -179,10 +176,11 @@ public interface CloudServersAsyncClient {
|
||||||
*/
|
*/
|
||||||
@PUT
|
@PUT
|
||||||
@Path("/servers/{id}/ips/public/{address}")
|
@Path("/servers/{id}/ips/public/{address}")
|
||||||
@MapBinder(BindSharedIpGroupToJsonPayload.class)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Payload("%7B\"shareIp\":%7B\"sharedIpGroupId\":{sharedIpGroupId},\"configureServer\":{configureServer}%7D%7D")
|
||||||
ListenableFuture<Void> shareIp(@PathParam("address") String addressToShare,
|
ListenableFuture<Void> shareIp(@PathParam("address") String addressToShare,
|
||||||
@PathParam("id") int serverToTosignBindressTo, @PayloadParam("sharedIpGroupId") int sharedIpGroup,
|
@PathParam("id") int serverToTosignBindressTo, @PayloadParam("sharedIpGroupId") int sharedIpGroup,
|
||||||
@PayloadParam("configureServer") boolean configureServer);
|
@PayloadParam("configureServer") boolean configureServer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#unshareIp
|
* @see CloudServersClient#unshareIp
|
||||||
|
@ -191,23 +189,25 @@ public interface CloudServersAsyncClient {
|
||||||
@Path("/servers/{id}/ips/public/{address}")
|
@Path("/servers/{id}/ips/public/{address}")
|
||||||
@ExceptionParser(ReturnVoidOnNotFoundOr404.class)
|
@ExceptionParser(ReturnVoidOnNotFoundOr404.class)
|
||||||
ListenableFuture<Void> unshareIp(@PathParam("address") String addressToShare,
|
ListenableFuture<Void> unshareIp(@PathParam("address") String addressToShare,
|
||||||
@PathParam("id") int serverToTosignBindressTo);
|
@PathParam("id") int serverToTosignBindressTo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#changeAdminPass
|
* @see CloudServersClient#changeAdminPass
|
||||||
*/
|
*/
|
||||||
@PUT
|
@PUT
|
||||||
@Path("/servers/{id}")
|
@Path("/servers/{id}")
|
||||||
ListenableFuture<Void> changeAdminPass(@PathParam("id") int id,
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@BinderParam(BindAdminPassToJsonPayload.class) String adminPass);
|
@Payload("%7B\"server\":%7B\"adminPass\":\"{adminPass}\"%7D%7D")
|
||||||
|
ListenableFuture<Void> changeAdminPass(@PathParam("id") int id, @PayloadParam("adminPass") String adminPass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#renameServer
|
* @see CloudServersClient#renameServer
|
||||||
*/
|
*/
|
||||||
@PUT
|
@PUT
|
||||||
@Path("/servers/{id}")
|
@Path("/servers/{id}")
|
||||||
ListenableFuture<Void> renameServer(@PathParam("id") int id,
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@BinderParam(BindServerNameToJsonPayload.class) String newName);
|
@Payload("%7B\"server\":%7B\"name\":\"{name}\"%7D%7D")
|
||||||
|
ListenableFuture<Void> renameServer(@PathParam("id") int id, @PayloadParam("name") String newName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#listFlavors
|
* @see CloudServersClient#listFlavors
|
||||||
|
@ -268,10 +268,11 @@ public interface CloudServersAsyncClient {
|
||||||
@Unwrap
|
@Unwrap
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@QueryParams(keys = "format", values = "json")
|
@QueryParams(keys = "format", values = "json")
|
||||||
@MapBinder(BindCreateImageToJsonPayload.class)
|
|
||||||
@Path("/images")
|
@Path("/images")
|
||||||
ListenableFuture<Image> createImageFromServer(@PayloadParam("imageName") String imageName,
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@PayloadParam("serverId") int serverId);
|
@Payload("%7B\"image\":%7B\"serverId\":{serverId},\"name\":\"{name}\"%7D%7D")
|
||||||
|
ListenableFuture<Image> createImageFromServer(@PayloadParam("name") String imageName,
|
||||||
|
@PayloadParam("serverId") int serverId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#listSharedIpGroups
|
* @see CloudServersClient#listSharedIpGroups
|
||||||
|
@ -305,7 +306,7 @@ public interface CloudServersAsyncClient {
|
||||||
@Path("/shared_ip_groups")
|
@Path("/shared_ip_groups")
|
||||||
@MapBinder(CreateSharedIpGroupOptions.class)
|
@MapBinder(CreateSharedIpGroupOptions.class)
|
||||||
ListenableFuture<SharedIpGroup> createSharedIpGroup(@PayloadParam("name") String name,
|
ListenableFuture<SharedIpGroup> createSharedIpGroup(@PayloadParam("name") String name,
|
||||||
CreateSharedIpGroupOptions... options);
|
CreateSharedIpGroupOptions... options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#deleteSharedIpGroup
|
* @see CloudServersClient#deleteSharedIpGroup
|
||||||
|
@ -340,7 +341,7 @@ public interface CloudServersAsyncClient {
|
||||||
@ExceptionParser(ReturnFalseOn404.class)
|
@ExceptionParser(ReturnFalseOn404.class)
|
||||||
@Path("/servers/{id}/backup_schedule")
|
@Path("/servers/{id}/backup_schedule")
|
||||||
ListenableFuture<Void> replaceBackupSchedule(@PathParam("id") int id,
|
ListenableFuture<Void> replaceBackupSchedule(@PathParam("id") int id,
|
||||||
@BinderParam(BindBackupScheduleToJsonPayload.class) BackupSchedule backupSchedule);
|
@BinderParam(BindBackupScheduleToJsonPayload.class) BackupSchedule backupSchedule);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#listAddresses
|
* @see CloudServersClient#listAddresses
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.rest.binders.BindToJsonPayload;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class BindAdminPassToJsonPayload extends BindToJsonPayload {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
|
||||||
throw new IllegalStateException("Change Admin Pass is a PUT operation");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Object toBind) {
|
|
||||||
checkArgument(toBind instanceof String, "this binder is only valid for Strings!");
|
|
||||||
return super.bindToRequest(request,
|
|
||||||
ImmutableMap.of("server", ImmutableMap.of("adminPass", checkNotNull(toBind, "adminPass"))));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.rest.Binder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class BindConfirmResizeToJsonPayload implements Binder {
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Object toBind) {
|
|
||||||
request.setPayload("{\"confirmResize\":null}");
|
|
||||||
return request;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.rest.binders.BindToJsonPayload;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class BindCreateImageToJsonPayload extends BindToJsonPayload {
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private class CreateImageRequest {
|
|
||||||
final int serverId;
|
|
||||||
final String name;
|
|
||||||
|
|
||||||
private CreateImageRequest(int serverId, String name) {
|
|
||||||
this.serverId = serverId;
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
|
||||||
CreateImageRequest createRequest = new CreateImageRequest(Integer
|
|
||||||
.parseInt(checkNotNull(postParams.get("serverId"))), checkNotNull(postParams
|
|
||||||
.get("imageName")));
|
|
||||||
return super.bindToRequest(request, ImmutableMap.of("image", createRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Object toBind) {
|
|
||||||
throw new IllegalArgumentException("image is needs parameters");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.cloudservers.domain.RebootType;
|
|
||||||
import org.jclouds.rest.binders.BindToJsonPayload;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class BindRebootTypeToJsonPayload extends BindToJsonPayload {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
|
||||||
throw new IllegalStateException("Reboot doesn't take map parameters");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Object toBind) {
|
|
||||||
checkArgument(toBind instanceof RebootType, "this binder is only valid for RebootTypes!");
|
|
||||||
return super.bindToRequest(request, ImmutableMap.of("reboot", ImmutableMap.of("type", checkNotNull(
|
|
||||||
toBind, "type"))));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.rest.binders.BindToJsonPayload;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class BindResizeFlavorToJsonPayload extends BindToJsonPayload {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
|
||||||
throw new IllegalStateException("Resize doesn't take map parameters");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Object toBind) {
|
|
||||||
checkArgument(toBind instanceof Integer, "this binder is only valid for integers!");
|
|
||||||
return super.bindToRequest(request, ImmutableMap.of("resize", ImmutableMap.of("flavorId",
|
|
||||||
(Integer) checkNotNull(toBind, "flavorId"))));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.rest.Binder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class BindRevertResizeToJsonPayload implements Binder {
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Object toBind) {
|
|
||||||
request.setPayload("{\"revertResize\":null}");
|
|
||||||
return request;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.rest.binders.BindToJsonPayload;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class BindServerNameToJsonPayload extends BindToJsonPayload {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
|
||||||
throw new IllegalStateException("Change Server Name is a PUT operation");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Object toBind) {
|
|
||||||
checkArgument(toBind instanceof String, "this binder is only valid for Strings!");
|
|
||||||
return super.bindToRequest(request, ImmutableMap.of("server", ImmutableMap.of("name", checkNotNull(
|
|
||||||
toBind, "name"))));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,66 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.rest.binders.BindToJsonPayload;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class BindSharedIpGroupToJsonPayload extends BindToJsonPayload {
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private class ShareIpRequest {
|
|
||||||
final int sharedIpGroupId;
|
|
||||||
Boolean configureServer;
|
|
||||||
|
|
||||||
private ShareIpRequest(int sharedIpGroupId) {
|
|
||||||
this.sharedIpGroupId = sharedIpGroupId;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
|
||||||
ShareIpRequest createRequest = new ShareIpRequest(Integer.parseInt(checkNotNull(postParams
|
|
||||||
.get("sharedIpGroupId"))));
|
|
||||||
if (Boolean.parseBoolean(checkNotNull(postParams.get("configureServer")))) {
|
|
||||||
createRequest.configureServer = new Boolean(true);
|
|
||||||
}
|
|
||||||
return super.bindToRequest(request, ImmutableMap.of("shareIp", createRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Object toBind) {
|
|
||||||
throw new IllegalStateException("shareIp is needs parameters");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -65,7 +65,7 @@ public class BackupSchedule {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "BackupSchedule [daily=" + daily + ", enabled=" + enabled + ", weekly=" + weekly + "]";
|
return "[daily=" + daily + ", enabled=" + enabled + ", weekly=" + weekly + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -85,17 +85,17 @@ import com.google.inject.TypeLiteral;
|
||||||
public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyncClient> {
|
public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyncClient> {
|
||||||
private static final Class<? extends ListOptions[]> listOptionsVarargsClass = new ListOptions[] {}.getClass();
|
private static final Class<? extends ListOptions[]> listOptionsVarargsClass = new ListOptions[] {}.getClass();
|
||||||
private static final Class<? extends CreateServerOptions[]> createServerOptionsVarargsClass = new CreateServerOptions[] {}
|
private static final Class<? extends CreateServerOptions[]> createServerOptionsVarargsClass = new CreateServerOptions[] {}
|
||||||
.getClass();
|
.getClass();
|
||||||
|
|
||||||
public void testCreateServer() throws IOException, SecurityException, NoSuchMethodException {
|
public void testCreateServer() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
||||||
createServerOptionsVarargsClass);
|
createServerOptionsVarargsClass);
|
||||||
HttpRequest request = processor.createRequest(method, "ralphie", 2, 1);
|
HttpRequest request = processor.createRequest(method, "ralphie", 2, 1);
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, "{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1}}",
|
assertPayloadEquals(request, "{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1}}",
|
||||||
"application/json", false);
|
"application/json", false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -107,14 +107,14 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
|
|
||||||
public void testCreateServerWithIpGroup() throws IOException, SecurityException, NoSuchMethodException {
|
public void testCreateServerWithIpGroup() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
||||||
createServerOptionsVarargsClass);
|
createServerOptionsVarargsClass);
|
||||||
HttpRequest request = processor.createRequest(method, "ralphie", 2, 1, withSharedIpGroup(2));
|
HttpRequest request = processor.createRequest(method, "ralphie", 2, 1, withSharedIpGroup(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request,
|
assertPayloadEquals(request,
|
||||||
"{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1,\"sharedIpGroupId\":2}}",
|
"{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1,\"sharedIpGroupId\":2}}",
|
||||||
"application/json", false);
|
"application/json", false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -125,16 +125,16 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
|
|
||||||
public void testCreateServerWithFile() throws IOException, SecurityException, NoSuchMethodException {
|
public void testCreateServerWithFile() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
||||||
createServerOptionsVarargsClass);
|
createServerOptionsVarargsClass);
|
||||||
HttpRequest request = processor
|
HttpRequest request = processor
|
||||||
.createRequest(method, "ralphie", 2, 1, withFile("/etc/jclouds", "foo".getBytes()));
|
.createRequest(method, "ralphie", 2, 1, withFile("/etc/jclouds", "foo".getBytes()));
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(
|
assertPayloadEquals(
|
||||||
request,
|
request,
|
||||||
"{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1,\"personality\":[{\"path\":\"/etc/jclouds\",\"contents\":\"Zm9v\"}]}}",
|
"{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1,\"personality\":[{\"path\":\"/etc/jclouds\",\"contents\":\"Zm9v\"}]}}",
|
||||||
"application/json", false);
|
"application/json", false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -146,15 +146,15 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
|
|
||||||
public void testCreateServerWithMetadata() throws IOException, SecurityException, NoSuchMethodException {
|
public void testCreateServerWithMetadata() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
||||||
createServerOptionsVarargsClass);
|
createServerOptionsVarargsClass);
|
||||||
HttpRequest request = processor.createRequest(method, "ralphie", 2, 1,
|
HttpRequest request = processor.createRequest(method, "ralphie", 2, 1,
|
||||||
withMetadata(ImmutableMap.of("foo", "bar")));
|
withMetadata(ImmutableMap.of("foo", "bar")));
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request,
|
assertPayloadEquals(request,
|
||||||
"{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1,\"metadata\":{\"foo\":\"bar\"}}}",
|
"{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1,\"metadata\":{\"foo\":\"bar\"}}}",
|
||||||
"application/json", false);
|
"application/json", false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -165,18 +165,18 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCreateServerWithIpGroupAndSharedIp() throws IOException, SecurityException, NoSuchMethodException,
|
public void testCreateServerWithIpGroupAndSharedIp() throws IOException, SecurityException, NoSuchMethodException,
|
||||||
UnknownHostException {
|
UnknownHostException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("createServer", String.class, int.class, int.class,
|
||||||
createServerOptionsVarargsClass);
|
createServerOptionsVarargsClass);
|
||||||
HttpRequest request = processor.createRequest(method, "ralphie", 2, 1, withSharedIpGroup(2).withSharedIp(
|
HttpRequest request = processor.createRequest(method, "ralphie", 2, 1,
|
||||||
"127.0.0.1"));
|
withSharedIpGroup(2).withSharedIp("127.0.0.1"));
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers?format=json HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(
|
assertPayloadEquals(
|
||||||
request,
|
request,
|
||||||
"{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1,\"sharedIpGroupId\":2,\"addresses\":{\"public\":[\"127.0.0.1\"]}}}",
|
"{\"server\":{\"name\":\"ralphie\",\"imageId\":2,\"flavorId\":1,\"sharedIpGroupId\":2,\"addresses\":{\"public\":[\"127.0.0.1\"]}}}",
|
||||||
"application/json", false);
|
"application/json", false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -222,7 +222,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
HttpRequest request = processor.createRequest(method, changesSince(now).maxResults(1).startAt(2));
|
HttpRequest request = processor.createRequest(method, changesSince(now).maxResults(1).startAt(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request,
|
assertRequestLineEquals(request,
|
||||||
"GET http://serverManagementUrl/servers?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
"GET http://serverManagementUrl/servers?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, null, null, false);
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
HttpRequest request = processor.createRequest(method, changesSince(now).maxResults(1).startAt(2));
|
HttpRequest request = processor.createRequest(method, changesSince(now).maxResults(1).startAt(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request,
|
assertRequestLineEquals(request,
|
||||||
"GET http://serverManagementUrl/flavors?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
"GET http://serverManagementUrl/flavors?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, null, null, false);
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
HttpRequest request = processor.createRequest(method, withDetails().changesSince(now).maxResults(1).startAt(2));
|
HttpRequest request = processor.createRequest(method, withDetails().changesSince(now).maxResults(1).startAt(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request,
|
assertRequestLineEquals(request,
|
||||||
"GET http://serverManagementUrl/flavors/detail?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
"GET http://serverManagementUrl/flavors/detail?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, null, null, false);
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
@ -375,7 +375,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
HttpRequest request = processor.createRequest(method, changesSince(now).maxResults(1).startAt(2));
|
HttpRequest request = processor.createRequest(method, changesSince(now).maxResults(1).startAt(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request,
|
assertRequestLineEquals(request,
|
||||||
"GET http://serverManagementUrl/images?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
"GET http://serverManagementUrl/images?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, null, null, false);
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
@ -391,7 +391,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
HttpRequest request = processor.createRequest(method, withDetails().changesSince(now).maxResults(1).startAt(2));
|
HttpRequest request = processor.createRequest(method, withDetails().changesSince(now).maxResults(1).startAt(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request,
|
assertRequestLineEquals(request,
|
||||||
"GET http://serverManagementUrl/images/detail?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
"GET http://serverManagementUrl/images/detail?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, null, null, false);
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
@ -434,12 +434,13 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
|
|
||||||
public void testShareIpNoConfig() throws IOException, SecurityException, NoSuchMethodException, UnknownHostException {
|
public void testShareIpNoConfig() throws IOException, SecurityException, NoSuchMethodException, UnknownHostException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("shareIp", String.class, int.class, int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("shareIp", String.class, int.class, int.class,
|
||||||
boolean.class);
|
boolean.class);
|
||||||
HttpRequest request = processor.createRequest(method, "127.0.0.1", 2, 3, false);
|
HttpRequest request = processor.createRequest(method, "127.0.0.1", 2, 3, false);
|
||||||
|
|
||||||
assertRequestLineEquals(request, "PUT http://serverManagementUrl/servers/2/ips/public/127.0.0.1 HTTP/1.1");
|
assertRequestLineEquals(request, "PUT http://serverManagementUrl/servers/2/ips/public/127.0.0.1 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "");
|
assertNonPayloadHeadersEqual(request, "");
|
||||||
assertPayloadEquals(request, "{\"shareIp\":{\"sharedIpGroupId\":3}}", MediaType.APPLICATION_JSON, false);
|
assertPayloadEquals(request, "{\"shareIp\":{\"sharedIpGroupId\":3,\"configureServer\":false}}",
|
||||||
|
MediaType.APPLICATION_JSON, false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class);
|
assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -451,13 +452,13 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
|
|
||||||
public void testShareIpConfig() throws IOException, SecurityException, NoSuchMethodException, UnknownHostException {
|
public void testShareIpConfig() throws IOException, SecurityException, NoSuchMethodException, UnknownHostException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("shareIp", String.class, int.class, int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("shareIp", String.class, int.class, int.class,
|
||||||
boolean.class);
|
boolean.class);
|
||||||
HttpRequest request = processor.createRequest(method, "127.0.0.1", 2, 3, true);
|
HttpRequest request = processor.createRequest(method, "127.0.0.1", 2, 3, true);
|
||||||
|
|
||||||
assertRequestLineEquals(request, "PUT http://serverManagementUrl/servers/2/ips/public/127.0.0.1 HTTP/1.1");
|
assertRequestLineEquals(request, "PUT http://serverManagementUrl/servers/2/ips/public/127.0.0.1 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "");
|
assertNonPayloadHeadersEqual(request, "");
|
||||||
assertPayloadEquals(request, "{\"shareIp\":{\"sharedIpGroupId\":3,\"configureServer\":true}}",
|
assertPayloadEquals(request, "{\"shareIp\":{\"sharedIpGroupId\":3,\"configureServer\":true}}",
|
||||||
MediaType.APPLICATION_JSON, false);
|
MediaType.APPLICATION_JSON, false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class);
|
assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -468,7 +469,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testUnshareIpNoConfig() throws IOException, SecurityException, NoSuchMethodException,
|
public void testUnshareIpNoConfig() throws IOException, SecurityException, NoSuchMethodException,
|
||||||
UnknownHostException {
|
UnknownHostException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("unshareIp", String.class, int.class);
|
Method method = CloudServersAsyncClient.class.getMethod("unshareIp", String.class, int.class);
|
||||||
HttpRequest request = processor.createRequest(method, "127.0.0.1", 2, 3, false);
|
HttpRequest request = processor.createRequest(method, "127.0.0.1", 2, 3, false);
|
||||||
|
|
||||||
|
@ -487,13 +488,13 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
public void testReplaceBackupSchedule() throws IOException, SecurityException, NoSuchMethodException {
|
public void testReplaceBackupSchedule() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("replaceBackupSchedule", int.class, BackupSchedule.class);
|
Method method = CloudServersAsyncClient.class.getMethod("replaceBackupSchedule", int.class, BackupSchedule.class);
|
||||||
HttpRequest request = processor.createRequest(method, 2, new BackupSchedule(WeeklyBackup.MONDAY,
|
HttpRequest request = processor.createRequest(method, 2, new BackupSchedule(WeeklyBackup.MONDAY,
|
||||||
DailyBackup.H_0800_1000, true));
|
DailyBackup.H_0800_1000, true));
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers/2/backup_schedule HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers/2/backup_schedule HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "");
|
assertNonPayloadHeadersEqual(request, "");
|
||||||
assertPayloadEquals(request,
|
assertPayloadEquals(request,
|
||||||
"{\"backupSchedule\":{\"daily\":\"H_0800_1000\",\"enabled\":true,\"weekly\":\"MONDAY\"}}",
|
"{\"backupSchedule\":{\"daily\":\"H_0800_1000\",\"enabled\":true,\"weekly\":\"MONDAY\"}}",
|
||||||
MediaType.APPLICATION_JSON, false);
|
MediaType.APPLICATION_JSON, false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class);
|
assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -571,7 +572,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
HttpRequest request = processor.createRequest(method, changesSince(now).maxResults(1).startAt(2));
|
HttpRequest request = processor.createRequest(method, changesSince(now).maxResults(1).startAt(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request,
|
assertRequestLineEquals(request,
|
||||||
"GET http://serverManagementUrl/shared_ip_groups?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
"GET http://serverManagementUrl/shared_ip_groups?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, null, null, false);
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
@ -602,7 +603,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
HttpRequest request = processor.createRequest(method, withDetails().changesSince(now).maxResults(1).startAt(2));
|
HttpRequest request = processor.createRequest(method, withDetails().changesSince(now).maxResults(1).startAt(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request,
|
assertRequestLineEquals(request,
|
||||||
"GET http://serverManagementUrl/shared_ip_groups/detail?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
"GET http://serverManagementUrl/shared_ip_groups/detail?format=json&changes-since=10000&limit=1&offset=2 HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, null, null, false);
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
@ -629,11 +630,11 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Class<? extends CreateSharedIpGroupOptions[]> createSharedIpGroupOptionsVarargsClass = new CreateSharedIpGroupOptions[] {}
|
private static final Class<? extends CreateSharedIpGroupOptions[]> createSharedIpGroupOptionsVarargsClass = new CreateSharedIpGroupOptions[] {}
|
||||||
.getClass();
|
.getClass();
|
||||||
|
|
||||||
public void testCreateSharedIpGroup() throws IOException, SecurityException, NoSuchMethodException {
|
public void testCreateSharedIpGroup() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("createSharedIpGroup", String.class,
|
Method method = CloudServersAsyncClient.class.getMethod("createSharedIpGroup", String.class,
|
||||||
createSharedIpGroupOptionsVarargsClass);
|
createSharedIpGroupOptionsVarargsClass);
|
||||||
HttpRequest request = processor.createRequest(method, "ralphie");
|
HttpRequest request = processor.createRequest(method, "ralphie");
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/shared_ip_groups?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/shared_ip_groups?format=json HTTP/1.1");
|
||||||
|
@ -650,13 +651,13 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
|
|
||||||
public void testCreateSharedIpGroupWithIpGroup() throws IOException, SecurityException, NoSuchMethodException {
|
public void testCreateSharedIpGroupWithIpGroup() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("createSharedIpGroup", String.class,
|
Method method = CloudServersAsyncClient.class.getMethod("createSharedIpGroup", String.class,
|
||||||
createSharedIpGroupOptionsVarargsClass);
|
createSharedIpGroupOptionsVarargsClass);
|
||||||
HttpRequest request = processor.createRequest(method, "ralphie", withServer(2));
|
HttpRequest request = processor.createRequest(method, "ralphie", withServer(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/shared_ip_groups?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/shared_ip_groups?format=json HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, "{\"sharedIpGroup\":{\"name\":\"ralphie\",\"server\":2}}",
|
assertPayloadEquals(request, "{\"sharedIpGroup\":{\"name\":\"ralphie\",\"server\":2}}",
|
||||||
MediaType.APPLICATION_JSON, false);
|
MediaType.APPLICATION_JSON, false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -747,7 +748,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/images?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/images?format=json HTTP/1.1");
|
||||||
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(request, "Accept: application/json\n");
|
||||||
assertPayloadEquals(request, "{\"image\":{\"serverId\":2,\"name\":\"ralphie\"}}", MediaType.APPLICATION_JSON,
|
assertPayloadEquals(request, "{\"image\":{\"serverId\":2,\"name\":\"ralphie\"}}", MediaType.APPLICATION_JSON,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
assertResponseParserClassEquals(method, request, UnwrapOnlyJsonValue.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
@ -758,11 +759,11 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Class<? extends RebuildServerOptions[]> rebuildServerOptionsVarargsClass = new RebuildServerOptions[] {}
|
private static final Class<? extends RebuildServerOptions[]> rebuildServerOptionsVarargsClass = new RebuildServerOptions[] {}
|
||||||
.getClass();
|
.getClass();
|
||||||
|
|
||||||
public void testRebuildServer() throws IOException, SecurityException, NoSuchMethodException {
|
public void testRebuildServer() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("rebuildServer", int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("rebuildServer", int.class,
|
||||||
rebuildServerOptionsVarargsClass);
|
rebuildServerOptionsVarargsClass);
|
||||||
HttpRequest request = processor.createRequest(method, 3);
|
HttpRequest request = processor.createRequest(method, 3);
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers/3/action?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers/3/action?format=json HTTP/1.1");
|
||||||
|
@ -778,7 +779,7 @@ public class CloudServersAsyncClientTest extends RestClientTest<CloudServersAsyn
|
||||||
|
|
||||||
public void testRebuildServerWithImage() throws IOException, SecurityException, NoSuchMethodException {
|
public void testRebuildServerWithImage() throws IOException, SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("rebuildServer", int.class,
|
Method method = CloudServersAsyncClient.class.getMethod("rebuildServer", int.class,
|
||||||
rebuildServerOptionsVarargsClass);
|
rebuildServerOptionsVarargsClass);
|
||||||
HttpRequest request = processor.createRequest(method, 3, withImage(2));
|
HttpRequest request = processor.createRequest(method, 3, withImage(2));
|
||||||
|
|
||||||
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers/3/action?format=json HTTP/1.1");
|
assertRequestLineEquals(request, "POST http://serverManagementUrl/servers/3/action?format=json HTTP/1.1");
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static org.testng.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.net.URI;
|
|
||||||
|
|
||||||
import javax.ws.rs.HttpMethod;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.json.config.GsonModule;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.inject.Guice;
|
|
||||||
import com.google.inject.Injector;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests behavior of {@code BindAdminPassToJsonPayload}
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
|
||||||
@Test(groups = "unit")
|
|
||||||
public class BindAdminPassToJsonPayloadTest {
|
|
||||||
|
|
||||||
Injector injector = Guice.createInjector(new GsonModule());
|
|
||||||
|
|
||||||
@Test(expectedExceptions = IllegalStateException.class)
|
|
||||||
public void testPostIsIncorrect() {
|
|
||||||
BindAdminPassToJsonPayload binder = new BindAdminPassToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, ImmutableMap.of("adminPass", "foo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expectedExceptions = IllegalArgumentException.class)
|
|
||||||
public void testMustBeString() {
|
|
||||||
BindAdminPassToJsonPayload binder = new BindAdminPassToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, new File("foo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCorrect() {
|
|
||||||
BindAdminPassToJsonPayload binder = new BindAdminPassToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.PUT, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, "foo");
|
|
||||||
assertEquals("{\"server\":{\"adminPass\":\"foo\"}}", request.getPayload().getRawContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class, IllegalStateException.class })
|
|
||||||
public void testNullIsBad() {
|
|
||||||
BindAdminPassToJsonPayload binder = new BindAdminPassToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.PUT, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, null);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static org.testng.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.net.URI;
|
|
||||||
|
|
||||||
import javax.ws.rs.HttpMethod;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.json.config.GsonModule;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.inject.Guice;
|
|
||||||
import com.google.inject.Injector;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests behavior of {@code BindCreateImageToJsonPayload}
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
|
||||||
@Test(groups = "unit")
|
|
||||||
public class BindCreateImageToJsonPayloadTest {
|
|
||||||
|
|
||||||
Injector injector = Guice.createInjector(new GsonModule());
|
|
||||||
|
|
||||||
@Test(expectedExceptions = IllegalArgumentException.class)
|
|
||||||
public void testMustBeMap() {
|
|
||||||
BindCreateImageToJsonPayload binder = new BindCreateImageToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, new File("foo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCorrect() {
|
|
||||||
BindCreateImageToJsonPayload binder = new BindCreateImageToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.PUT, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, ImmutableMap.of("imageName", "foo", "serverId", "2"));
|
|
||||||
assertEquals("{\"image\":{\"serverId\":2,\"name\":\"foo\"}}", request.getPayload()
|
|
||||||
.getRawContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class, IllegalStateException.class })
|
|
||||||
public void testNullIsBad() {
|
|
||||||
BindCreateImageToJsonPayload binder = new BindCreateImageToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.PUT, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, null);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,89 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static org.testng.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.net.URI;
|
|
||||||
|
|
||||||
import javax.ws.rs.HttpMethod;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.json.config.GsonModule;
|
|
||||||
import org.jclouds.cloudservers.domain.RebootType;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.inject.Guice;
|
|
||||||
import com.google.inject.Injector;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests behavior of {@code BindRebootTypeToJsonPayload}
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
|
||||||
@Test(groups = "unit")
|
|
||||||
public class BindRebootTypeToJsonPayloadTest {
|
|
||||||
|
|
||||||
Injector injector = Guice.createInjector(new GsonModule());
|
|
||||||
|
|
||||||
@Test(expectedExceptions = IllegalStateException.class)
|
|
||||||
public void testPostIsIncorrect() {
|
|
||||||
BindRebootTypeToJsonPayload binder = new BindRebootTypeToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, ImmutableMap.of("adminPass", "foo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expectedExceptions = IllegalArgumentException.class)
|
|
||||||
public void testMustBeRebootType() {
|
|
||||||
BindRebootTypeToJsonPayload binder = new BindRebootTypeToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, new File("foo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testHard() {
|
|
||||||
BindRebootTypeToJsonPayload binder = new BindRebootTypeToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, RebootType.HARD);
|
|
||||||
assertEquals("{\"reboot\":{\"type\":\"HARD\"}}", request.getPayload().getRawContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSoft() {
|
|
||||||
BindRebootTypeToJsonPayload binder = new BindRebootTypeToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, RebootType.SOFT);
|
|
||||||
assertEquals("{\"reboot\":{\"type\":\"SOFT\"}}", request.getPayload().getRawContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class, IllegalStateException.class })
|
|
||||||
public void testNullIsBad() {
|
|
||||||
BindRebootTypeToJsonPayload binder = new BindRebootTypeToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, null);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,79 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
|
||||||
*
|
|
||||||
* ====================================================================
|
|
||||||
* Licensed 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.cloudservers.binders;
|
|
||||||
|
|
||||||
import static org.testng.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.net.URI;
|
|
||||||
|
|
||||||
import javax.ws.rs.HttpMethod;
|
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.json.config.GsonModule;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.inject.Guice;
|
|
||||||
import com.google.inject.Injector;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests behavior of {@code BindServerNameToJsonPayload}
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
|
||||||
@Test(groups = "unit")
|
|
||||||
public class BindServerNameToJsonPayloadTest {
|
|
||||||
|
|
||||||
Injector injector = Guice.createInjector(new GsonModule());
|
|
||||||
|
|
||||||
@Test(expectedExceptions = IllegalStateException.class)
|
|
||||||
public void testPostIsIncorrect() {
|
|
||||||
BindServerNameToJsonPayload binder = new BindServerNameToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, ImmutableMap.of("name", "foo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expectedExceptions = IllegalArgumentException.class)
|
|
||||||
public void testMustBeString() {
|
|
||||||
BindServerNameToJsonPayload binder = new BindServerNameToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, new File("foo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCorrect() {
|
|
||||||
BindServerNameToJsonPayload binder = new BindServerNameToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.PUT, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, "foo");
|
|
||||||
assertEquals("{\"server\":{\"name\":\"foo\"}}", request.getPayload().getRawContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expectedExceptions = { NullPointerException.class, IllegalStateException.class })
|
|
||||||
public void testNullIsBad() {
|
|
||||||
BindServerNameToJsonPayload binder = new BindServerNameToJsonPayload();
|
|
||||||
injector.injectMembers(binder);
|
|
||||||
HttpRequest request = new HttpRequest(HttpMethod.PUT, URI.create("http://localhost"));
|
|
||||||
binder.bindToRequest(request, null);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -37,6 +37,8 @@ import javax.ws.rs.Path;
|
||||||
public @interface Payload {
|
public @interface Payload {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Note that if you'd like curly braces literally in the payload, urlencode them first.
|
||||||
|
*
|
||||||
* @see Path#value()
|
* @see Path#value()
|
||||||
* @see PayloadParam
|
* @see PayloadParam
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -49,11 +49,16 @@ public class BindMapToStringPayload implements MapBinder {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
public <R extends HttpRequest> R bindToRequest(R request, Map<String, String> postParams) {
|
||||||
GeneratedHttpRequest<?> r = GeneratedHttpRequest.class.cast( request);
|
GeneratedHttpRequest<?> r = GeneratedHttpRequest.class.cast(request);
|
||||||
UriBuilder builder = uriBuilders.get();
|
String payload = r.getJavaMethod().getAnnotation(Payload.class).value();
|
||||||
builder.path(r.getJavaMethod().getAnnotation(Payload.class).value());
|
if (postParams.size() > 0) {
|
||||||
URI fake = builder.buildFromMap(postParams);
|
UriBuilder builder = uriBuilders.get();
|
||||||
return (R) request.toBuilder().payload(Payloads.newStringPayload(fake.getPath())).build();
|
builder.uri(URI.create("http://test/"));
|
||||||
|
builder.path(payload);
|
||||||
|
URI fake = builder.buildFromMap(postParams);
|
||||||
|
payload = fake.getPath().substring(1);
|
||||||
|
}
|
||||||
|
return (R) request.toBuilder().payload(Payloads.newStringPayload(payload)).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue