Merge branch 'master' of github.com:jclouds/jclouds

This commit is contained in:
Ivan Meredith 2010-04-26 22:57:19 +12:00
commit 82bdedf6f3
150 changed files with 1644 additions and 1582 deletions

View File

@ -22,6 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.util.concurrent.Futures.compose;
import java.net.URI;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
@ -53,6 +54,7 @@ import org.jclouds.blobstore.internal.BaseAsyncBlobStore;
import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
import org.jclouds.blobstore.util.BlobStoreUtils;
import org.jclouds.concurrent.ConcurrentUtils;
import org.jclouds.domain.Location;
import org.jclouds.encryption.EncryptionService;
import org.jclouds.http.options.GetOptions;
@ -78,13 +80,15 @@ public class AtmosAsyncBlobStore extends BaseAsyncBlobStore {
@Inject
AtmosAsyncBlobStore(BlobStoreContext context, BlobStoreUtils blobUtils,
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
Location defaultLocation, Map<String, ? extends Location> locations,
AtmosStorageAsyncClient async, AtmosStorageClient sync, ObjectToBlob object2Blob,
ObjectToBlobMetadata object2BlobMd, BlobToObject blob2Object,
BlobStoreListOptionsToListOptions container2ContainerListOptions,
DirectoryEntryListToResourceMetadataList container2ResourceList,
EncryptionService encryptionService, BlobToHttpGetOptions blob2ObjectGetOptions,
Provider<FetchBlobMetadata> fetchBlobMetadataProvider) {
super(context, blobUtils, service);
super(context, blobUtils, service, defaultLocation, locations);
this.blob2ObjectGetOptions = checkNotNull(blob2ObjectGetOptions, "blob2ObjectGetOptions");
this.sync = checkNotNull(sync, "sync");
this.async = checkNotNull(async, "async");
@ -119,7 +123,7 @@ public class AtmosAsyncBlobStore extends BaseAsyncBlobStore {
* Note location is ignored
*/
@Override
public ListenableFuture<Boolean> createContainerInLocation(String location, String container) {
public ListenableFuture<Boolean> createContainerInLocation(Location location, String container) {
return compose(async.createDirectory(container), new Function<URI, Boolean>() {
public Boolean apply(URI from) {

View File

@ -20,6 +20,8 @@ package org.jclouds.atmosonline.saas.blobstore;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton;
@ -42,6 +44,7 @@ import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
import org.jclouds.blobstore.internal.BaseBlobStore;
import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
import org.jclouds.blobstore.util.BlobStoreUtils;
import org.jclouds.domain.Location;
import org.jclouds.encryption.EncryptionService;
import org.jclouds.http.options.GetOptions;
@ -61,13 +64,14 @@ public class AtmosBlobStore extends BaseBlobStore {
private final Provider<FetchBlobMetadata> fetchBlobMetadataProvider;
@Inject
AtmosBlobStore(BlobStoreContext context, BlobStoreUtils blobUtils, AtmosStorageClient sync,
AtmosBlobStore(BlobStoreContext context, BlobStoreUtils blobUtils, Location defaultLocation,
Map<String, ? extends Location> locations, AtmosStorageClient sync,
ObjectToBlob object2Blob, ObjectToBlobMetadata object2BlobMd, BlobToObject blob2Object,
BlobStoreListOptionsToListOptions container2ContainerListOptions,
DirectoryEntryListToResourceMetadataList container2ResourceList,
EncryptionService encryptionService, BlobToHttpGetOptions blob2ObjectGetOptions,
Provider<FetchBlobMetadata> fetchBlobMetadataProvider) {
super(context, blobUtils);
super(context, blobUtils, defaultLocation, locations);
this.blob2ObjectGetOptions = checkNotNull(blob2ObjectGetOptions, "blob2ObjectGetOptions");
this.sync = checkNotNull(sync, "sync");
this.container2ContainerListOptions = checkNotNull(container2ContainerListOptions,
@ -107,7 +111,7 @@ public class AtmosBlobStore extends BaseBlobStore {
* directory name
*/
@Override
public boolean createContainerInLocation(String location, String container) {
public boolean createContainerInLocation(Location location, String container) {
sync.createDirectory(container);
return true;
}

View File

@ -18,6 +18,10 @@
*/
package org.jclouds.atmosonline.saas.blobstore.config;
import java.util.Map;
import javax.inject.Singleton;
import org.jclouds.atmosonline.saas.AtmosStorageAsyncClient;
import org.jclouds.atmosonline.saas.AtmosStorageClient;
import org.jclouds.atmosonline.saas.blobstore.AtmosAsyncBlobStore;
@ -31,7 +35,12 @@ import org.jclouds.blobstore.attr.ConsistencyModel;
import org.jclouds.blobstore.config.BlobStoreMapModule;
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
import org.jclouds.blobstore.strategy.ContainsValueInListStrategy;
import org.jclouds.domain.Location;
import org.jclouds.domain.LocationScope;
import org.jclouds.domain.internal.LocationImpl;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.TypeLiteral;
@ -56,4 +65,15 @@ public class AtmosBlobStoreContextModule extends AtmosStorageContextModule {
bind(ContainsValueInListStrategy.class).to(FindMD5InUserMetadata.class);
}
@Provides
@Singleton
Location getLocation() {
return new LocationImpl(LocationScope.ZONE, "UNKNOWN", "TODO", null);
}
@Provides
@Singleton
Map<String, ? extends Location> provideLocations(Location location) {
return ImmutableMap.of(location.getId(), location);
}
}

View File

@ -18,6 +18,7 @@
*/
package org.jclouds.atmosonline.saas.blobstore.functions;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.atmosonline.saas.domain.BoundedSet;
@ -29,6 +30,7 @@ import org.jclouds.blobstore.domain.StorageType;
import org.jclouds.blobstore.domain.internal.BlobMetadataImpl;
import org.jclouds.blobstore.domain.internal.PageSetImpl;
import org.jclouds.blobstore.domain.internal.StorageMetadataImpl;
import org.jclouds.domain.Location;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
@ -40,6 +42,12 @@ import com.google.common.collect.Maps;
@Singleton
public class DirectoryEntryListToResourceMetadataList implements
Function<BoundedSet<? extends DirectoryEntry>, PageSet<? extends StorageMetadata>> {
private Location defaultLocation;
@Inject
DirectoryEntryListToResourceMetadataList(Location defaultLocation) {
this.defaultLocation = defaultLocation;
}
public PageSet<? extends StorageMetadata> apply(BoundedSet<? extends DirectoryEntry> from) {
@ -51,12 +59,12 @@ public class DirectoryEntryListToResourceMetadataList implements
: StorageType.BLOB;
if (type == StorageType.FOLDER)
return new StorageMetadataImpl(type, from.getObjectID(), from
.getObjectName(), null, null, null, null, null, Maps
.getObjectName(), defaultLocation, null, null, null, null, Maps
.<String, String> newHashMap());
else
return new BlobMetadataImpl(from.getObjectID(), from.getObjectName(), null,
null, null, null, null, Maps.<String, String> newHashMap(), null,
null);
return new BlobMetadataImpl(from.getObjectID(), from.getObjectName(),
defaultLocation, null, null, null, null, Maps
.<String, String> newHashMap(), null, null);
}
}), from.getToken());

View File

@ -94,7 +94,7 @@ public class StubAtmosStorageAsyncClient implements AtmosStorageAsyncClient {
container = directoryName;
path = null;
}
return Futures.compose(blobStore.createContainerInLocation("default", container),
return Futures.compose(blobStore.createContainerInLocation(null, container),
new Function<Boolean, URI>() {
public URI apply(Boolean from) {

View File

@ -33,11 +33,6 @@ import com.google.common.base.CaseFormat;
*/
public enum Region {
/**
* Allow the default region to be chosen based on the user-configured endpoint.
*/
DEFAULT,
/**
* Region returned is unknown.
*/

View File

@ -297,7 +297,7 @@ public class EC2ComputeServiceContextModule extends EC2ContextModule {
@Provides
@Singleton
protected Map<String, ? extends Image> provideImages(final EC2Client sync,
Map<Region, URI> regionMap, LogHolder holder,
@EC2 Map<Region, URI> regionMap, LogHolder holder,
Function<ComputeMetadata, String> indexer,
@Named(PROPERTY_EC2_AMI_OWNERS) String[] amiOwners, ImageParser parser)
throws InterruptedException, ExecutionException, TimeoutException {

View File

@ -19,6 +19,8 @@
package org.jclouds.aws.ec2.compute.functions;
import static com.google.common.base.Preconditions.checkNotNull;
import java.security.SecureRandom;
import javax.annotation.Resource;
@ -58,6 +60,8 @@ public class CreateNewKeyPair implements Function<RegionTag, KeyPair> {
}
private KeyPair createNewKeyPairInRegion(Region region, String tag) {
checkNotNull(region, "region");
checkNotNull(tag, "tag");
logger.debug(">> creating keyPair region(%s) tag(%s)", region, tag);
KeyPair keyPair = null;
while (keyPair == null) {

View File

@ -1,5 +1,7 @@
package org.jclouds.aws.ec2.compute.functions;
import static com.google.common.base.Preconditions.checkNotNull;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Named;
@ -36,6 +38,8 @@ public class CreateSecurityGroupIfNeeded implements Function<PortsRegionTag, Str
}
private void createSecurityGroupInRegion(Region region, String name, int... ports) {
checkNotNull(region, "region");
checkNotNull(name, "name");
logger.debug(">> creating securityGroup region(%s) name(%s)", region, name);
try {
ec2Client.getSecurityGroupServices().createSecurityGroupInRegion(region, name, name);
@ -47,11 +51,13 @@ public class CreateSecurityGroupIfNeeded implements Function<PortsRegionTag, Str
name, IpProtocol.TCP, port, port, "0.0.0.0/0");
logger.debug("<< authorized securityGroup(%s)", name);
}
logger.debug(">> authorizing securityGroup region(%s) name(%s) permission to itself", region, name);
String myOwnerId = Iterables.get(ec2Client.getSecurityGroupServices()
.describeSecurityGroupsInRegion(region),0).getOwnerId();
ec2Client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(region, name,
new UserIdGroupPair(myOwnerId, name));
logger.debug(">> authorizing securityGroup region(%s) name(%s) permission to itself",
region, name);
String myOwnerId = Iterables.get(
ec2Client.getSecurityGroupServices().describeSecurityGroupsInRegion(region), 0)
.getOwnerId();
ec2Client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(region, name,
new UserIdGroupPair(myOwnerId, name));
logger.debug("<< authorized securityGroup(%s)", name);
} catch (AWSResponseException e) {

View File

@ -115,7 +115,7 @@ public class EC2RestClientModule extends AbstractModule {
@Provides
@Singleton
@EC2
Region provideCurrentRegion(Map<Region, URI> regionMap, @EC2 URI currentUri) {
Region provideCurrentRegion(@EC2 Map<Region, URI> regionMap, @EC2 URI currentUri) {
ImmutableBiMap<URI, Region> map = ImmutableBiMap.copyOf(regionMap).inverse();
Region region = map.get(currentUri);
assert region != null : currentUri + " not in " + map;
@ -124,6 +124,7 @@ public class EC2RestClientModule extends AbstractModule {
@Provides
@Singleton
@EC2
Map<Region, URI> provideRegions(AvailabilityZoneAndRegionClient client) {
return client.describeRegions();
}
@ -131,7 +132,7 @@ public class EC2RestClientModule extends AbstractModule {
@Provides
@Singleton
Map<AvailabilityZone, Region> provideAvailabilityZoneToRegions(
AvailabilityZoneAndRegionClient client, Map<Region, URI> regions) {
AvailabilityZoneAndRegionClient client, @EC2 Map<Region, URI> regions) {
Map<AvailabilityZone, Region> map = Maps.newHashMap();
for (Region region : regions.keySet()) {
for (AvailabilityZoneInfo zoneInfo : client.describeAvailabilityZonesInRegion(region)) {

View File

@ -25,6 +25,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import com.google.common.base.Function;
@ -39,7 +40,7 @@ public class AvailabilityZoneToEndpoint implements Function<Object, URI> {
private final Map<Region, URI> regionToEndpoint;
@Inject
public AvailabilityZoneToEndpoint(Map<Region, URI> regionToEndpoint,
public AvailabilityZoneToEndpoint(@EC2 Map<Region, URI> regionToEndpoint,
Map<AvailabilityZone, Region> availabilityZoneToRegion) {
this.regionToEndpoint = regionToEndpoint;
this.availabilityZoneToRegion = availabilityZoneToRegion;

View File

@ -39,13 +39,13 @@ public class RegionToEndpoint implements Function<Object, URI> {
private final URI defaultUri;
@Inject
public RegionToEndpoint(Map<Region, URI> regionToEndpoint, @EC2 URI defaultUri) {
public RegionToEndpoint(@EC2 Map<Region, URI> regionToEndpoint, @EC2 URI defaultUri) {
this.regionToEndpoint = regionToEndpoint;
this.defaultUri = defaultUri;
}
public URI apply(Object from) {
return from.equals(Region.DEFAULT) ? defaultUri : regionToEndpoint.get(from);
return from == null ? defaultUri : regionToEndpoint.get(from);
}
}

View File

@ -32,7 +32,7 @@ import org.jclouds.aws.ec2.options.internal.BaseEC2RequestOptions;
* import static org.jclouds.aws.ec2.options.DetachVolumeOptions.Builder.*
* <p/>
* EC2Client client = // get connection
* client.getElasticBlockStoreServices().detachVolumeInRegion(Region.DEFAULT, id, fromDevice("123125").force());
* client.getElasticBlockStoreServices().detachVolumeInRegion(null, id, fromDevice("123125").force());
* <code>
*
* @author Adrian Cole

View File

@ -24,6 +24,7 @@ import static org.jclouds.aws.ec2.reference.EC2Parameters.VERSION;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@ -74,7 +75,7 @@ public interface AMIAsyncClient {
@FormParams(keys = ACTION, values = "DescribeImages")
@XMLResponseParser(DescribeImagesResponseHandler.class)
ListenableFuture<? extends Set<Image>> describeImagesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
DescribeImagesOptions... options);
/**
@ -85,7 +86,7 @@ public interface AMIAsyncClient {
@FormParams(keys = ACTION, values = "CreateImage")
@XMLResponseParser(ImageIdHandler.class)
ListenableFuture<String> createImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("Name") String name, @FormParam("InstanceId") String instanceId,
CreateImageOptions... options);
@ -96,7 +97,7 @@ public interface AMIAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "DeregisterImage")
ListenableFuture<Void> deregisterImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("ImageId") String imageId);
/**
@ -107,7 +108,7 @@ public interface AMIAsyncClient {
@FormParams(keys = ACTION, values = "RegisterImage")
@XMLResponseParser(ImageIdHandler.class)
ListenableFuture<String> registerImageFromManifestInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("Name") String imageName, @FormParam("ImageLocation") String pathToManifest,
RegisterImageOptions... options);
@ -120,7 +121,7 @@ public interface AMIAsyncClient {
"RegisterImage", "/dev/sda1", "/dev/sda1" })
@XMLResponseParser(ImageIdHandler.class)
ListenableFuture<String> registerUnixImageBackedByEbsInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("Name") String imageName,
@FormParam("BlockDeviceMapping.0.Ebs.SnapshotId") String ebsSnapshotId,
RegisterImageBackedByEbsOptions... options);
@ -132,7 +133,7 @@ public interface AMIAsyncClient {
@Path("/")
@FormParams(keys = { ACTION, "Attribute" }, values = { "ResetImageAttribute", "launchPermission" })
ListenableFuture<Void> resetLaunchPermissionsOnImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("ImageId") String imageId);
/**
@ -143,7 +144,7 @@ public interface AMIAsyncClient {
@FormParams(keys = { ACTION, "OperationType", "Attribute" }, values = { "ModifyImageAttribute",
"add", "launchPermission" })
ListenableFuture<Void> addLaunchPermissionsToImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindUserIdsToIndexedFormParams.class) Iterable<String> userIds,
@BinderParam(BindUserGroupsToIndexedFormParams.class) Iterable<String> userGroups,
@FormParam("ImageId") String imageId);
@ -156,7 +157,7 @@ public interface AMIAsyncClient {
@FormParams(keys = { ACTION, "OperationType", "Attribute" }, values = { "ModifyImageAttribute",
"remove", "launchPermission" })
ListenableFuture<Void> removeLaunchPermissionsFromImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindUserIdsToIndexedFormParams.class) Iterable<String> userIds,
@BinderParam(BindUserGroupsToIndexedFormParams.class) Iterable<String> userGroups,
@FormParam("ImageId") String imageId);
@ -170,7 +171,7 @@ public interface AMIAsyncClient {
"launchPermission" })
@XMLResponseParser(PermissionHandler.class)
ListenableFuture<Permission> getLaunchPermissionForImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("ImageId") String imageId);
/**
@ -181,7 +182,7 @@ public interface AMIAsyncClient {
@FormParams(keys = { ACTION, "Attribute" }, values = { "DescribeImageAttribute", "productCodes" })
@XMLResponseParser(ProductCodesHandler.class)
ListenableFuture<? extends Set<String>> getProductCodesForImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("ImageId") String imageId);
/**
@ -193,7 +194,7 @@ public interface AMIAsyncClient {
"blockDeviceMapping" })
@XMLResponseParser(BlockDeviceMappingHandler.class)
ListenableFuture<? extends Map<String, EbsBlockDevice>> getBlockDeviceMappingsForImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("ImageId") String imageId);
/**
@ -204,7 +205,7 @@ public interface AMIAsyncClient {
@FormParams(keys = { ACTION, "OperationType", "Attribute" }, values = { "ModifyImageAttribute",
"add", "productCodes" })
ListenableFuture<Void> addProductCodesToImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindProductCodesToIndexedFormParams.class) Iterable<String> productCodes,
@FormParam("ImageId") String imageId);
@ -216,7 +217,7 @@ public interface AMIAsyncClient {
@FormParams(keys = { ACTION, "OperationType", "Attribute" }, values = { "ModifyImageAttribute",
"remove", "productCodes" })
ListenableFuture<Void> removeProductCodesFromImageInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindProductCodesToIndexedFormParams.class) Iterable<String> productCodes,
@FormParam("ImageId") String imageId);
}

View File

@ -22,6 +22,8 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Image;
import org.jclouds.aws.ec2.domain.Permission;
@ -56,7 +58,7 @@ public interface AMIClient {
* @see DescribeImagesOptions
*/
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
Set<Image> describeImagesInRegion(Region region, DescribeImagesOptions... options);
Set<Image> describeImagesInRegion(@Nullable Region region, DescribeImagesOptions... options);
/**
* Returns the Product Codes of an image.
@ -72,7 +74,7 @@ public interface AMIClient {
* />
* @see DescribeImagesOptions
*/
Set<String> getProductCodesForImageInRegion(Region region, String imageId);
Set<String> getProductCodesForImageInRegion(@Nullable Region region, String imageId);
/**
* Returns a map of device name to block device for the image.
@ -88,7 +90,7 @@ public interface AMIClient {
* />
* @see DescribeImagesOptions
*/
Map<String, EbsBlockDevice> getBlockDeviceMappingsForImageInRegion(Region region, String imageId);
Map<String, EbsBlockDevice> getBlockDeviceMappingsForImageInRegion(@Nullable Region region, String imageId);
/**
* Creates an AMI that uses an Amazon EBS root device from a "running" or "stopped" instance.
@ -112,7 +114,7 @@ public interface AMIClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateImage.html"
* />
*/
String createImageInRegion(Region region, String name, String instanceId,
String createImageInRegion(@Nullable Region region, String name, String instanceId,
CreateImageOptions... options);
/**
@ -132,7 +134,7 @@ public interface AMIClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeregisterImage.html"
* />
*/
void deregisterImageInRegion(Region region, String imageId);
void deregisterImageInRegion(@Nullable Region region, String imageId);
/**
* Registers an AMI with Amazon EC2. Images must be registered before they can be launched. To
@ -162,7 +164,7 @@ public interface AMIClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-RegisterImage.html"
* />
*/
String registerImageFromManifestInRegion(Region region, String name, String pathToManifest,
String registerImageFromManifestInRegion(@Nullable Region region, String name, String pathToManifest,
RegisterImageOptions... options);
/**
@ -197,7 +199,7 @@ public interface AMIClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-RegisterImage.html"
* />
*/
String registerUnixImageBackedByEbsInRegion(Region region, String name, String ebsSnapshotId,
String registerUnixImageBackedByEbsInRegion(@Nullable Region region, String name, String ebsSnapshotId,
RegisterImageBackedByEbsOptions... options);
/**
@ -214,7 +216,7 @@ public interface AMIClient {
* />
* @see DescribeImagesOptions
*/
Permission getLaunchPermissionForImageInRegion(Region region, String imageId);
Permission getLaunchPermissionForImageInRegion(@Nullable Region region, String imageId);
/**
* Adds {@code launchPermission}s to an AMI.
@ -234,7 +236,7 @@ public interface AMIClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyImageAttribute.html"
* />
*/
void addLaunchPermissionsToImageInRegion(Region region, Iterable<String> userIds,
void addLaunchPermissionsToImageInRegion(@Nullable Region region, Iterable<String> userIds,
Iterable<String> userGroups, String imageId);
/**
@ -251,7 +253,7 @@ public interface AMIClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ResetImageAttribute.html"
* />
*/
void resetLaunchPermissionsOnImageInRegion(Region region, String imageId);
void resetLaunchPermissionsOnImageInRegion(@Nullable Region region, String imageId);
/**
* Removes {@code launchPermission}s from an AMI.
@ -271,7 +273,7 @@ public interface AMIClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyImageAttribute.html"
* />
*/
void removeLaunchPermissionsFromImageInRegion(Region region, Iterable<String> userIds,
void removeLaunchPermissionsFromImageInRegion(@Nullable Region region, Iterable<String> userIds,
Iterable<String> userGroups, String imageId);
/**
@ -290,7 +292,7 @@ public interface AMIClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyImageAttribute.html"
* />
*/
void addProductCodesToImageInRegion(Region region, Iterable<String> productCodes, String imageId);
void addProductCodesToImageInRegion(@Nullable Region region, Iterable<String> productCodes, String imageId);
/**
* Removes {@code productCode}s from an AMI.
@ -308,6 +310,6 @@ public interface AMIClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyImageAttribute.html"
* />
*/
void removeProductCodesFromImageInRegion(Region region, Iterable<String> productCodes,
void removeProductCodesFromImageInRegion(@Nullable Region region, Iterable<String> productCodes,
String imageId);
}

View File

@ -25,6 +25,7 @@ import java.net.URI;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@ -65,7 +66,7 @@ public interface AvailabilityZoneAndRegionAsyncClient {
@FormParams(keys = ACTION, values = "DescribeAvailabilityZones")
@XMLResponseParser(DescribeAvailabilityZonesResponseHandler.class)
ListenableFuture<? extends Set<AvailabilityZoneInfo>> describeAvailabilityZonesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
DescribeAvailabilityZonesOptions... options);
/**

View File

@ -23,6 +23,8 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo;
import org.jclouds.aws.ec2.options.DescribeAvailabilityZonesOptions;
@ -47,7 +49,7 @@ public interface AvailabilityZoneAndRegionClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeAvailabilityZones.html"
* />
*/
Set<AvailabilityZoneInfo> describeAvailabilityZonesInRegion(Region region,
Set<AvailabilityZoneInfo> describeAvailabilityZonesInRegion(@Nullable Region region,
DescribeAvailabilityZonesOptions... options);
/**

View File

@ -23,6 +23,7 @@ import static org.jclouds.aws.ec2.reference.EC2Parameters.VERSION;
import java.util.Set;
import javax.annotation.Nullable;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@ -111,7 +112,7 @@ public interface ElasticBlockStoreAsyncClient {
@FormParams(keys = ACTION, values = "DescribeVolumes")
@XMLResponseParser(DescribeVolumesResponseHandler.class)
ListenableFuture<? extends Set<Volume>> describeVolumesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindVolumeIdsToIndexedFormParams.class) String... volumeIds);
/**
@ -121,7 +122,7 @@ public interface ElasticBlockStoreAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "DeleteVolume")
ListenableFuture<Void> deleteVolumeInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("VolumeId") String volumeId);
/**
@ -132,7 +133,7 @@ public interface ElasticBlockStoreAsyncClient {
@FormParams(keys = ACTION, values = "DetachVolume")
@ExceptionParser(ReturnVoidOnVolumeAvailable.class)
ListenableFuture<Void> detachVolumeInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("VolumeId") String volumeId, @FormParam("Force") boolean force,
DetachVolumeOptions... options);
@ -144,7 +145,7 @@ public interface ElasticBlockStoreAsyncClient {
@FormParams(keys = ACTION, values = "AttachVolume")
@XMLResponseParser(AttachmentHandler.class)
ListenableFuture<Attachment> attachVolumeInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("VolumeId") String volumeId, @FormParam("InstanceId") String instanceId,
@FormParam("Device") String device);
@ -156,7 +157,7 @@ public interface ElasticBlockStoreAsyncClient {
@FormParams(keys = ACTION, values = "CreateSnapshot")
@XMLResponseParser(SnapshotHandler.class)
ListenableFuture<Snapshot> createSnapshotInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("VolumeId") String volumeId, CreateSnapshotOptions... options);
/**
@ -167,7 +168,7 @@ public interface ElasticBlockStoreAsyncClient {
@FormParams(keys = ACTION, values = "DescribeSnapshots")
@XMLResponseParser(DescribeSnapshotsResponseHandler.class)
ListenableFuture<? extends Set<Snapshot>> describeSnapshotsInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
DescribeSnapshotsOptions... options);
/**
@ -177,7 +178,7 @@ public interface ElasticBlockStoreAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "DeleteSnapshot")
ListenableFuture<Void> deleteSnapshotInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("SnapshotId") String snapshotId);
/**
@ -188,7 +189,7 @@ public interface ElasticBlockStoreAsyncClient {
@FormParams(keys = { ACTION, "OperationType", "Attribute" }, values = {
"ModifySnapshotAttribute", "add", "createVolumePermission" })
ListenableFuture<Void> addCreateVolumePermissionsToSnapshotInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindUserIdsToIndexedFormParams.class) Iterable<String> userIds,
@BinderParam(BindUserGroupsToIndexedFormParams.class) Iterable<String> userGroups,
@FormParam("SnapshotId") String snapshotId);
@ -201,7 +202,7 @@ public interface ElasticBlockStoreAsyncClient {
@FormParams(keys = { ACTION, "OperationType", "Attribute" }, values = {
"ModifySnapshotAttribute", "remove", "createVolumePermission" })
ListenableFuture<Void> removeCreateVolumePermissionsFromSnapshotInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindUserIdsToIndexedFormParams.class) Iterable<String> userIds,
@BinderParam(BindUserGroupsToIndexedFormParams.class) Iterable<String> userGroups,
@FormParam("SnapshotId") String snapshotId);
@ -215,7 +216,7 @@ public interface ElasticBlockStoreAsyncClient {
"createVolumePermission" })
@XMLResponseParser(PermissionHandler.class)
ListenableFuture<Permission> getCreateVolumePermissionForSnapshotInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("SnapshotId") String snapshotId);
/**
@ -226,7 +227,7 @@ public interface ElasticBlockStoreAsyncClient {
@FormParams(keys = { ACTION, "Attribute" }, values = { "ResetSnapshotAttribute",
"createVolumePermission" })
ListenableFuture<Void> resetCreateVolumePermissionsOnSnapshotInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("SnapshotId") String snapshotId);
}

View File

@ -21,6 +21,8 @@ package org.jclouds.aws.ec2.services;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
@ -136,7 +138,7 @@ public interface ElasticBlockStoreClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVolumes.html"
* />
*/
Set<Volume> describeVolumesInRegion(Region region, String... volumeIds);
Set<Volume> describeVolumesInRegion(@Nullable Region region, String... volumeIds);
/**
* Deletes an Amazon EBS volume that you own. For more information about Amazon EBS, go to the
@ -157,7 +159,7 @@ public interface ElasticBlockStoreClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVolume.html"
* />
*/
void deleteVolumeInRegion(Region region, String volumeId);
void deleteVolumeInRegion(@Nullable Region region, String volumeId);
/**
* Attaches an Amazon EBS volume to a running instance and exposes it as the specified device.
@ -197,7 +199,7 @@ public interface ElasticBlockStoreClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DetachVolume.html"
* />
*/
void detachVolumeInRegion(Region region, String volumeId, boolean force,
void detachVolumeInRegion(@Nullable Region region, String volumeId, boolean force,
DetachVolumeOptions... options);
/**
@ -230,7 +232,7 @@ public interface ElasticBlockStoreClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-AttachVolume.html"
* />
*/
Attachment attachVolumeInRegion(Region region, String volumeId, String instanceId, String device);
Attachment attachVolumeInRegion(@Nullable Region region, String volumeId, String instanceId, String device);
/**
* Creates a snapshot of an Amazon EBS volume and stores it in Amazon S3. You can use snapshots
@ -267,7 +269,7 @@ public interface ElasticBlockStoreClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateSnapshot.html"
* />
*/
Snapshot createSnapshotInRegion(Region region, String volumeId, CreateSnapshotOptions... options);
Snapshot createSnapshotInRegion(@Nullable Region region, String volumeId, CreateSnapshotOptions... options);
/**
* Returns information about Amazon EBS snapshots available to the user. Information returned
@ -328,7 +330,7 @@ public interface ElasticBlockStoreClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSnapshots.html"
* />
*/
Set<Snapshot> describeSnapshotsInRegion(Region region, DescribeSnapshotsOptions... options);
Set<Snapshot> describeSnapshotsInRegion(@Nullable Region region, DescribeSnapshotsOptions... options);
/**
* Deletes a snapshot of an Amazon EBS volume that you own. For more information, go to the
@ -345,7 +347,7 @@ public interface ElasticBlockStoreClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteSnapshot.html"
* />
*/
void deleteSnapshotInRegion(Region region, String snapshotId);
void deleteSnapshotInRegion(@Nullable Region region, String snapshotId);
/**
* Returns the {@link Permission}s of an snapshot.
@ -361,7 +363,7 @@ public interface ElasticBlockStoreClient {
* />
* @see DescribeSnapshotsOptions
*/
Permission getCreateVolumePermissionForSnapshotInRegion(Region region, String snapshotId);
Permission getCreateVolumePermissionForSnapshotInRegion(@Nullable Region region, String snapshotId);
/**
* Adds {@code createVolumePermission}s to an EBS snapshot.
@ -382,7 +384,7 @@ public interface ElasticBlockStoreClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifySnapshotAttribute.html"
* />
*/
void addCreateVolumePermissionsToSnapshotInRegion(Region region, Iterable<String> userIds,
void addCreateVolumePermissionsToSnapshotInRegion(@Nullable Region region, Iterable<String> userIds,
Iterable<String> userGroups, String snapshotId);
/**
@ -400,7 +402,7 @@ public interface ElasticBlockStoreClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ResetSnapshotAttribute.html"
* />
*/
void resetCreateVolumePermissionsOnSnapshotInRegion(Region region, String snapshotId);
void resetCreateVolumePermissionsOnSnapshotInRegion(@Nullable Region region, String snapshotId);
/**
* Removes {@code createVolumePermission}s from an EBS snapshot.
@ -421,6 +423,6 @@ public interface ElasticBlockStoreClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifySnapshotAttribute.html"
* />
*/
void removeCreateVolumePermissionsFromSnapshotInRegion(Region region, Iterable<String> userIds,
void removeCreateVolumePermissionsFromSnapshotInRegion(@Nullable Region region, Iterable<String> userIds,
Iterable<String> userGroups, String snapshotId);
}

View File

@ -24,6 +24,7 @@ import static org.jclouds.aws.ec2.reference.EC2Parameters.VERSION;
import java.net.InetAddress;
import java.util.Set;
import javax.annotation.Nullable;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@ -65,7 +66,7 @@ public interface ElasticIPAddressAsyncClient {
@XMLResponseParser(AllocateAddressResponseHandler.class)
@FormParams(keys = ACTION, values = "AllocateAddress")
ListenableFuture<InetAddress> allocateAddressInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region);
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region);
/**
* @see BaseEC2Client#associateAddressInRegion
@ -74,7 +75,7 @@ public interface ElasticIPAddressAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "AssociateAddress")
ListenableFuture<Void> associateAddressInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("PublicIp") @ParamParser(InetAddressToHostAddress.class) InetAddress publicIp,
@FormParam("InstanceId") String instanceId);
@ -85,7 +86,7 @@ public interface ElasticIPAddressAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "DisassociateAddress")
ListenableFuture<Void> disassociateAddressInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("PublicIp") @ParamParser(InetAddressToHostAddress.class) InetAddress publicIp);
/**
@ -95,7 +96,7 @@ public interface ElasticIPAddressAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "ReleaseAddress")
ListenableFuture<Void> releaseAddressInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("PublicIp") @ParamParser(InetAddressToHostAddress.class) InetAddress publicIp);
/**
@ -106,7 +107,7 @@ public interface ElasticIPAddressAsyncClient {
@FormParams(keys = ACTION, values = "DescribeAddresses")
@XMLResponseParser(DescribeAddressesResponseHandler.class)
ListenableFuture<? extends Set<PublicIpInstanceIdPair>> describeAddressesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindInetAddressesToIndexedFormParams.class) InetAddress... publicIps);
}

View File

@ -22,6 +22,8 @@ import java.net.InetAddress;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.AWSResponseException;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.PublicIpInstanceIdPair;
@ -47,7 +49,7 @@ public interface ElasticIPAddressClient {
* @see #disassociateAddress
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-AllocateAddress.html"
*/
InetAddress allocateAddressInRegion(Region region);
InetAddress allocateAddressInRegion(@Nullable Region region);
/**
* Associates an elastic IP address with an instance. If the IP address is currently assigned to
@ -67,7 +69,7 @@ public interface ElasticIPAddressClient {
* @see #disassociateAddress
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-AssociateAddress.html"
*/
void associateAddressInRegion(Region region, InetAddress publicIp, String instanceId);
void associateAddressInRegion(@Nullable Region region, InetAddress publicIp, String instanceId);
/**
* Disassociates the specified elastic IP address from the instance to which it is assigned. This
@ -85,7 +87,7 @@ public interface ElasticIPAddressClient {
* @see #associateAddress
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DisdisassociateAddress.html"
*/
void disassociateAddressInRegion(Region region, InetAddress publicIp);
void disassociateAddressInRegion(@Nullable Region region, InetAddress publicIp);
/**
* Releases an elastic IP address associated with your account.
@ -101,7 +103,7 @@ public interface ElasticIPAddressClient {
* @see #disassociateAddress
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-ReleaseAddress.html"
*/
void releaseAddressInRegion(Region region, InetAddress publicIp);
void releaseAddressInRegion(@Nullable Region region, InetAddress publicIp);
/**
* Lists elastic IP addresses assigned to your account or provides information about a specific
@ -119,7 +121,7 @@ public interface ElasticIPAddressClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeAddresses.html"
* />
*/
Set<PublicIpInstanceIdPair> describeAddressesInRegion(Region region,
Set<PublicIpInstanceIdPair> describeAddressesInRegion(@Nullable Region region,
InetAddress... publicIps);
}

View File

@ -77,7 +77,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = ACTION, values = "DescribeInstances")
@XMLResponseParser(DescribeInstancesResponseHandler.class)
ListenableFuture<? extends Set<Reservation>> describeInstancesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindInstanceIdsToIndexedFormParams.class) String... instanceIds);
/**
@ -88,7 +88,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = ACTION, values = "RunInstances")
@XMLResponseParser(RunInstancesResponseHandler.class)
ListenableFuture<Reservation> runInstancesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@Nullable @BinderParam(IfNotNullBindAvailabilityZoneToFormParam.class) AvailabilityZone nullableAvailabilityZone,
@FormParam("ImageId") String imageId, @FormParam("MinCount") int minCount,
@FormParam("MaxCount") int maxCount, RunInstancesOptions... options);
@ -100,7 +100,7 @@ public interface InstanceAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "RebootInstances")
ListenableFuture<Void> rebootInstancesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindInstanceIdsToIndexedFormParams.class) String... instanceIds);
/**
@ -111,7 +111,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = ACTION, values = "TerminateInstances")
@XMLResponseParser(InstanceStateChangeHandler.class)
ListenableFuture<? extends Set<InstanceStateChange>> terminateInstancesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindInstanceIdsToIndexedFormParams.class) String... instanceIds);
/**
@ -122,7 +122,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = ACTION, values = "StopInstances")
@XMLResponseParser(InstanceStateChangeHandler.class)
ListenableFuture<? extends Set<InstanceStateChange>> stopInstancesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("Force") boolean force,
@BinderParam(BindInstanceIdsToIndexedFormParams.class) String... instanceIds);
@ -134,7 +134,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = ACTION, values = "StartInstances")
@XMLResponseParser(InstanceStateChangeHandler.class)
ListenableFuture<? extends Set<InstanceStateChange>> startInstancesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindInstanceIdsToIndexedFormParams.class) String... instanceIds);
/**
@ -145,7 +145,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = { ACTION, "Attribute" }, values = { "DescribeInstanceAttribute", "userData" })
@XMLResponseParser(UnencodeStringValueHandler.class)
ListenableFuture<String> getUserDataForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -157,7 +157,7 @@ public interface InstanceAsyncClient {
"rootDeviceName" })
@XMLResponseParser(StringValueHandler.class)
ListenableFuture<String> getRootDeviceNameForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -168,7 +168,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = { ACTION, "Attribute" }, values = { "DescribeInstanceAttribute", "ramdisk" })
@XMLResponseParser(StringValueHandler.class)
ListenableFuture<String> getRamdiskForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -179,7 +179,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = { ACTION, "Attribute" }, values = { "DescribeInstanceAttribute", "kernel" })
@XMLResponseParser(StringValueHandler.class)
ListenableFuture<String> getKernelForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -191,7 +191,7 @@ public interface InstanceAsyncClient {
"disableApiTermination" })
@XMLResponseParser(BooleanValueHandler.class)
ListenableFuture<Boolean> isApiTerminationDisabledForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -203,7 +203,7 @@ public interface InstanceAsyncClient {
"instanceType" })
@XMLResponseParser(InstanceTypeHandler.class)
ListenableFuture<InstanceType> getInstanceTypeForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -215,7 +215,7 @@ public interface InstanceAsyncClient {
"instanceInitiatedShutdownBehavior" })
@XMLResponseParser(InstanceInitiatedShutdownBehaviorHandler.class)
ListenableFuture<InstanceInitiatedShutdownBehavior> getInstanceInitiatedShutdownBehaviorForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -227,7 +227,7 @@ public interface InstanceAsyncClient {
"blockDeviceMapping" })
@XMLResponseParser(BlockDeviceMappingHandler.class)
ListenableFuture<? extends Map<String, RunningInstance.EbsBlockDevice>> getBlockDeviceMappingForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -237,7 +237,7 @@ public interface InstanceAsyncClient {
@Path("/")
@FormParams(keys = { ACTION, "Attribute" }, values = { "ResetInstanceAttribute", "ramdisk" })
ListenableFuture<Void> resetRamdiskForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -247,7 +247,7 @@ public interface InstanceAsyncClient {
@Path("/")
@FormParams(keys = { ACTION, "Attribute" }, values = { "ResetInstanceAttribute", "kernel" })
ListenableFuture<Void> resetKernelForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId);
/**
@ -257,7 +257,7 @@ public interface InstanceAsyncClient {
@Path("/")
@FormParams(keys = { ACTION, "Attribute" }, values = { "ModifyInstanceAttribute", "userData" })
ListenableFuture<Void> setUserDataForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId,
@FormParam("Value") @ParamParser(ConvertUnencodedBytesToBase64EncodedString.class) byte[] unencodedData);
@ -268,7 +268,7 @@ public interface InstanceAsyncClient {
@Path("/")
@FormParams(keys = { ACTION, "Attribute" }, values = { "ModifyInstanceAttribute", "ramdisk" })
ListenableFuture<Void> setRamdiskForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId, @FormParam("Value") String ramdisk);
/**
@ -278,7 +278,7 @@ public interface InstanceAsyncClient {
@Path("/")
@FormParams(keys = { ACTION, "Attribute" }, values = { "ModifyInstanceAttribute", "kernel" })
ListenableFuture<Void> setKernelForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId, @FormParam("Value") String kernel);
/**
@ -289,7 +289,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = { ACTION, "Attribute" }, values = { "ModifyInstanceAttribute",
"disableApiTermination" })
ListenableFuture<Void> setApiTerminationDisabledForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId,
@FormParam("Value") boolean apiTerminationDisabled);
@ -300,7 +300,7 @@ public interface InstanceAsyncClient {
@Path("/")
@FormParams(keys = { ACTION, "Attribute" }, values = { "ModifyInstanceAttribute", "instanceType" })
ListenableFuture<Void> setInstanceTypeForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId,
@FormParam("Value") InstanceType instanceType);
@ -312,7 +312,7 @@ public interface InstanceAsyncClient {
@FormParams(keys = { ACTION, "Attribute" }, values = { "ModifyInstanceAttribute",
"instanceInitiatedShutdownBehavior" })
ListenableFuture<Void> setInstanceInitiatedShutdownBehaviorForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId,
@FormParam("Value") InstanceInitiatedShutdownBehavior instanceInitiatedShutdownBehavior);
@ -323,7 +323,7 @@ public interface InstanceAsyncClient {
@Path("/")
@FormParams(keys = { ACTION }, values = { "ModifyInstanceAttribute" })
ListenableFuture<Void> setBlockDeviceMappingForInstanceInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId") String instanceId,
@BinderParam(BindBlockDeviceMappingToIndexedFormParams.class) BlockDeviceMapping blockDeviceMapping);

View File

@ -61,7 +61,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html"
* />
*/
Set<Reservation> describeInstancesInRegion(Region region, String... instanceIds);
Set<Reservation> describeInstancesInRegion(@Nullable Region region, String... instanceIds);
/**
* Launches a specified number of instances of an AMI for which you have permissions.
@ -134,7 +134,7 @@ public interface InstanceClient {
* />
* @see RunInstancesOptions
*/
Reservation runInstancesInRegion(Region region,
Reservation runInstancesInRegion(@Nullable Region region,
@Nullable AvailabilityZone nullableAvailabilityZone, String imageId, int minCount,
int maxCount, RunInstancesOptions... options);
@ -153,7 +153,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-TerminateInstances.html"
* />
*/
Set<InstanceStateChange> terminateInstancesInRegion(Region region, String... instanceIds);
Set<InstanceStateChange> terminateInstancesInRegion(@Nullable Region region, String... instanceIds);
/**
* Stops an instance that uses an Amazon EBS volume as its root device.
@ -189,7 +189,7 @@ public interface InstanceClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-StopInstances.html"
* />
*/
Set<InstanceStateChange> stopInstancesInRegion(Region region, boolean force,
Set<InstanceStateChange> stopInstancesInRegion(@Nullable Region region, boolean force,
String... instanceIds);
/**
@ -214,7 +214,7 @@ public interface InstanceClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-StopInstances.html"
* />
*/
void rebootInstancesInRegion(Region region, String... instanceIds);
void rebootInstancesInRegion(@Nullable Region region, String... instanceIds);
/**
* Starts an instance that uses an Amazon EBS volume as its root device.
@ -244,7 +244,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-StartInstances.html"
* />
*/
Set<InstanceStateChange> startInstancesInRegion(Region region, String... instanceIds);
Set<InstanceStateChange> startInstancesInRegion(@Nullable Region region, String... instanceIds);
/**
*
@ -255,7 +255,7 @@ public interface InstanceClient {
* which instance to describe the attribute of
* @return unencoded user data
*/
String getUserDataForInstanceInRegion(Region region, String instanceId);
String getUserDataForInstanceInRegion(@Nullable Region region, String instanceId);
/**
*
@ -266,7 +266,7 @@ public interface InstanceClient {
* which instance to describe the attribute of
* @return The root device name (e.g., /dev/sda1).
*/
String getRootDeviceNameForInstanceInRegion(Region region, String instanceId);
String getRootDeviceNameForInstanceInRegion(@Nullable Region region, String instanceId);
/**
*
@ -277,7 +277,7 @@ public interface InstanceClient {
* which instance to describe the attribute of
* @return the ID of the RAM disk associated with the AMI.
*/
String getRamdiskForInstanceInRegion(Region region, String instanceId);
String getRamdiskForInstanceInRegion(@Nullable Region region, String instanceId);
/**
*
@ -288,7 +288,7 @@ public interface InstanceClient {
* which instance to describe the attribute of
* @return the ID of the kernel associated with the AMI.
*/
String getKernelForInstanceInRegion(Region region, String instanceId);
String getKernelForInstanceInRegion(@Nullable Region region, String instanceId);
/**
*
@ -300,7 +300,7 @@ public interface InstanceClient {
* @return Specifies whether the instance can be terminated using the APIs. You must modify this
* attribute before you can terminate any "locked" instances from the APIs.
*/
boolean isApiTerminationDisabledForInstanceInRegion(Region region, String instanceId);
boolean isApiTerminationDisabledForInstanceInRegion(@Nullable Region region, String instanceId);
/**
*
@ -311,7 +311,7 @@ public interface InstanceClient {
* which instance to describe the attribute of
* @return The instance type of the instance.
*/
InstanceType getInstanceTypeForInstanceInRegion(Region region, String instanceId);
InstanceType getInstanceTypeForInstanceInRegion(@Nullable Region region, String instanceId);
/**
*
@ -336,7 +336,7 @@ public interface InstanceClient {
* @return Describes the mapping that defines native device names to use when exposing virtual
* devices.
*/
Map<String, EbsBlockDevice> getBlockDeviceMappingForInstanceInRegion(Region region,
Map<String, EbsBlockDevice> getBlockDeviceMappingForInstanceInRegion(@Nullable Region region,
String instanceId);
/**
@ -349,7 +349,7 @@ public interface InstanceClient {
* which instance to reset the attribute of
* @return the ID of the RAM disk associated with the AMI.
*/
String resetRamdiskForInstanceInRegion(Region region, String instanceId);
String resetRamdiskForInstanceInRegion(@Nullable Region region, String instanceId);
/**
* Resets an attribute of an instance to its default value.
@ -361,7 +361,7 @@ public interface InstanceClient {
* which instance to reset the attribute of
* @return the ID of the kernel associated with the AMI.
*/
String resetKernelForInstanceInRegion(Region region, String instanceId);
String resetKernelForInstanceInRegion(@Nullable Region region, String instanceId);
/**
* Sets the userData used for starting the instance.
@ -383,7 +383,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstanceAttribute.html"
* />
*/
void setUserDataForInstanceInRegion(Region region, String instanceId, byte[] unencodedData);
void setUserDataForInstanceInRegion(@Nullable Region region, String instanceId, byte[] unencodedData);
/**
* Sets the ramdisk used for starting the instance.
@ -405,7 +405,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstanceAttribute.html"
* />
*/
void setRamdiskForInstanceInRegion(Region region, String instanceId, String ramdisk);
void setRamdiskForInstanceInRegion(@Nullable Region region, String instanceId, String ramdisk);
/**
* Sets the kernelId used for starting the instance.
@ -427,7 +427,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstanceAttribute.html"
* />
*/
void setKernelForInstanceInRegion(Region region, String instanceId, String kernel);
void setKernelForInstanceInRegion(@Nullable Region region, String instanceId, String kernel);
/**
* This command works while the instance is running and controls whether or not the api can be
@ -443,7 +443,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstanceAttribute.html"
* />
*/
void setApiTerminationDisabledForInstanceInRegion(Region region, String instanceId,
void setApiTerminationDisabledForInstanceInRegion(@Nullable Region region, String instanceId,
boolean apiTerminationDisabled);
/**
@ -466,7 +466,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstanceAttribute.html"
* />
*/
void setInstanceTypeForInstanceInRegion(Region region, String instanceId,
void setInstanceTypeForInstanceInRegion(@Nullable Region region, String instanceId,
InstanceType instanceType);
/**
@ -491,7 +491,7 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstanceAttribute.html"
* />
*/
void setInstanceInitiatedShutdownBehaviorForInstanceInRegion(Region region, String instanceId,
void setInstanceInitiatedShutdownBehaviorForInstanceInRegion(@Nullable Region region, String instanceId,
InstanceInitiatedShutdownBehavior instanceInitiatedShutdownBehavior);
/**
@ -538,6 +538,6 @@ public interface InstanceClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstanceAttribute.html"
* />
*/
void setBlockDeviceMappingForInstanceInRegion(Region region, String instanceId,
void setBlockDeviceMappingForInstanceInRegion(@Nullable Region region, String instanceId,
BlockDeviceMapping blockDeviceMapping);
}

View File

@ -23,6 +23,7 @@ import static org.jclouds.aws.ec2.reference.EC2Parameters.VERSION;
import java.util.Set;
import javax.annotation.Nullable;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@ -62,7 +63,7 @@ public interface KeyPairAsyncClient {
@FormParams(keys = ACTION, values = "CreateKeyPair")
@XMLResponseParser(KeyPairResponseHandler.class)
ListenableFuture<KeyPair> createKeyPairInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("KeyName") String keyName);
// map resourcenotfoundexception to empty set
@ -74,7 +75,7 @@ public interface KeyPairAsyncClient {
@FormParams(keys = ACTION, values = "DescribeKeyPairs")
@XMLResponseParser(DescribeKeyPairsResponseHandler.class)
ListenableFuture<? extends Set<KeyPair>> describeKeyPairsInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindKeyNameToIndexedFormParams.class) String... keyPairNames);
/**
@ -84,7 +85,7 @@ public interface KeyPairAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "DeleteKeyPair")
ListenableFuture<Void> deleteKeyPairInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("KeyName") String keyName);
}

View File

@ -21,6 +21,8 @@ package org.jclouds.aws.ec2.services;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.concurrent.Timeout;
@ -53,7 +55,7 @@ public interface KeyPairClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html"
* />
*/
KeyPair createKeyPairInRegion(Region region, String keyName);
KeyPair createKeyPairInRegion(@Nullable Region region, String keyName);
/**
* Returns information about key pairs available to you. If you specify key pairs, information
@ -70,7 +72,7 @@ public interface KeyPairClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeKeyPairs.html"
* />
*/
Set<KeyPair> describeKeyPairsInRegion(Region region, String... keyPairNames);
Set<KeyPair> describeKeyPairsInRegion(@Nullable Region region, String... keyPairNames);
/**
* Deletes the specified key pair, by removing the public key from Amazon EC2. You must own the
@ -88,6 +90,6 @@ public interface KeyPairClient {
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteKeyPair.html"
* />
*/
void deleteKeyPairInRegion(Region region, String keyName);
void deleteKeyPairInRegion(@Nullable Region region, String keyName);
}

View File

@ -23,6 +23,7 @@ import static org.jclouds.aws.ec2.reference.EC2Parameters.VERSION;
import java.util.Map;
import javax.annotation.Nullable;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@ -61,7 +62,7 @@ public interface MonitoringAsyncClient {
@FormParams(keys = ACTION, values = "MonitorInstances")
@XMLResponseParser(MonitoringStateHandler.class)
ListenableFuture<? extends Map<String, MonitoringState>> monitorInstancesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId.0") String instanceId,
@BinderParam(BindInstanceIdsToIndexedFormParams.class) String... instanceIds);
@ -73,7 +74,7 @@ public interface MonitoringAsyncClient {
@FormParams(keys = ACTION, values = "UnmonitorInstances")
@XMLResponseParser(MonitoringStateHandler.class)
ListenableFuture<? extends Map<String, MonitoringState>> unmonitorInstancesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("InstanceId.0") String instanceId,
@BinderParam(BindInstanceIdsToIndexedFormParams.class) String... instanceIds);
}

View File

@ -21,6 +21,8 @@ package org.jclouds.aws.ec2.services;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.MonitoringState;
import org.jclouds.concurrent.Timeout;
@ -48,7 +50,7 @@ public interface MonitoringClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-MonitorInstances.html"
* />
*/
Map<String, MonitoringState> monitorInstancesInRegion(Region region, String instanceId,
Map<String, MonitoringState> monitorInstancesInRegion(@Nullable Region region, String instanceId,
String... instanceIds);
/**
@ -65,6 +67,6 @@ public interface MonitoringClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-UnmonitorInstances.html"
* />
*/
Map<String, MonitoringState> unmonitorInstancesInRegion(Region region, String instanceId,
Map<String, MonitoringState> unmonitorInstancesInRegion(@Nullable Region region, String instanceId,
String... instanceIds);
}

View File

@ -23,6 +23,7 @@ import static org.jclouds.aws.ec2.reference.EC2Parameters.VERSION;
import java.util.SortedSet;
import javax.annotation.Nullable;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@ -65,7 +66,7 @@ public interface SecurityGroupAsyncClient {
@Path("/")
@FormParams(keys = ACTION, values = "CreateSecurityGroup")
ListenableFuture<Void> createSecurityGroupInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("GroupName") String name, @FormParam("GroupDescription") String description);
/**
@ -76,7 +77,7 @@ public interface SecurityGroupAsyncClient {
@FormParams(keys = ACTION, values = "DeleteSecurityGroup")
@ExceptionParser(ReturnVoidOnGroupNotFound.class)
ListenableFuture<Void> deleteSecurityGroupInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("GroupName") String name);
/**
@ -87,53 +88,53 @@ public interface SecurityGroupAsyncClient {
@FormParams(keys = ACTION, values = "DescribeSecurityGroups")
@XMLResponseParser(DescribeSecurityGroupsResponseHandler.class)
ListenableFuture<? extends SortedSet<SecurityGroup>> describeSecurityGroupsInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@BinderParam(BindGroupNameToIndexedFormParams.class) String... securityGroupNames);
/**
* @see BaseEC2Client#authorizeSecurityGroupIngressInRegion(Region, String,UserIdGroupPair)
* @see BaseEC2Client#authorizeSecurityGroupIngressInRegion(@Nullable Region, String,UserIdGroupPair)
*/
@POST
@Path("/")
@FormParams(keys = ACTION, values = "AuthorizeSecurityGroupIngress")
ListenableFuture<Void> authorizeSecurityGroupIngressInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("GroupName") String groupName,
@BinderParam(BindUserIdGroupPairToSourceSecurityGroupFormParams.class) UserIdGroupPair sourceSecurityGroup);
/**
* @see BaseEC2Client#authorizeSecurityGroupIngressInRegion(Region,
* @see BaseEC2Client#authorizeSecurityGroupIngressInRegion(@Nullable Region,
* String,IpProtocol,int,int,String)
*/
@POST
@Path("/")
@FormParams(keys = ACTION, values = "AuthorizeSecurityGroupIngress")
ListenableFuture<Void> authorizeSecurityGroupIngressInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("GroupName") String groupName,
@FormParam("IpProtocol") IpProtocol ipProtocol, @FormParam("FromPort") int fromPort,
@FormParam("ToPort") int toPort, @FormParam("CidrIp") String cidrIp);
/**
* @see BaseEC2Client#revokeSecurityGroupIngressInRegion(Region, String,UserIdGroupPair)
* @see BaseEC2Client#revokeSecurityGroupIngressInRegion(@Nullable Region, String,UserIdGroupPair)
*/
@POST
@Path("/")
@FormParams(keys = ACTION, values = "RevokeSecurityGroupIngress")
ListenableFuture<Void> revokeSecurityGroupIngressInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("GroupName") String groupName,
@BinderParam(BindUserIdGroupPairToSourceSecurityGroupFormParams.class) UserIdGroupPair sourceSecurityGroup);
/**
* @see BaseEC2Client#revokeSecurityGroupIngressInRegion(Region,
* @see BaseEC2Client#revokeSecurityGroupIngressInRegion(@Nullable Region,
* String,IpProtocol,int,int,String)
*/
@POST
@Path("/")
@FormParams(keys = ACTION, values = "RevokeSecurityGroupIngress")
ListenableFuture<Void> revokeSecurityGroupIngressInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("GroupName") String groupName,
@FormParam("IpProtocol") IpProtocol ipProtocol, @FormParam("FromPort") int fromPort,
@FormParam("ToPort") int toPort, @FormParam("CidrIp") String cidrIp);

View File

@ -21,6 +21,8 @@ package org.jclouds.aws.ec2.services;
import java.util.SortedSet;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.IpProtocol;
import org.jclouds.aws.ec2.domain.SecurityGroup;
@ -59,7 +61,7 @@ public interface SecurityGroupClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateSecurityGroup.html"
* />
*/
void createSecurityGroupInRegion(Region region, String name, String description);
void createSecurityGroupInRegion(@Nullable Region region, String name, String description);
/**
* Deletes a security group that you own.
@ -79,7 +81,7 @@ public interface SecurityGroupClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteSecurityGroup.html"
* />
*/
void deleteSecurityGroupInRegion(Region region, String name);
void deleteSecurityGroupInRegion(@Nullable Region region, String name);
/**
* Returns information about security groups that you own.
@ -99,7 +101,7 @@ public interface SecurityGroupClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSecurityGroups.html"
* />
*/
SortedSet<SecurityGroup> describeSecurityGroupsInRegion(Region region,
SortedSet<SecurityGroup> describeSecurityGroupsInRegion(@Nullable Region region,
String... securityGroupNames);
/**
@ -123,7 +125,7 @@ public interface SecurityGroupClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-AuthorizeSecurityGroupIngress.html"
*
*/
void authorizeSecurityGroupIngressInRegion(Region region, String groupName,
void authorizeSecurityGroupIngressInRegion(@Nullable Region region, String groupName,
UserIdGroupPair sourceSecurityGroup);
/**
@ -162,7 +164,7 @@ public interface SecurityGroupClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-AuthorizeSecurityGroupIngress.html"
*
*/
void authorizeSecurityGroupIngressInRegion(Region region, String groupName,
void authorizeSecurityGroupIngressInRegion(@Nullable Region region, String groupName,
IpProtocol ipProtocol, int fromPort, int toPort, String cidrIp);
/**
@ -187,7 +189,7 @@ public interface SecurityGroupClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-RevokeSecurityGroupIngress.html"
*
*/
void revokeSecurityGroupIngressInRegion(Region region, String groupName,
void revokeSecurityGroupIngressInRegion(@Nullable Region region, String groupName,
UserIdGroupPair sourceSecurityGroup);
/**
@ -227,6 +229,6 @@ public interface SecurityGroupClient {
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-RevokeSecurityGroupIngress.html"
*
*/
void revokeSecurityGroupIngressInRegion(Region region, String groupName, IpProtocol ipProtocol,
void revokeSecurityGroupIngressInRegion(@Nullable Region region, String groupName, IpProtocol ipProtocol,
int fromPort, int toPort, String cidrIp);
}

View File

@ -23,6 +23,8 @@ import java.util.Date;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.aws.ec2.util.EC2Utils;
import org.jclouds.date.DateService;
@ -40,7 +42,9 @@ public class AttachmentHandler extends ParseSax.HandlerWithResult<Attachment> {
protected Logger logger = Logger.NULL;
@Inject
protected DateService dateService;
@Inject
@EC2
Region defaultRegion;
private String volumeId;
private String instanceId;
private String device;
@ -48,8 +52,10 @@ public class AttachmentHandler extends ParseSax.HandlerWithResult<Attachment> {
private Date attachTime;
public Attachment getResult() {
return new Attachment(EC2Utils.findRegionInArgsOrNull(request), volumeId, instanceId, device,
attachmentStatus, attachTime);
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
return new Attachment(region, volumeId, instanceId, device, attachmentStatus, attachTime);
}
public void endElement(String uri, String name, String qName) {

View File

@ -26,7 +26,10 @@ import java.util.Set;
import java.util.SortedSet;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.domain.InstanceState;
@ -43,12 +46,20 @@ import org.xml.sax.Attributes;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
/**
*
* @author Adrian Cole
*/
public abstract class BaseReservationHandler<T> extends HandlerWithResult<T> {
protected final DateService dateService;
public BaseReservationHandler(DateService dateService) {
protected final Region defaultRegion;
@Inject
public BaseReservationHandler(DateService dateService, @EC2 Region defaultRegion) {
this.dateService = dateService;
this.defaultRegion = defaultRegion;
}
@Resource
@ -197,11 +208,14 @@ public abstract class BaseReservationHandler<T> extends HandlerWithResult<T> {
this.attachTime = null;
this.deleteOnTermination = true;
} else if (inInstances && !inProductCodes && !inBlockDeviceMapping) {
instances.add(new RunningInstance(EC2Utils.findRegionInArgsOrNull(request),
amiLaunchIndex, dnsName, imageId, instanceId, instanceState, instanceType,
ipAddress, kernelId, keyName, launchTime, monitoring, availabilityZone, platform,
privateDnsName, privateIpAddress, productCodes, ramdiskId, reason, subnetId,
vpcId, rootDeviceType, rootDeviceName, ebsBlockDevices));
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
instances.add(new RunningInstance(region, amiLaunchIndex, dnsName, imageId, instanceId,
instanceState, instanceType, ipAddress, kernelId, keyName, launchTime,
monitoring, availabilityZone, platform, privateDnsName, privateIpAddress,
productCodes, ramdiskId, reason, subnetId, vpcId, rootDeviceType, rootDeviceName,
ebsBlockDevices));
this.amiLaunchIndex = null;
this.dnsName = null;
this.imageId = null;
@ -247,8 +261,11 @@ public abstract class BaseReservationHandler<T> extends HandlerWithResult<T> {
}
protected Reservation newReservation() {
Reservation info = new Reservation(EC2Utils.findRegionInArgsOrNull(request), groupIds,
instances, ownerId, requesterId, reservationId);
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
Reservation info = new Reservation(region, groupIds, instances, ownerId, requesterId,
reservationId);
this.groupIds = Sets.newTreeSet();
this.instances = Sets.newTreeSet();
this.ownerId = null;

View File

@ -20,7 +20,6 @@ package org.jclouds.aws.ec2.xml;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;
import java.util.Set;
@ -29,6 +28,7 @@ import javax.annotation.Resource;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.domain.Volume;
@ -53,6 +53,9 @@ public class CreateVolumeResponseHandler extends ParseSax.HandlerWithResult<Volu
@Inject
protected DateService dateService;
@Inject
@EC2
Region defaultRegion;
@Inject
protected Map<AvailabilityZone, Region> availabilityZoneToRegion;
private String id;
@ -128,8 +131,8 @@ public class CreateVolumeResponseHandler extends ParseSax.HandlerWithResult<Volu
attachTime = dateService.iso8601DateParse(currentText.toString().trim());
} else if (qName.equals("item")) {
if (inAttachmentSet) {
attachments.add(new Attachment(EC2Utils.findRegionInArgsOrNull(request), volumeId,
instanceId, device, attachmentStatus, attachTime));
attachments.add(new Attachment(region, volumeId, instanceId, device, attachmentStatus,
attachTime));
volumeId = null;
instanceId = null;
device = null;
@ -163,10 +166,13 @@ public class CreateVolumeResponseHandler extends ParseSax.HandlerWithResult<Volu
super.setContext(request);
region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null) {
AvailabilityZone zone = checkNotNull(EC2Utils.findAvailabilityZoneInArgsOrNull(request),
"zone not in args: " + Arrays.asList(request.getArgs()));
region = checkNotNull(availabilityZoneToRegion.get(zone), String.format(
"zone %s not in %s", zone, availabilityZoneToRegion));
AvailabilityZone zone = EC2Utils.findAvailabilityZoneInArgsOrNull(request);
if (zone != null) {
region = checkNotNull(availabilityZoneToRegion.get(zone), String.format(
"zone %s not in %s", zone, availabilityZoneToRegion));
} else {
region = defaultRegion;
}
}
}
}

View File

@ -23,7 +23,10 @@ import java.net.UnknownHostException;
import java.util.Set;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.PublicIpInstanceIdPair;
import org.jclouds.aws.ec2.util.EC2Utils;
import org.jclouds.http.functions.ParseSax.HandlerWithResult;
@ -43,7 +46,9 @@ public class DescribeAddressesResponseHandler extends
private Set<PublicIpInstanceIdPair> pairs = Sets.newLinkedHashSet();
private InetAddress ipAddress;
private StringBuilder currentText = new StringBuilder();
@Inject
@EC2
Region defaultRegion;
private String instanceId;
protected String currentOrNull() {
@ -57,8 +62,10 @@ public class DescribeAddressesResponseHandler extends
} else if (qName.equals("instanceId")) {
instanceId = currentOrNull();
} else if (qName.equals("item")) {
pairs.add(new PublicIpInstanceIdPair(EC2Utils.findRegionInArgsOrNull(request), ipAddress,
instanceId));
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
pairs.add(new PublicIpInstanceIdPair(region, ipAddress, instanceId));
ipAddress = null;
instanceId = null;
}

View File

@ -22,7 +22,10 @@ import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.Image;
import org.jclouds.aws.ec2.domain.RootDeviceType;
import org.jclouds.aws.ec2.domain.Image.Architecture;
@ -49,7 +52,9 @@ import com.google.common.collect.Sets;
public class DescribeImagesResponseHandler extends ParseSax.HandlerWithResult<Set<Image>> {
@Resource
protected Logger logger = Logger.NULL;
@Inject
@EC2
Region defaultRegion;
private Set<Image> contents = Sets.newLinkedHashSet();
private StringBuilder currentText = new StringBuilder();
@ -142,7 +147,10 @@ public class DescribeImagesResponseHandler extends ParseSax.HandlerWithResult<Se
this.deleteOnTermination = true;
} else if (!inProductCodes) {
try {
contents.add(new Image(EC2Utils.findRegionInArgsOrNull(request), architecture,
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
contents.add(new Image(region, architecture,
this.name, description, imageId, imageLocation, imageOwnerId, imageState,
imageType, isPublic, productCodes, kernelId, platform, ramdiskId,
rootDeviceType, rootDeviceName, ebsBlockDevices));

View File

@ -22,6 +22,8 @@ import java.util.SortedSet;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.Reservation;
import org.jclouds.date.DateService;
@ -40,8 +42,8 @@ public class DescribeInstancesResponseHandler extends
private SortedSet<Reservation> reservations = Sets.newTreeSet();
@Inject
DescribeInstancesResponseHandler(DateService dateService) {
super(dateService);
DescribeInstancesResponseHandler(DateService dateService, @EC2 Region defaultRegion) {
super(dateService, defaultRegion);
}
@Override

View File

@ -20,6 +20,10 @@ package org.jclouds.aws.ec2.xml;
import java.util.Set;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.aws.ec2.util.EC2Utils;
import org.jclouds.http.functions.ParseSax;
@ -34,6 +38,9 @@ import com.google.common.collect.Sets;
* @author Adrian Cole
*/
public class DescribeKeyPairsResponseHandler extends ParseSax.HandlerWithResult<Set<KeyPair>> {
@Inject
@EC2
Region defaultRegion;
private StringBuilder currentText = new StringBuilder();
private Set<KeyPair> keyPairs = Sets.newLinkedHashSet();
@ -49,8 +56,10 @@ public class DescribeKeyPairsResponseHandler extends ParseSax.HandlerWithResult<
if (qName.equals("keyFingerprint")) {
this.keyFingerprint = currentText.toString().trim();
} else if (qName.equals("item")) {
keyPairs.add(new KeyPair(EC2Utils.findRegionInArgsOrNull(request), keyName,
keyFingerprint, null));
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
keyPairs.add(new KeyPair(region, keyName, keyFingerprint, null));
} else if (qName.equals("keyName")) {
this.keyName = currentText.toString().trim();
}

View File

@ -20,6 +20,10 @@ package org.jclouds.aws.ec2.xml;
import java.util.SortedSet;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.IpPermission;
import org.jclouds.aws.ec2.domain.IpProtocol;
import org.jclouds.aws.ec2.domain.SecurityGroup;
@ -39,6 +43,9 @@ import com.google.common.collect.Sets;
*/
public class DescribeSecurityGroupsResponseHandler extends
ParseSax.HandlerWithResult<SortedSet<SecurityGroup>> {
@Inject
@EC2
Region defaultRegion;
private StringBuilder currentText = new StringBuilder();
private SortedSet<SecurityGroup> securtyGroups = Sets.newTreeSet();
@ -111,8 +118,11 @@ public class DescribeSecurityGroupsResponseHandler extends
this.userId = null;
this.userIdGroupName = null;
} else if (!inIpPermissions && !inIpRanges && !inGroups) {
securtyGroups.add(new SecurityGroup(EC2Utils.findRegionInArgsOrNull(request),
groupName, ownerId, groupDescription, ipPermissions));
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
securtyGroups.add(new SecurityGroup(region, groupName, ownerId, groupDescription,
ipPermissions));
this.groupName = null;
this.ownerId = null;
this.groupDescription = null;

View File

@ -20,6 +20,10 @@ package org.jclouds.aws.ec2.xml;
import java.util.SortedSet;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.InstanceState;
import org.jclouds.aws.ec2.domain.InstanceStateChange;
import org.jclouds.aws.ec2.util.EC2Utils;
@ -45,6 +49,9 @@ import com.google.common.collect.Sets;
*/
public class InstanceStateChangeHandler extends HandlerWithResult<SortedSet<InstanceStateChange>> {
private StringBuilder currentText = new StringBuilder();
@Inject
@EC2
Region defaultRegion;
SortedSet<InstanceStateChange> instances = Sets.newTreeSet();
private InstanceState shutdownState;
@ -83,8 +90,10 @@ public class InstanceStateChangeHandler extends HandlerWithResult<SortedSet<Inst
previousState = InstanceState.fromValue(currentOrNull());
}
} else if (qName.equals("item")) {
instances.add(new InstanceStateChange(EC2Utils.findRegionInArgsOrNull(request),
instanceId, shutdownState, previousState));
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
instances.add(new InstanceStateChange(region, instanceId, shutdownState, previousState));
this.instanceId = null;
this.shutdownState = null;
this.previousState = null;

View File

@ -18,6 +18,10 @@
*/
package org.jclouds.aws.ec2.xml;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.aws.ec2.util.EC2Utils;
import org.jclouds.http.functions.ParseSax;
@ -30,15 +34,19 @@ import org.jclouds.http.functions.ParseSax;
* @author Adrian Cole
*/
public class KeyPairResponseHandler extends ParseSax.HandlerWithResult<KeyPair> {
@Inject
@EC2
Region defaultRegion;
private StringBuilder currentText = new StringBuilder();
private String keyFingerprint;
private String keyMaterial;
private String keyName;
public KeyPair getResult() {
return new KeyPair(EC2Utils.findRegionInArgsOrNull(request), keyName, keyFingerprint,
keyMaterial);
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
return new KeyPair(region, keyName, keyFingerprint, keyMaterial);
}
public void endElement(String uri, String name, String qName) {

View File

@ -20,6 +20,8 @@ package org.jclouds.aws.ec2.xml;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.Reservation;
import org.jclouds.date.DateService;
@ -34,8 +36,8 @@ import org.jclouds.date.DateService;
public class RunInstancesResponseHandler extends BaseReservationHandler<Reservation> {
@Inject
RunInstancesResponseHandler(DateService dateService) {
super(dateService);
RunInstancesResponseHandler(DateService dateService, @EC2 Region defaultRegion) {
super(dateService, defaultRegion);
}
@Override

View File

@ -22,6 +22,8 @@ import java.util.Date;
import javax.inject.Inject;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.Snapshot;
import org.jclouds.aws.ec2.domain.Snapshot.Status;
import org.jclouds.aws.ec2.util.EC2Utils;
@ -35,8 +37,9 @@ import org.jclouds.http.functions.ParseSax;
public class SnapshotHandler extends ParseSax.HandlerWithResult<Snapshot> {
private StringBuilder currentText = new StringBuilder();
@Inject
protected DateService dateService;
protected final DateService dateService;
protected final Region defaultRegion;
private String id;
private String volumeId;
private int volumeSize;
@ -47,9 +50,18 @@ public class SnapshotHandler extends ParseSax.HandlerWithResult<Snapshot> {
private String description;
private String ownerAlias;
@Inject
public SnapshotHandler(DateService dateService, @EC2 Region defaultRegion) {
this.dateService = dateService;
this.defaultRegion = defaultRegion;
}
public Snapshot getResult() {
Snapshot snapshot = new Snapshot(EC2Utils.findRegionInArgsOrNull(request), id, volumeId,
volumeSize, status, startTime, progress, ownerId, description, ownerAlias);
Region region = EC2Utils.findRegionInArgsOrNull(request);
if (region == null)
region = defaultRegion;
Snapshot snapshot = new Snapshot(region, id, volumeId, volumeSize, status, startTime,
progress, ownerId, description, ownerAlias);
this.id = null;
this.volumeId = null;
this.volumeSize = 0;

View File

@ -23,6 +23,7 @@ import static org.jclouds.blobstore.attr.BlobScopes.CONTAINER;
import java.util.SortedSet;
import java.util.concurrent.ExecutionException;
import javax.annotation.Nullable;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HEAD;
@ -166,7 +167,7 @@ public interface S3AsyncClient {
@ExceptionParser(ReturnFalseIfBucketAlreadyOwnedByYou.class)
ListenableFuture<Boolean> putBucketInRegion(
// TODO endpoint based on region
@BinderParam(BindRegionToXmlPayload.class) Region region,
@BinderParam(BindRegionToXmlPayload.class) @Nullable Region region,
@HostPrefixParam String bucketName, PutBucketOptions... options);
/**

View File

@ -22,6 +22,8 @@ import java.util.SortedSet;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.s3.domain.AccessControlList;
import org.jclouds.aws.s3.domain.BucketLogging;
@ -194,7 +196,7 @@ public interface S3Client {
*
*/
@Timeout(duration = 90, timeUnit = TimeUnit.SECONDS)
boolean putBucketInRegion(Region region, String bucketName, PutBucketOptions... options);
boolean putBucketInRegion(@Nullable Region region, String bucketName, PutBucketOptions... options);
/**
* Deletes the bucket, if it is empty.

View File

@ -24,6 +24,9 @@ import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_ACCESSKEYID;
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_SECRETACCESSKEY;
import static org.jclouds.aws.s3.reference.S3Constants.PROPERTY_S3_ENDPOINT;
import static org.jclouds.aws.s3.reference.S3Constants.PROPERTY_S3_SESSIONINTERVAL;
import static org.jclouds.aws.s3.reference.S3Constants.PROPERTY_S3_ENDPOINT_EU_WEST_1;
import static org.jclouds.aws.s3.reference.S3Constants.PROPERTY_S3_ENDPOINT_US_STANDARD;
import static org.jclouds.aws.s3.reference.S3Constants.PROPERTY_S3_ENDPOINT_US_WEST_1;
import static org.jclouds.blobstore.reference.BlobStoreConstants.DIRECTORY_SUFFIX_FOLDER;
import static org.jclouds.blobstore.reference.BlobStoreConstants.PROPERTY_BLOBSTORE_DIRECTORY_SUFFIX;
import static org.jclouds.blobstore.reference.BlobStoreConstants.PROPERTY_USER_METADATA_PREFIX;
@ -45,6 +48,9 @@ public class S3PropertiesBuilder extends PropertiesBuilder {
Properties properties = super.defaultProperties();
properties.setProperty(PROPERTY_RELAX_HOSTNAME, "true");
properties.setProperty(PROPERTY_S3_ENDPOINT, "https://s3.amazonaws.com");
properties.setProperty(PROPERTY_S3_ENDPOINT_US_STANDARD, "https://s3.amazonaws.com");
properties.setProperty(PROPERTY_S3_ENDPOINT_US_WEST_1, "https://s3-us-west-1.amazonaws.com");
properties.setProperty(PROPERTY_S3_ENDPOINT_EU_WEST_1, "https://s3-eu-west-1.amazonaws.com");
properties.setProperty(PROPERTY_USER_METADATA_PREFIX, "x-amz-meta-");
properties.setProperty(PROPERTY_S3_SESSIONINTERVAL, "60");
properties.setProperty(PROPERTY_BLOBSTORE_DIRECTORY_SUFFIX, DIRECTORY_SUFFIX_FOLDER);

View File

@ -21,6 +21,7 @@ package org.jclouds.aws.s3.blobstore;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.util.concurrent.Futures.compose;
import java.util.Map;
import java.util.SortedSet;
import java.util.concurrent.ExecutorService;
@ -55,6 +56,7 @@ import org.jclouds.blobstore.internal.BaseAsyncBlobStore;
import org.jclouds.blobstore.options.ListContainerOptions;
import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
import org.jclouds.blobstore.util.BlobStoreUtils;
import org.jclouds.domain.Location;
import org.jclouds.http.options.GetOptions;
import com.google.common.base.Function;
@ -81,14 +83,15 @@ public class S3AsyncBlobStore extends BaseAsyncBlobStore {
@Inject
S3AsyncBlobStore(BlobStoreContext context, BlobStoreUtils blobUtils,
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service, S3AsyncClient async,
S3Client sync, BucketToResourceMetadata bucket2ResourceMd,
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
Location defaultLocation, Map<String, ? extends Location> locations,
S3AsyncClient async, S3Client sync, BucketToResourceMetadata bucket2ResourceMd,
ContainerToBucketListOptions container2BucketListOptions,
BucketToResourceList bucket2ResourceList, ObjectToBlob object2Blob,
BlobToHttpGetOptions blob2ObjectGetOptions, BlobToObject blob2Object,
ObjectToBlobMetadata object2BlobMd,
Provider<FetchBlobMetadata> fetchBlobMetadataProvider) {
super(context, blobUtils, service);
super(context, blobUtils, service, defaultLocation, locations);
this.blob2ObjectGetOptions = checkNotNull(blob2ObjectGetOptions, "blob2ObjectGetOptions");
this.async = checkNotNull(async, "async");
this.sync = checkNotNull(sync, "sync");
@ -139,8 +142,9 @@ public class S3AsyncBlobStore extends BaseAsyncBlobStore {
* bucket name
*/
@Override
public ListenableFuture<Boolean> createContainerInLocation(String location, String container) {
return async.putBucketInRegion(Region.fromValue(location), container);
public ListenableFuture<Boolean> createContainerInLocation(Location location, String container) {
location = location != null ? location : defaultLocation;
return async.putBucketInRegion(Region.fromValue(location.getId()), container);
}
/**

View File

@ -20,6 +20,7 @@ package org.jclouds.aws.s3.blobstore;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Map;
import java.util.SortedSet;
import javax.inject.Inject;
@ -48,6 +49,7 @@ import org.jclouds.blobstore.internal.BaseBlobStore;
import org.jclouds.blobstore.options.ListContainerOptions;
import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
import org.jclouds.blobstore.util.BlobStoreUtils;
import org.jclouds.domain.Location;
import org.jclouds.http.options.GetOptions;
import org.jclouds.util.Utils;
@ -72,14 +74,15 @@ public class S3BlobStore extends BaseBlobStore {
private final Provider<FetchBlobMetadata> fetchBlobMetadataProvider;
@Inject
S3BlobStore(BlobStoreContext context, BlobStoreUtils blobUtils, S3Client sync,
S3BlobStore(BlobStoreContext context, BlobStoreUtils blobUtils, Location defaultLocation,
Map<String, ? extends Location> locations, S3Client sync,
BucketToResourceMetadata bucket2ResourceMd,
ContainerToBucketListOptions container2BucketListOptions,
BucketToResourceList bucket2ResourceList, ObjectToBlob object2Blob,
BlobToHttpGetOptions blob2ObjectGetOptions, BlobToObject blob2Object,
ObjectToBlobMetadata object2BlobMd,
Provider<FetchBlobMetadata> fetchBlobMetadataProvider) {
super(context, blobUtils);
super(context, blobUtils, defaultLocation, locations);
this.blob2ObjectGetOptions = checkNotNull(blob2ObjectGetOptions, "blob2ObjectGetOptions");
this.sync = checkNotNull(sync, "sync");
this.bucket2ResourceMd = checkNotNull(bucket2ResourceMd, "bucket2ResourceMd");
@ -127,8 +130,9 @@ public class S3BlobStore extends BaseBlobStore {
* bucket name
*/
@Override
public boolean createContainerInLocation(String location, String container) {
return sync.putBucketInRegion(Region.fromValue(location), container);
public boolean createContainerInLocation(Location location, String container) {
location = location != null ? location : defaultLocation;
return sync.putBucketInRegion(Region.fromValue(location.getId()), container);
}
/**

View File

@ -18,6 +18,13 @@
*/
package org.jclouds.aws.s3.blobstore.config;
import java.util.Map;
import java.util.Set;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.s3.S3;
import org.jclouds.aws.s3.S3AsyncClient;
import org.jclouds.aws.s3.S3Client;
import org.jclouds.aws.s3.blobstore.S3AsyncBlobStore;
@ -29,7 +36,14 @@ import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.attr.ConsistencyModel;
import org.jclouds.blobstore.config.BlobStoreMapModule;
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
import org.jclouds.domain.Location;
import org.jclouds.domain.LocationScope;
import org.jclouds.domain.internal.LocationImpl;
import com.google.common.base.Function;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.TypeLiteral;
@ -51,4 +65,26 @@ public class S3BlobStoreContextModule extends S3ContextModule {
new TypeLiteral<BlobStoreContextImpl<S3AsyncClient, S3Client>>() {
}).in(Scopes.SINGLETON);
}
@Provides
@Singleton
Location getDefaultLocation(@S3 Region region, Map<String, ? extends Location> locations) {
return locations.get(region.toString());
}
@Provides
@Singleton
Map<String, ? extends Location> provideLocations(@S3 Set<Region> regions) {
Set<Location> locations = Sets.newHashSet();
for (Region zone : regions) {
locations
.add(new LocationImpl(LocationScope.ZONE, zone.toString(), zone.toString(), null));
}
return Maps.uniqueIndex(locations, new Function<Location, String>() {
@Override
public String apply(Location from) {
return from.getId();
}
});
}
}

View File

@ -18,13 +18,22 @@
*/
package org.jclouds.aws.s3.blobstore.functions;
import java.util.Map;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.s3.S3Client;
import org.jclouds.aws.s3.domain.BucketMetadata;
import org.jclouds.blobstore.ContainerNotFoundException;
import org.jclouds.blobstore.domain.MutableStorageMetadata;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.domain.StorageType;
import org.jclouds.blobstore.domain.internal.MutableStorageMetadataImpl;
import org.jclouds.domain.Location;
import org.jclouds.logging.Logger;
import com.google.common.base.Function;
@ -33,10 +42,37 @@ import com.google.common.base.Function;
*/
@Singleton
public class BucketToResourceMetadata implements Function<BucketMetadata, StorageMetadata> {
private final S3Client client;
private final Map<String, ? extends Location> locations;
@Resource
protected Logger logger = Logger.NULL;
@Inject
BucketToResourceMetadata(S3Client client, Map<String, ? extends Location> locations) {
this.client = client;
this.locations = locations;
}
public StorageMetadata apply(BucketMetadata from) {
MutableStorageMetadata to = new MutableStorageMetadataImpl();
to.setName(from.getName());
to.setType(StorageType.CONTAINER);
try {
Region region = client.getBucketLocation(from.getName());
if (region != null) {
Location location = locations.get(region.toString());
if (location == null)
logger.error("could not get location for region %s in %s", region, locations);
to.setLocation(location);
} else {
logger.error("could not get region for %s", from.getName());
}
} catch (ContainerNotFoundException e) {
logger.error(e,
"could not get region for %s, as service suggests the bucket doesn't exist", from
.getName());
}
return to;
}
}

View File

@ -19,11 +19,14 @@
package org.jclouds.aws.s3.config;
import java.net.URI;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.inject.Named;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.handlers.AWSClientErrorRetryHandler;
import org.jclouds.aws.handlers.AWSRedirectionRetryHandler;
import org.jclouds.aws.handlers.ParseAWSErrorFromXmlContent;
@ -47,6 +50,8 @@ import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.RestClientFactory;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Scopes;
@ -94,6 +99,24 @@ public class S3RestClientModule extends AbstractModule {
bindRetryHandlers();
}
@Provides
@Singleton
@S3
Map<Region, URI> provideRegions(
@Named(S3Constants.PROPERTY_S3_ENDPOINT_US_STANDARD) String usstandard,
@Named(S3Constants.PROPERTY_S3_ENDPOINT_US_WEST_1) String uswest,
@Named(S3Constants.PROPERTY_S3_ENDPOINT_EU_WEST_1) String euwest) {
return ImmutableMap.<Region, URI> of(Region.US_STANDARD, URI.create(usstandard),
Region.US_WEST_1, URI.create(uswest), Region.EU_WEST_1, URI.create(euwest));
}
@Provides
@Singleton
@S3
Set<Region> provideRegions(@S3 Map<Region, URI> map) {
return map.keySet();
}
@Provides
@Singleton
@S3
@ -101,6 +124,13 @@ public class S3RestClientModule extends AbstractModule {
return URI.create(endpoint);
}
@Provides
@Singleton
@S3
Region getDefaultRegion(@S3 URI uri, @S3 Map<Region, URI> map) {
return ImmutableBiMap.copyOf(map).inverse().get(uri);
}
@Provides
@Singleton
protected S3AsyncClient provideAsyncClient(RestClientFactory factory) {

View File

@ -20,11 +20,12 @@
package org.jclouds.aws.s3.functions;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.s3.S3;
import org.jclouds.http.HttpRequest;
import org.jclouds.rest.binders.BindToStringPayload;
@ -39,16 +40,23 @@ import org.jclouds.rest.binders.BindToStringPayload;
@Singleton
public class BindRegionToXmlPayload extends BindToStringPayload {
private final Region defaultRegion;
@Inject
BindRegionToXmlPayload(@S3 Region defaultRegion) {
this.defaultRegion = defaultRegion;
}
@Override
public void bindToRequest(HttpRequest request, Object input) {
checkArgument(checkNotNull(input, "input") instanceof Region,
"this binder is only valid for Region!");
input = input == null ? defaultRegion : input;
checkArgument(input instanceof Region, "this binder is only valid for Region!");
Region constraint = (Region) input;
String value = null;
switch (constraint) {
case US_STANDARD:
case US_EAST_1:
case DEFAULT:// TODO get this from the url
// nothing to bind as this is default.
return;
case EU_WEST_1:
value = "EU";
@ -59,12 +67,11 @@ public class BindRegionToXmlPayload extends BindToStringPayload {
default:
throw new IllegalStateException("unimplemented location: " + this);
}
super
.bindToRequest(
request,
String
.format(
"<CreateBucketConfiguration><LocationConstraint>%s</LocationConstraint></CreateBucketConfiguration>",
value));
String payload = String
.format(
"<CreateBucketConfiguration><LocationConstraint>%s</LocationConstraint></CreateBucketConfiguration>",
value);
super.bindToRequest(request, payload);
}
}

View File

@ -41,4 +41,8 @@ public interface S3Constants extends AWSConstants, S3Headers {
*/
public static final String PROPERTY_S3_SESSIONINTERVAL = "jclouds.s3.sessioninterval";
public static final String PROPERTY_S3_ENDPOINT_EU_WEST_1 = "jclouds.s3.endpoint.eu_west_1";
public static final String PROPERTY_S3_ENDPOINT_US_STANDARD = "jclouds.s3.endpoint.us_standard";
public static final String PROPERTY_S3_ENDPOINT_US_WEST_1 = "jclouds.s3.endpoint.us_west_1";
}

View File

@ -23,6 +23,7 @@ import static org.jclouds.aws.sqs.reference.SQSParameters.VERSION;
import java.util.Set;
import javax.annotation.Nullable;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@ -64,7 +65,7 @@ public interface SQSAsyncClient {
@FormParams(keys = ACTION, values = "ListQueues")
@ResponseParser(RegexListQueuesResponseHandler.class)
ListenableFuture<? extends Set<Queue>> listQueuesInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
ListQueuesOptions... options);
/**
@ -75,7 +76,7 @@ public interface SQSAsyncClient {
@FormParams(keys = ACTION, values = "CreateQueue")
@ResponseParser(RegexQueueHandler.class)
ListenableFuture<Queue> createQueueInRegion(
@EndpointParam(parser = RegionToEndpoint.class) Region region,
@EndpointParam(parser = RegionToEndpoint.class) @Nullable Region region,
@FormParam("QueueName") String queueName, CreateQueueOptions... options);
/**

View File

@ -21,6 +21,8 @@ package org.jclouds.aws.sqs;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.sqs.domain.Queue;
import org.jclouds.aws.sqs.options.CreateQueueOptions;
@ -49,7 +51,7 @@ public interface SQSClient {
* @see <a href="http://docs.amazonwebservices.com/AWSSimpleQueueService/2009-02-01/APIReference/Query_QueryListQueues.html"
* />
*/
Set<Queue> listQueuesInRegion(Region region, ListQueuesOptions... options);
Set<Queue> listQueuesInRegion(@Nullable Region region, ListQueuesOptions... options);
/**
*
@ -79,7 +81,7 @@ public interface SQSClient {
* @param options
* like the visibility timeout (in seconds) to use for this queue.
*/
Queue createQueueInRegion(Region region, String queueName, CreateQueueOptions... options);
Queue createQueueInRegion(@Nullable Region region, String queueName, CreateQueueOptions... options);
/**
* The DeleteQueue action deletes the queue specified by the queue URL, regardless of whether the

View File

@ -22,6 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_ACCESSKEYID;
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_EXPIREINTERVAL;
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_SECRETACCESSKEY;
import static org.jclouds.aws.sqs.reference.SQSConstants.PROPERTY_SQS_ENDPOINT;
import static org.jclouds.aws.sqs.reference.SQSConstants.PROPERTY_SQS_ENDPOINT_EU_WEST_1;
import static org.jclouds.aws.sqs.reference.SQSConstants.PROPERTY_SQS_ENDPOINT_US_EAST_1;
import static org.jclouds.aws.sqs.reference.SQSConstants.PROPERTY_SQS_ENDPOINT_US_WEST_1;
@ -40,9 +41,12 @@ public class SQSPropertiesBuilder extends PropertiesBuilder {
@Override
protected Properties defaultProperties() {
Properties properties = super.defaultProperties();
properties.setProperty(PROPERTY_SQS_ENDPOINT, "https://queue.amazonaws.com");
properties.setProperty(PROPERTY_SQS_ENDPOINT_US_EAST_1, "https://queue.amazonaws.com");
properties.setProperty(PROPERTY_SQS_ENDPOINT_US_WEST_1, "https://us-west-1.queue.amazonaws.com");
properties.setProperty(PROPERTY_SQS_ENDPOINT_EU_WEST_1, "https://eu-west-1.queue.amazonaws.com");
properties.setProperty(PROPERTY_SQS_ENDPOINT_US_WEST_1,
"https://us-west-1.queue.amazonaws.com");
properties.setProperty(PROPERTY_SQS_ENDPOINT_EU_WEST_1,
"https://eu-west-1.queue.amazonaws.com");
properties.setProperty(PROPERTY_AWS_EXPIREINTERVAL, "60");
return properties;
}
@ -64,7 +68,7 @@ public class SQSPropertiesBuilder extends PropertiesBuilder {
}
public SQSPropertiesBuilder withEndpoint(URI endpoint) {
properties.setProperty(PROPERTY_SQS_ENDPOINT_US_EAST_1, checkNotNull(endpoint, "endpoint").toString());
properties.setProperty(PROPERTY_SQS_ENDPOINT, checkNotNull(endpoint, "endpoint").toString());
return this;
}

View File

@ -47,6 +47,7 @@ import org.jclouds.http.annotation.ServerError;
import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.RestClientFactory;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
@ -89,6 +90,7 @@ public class SQSRestClientModule extends AbstractModule {
@Provides
@Singleton
@SQS
Map<Region, URI> provideRegions(
@Named(SQSConstants.PROPERTY_SQS_ENDPOINT_US_EAST_1) String useast,
@Named(SQSConstants.PROPERTY_SQS_ENDPOINT_US_WEST_1) String uswest,
@ -99,15 +101,22 @@ public class SQSRestClientModule extends AbstractModule {
@Provides
@Singleton
RequestSigner provideRequestSigner(FormSigner in) {
return in;
@SQS
protected URI provideURI(@Named(SQSConstants.PROPERTY_SQS_ENDPOINT) String endpoint) {
return URI.create(endpoint);
}
@Provides
@Singleton
@SQS
protected URI provideURI(@Named(SQSConstants.PROPERTY_SQS_ENDPOINT_US_EAST_1) String endpoint) {
return URI.create(endpoint);
Region getDefaultRegion(@SQS URI uri, @SQS Map<Region, URI> map) {
return ImmutableBiMap.copyOf(map).inverse().get(uri);
}
@Provides
@Singleton
RequestSigner provideRequestSigner(FormSigner in) {
return in;
}
protected void bindErrorHandlers() {

View File

@ -39,13 +39,13 @@ public class RegionToEndpoint implements Function<Object, URI> {
private final URI defaultUri;
@Inject
public RegionToEndpoint(Map<Region, URI> regionToEndpoint, @SQS URI defaultUri) {
public RegionToEndpoint(@SQS Map<Region, URI> regionToEndpoint, @SQS URI defaultUri) {
this.regionToEndpoint = regionToEndpoint;
this.defaultUri = defaultUri;
}
public URI apply(Object from) {
return from.equals(Region.DEFAULT) ? defaultUri : regionToEndpoint.get(from);
return from == null ? defaultUri : regionToEndpoint.get(from);
}
}

View File

@ -26,6 +26,8 @@ import org.jclouds.aws.reference.AWSConstants;
* @author Adrian Cole
*/
public interface SQSConstants extends AWSConstants {
public static final String PROPERTY_SQS_ENDPOINT = "jclouds.sqs.endpoint";
public static final String PROPERTY_SQS_ENDPOINT_EU_WEST_1 = "jclouds.sqs.endpoint.eu_west_1";
public static final String PROPERTY_SQS_ENDPOINT_US_EAST_1 = "jclouds.sqs.endpoint.us_east_1";
public static final String PROPERTY_SQS_ENDPOINT_US_WEST_1 = "jclouds.sqs.endpoint.us_west_1";

View File

@ -26,6 +26,7 @@ import javax.inject.Provider;
import javax.ws.rs.core.UriBuilder;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.sqs.SQS;
import org.jclouds.aws.sqs.domain.Queue;
import org.jclouds.http.functions.ParseSax;
@ -46,7 +47,7 @@ public class QueueHandler extends ParseSax.HandlerWithResult<Queue> {
private final Provider<UriBuilder> uriBuilderProvider;
@Inject
QueueHandler(Provider<UriBuilder> uriBuilderProvider, Map<Region, URI> regionMap) {
QueueHandler(Provider<UriBuilder> uriBuilderProvider, @SQS Map<Region, URI> regionMap) {
this.uriBuilderProvider = uriBuilderProvider;
this.regionBiMap = ImmutableBiMap.copyOf(regionMap);
}

View File

@ -27,6 +27,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.sqs.SQS;
import org.jclouds.aws.sqs.domain.Queue;
import org.jclouds.aws.sqs.xml.internal.BaseRegexQueueHandler;
import org.jclouds.http.HttpResponse;
@ -45,7 +46,7 @@ import com.google.common.base.Throwables;
public class RegexListQueuesResponseHandler extends BaseRegexQueueHandler implements
Function<HttpResponse, Set<Queue>> {
@Inject
RegexListQueuesResponseHandler(Map<Region, URI> regionMap) {
RegexListQueuesResponseHandler(@SQS Map<Region, URI> regionMap) {
super(regionMap);
}

View File

@ -26,6 +26,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.sqs.SQS;
import org.jclouds.aws.sqs.domain.Queue;
import org.jclouds.aws.sqs.xml.internal.BaseRegexQueueHandler;
import org.jclouds.http.HttpResponse;
@ -45,7 +46,7 @@ import com.google.inject.internal.Iterables;
public class RegexQueueHandler extends BaseRegexQueueHandler implements
Function<HttpResponse, Queue> {
@Inject
RegexQueueHandler(Map<Region, URI> regionMap) {
RegexQueueHandler(@SQS Map<Region, URI> regionMap) {
super(regionMap);
}

View File

@ -35,8 +35,14 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.jclouds.aws.AWSResponseException;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.*;
import org.jclouds.aws.ec2.domain.BlockDeviceMapping;
import org.jclouds.aws.ec2.domain.InstanceState;
import org.jclouds.aws.ec2.domain.InstanceType;
import org.jclouds.aws.ec2.domain.IpProtocol;
import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.aws.ec2.domain.PublicIpInstanceIdPair;
import org.jclouds.aws.ec2.domain.Reservation;
import org.jclouds.aws.ec2.domain.RunningInstance;
import org.jclouds.aws.ec2.domain.Image.EbsBlockDevice;
import org.jclouds.aws.ec2.domain.Volume.InstanceInitiatedShutdownBehavior;
import org.jclouds.aws.ec2.predicates.InstanceHasIpAddress;
@ -105,15 +111,15 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
securityGroupName = instancePrefix + "ingress";
try {
client.getSecurityGroupServices().deleteSecurityGroupInRegion(Region.DEFAULT,
client.getSecurityGroupServices().deleteSecurityGroupInRegion(null,
securityGroupName);
} catch (Exception e) {
}
client.getSecurityGroupServices().createSecurityGroupInRegion(Region.DEFAULT,
client.getSecurityGroupServices().createSecurityGroupInRegion(null,
securityGroupName, securityGroupName);
for (int port : new int[] { 80, 443, 22 }) {
client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(Region.DEFAULT,
client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(null,
securityGroupName, IpProtocol.TCP, port, port, "0.0.0.0/0");
}
}
@ -122,13 +128,13 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
void testCreateKeyPair() throws InterruptedException, ExecutionException, TimeoutException {
String keyName = instancePrefix + "1";
try {
client.getKeyPairServices().deleteKeyPairInRegion(Region.DEFAULT, keyName);
client.getKeyPairServices().deleteKeyPairInRegion(null, keyName);
} catch (Exception e) {
}
client.getKeyPairServices().deleteKeyPairInRegion(Region.DEFAULT, keyName);
client.getKeyPairServices().deleteKeyPairInRegion(null, keyName);
keyPair = client.getKeyPairServices().createKeyPairInRegion(Region.DEFAULT, keyName);
keyPair = client.getKeyPairServices().createKeyPairInRegion(null, keyName);
assertNotNull(keyPair);
assertNotNull(keyPair.getKeyMaterial());
assertNotNull(keyPair.getKeyFingerprint());
@ -149,7 +155,7 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
System.out.printf("%d: running instance%n", System.currentTimeMillis());
Reservation reservation = client.getInstanceServices().runInstancesInRegion(
Region.DEFAULT, null, // allow ec2 to chose an availability zone
null, null, // allow ec2 to chose an availability zone
"ami-ccf615a5", // alestic ami allows auto-invoke of user data scripts
1, // minimum instances
1, // maximum instances
@ -180,39 +186,39 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
private void verifyInstanceProperties(String script) {
assertEquals(script, client.getInstanceServices().getUserDataForInstanceInRegion(
Region.DEFAULT, instanceId));
null, instanceId));
assertEquals(null, client.getInstanceServices().getRootDeviceNameForInstanceInRegion(
Region.DEFAULT, instanceId));
null, instanceId));
assert client.getInstanceServices().getRamdiskForInstanceInRegion(Region.DEFAULT, instanceId)
assert client.getInstanceServices().getRamdiskForInstanceInRegion(null, instanceId)
.startsWith("ari-");
assertEquals(false, client.getInstanceServices().isApiTerminationDisabledForInstanceInRegion(
Region.DEFAULT, instanceId));
null, instanceId));
assert client.getInstanceServices().getKernelForInstanceInRegion(Region.DEFAULT, instanceId)
assert client.getInstanceServices().getKernelForInstanceInRegion(null, instanceId)
.startsWith("aki-");
assertEquals(InstanceType.M1_SMALL, client.getInstanceServices()
.getInstanceTypeForInstanceInRegion(Region.DEFAULT, instanceId));
.getInstanceTypeForInstanceInRegion(null, instanceId));
assertEquals(InstanceInitiatedShutdownBehavior.TERMINATE, client.getInstanceServices()
.getInstanceInitiatedShutdownBehaviorForInstanceInRegion(Region.DEFAULT, instanceId));
.getInstanceInitiatedShutdownBehaviorForInstanceInRegion(null, instanceId));
assertEquals(ImmutableMap.<String, EbsBlockDevice> of(), client.getInstanceServices()
.getBlockDeviceMappingForInstanceInRegion(Region.DEFAULT, instanceId));
.getBlockDeviceMappingForInstanceInRegion(null, instanceId));
}
private void setApiTerminationDisabledForInstanceInRegion() {
client.getInstanceServices().setApiTerminationDisabledForInstanceInRegion(Region.DEFAULT,
client.getInstanceServices().setApiTerminationDisabledForInstanceInRegion(null,
instanceId, true);
assertEquals(true, client.getInstanceServices().isApiTerminationDisabledForInstanceInRegion(
Region.DEFAULT, instanceId));
client.getInstanceServices().setApiTerminationDisabledForInstanceInRegion(Region.DEFAULT,
null, instanceId));
client.getInstanceServices().setApiTerminationDisabledForInstanceInRegion(null,
instanceId, false);
assertEquals(false, client.getInstanceServices().isApiTerminationDisabledForInstanceInRegion(
Region.DEFAULT, instanceId));
null, instanceId));
}
private void tryToChangeStuff() {
@ -227,7 +233,7 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
private void setUserDataForInstanceInRegion() {
try {
client.getInstanceServices().setUserDataForInstanceInRegion(Region.DEFAULT, instanceId,
client.getInstanceServices().setUserDataForInstanceInRegion(null, instanceId,
"test".getBytes());
assert false : "shouldn't be allowed, as instance needs to be stopped";
} catch (AWSResponseException e) {
@ -238,8 +244,8 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
private void setRamdiskForInstanceInRegion() {
try {
String ramdisk = client.getInstanceServices().getRamdiskForInstanceInRegion(
Region.DEFAULT, instanceId);
client.getInstanceServices().setRamdiskForInstanceInRegion(Region.DEFAULT, instanceId,
null, instanceId);
client.getInstanceServices().setRamdiskForInstanceInRegion(null, instanceId,
ramdisk);
assert false : "shouldn't be allowed, as instance needs to be stopped";
} catch (AWSResponseException e) {
@ -250,8 +256,8 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
private void setKernelForInstanceInRegion() {
try {
String oldKernel = client.getInstanceServices().getKernelForInstanceInRegion(
Region.DEFAULT, instanceId);
client.getInstanceServices().setKernelForInstanceInRegion(Region.DEFAULT, instanceId,
null, instanceId);
client.getInstanceServices().setKernelForInstanceInRegion(null, instanceId,
oldKernel);
assert false : "shouldn't be allowed, as instance needs to be stopped";
} catch (AWSResponseException e) {
@ -261,7 +267,7 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
private void setInstanceTypeForInstanceInRegion() {
try {
client.getInstanceServices().setInstanceTypeForInstanceInRegion(Region.DEFAULT,
client.getInstanceServices().setInstanceTypeForInstanceInRegion(null,
instanceId, InstanceType.C1_MEDIUM);
assert false : "shouldn't be allowed, as instance needs to be stopped";
} catch (AWSResponseException e) {
@ -272,7 +278,7 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
private void setBlockDeviceMappingForInstanceInRegion() {
BlockDeviceMapping blockDeviceMapping = new BlockDeviceMapping();
try {
client.getInstanceServices().setBlockDeviceMappingForInstanceInRegion(Region.DEFAULT,
client.getInstanceServices().setBlockDeviceMappingForInstanceInRegion(null,
instanceId, blockDeviceMapping);
assert false : "shouldn't be allowed, as instance needs to be ebs based-ami";
} catch (AWSResponseException e) {
@ -283,7 +289,7 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
private void setInstanceInitiatedShutdownBehaviorForInstanceInRegion() {
try {
client.getInstanceServices().setInstanceInitiatedShutdownBehaviorForInstanceInRegion(
Region.DEFAULT, instanceId, InstanceInitiatedShutdownBehavior.STOP);
null, instanceId, InstanceInitiatedShutdownBehavior.STOP);
assert false : "shouldn't be allowed, as instance needs to be ebs based-ami";
} catch (AWSResponseException e) {
assertEquals("UnsupportedInstanceAttribute", e.getError().getCode());
@ -294,7 +300,7 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
void testReboot() throws InterruptedException, ExecutionException, TimeoutException, IOException {
RunningInstance instance = getInstance(instanceId);
System.out.printf("%d: %s rebooting instance %n", System.currentTimeMillis(), instanceId);
client.getInstanceServices().rebootInstancesInRegion(Region.DEFAULT, instanceId);
client.getInstanceServices().rebootInstancesInRegion(null, instanceId);
Thread.sleep(1000);
instance = getInstance(instanceId);
blockUntilWeCanSshIntoInstance(instance);
@ -313,42 +319,42 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
@Test(enabled = false, dependsOnMethods = "testReboot")
void testElasticIpAddress() throws InterruptedException, ExecutionException, TimeoutException,
IOException {
address = client.getElasticIPAddressServices().allocateAddressInRegion(Region.DEFAULT);
address = client.getElasticIPAddressServices().allocateAddressInRegion(null);
assertNotNull(address);
PublicIpInstanceIdPair compare = Iterables.getLast(client.getElasticIPAddressServices()
.describeAddressesInRegion(Region.DEFAULT, address));
.describeAddressesInRegion(null, address));
assertEquals(compare.getPublicIp(), address);
assert compare.getInstanceId() == null;
client.getElasticIPAddressServices().associateAddressInRegion(Region.DEFAULT, address,
client.getElasticIPAddressServices().associateAddressInRegion(null, address,
instanceId);
compare = Iterables.getLast(client.getElasticIPAddressServices().describeAddressesInRegion(
Region.DEFAULT, address));
null, address));
assertEquals(compare.getPublicIp(), address);
assertEquals(compare.getInstanceId(), instanceId);
Reservation reservation = Iterables.getOnlyElement(client.getInstanceServices()
.describeInstancesInRegion(Region.DEFAULT, instanceId));
.describeInstancesInRegion(null, instanceId));
assertNotNull(Iterables.getOnlyElement(reservation).getIpAddress());
assertFalse(Iterables.getOnlyElement(reservation).getIpAddress().equals(address));
doCheckKey(address);
client.getElasticIPAddressServices().disassociateAddressInRegion(Region.DEFAULT, address);
client.getElasticIPAddressServices().disassociateAddressInRegion(null, address);
compare = Iterables.getLast(client.getElasticIPAddressServices().describeAddressesInRegion(
Region.DEFAULT, address));
null, address));
assertEquals(compare.getPublicIp(), address);
assert compare.getInstanceId() == null;
reservation = Iterables.getOnlyElement(client.getInstanceServices()
.describeInstancesInRegion(Region.DEFAULT, instanceId));
.describeInstancesInRegion(null, instanceId));
// assert reservation.getRunningInstances().last().getIpAddress() == null; TODO
}
@ -385,7 +391,7 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
private RunningInstance getInstance(String instanceId) {
// search my account for the instance I just created
Set<Reservation> reservations = client.getInstanceServices().describeInstancesInRegion(
Region.DEFAULT, instanceId); // last parameter (ids) narrows the search
null, instanceId); // last parameter (ids) narrows the search
return Iterables.getOnlyElement(Iterables.getOnlyElement(reservations));
}
@ -427,13 +433,13 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest {
@AfterTest
void cleanup() throws InterruptedException, ExecutionException, TimeoutException {
if (address != null)
client.getElasticIPAddressServices().releaseAddressInRegion(Region.DEFAULT, address);
client.getElasticIPAddressServices().releaseAddressInRegion(null, address);
if (instanceId != null)
client.getInstanceServices().terminateInstancesInRegion(Region.DEFAULT, instanceId);
client.getInstanceServices().terminateInstancesInRegion(null, instanceId);
if (keyPair != null)
client.getKeyPairServices().deleteKeyPairInRegion(Region.DEFAULT, keyPair.getKeyName());
client.getKeyPairServices().deleteKeyPairInRegion(null, keyPair.getKeyName());
if (securityGroupName != null)
client.getSecurityGroupServices().deleteSecurityGroupInRegion(Region.DEFAULT,
client.getSecurityGroupServices().deleteSecurityGroupInRegion(null,
securityGroupName);
}

View File

@ -37,8 +37,18 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.jclouds.aws.AWSResponseException;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.*;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.aws.ec2.domain.BlockDeviceMapping;
import org.jclouds.aws.ec2.domain.Image;
import org.jclouds.aws.ec2.domain.InstanceState;
import org.jclouds.aws.ec2.domain.InstanceType;
import org.jclouds.aws.ec2.domain.IpProtocol;
import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.aws.ec2.domain.Reservation;
import org.jclouds.aws.ec2.domain.RootDeviceType;
import org.jclouds.aws.ec2.domain.RunningInstance;
import org.jclouds.aws.ec2.domain.Snapshot;
import org.jclouds.aws.ec2.domain.Volume;
import org.jclouds.aws.ec2.domain.Image.Architecture;
import org.jclouds.aws.ec2.domain.Image.ImageType;
import org.jclouds.aws.ec2.domain.Volume.InstanceInitiatedShutdownBehavior;
@ -147,18 +157,18 @@ public class EBSBootEC2ClientLiveTest {
securityGroupName = INSTANCE_PREFIX + "ingress";
try {
client.getSecurityGroupServices().deleteSecurityGroupInRegion(Region.DEFAULT,
client.getSecurityGroupServices().deleteSecurityGroupInRegion(null,
securityGroupName);
} catch (Exception e) {
}
client.getSecurityGroupServices().createSecurityGroupInRegion(Region.DEFAULT,
client.getSecurityGroupServices().createSecurityGroupInRegion(null,
securityGroupName, securityGroupName);
client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(Region.DEFAULT,
client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(null,
securityGroupName, IpProtocol.TCP, 80, 80, "0.0.0.0/0");
client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(Region.DEFAULT,
client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(null,
securityGroupName, IpProtocol.TCP, 443, 443, "0.0.0.0/0");
client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(Region.DEFAULT,
client.getSecurityGroupServices().authorizeSecurityGroupIngressInRegion(null,
securityGroupName, IpProtocol.TCP, 22, 22, "0.0.0.0/0");
}
@ -166,12 +176,12 @@ public class EBSBootEC2ClientLiveTest {
void testCreateKeyPair() {
String keyName = INSTANCE_PREFIX + "1";
try {
client.getKeyPairServices().deleteKeyPairInRegion(Region.DEFAULT, keyName);
client.getKeyPairServices().deleteKeyPairInRegion(null, keyName);
} catch (Exception e) {
}
keyPair = client.getKeyPairServices().createKeyPairInRegion(Region.DEFAULT, keyName);
keyPair = client.getKeyPairServices().createKeyPairInRegion(null, keyName);
assertNotNull(keyPair);
assertNotNull(keyPair.getKeyMaterial());
assertNotNull(keyPair.getKeyFingerprint());
@ -190,7 +200,7 @@ public class EBSBootEC2ClientLiveTest {
try {
System.out.printf("%d: running instance%n", System.currentTimeMillis());
Reservation reservation = client.getInstanceServices().runInstancesInRegion(
Region.DEFAULT, null, // allow ec2 to chose an availability zone
null, null, // allow ec2 to chose an availability zone
imageId, 1, // minimum instances
1, // maximum instances
withKeyName(keyPair.getKeyName())// key I created above
@ -412,39 +422,39 @@ public class EBSBootEC2ClientLiveTest {
}
private void setUserDataForInstanceInRegion() {
client.getInstanceServices().setUserDataForInstanceInRegion(Region.DEFAULT,
client.getInstanceServices().setUserDataForInstanceInRegion(null,
ebsInstance.getId(), "test".getBytes());
assertEquals("test", client.getInstanceServices().getUserDataForInstanceInRegion(
Region.DEFAULT, ebsInstance.getId()));
null, ebsInstance.getId()));
}
private void setRamdiskForInstanceInRegion() {
String ramdisk = client.getInstanceServices().getRamdiskForInstanceInRegion(Region.DEFAULT,
String ramdisk = client.getInstanceServices().getRamdiskForInstanceInRegion(null,
ebsInstance.getId());
client.getInstanceServices().setRamdiskForInstanceInRegion(Region.DEFAULT,
client.getInstanceServices().setRamdiskForInstanceInRegion(null,
ebsInstance.getId(), ramdisk);
assertEquals(ramdisk, client.getInstanceServices().getRamdiskForInstanceInRegion(
Region.DEFAULT, ebsInstance.getId()));
null, ebsInstance.getId()));
}
private void setKernelForInstanceInRegion() {
String oldKernel = client.getInstanceServices().getKernelForInstanceInRegion(Region.DEFAULT,
String oldKernel = client.getInstanceServices().getKernelForInstanceInRegion(null,
ebsInstance.getId());
client.getInstanceServices().setKernelForInstanceInRegion(Region.DEFAULT,
client.getInstanceServices().setKernelForInstanceInRegion(null,
ebsInstance.getId(), oldKernel);
assertEquals(oldKernel, client.getInstanceServices().getKernelForInstanceInRegion(
Region.DEFAULT, ebsInstance.getId()));
null, ebsInstance.getId()));
}
private void setInstanceTypeForInstanceInRegion() {
client.getInstanceServices().setInstanceTypeForInstanceInRegion(Region.DEFAULT,
client.getInstanceServices().setInstanceTypeForInstanceInRegion(null,
ebsInstance.getId(), InstanceType.C1_MEDIUM);
assertEquals(InstanceType.C1_MEDIUM, client.getInstanceServices()
.getInstanceTypeForInstanceInRegion(Region.DEFAULT, ebsInstance.getId()));
client.getInstanceServices().setInstanceTypeForInstanceInRegion(Region.DEFAULT,
.getInstanceTypeForInstanceInRegion(null, ebsInstance.getId()));
client.getInstanceServices().setInstanceTypeForInstanceInRegion(null,
ebsInstance.getId(), InstanceType.M1_SMALL);
assertEquals(InstanceType.M1_SMALL, client.getInstanceServices()
.getInstanceTypeForInstanceInRegion(Region.DEFAULT, ebsInstance.getId()));
.getInstanceTypeForInstanceInRegion(null, ebsInstance.getId()));
}
private void setBlockDeviceMappingForInstanceInRegion() {
@ -454,11 +464,11 @@ public class EBSBootEC2ClientLiveTest {
blockDeviceMapping.addEbsBlockDevice
("/dev/sda1", new RunningInstance.EbsBlockDevice(volumeId, false));
try {
client.getInstanceServices().setBlockDeviceMappingForInstanceInRegion(Region.DEFAULT,
client.getInstanceServices().setBlockDeviceMappingForInstanceInRegion(null,
ebsInstance.getId(), blockDeviceMapping);
Map<String, RunningInstance.EbsBlockDevice> devices = client
.getInstanceServices().getBlockDeviceMappingForInstanceInRegion(Region.DEFAULT,
.getInstanceServices().getBlockDeviceMappingForInstanceInRegion(null,
ebsInstance.getId());
assertEquals(devices.size(), 1);
String deviceName = Iterables.getOnlyElement(devices.keySet());
@ -480,16 +490,16 @@ public class EBSBootEC2ClientLiveTest {
try {
client.getInstanceServices().setInstanceInitiatedShutdownBehaviorForInstanceInRegion(
Region.DEFAULT, ebsInstance.getId(), InstanceInitiatedShutdownBehavior.STOP);
null, ebsInstance.getId(), InstanceInitiatedShutdownBehavior.STOP);
assertEquals(InstanceInitiatedShutdownBehavior.STOP, client.getInstanceServices()
.getInstanceInitiatedShutdownBehaviorForInstanceInRegion(Region.DEFAULT,
.getInstanceInitiatedShutdownBehaviorForInstanceInRegion(null,
ebsInstance.getId()));
client.getInstanceServices().setInstanceInitiatedShutdownBehaviorForInstanceInRegion(
Region.DEFAULT, ebsInstance.getId(), InstanceInitiatedShutdownBehavior.TERMINATE);
null, ebsInstance.getId(), InstanceInitiatedShutdownBehavior.TERMINATE);
assertEquals(InstanceInitiatedShutdownBehavior.TERMINATE, client.getInstanceServices()
.getInstanceInitiatedShutdownBehaviorForInstanceInRegion(Region.DEFAULT,
.getInstanceInitiatedShutdownBehaviorForInstanceInRegion(null,
ebsInstance.getId()));
System.out.println("OK: setInstanceInitiatedShutdownBehaviorForInstanceInRegion");
} catch (Exception e) {
@ -618,7 +628,7 @@ public class EBSBootEC2ClientLiveTest {
}
if (securityGroupName != null) {
try {
client.getSecurityGroupServices().deleteSecurityGroupInRegion(Region.DEFAULT,
client.getSecurityGroupServices().deleteSecurityGroupInRegion(null,
securityGroupName);
} catch (Exception e) {
e.printStackTrace();

View File

@ -26,13 +26,12 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.util.Set;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.compute.strategy.EC2PopulateDefaultLoginCredentialsForImageStrategy;
import org.jclouds.aws.ec2.domain.Image;
import org.jclouds.aws.ec2.xml.BaseEC2HandlerTest;
import org.jclouds.aws.ec2.xml.DescribeImagesResponseHandler;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.domain.Location;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -44,7 +43,7 @@ import com.google.common.collect.Iterables;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "compute.ImageParserTest")
public class ImageParserTest extends BaseHandlerTest {
public class ImageParserTest extends BaseEC2HandlerTest {
public void testParseAlesticCanonicalImage() {
InputStream is = getClass().getResourceAsStream("/ec2/alestic_canonical.xml");
@ -158,7 +157,7 @@ public class ImageParserTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -24,8 +24,7 @@ import static org.testng.Assert.assertEquals;
import javax.ws.rs.core.UriBuilder;
import org.jboss.resteasy.specimpl.UriBuilderImpl;
import org.jclouds.Constants;
import org.jclouds.aws.ec2.reference.EC2Constants;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.handlers.AWSClientErrorRetryHandler;
import org.jclouds.aws.handlers.AWSRedirectionRetryHandler;
import org.jclouds.aws.handlers.ParseAWSErrorFromXmlContent;
@ -52,18 +51,8 @@ public class EC2RestClientModuleTest {
new AbstractModule() {
@Override
protected void configure() {
bindConstant().annotatedWith(
Jsr330.named(EC2Constants.PROPERTY_AWS_ACCESSKEYID)).to("user");
bindConstant().annotatedWith(
Jsr330.named(EC2Constants.PROPERTY_AWS_SECRETACCESSKEY)).to("key");
bindConstant().annotatedWith(Jsr330.named(EC2Constants.PROPERTY_EC2_ENDPOINT))
.to("http://localhost");
bindConstant().annotatedWith(
Jsr330.named(EC2Constants.PROPERTY_AWS_EXPIREINTERVAL)).to(30);
bindConstant().annotatedWith(
Jsr330.named(Constants.PROPERTY_IO_WORKER_THREADS)).to("1");
bindConstant().annotatedWith(Jsr330.named(Constants.PROPERTY_USER_THREADS))
.to("1");
Jsr330.bindProperties(this.binder(), new EC2PropertiesBuilder("user", "key")
.build());
bind(UriBuilder.class).to(UriBuilderImpl.class);
}
});

View File

@ -18,22 +18,13 @@
*/
package org.jclouds.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.aws.ec2.options.DescribeImagesOptions.Builder.executableBy;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Map;
import java.util.Properties;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.options.CreateImageOptions;
import org.jclouds.aws.ec2.options.DescribeImagesOptions;
import org.jclouds.aws.ec2.options.RegisterImageBackedByEbsOptions;
@ -43,25 +34,13 @@ import org.jclouds.aws.ec2.xml.DescribeImagesResponseHandler;
import org.jclouds.aws.ec2.xml.ImageIdHandler;
import org.jclouds.aws.ec2.xml.PermissionHandler;
import org.jclouds.aws.ec2.xml.ProductCodesHandler;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.reference.AWSConstants;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.CloseContentAndReturn;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Jsr330;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
/**
@ -70,14 +49,14 @@ import com.google.inject.TypeLiteral;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.AMIAsyncClientTest")
public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
public class AMIAsyncClientTest extends BaseEC2AsyncClientTest<AMIAsyncClient> {
public void testCreateImage() throws SecurityException, NoSuchMethodException, IOException {
Method method = AMIAsyncClient.class.getMethod("createImageInRegion", Region.class,
String.class, String.class, Array.newInstance(CreateImageOptions.class, 0)
.getClass());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "name", "instanceId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"name", "instanceId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -96,9 +75,9 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
Method method = AMIAsyncClient.class.getMethod("createImageInRegion", Region.class,
String.class, String.class, Array.newInstance(CreateImageOptions.class, 0)
.getClass());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "name", "instanceId", new CreateImageOptions().withDescription(
"description").noReboot());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"name", "instanceId", new CreateImageOptions().withDescription("description")
.noReboot());
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -118,7 +97,7 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
Method method = AMIAsyncClient.class.getMethod("describeImagesInRegion", Region.class, Array
.newInstance(DescribeImagesOptions.class, 0).getClass());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT);
(Region) null);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -140,8 +119,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
IOException {
Method method = AMIAsyncClient.class.getMethod("describeImagesInRegion", Region.class, Array
.newInstance(DescribeImagesOptions.class, 0).getClass());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, executableBy("me").ownedBy("fred", "nancy").imageIds("1", "2"));
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
executableBy("me").ownedBy("fred", "nancy").imageIds("1", "2"));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -160,8 +139,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
public void testDeregisterImage() throws SecurityException, NoSuchMethodException, IOException {
Method method = AMIAsyncClient.class.getMethod("deregisterImageInRegion", Region.class,
String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -180,8 +159,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
Method method = AMIAsyncClient.class.getMethod("registerImageFromManifestInRegion",
Region.class, String.class, String.class, Array.newInstance(
RegisterImageOptions.class, 0).getClass());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "name", "pathToManifest");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"name", "pathToManifest");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -200,9 +179,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
Method method = AMIAsyncClient.class.getMethod("registerImageFromManifestInRegion",
Region.class, String.class, String.class, Array.newInstance(
RegisterImageOptions.class, 0).getClass());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "name", "pathToManifest", new RegisterImageOptions()
.withDescription("description"));
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"name", "pathToManifest", new RegisterImageOptions().withDescription("description"));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -223,8 +201,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
Method method = AMIAsyncClient.class.getMethod("registerUnixImageBackedByEbsInRegion",
Region.class, String.class, String.class, Array.newInstance(
RegisterImageBackedByEbsOptions.class, 0).getClass());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "imageName", "snapshotId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"imageName", "snapshotId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -244,11 +222,10 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
Method method = AMIAsyncClient.class.getMethod("registerUnixImageBackedByEbsInRegion",
Region.class, String.class, String.class, Array.newInstance(
RegisterImageBackedByEbsOptions.class, 0).getClass());
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "imageName", "snapshotId", new RegisterImageBackedByEbsOptions()
.withDescription("description").addBlockDeviceFromSnapshot("/dev/device",
null, "snapshot").addNewBlockDevice("/dev/newdevice", "newblock",
100));
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"imageName", "snapshotId", new RegisterImageBackedByEbsOptions().withDescription(
"description").addBlockDeviceFromSnapshot("/dev/device", null, "snapshot")
.addNewBlockDevice("/dev/newdevice", "newblock", 100));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -268,8 +245,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
IOException {
Method method = AMIAsyncClient.class.getMethod("getProductCodesForImageInRegion",
Region.class, String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -288,8 +265,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
NoSuchMethodException, IOException {
Method method = AMIAsyncClient.class.getMethod("getBlockDeviceMappingsForImageInRegion",
Region.class, String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -308,8 +285,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
IOException {
Method method = AMIAsyncClient.class.getMethod("getLaunchPermissionForImageInRegion",
Region.class, String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -328,8 +305,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
IOException {
Method method = AMIAsyncClient.class.getMethod("addLaunchPermissionsToImageInRegion",
Region.class, Iterable.class, Iterable.class, String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, ImmutableList.of("bob", "sue"), ImmutableList.of("all"), "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
ImmutableList.of("bob", "sue"), ImmutableList.of("all"), "imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -353,8 +330,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
NoSuchMethodException, IOException {
Method method = AMIAsyncClient.class.getMethod("removeLaunchPermissionsFromImageInRegion",
Region.class, Iterable.class, Iterable.class, String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, ImmutableList.of("bob", "sue"), ImmutableList.of("all"), "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
ImmutableList.of("bob", "sue"), ImmutableList.of("all"), "imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -373,8 +350,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
IOException {
Method method = AMIAsyncClient.class.getMethod("resetLaunchPermissionsOnImageInRegion",
Region.class, String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
"imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -392,8 +369,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
IOException {
Method method = AMIAsyncClient.class.getMethod("addProductCodesToImageInRegion",
Region.class, Iterable.class, String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, ImmutableList.of("code1", "code2"), "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
ImmutableList.of("code1", "code2"), "imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -413,8 +390,8 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
IOException {
Method method = AMIAsyncClient.class.getMethod("removeProductCodesFromImageInRegion",
Region.class, Iterable.class, String.class);
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, ImmutableList.of("code1", "code2"), "imageId");
GeneratedHttpRequest<AMIAsyncClient> httpMethod = processor.createRequest(method, null,
ImmutableList.of("code1", "code2"), "imageId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -430,63 +407,10 @@ public class AMIAsyncClientTest extends RestClientTest<AMIAsyncClient> {
checkFilters(httpMethod);
}
@Override
protected void checkFilters(GeneratedHttpRequest<AMIAsyncClient> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
@Override
protected TypeLiteral<RestAnnotationProcessor<AMIAsyncClient>> createTypeLiteral() {
return new TypeLiteral<RestAnnotationProcessor<AMIAsyncClient>>() {
};
}
private FormSigner filter;
@Override
@BeforeTest
protected void setupFactory() {
super.setupFactory();
this.filter = injector.getInstance(FormSigner.class);
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder(new Properties())
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.DEFAULT, URI.create("https://booya"),
Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"),
Region.US_WEST_1, URI.create("https://ec2.us-west-1.amazonaws.com"));
}
};
}
}

View File

@ -75,7 +75,7 @@ public class AMIClientLiveTest {
}
public void testDescribeImages() {
for (Region region : ImmutableSet.of(Region.DEFAULT, Region.EU_WEST_1, Region.US_EAST_1,
for (Region region : ImmutableSet.of(Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1)) {
SortedSet<Image> allResults = Sets.newTreeSet(client.describeImagesInRegion(region));
assertNotNull(allResults);
@ -95,11 +95,11 @@ public class AMIClientLiveTest {
@Test(enabled = false)
public void testRegisterImageFromManifest() {
String imageRegisteredId = client.registerImageFromManifestInRegion(Region.DEFAULT,
String imageRegisteredId = client.registerImageFromManifestInRegion(null,
"jcloudstest1", DEFAULT_MANIFEST);
imagesToDeregister.add(imageRegisteredId);
Image imageRegisteredFromManifest = Iterables.getOnlyElement(client.describeImagesInRegion(
Region.DEFAULT, imageIds(imageRegisteredId)));
null, imageIds(imageRegisteredId)));
assertEquals(imageRegisteredFromManifest.getName(), "jcloudstest1");
assertEquals(imageRegisteredFromManifest.getImageLocation(), DEFAULT_MANIFEST);
assertEquals(imageRegisteredFromManifest.getImageType(), ImageType.MACHINE);
@ -110,10 +110,10 @@ public class AMIClientLiveTest {
@Test(enabled = false)
public void testRegisterImageFromManifestOptions() {
String imageRegisteredWithOptionsId = client.registerImageFromManifestInRegion(
Region.DEFAULT, "jcloudstest2", DEFAULT_MANIFEST, withDescription("adrian"));
null, "jcloudstest2", DEFAULT_MANIFEST, withDescription("adrian"));
imagesToDeregister.add(imageRegisteredWithOptionsId);
Image imageRegisteredFromManifestWithOptions = Iterables.getOnlyElement(client
.describeImagesInRegion(Region.DEFAULT, imageIds(imageRegisteredWithOptionsId)));
.describeImagesInRegion(null, imageIds(imageRegisteredWithOptionsId)));
assertEquals(imageRegisteredFromManifestWithOptions.getName(), "jcloudstest2");
assertEquals(imageRegisteredFromManifestWithOptions.getImageLocation(), DEFAULT_MANIFEST);
assertEquals(imageRegisteredFromManifestWithOptions.getImageType(), ImageType.MACHINE);
@ -126,11 +126,11 @@ public class AMIClientLiveTest {
@Test(enabled = false)
// awaiting EBS functionality to be added to jclouds
public void testRegisterImageBackedByEBS() {
String imageRegisteredId = client.registerUnixImageBackedByEbsInRegion(Region.DEFAULT,
String imageRegisteredId = client.registerUnixImageBackedByEbsInRegion(null,
"jcloudstest1", DEFAULT_MANIFEST);
imagesToDeregister.add(imageRegisteredId);
Image imageRegistered = Iterables.getOnlyElement(client.describeImagesInRegion(
Region.DEFAULT, imageIds(imageRegisteredId)));
null, imageIds(imageRegisteredId)));
assertEquals(imageRegistered.getName(), "jcloudstest1");
assertEquals(imageRegistered.getImageType(), ImageType.MACHINE);
assertEquals(imageRegistered.getRootDeviceType(), RootDeviceType.EBS);
@ -141,11 +141,11 @@ public class AMIClientLiveTest {
// awaiting EBS functionality to be added to jclouds
public void testRegisterImageBackedByEBSOptions() {
String imageRegisteredWithOptionsId = client.registerUnixImageBackedByEbsInRegion(
Region.DEFAULT, "jcloudstest2", DEFAULT_SNAPSHOT, addNewBlockDevice("/dev/sda2",
null, "jcloudstest2", DEFAULT_SNAPSHOT, addNewBlockDevice("/dev/sda2",
"myvirtual", 1).withDescription("adrian"));
imagesToDeregister.add(imageRegisteredWithOptionsId);
Image imageRegisteredWithOptions = Iterables.getOnlyElement(client.describeImagesInRegion(
Region.DEFAULT, imageIds(imageRegisteredWithOptionsId)));
null, imageIds(imageRegisteredWithOptionsId)));
assertEquals(imageRegisteredWithOptions.getName(), "jcloudstest2");
assertEquals(imageRegisteredWithOptions.getImageType(), ImageType.MACHINE);
assertEquals(imageRegisteredWithOptions.getRootDeviceType(), RootDeviceType.EBS);
@ -158,48 +158,48 @@ public class AMIClientLiveTest {
@Test(enabled = false)
public void testCreateImage() {
// TODO client.createImageInRegion(Region.DEFAULT, name, instanceId, options);
// TODO client.createImageInRegion(null, name, instanceId, options);
}
@Test(enabled = false)
public void testAddProductCodesToImage() {
// TODO client.addProductCodesToImageInRegion(Region.DEFAULT, productCodes, imageId);
// TODO client.addProductCodesToImageInRegion(null, productCodes, imageId);
}
@Test(enabled = false)
public void testAddLaunchPermissionsToImage() {
// TODO client.addLaunchPermissionsToImageInRegion(Region.DEFAULT, userIds, userGroups,
// TODO client.addLaunchPermissionsToImageInRegion(null, userIds, userGroups,
// imageId);
}
@Test(enabled = false)
public void testRemoveLaunchPermissionsFromImage() {
// TODO client.removeLaunchPermissionsFromImageInRegion(Region.DEFAULT, userIds, userGroups,
// TODO client.removeLaunchPermissionsFromImageInRegion(null, userIds, userGroups,
// imageId);
}
@Test(enabled = false)
public void testResetLaunchPermissionsOnImage() {
// TODO client.resetLaunchPermissionsOnImageInRegion(Region.DEFAULT, imageId);
// TODO client.resetLaunchPermissionsOnImageInRegion(null, imageId);
}
public void testGetLaunchPermissionForImage() {
System.out.println(client.getLaunchPermissionForImageInRegion(Region.DEFAULT, imageId));
System.out.println(client.getLaunchPermissionForImageInRegion(null, imageId));
}
public void testGetProductCodesForImage() {
System.out.println(client.getProductCodesForImageInRegion(Region.DEFAULT, imageId));
System.out.println(client.getProductCodesForImageInRegion(null, imageId));
}
@Test(enabled = false)
// awaiting ebs support
public void testGetBlockDeviceMappingsForImage() {
System.out.println(client.getBlockDeviceMappingsForImageInRegion(Region.DEFAULT, imageId));
System.out.println(client.getBlockDeviceMappingsForImageInRegion(null, imageId));
}
@AfterTest
public void deregisterImages() {
for (String imageId : imagesToDeregister)
client.deregisterImageInRegion(Region.DEFAULT, imageId);
client.deregisterImageInRegion(null, imageId);
}
}

View File

@ -18,44 +18,24 @@
*/
package org.jclouds.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.aws.ec2.options.DescribeAvailabilityZonesOptions.Builder.availabilityZones;
import static org.jclouds.aws.ec2.options.DescribeRegionsOptions.Builder.regions;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Map;
import java.util.Properties;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.options.DescribeAvailabilityZonesOptions;
import org.jclouds.aws.ec2.options.DescribeRegionsOptions;
import org.jclouds.aws.ec2.xml.DescribeAvailabilityZonesResponseHandler;
import org.jclouds.aws.ec2.xml.DescribeRegionsResponseHandler;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.reference.AWSConstants;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Jsr330;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
/**
@ -65,7 +45,7 @@ import com.google.inject.TypeLiteral;
*/
@Test(groups = "unit", testName = "ec2.AvailabilityZoneAndRegionAsyncClientTest")
public class AvailabilityZoneAndRegionAsyncClientTest extends
RestClientTest<AvailabilityZoneAndRegionAsyncClient> {
BaseEC2AsyncClientTest<AvailabilityZoneAndRegionAsyncClient> {
public void testDescribeAvailabilityZones() throws SecurityException, NoSuchMethodException,
IOException {
@ -149,54 +129,10 @@ public class AvailabilityZoneAndRegionAsyncClientTest extends
checkFilters(httpMethod);
}
@Override
protected void checkFilters(GeneratedHttpRequest<AvailabilityZoneAndRegionAsyncClient> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
@Override
protected TypeLiteral<RestAnnotationProcessor<AvailabilityZoneAndRegionAsyncClient>> createTypeLiteral() {
return new TypeLiteral<RestAnnotationProcessor<AvailabilityZoneAndRegionAsyncClient>>() {
};
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder(new Properties())
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.DEFAULT, URI.create("https://booya"),
Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"),
Region.US_WEST_1, URI.create("https://ec2.us-west-1.amazonaws.com"));
}
};
}
}

View File

@ -68,7 +68,7 @@ public class AvailabilityZoneAndRegionClientLiveTest {
}
public void testDescribeAvailabilityZones() {
for (Region region : ImmutableSet.of(Region.DEFAULT, Region.EU_WEST_1, Region.US_EAST_1,
for (Region region : ImmutableSet.of(Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1)) {
SortedSet<AvailabilityZoneInfo> allResults = Sets.newTreeSet(client
.describeAvailabilityZonesInRegion(region));

View File

@ -0,0 +1,118 @@
/**
*
* Copyright (C) 2009 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.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import java.net.URI;
import java.util.Map;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.date.TimeStamp;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.util.Jsr330;
import org.testng.annotations.BeforeTest;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
/**
*
*
* @author Adrian Cole
*/
public abstract class BaseEC2AsyncClientTest<T> extends RestClientTest<T> {
protected FormSigner filter;
@Override
protected void checkFilters(GeneratedHttpRequest<T> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
public BaseEC2AsyncClientTest() {
super();
}
@Override
@BeforeTest
protected void setupFactory() {
super.setupFactory();
this.filter = injector.getInstance(FormSigner.class);
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder("user", "key")
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bind(Region.class).annotatedWith(EC2.class).toInstance(Region.US_EAST_1);
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
@EC2
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.EU_WEST_1, URI
.create("https://ec2.eu-west-1.amazonaws.com"), Region.US_EAST_1, URI
.create("https://ec2.us-east-1.amazonaws.com"), Region.US_WEST_1, URI
.create("https://ec2.us-west-1.amazonaws.com"));
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<AvailabilityZone, Region> provideAvailabilityZoneRegionMap() {
return ImmutableMap.<AvailabilityZone, Region> of(AvailabilityZone.US_EAST_1A,
Region.US_EAST_1);
}
};
}
}

View File

@ -18,23 +18,14 @@
*/
package org.jclouds.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.aws.ec2.options.DescribeSnapshotsOptions.Builder.ownedBy;
import static org.jclouds.aws.ec2.options.DetachVolumeOptions.Builder.fromInstance;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Map;
import java.util.Properties;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.functions.ReturnVoidOnVolumeAvailable;
import org.jclouds.aws.ec2.options.CreateSnapshotOptions;
@ -46,24 +37,13 @@ import org.jclouds.aws.ec2.xml.DescribeSnapshotsResponseHandler;
import org.jclouds.aws.ec2.xml.DescribeVolumesResponseHandler;
import org.jclouds.aws.ec2.xml.PermissionHandler;
import org.jclouds.aws.ec2.xml.SnapshotHandler;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.reference.AWSConstants;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.CloseContentAndReturn;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Jsr330;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
/**
@ -72,7 +52,8 @@ import com.google.inject.TypeLiteral;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.ElasticBlockStoreAsyncClientTest")
public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBlockStoreAsyncClient> {
public class ElasticBlockStoreAsyncClientTest extends
BaseEC2AsyncClientTest<ElasticBlockStoreAsyncClient> {
public void testCreateVolume() throws SecurityException, NoSuchMethodException, IOException {
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
@ -80,9 +61,9 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, AvailabilityZone.US_EAST_1A, 20);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertRequestLineEquals(httpMethod, "POST https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
"Content-Length: 74\nContent-Type: application/x-www-form-urlencoded\nHost: ec2.amazonaws.com\n");
"Content-Length: 74\nContent-Type: application/x-www-form-urlencoded\nHost: ec2.us-east-1.amazonaws.com\n");
assertPayloadEquals(httpMethod,
"Version=2009-11-30&Action=CreateVolume&AvailabilityZone=us-east-1a&Size=20");
@ -100,9 +81,9 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, AvailabilityZone.US_EAST_1A, "snapshotId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertRequestLineEquals(httpMethod, "POST https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
"Content-Length: 88\nContent-Type: application/x-www-form-urlencoded\nHost: ec2.amazonaws.com\n");
"Content-Length: 88\nContent-Type: application/x-www-form-urlencoded\nHost: ec2.us-east-1.amazonaws.com\n");
assertPayloadEquals(httpMethod,
"Version=2009-11-30&Action=CreateVolume&AvailabilityZone=us-east-1a&SnapshotId=snapshotId");
@ -121,9 +102,9 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, AvailabilityZone.US_EAST_1A, 15, "snapshotId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertRequestLineEquals(httpMethod, "POST https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
"Content-Length: 96\nContent-Type: application/x-www-form-urlencoded\nHost: ec2.amazonaws.com\n");
"Content-Length: 96\nContent-Type: application/x-www-form-urlencoded\nHost: ec2.us-east-1.amazonaws.com\n");
assertPayloadEquals(httpMethod,
"Version=2009-11-30&Action=CreateVolume&AvailabilityZone=us-east-1a&SnapshotId=snapshotId&Size=15");
@ -138,7 +119,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod("deleteVolumeInRegion",
Region.class, String.class);
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, "id");
method, null, "id");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -156,7 +137,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod("describeVolumesInRegion",
Region.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT);
method, (Region) null);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -175,7 +156,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod("describeVolumesInRegion",
Region.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, "1", "2");
method, null, "1", "2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -194,7 +175,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod("attachVolumeInRegion",
Region.class, String.class, String.class, String.class);
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, "id", "instanceId", "/device");
method, null, "id", "instanceId", "/device");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -214,7 +195,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Region.class, String.class, boolean.class, Array.newInstance(
DetachVolumeOptions.class, 0).getClass());
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, "id", false);
method, null, "id", false);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -234,9 +215,8 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod("detachVolumeInRegion",
Region.class, String.class, boolean.class, Array.newInstance(
DetachVolumeOptions.class, 0).getClass());
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor
.createRequest(method, Region.DEFAULT, "id", true, fromInstance("instanceId")
.fromDevice("/device"));
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, null, "id", true, fromInstance("instanceId").fromDevice("/device"));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -257,7 +237,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Region.class, String.class, Array.newInstance(CreateSnapshotOptions.class, 0)
.getClass());
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, "volumeId");
method, null, "volumeId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -277,7 +257,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Region.class, String.class, Array.newInstance(CreateSnapshotOptions.class, 0)
.getClass());
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, "volumeId", CreateSnapshotOptions.Builder
method, null, "volumeId", CreateSnapshotOptions.Builder
.withDescription("description"));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
@ -297,7 +277,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod("describeSnapshotsInRegion",
Region.class, Array.newInstance(DescribeSnapshotsOptions.class, 0).getClass());
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT);
method, (Region) null);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -316,8 +296,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod("describeSnapshotsInRegion",
Region.class, Array.newInstance(DescribeSnapshotsOptions.class, 0).getClass());
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, ownedBy("o1", "o2").restorableBy("r1", "r2").snapshotIds(
"s1", "s2"));
method, null, ownedBy("o1", "o2").restorableBy("r1", "r2").snapshotIds("s1", "s2"));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -338,7 +317,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
"getCreateVolumePermissionForSnapshotInRegion", Region.class, String.class);
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, "snapshotId");
method, null, "snapshotId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -360,8 +339,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
"addCreateVolumePermissionsToSnapshotInRegion", Region.class, Iterable.class,
Iterable.class, String.class);
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, ImmutableList.of("bob", "sue"), ImmutableList.of("all"),
"snapshotId");
method, null, ImmutableList.of("bob", "sue"), ImmutableList.of("all"), "snapshotId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -383,8 +361,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
"removeCreateVolumePermissionsFromSnapshotInRegion", Region.class, Iterable.class,
Iterable.class, String.class);
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, ImmutableList.of("bob", "sue"), ImmutableList.of("all"),
"snapshotId");
method, null, ImmutableList.of("bob", "sue"), ImmutableList.of("all"), "snapshotId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -404,7 +381,7 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
"resetCreateVolumePermissionsOnSnapshotInRegion", Region.class, String.class);
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, "snapshotId");
method, null, "snapshotId");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -419,60 +396,10 @@ public class ElasticBlockStoreAsyncClientTest extends RestClientTest<ElasticBloc
checkFilters(httpMethod);
}
@Override
protected void checkFilters(GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
@Override
protected TypeLiteral<RestAnnotationProcessor<ElasticBlockStoreAsyncClient>> createTypeLiteral() {
return new TypeLiteral<RestAnnotationProcessor<ElasticBlockStoreAsyncClient>>() {
};
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder(new Properties())
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.DEFAULT, URI
.create("https://ec2.amazonaws.com"));
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<AvailabilityZone, Region> provideAvailabilityZoneRegionMap() {
return ImmutableMap.<AvailabilityZone, Region> of(AvailabilityZone.US_EAST_1A,
Region.DEFAULT);
}
};
}
}

View File

@ -72,7 +72,7 @@ public class ElasticBlockStoreClientLiveTest {
@Test
void testDescribeVolumes() {
for (Region region : ImmutableSet.of(Region.DEFAULT, Region.EU_WEST_1, Region.US_EAST_1,
for (Region region : ImmutableSet.of(Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1)) {
SortedSet<Volume> allResults = Sets.newTreeSet(client.describeVolumesInRegion(region));
assertNotNull(allResults);
@ -96,7 +96,7 @@ public class ElasticBlockStoreClientLiveTest {
this.volumeId = expected.getId();
SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegion(Region.DEFAULT,
SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegion(null,
expected.getId()));
assertNotNull(result);
assertEquals(result.size(), 1);
@ -106,7 +106,7 @@ public class ElasticBlockStoreClientLiveTest {
@Test(dependsOnMethods = "testCreateVolumeInAvailabilityZone")
void testCreateSnapshotInRegion() {
Snapshot snapshot = client.createSnapshotInRegion(Region.DEFAULT, volumeId);
Snapshot snapshot = client.createSnapshotInRegion(null, volumeId);
Predicate<Snapshot> snapshotted = new RetryablePredicate<Snapshot>(new SnapshotCompleted(
client), 600, 10, TimeUnit.SECONDS);
assert snapshotted.apply(snapshot);
@ -171,7 +171,7 @@ public class ElasticBlockStoreClientLiveTest {
@Test
void testDescribeSnapshots() {
for (Region region : ImmutableSet.of(Region.DEFAULT, Region.EU_WEST_1, Region.US_EAST_1,
for (Region region : ImmutableSet.of(Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1)) {
SortedSet<Snapshot> allResults = Sets.newTreeSet(client.describeSnapshotsInRegion(region));
assertNotNull(allResults);
@ -187,21 +187,21 @@ public class ElasticBlockStoreClientLiveTest {
@Test(enabled = false)
public void testAddCreateVolumePermissionsToSnapshot() {
// TODO client.addCreateVolumePermissionsToSnapshotInRegion(Region.DEFAULT, userIds,
// TODO client.addCreateVolumePermissionsToSnapshotInRegion(null, userIds,
// userGroups,
// snapshotId);
}
@Test(enabled = false)
public void testRemoveCreateVolumePermissionsFromSnapshot() {
// TODO client.removeCreateVolumePermissionsFromSnapshotInRegion(Region.DEFAULT, userIds,
// TODO client.removeCreateVolumePermissionsFromSnapshotInRegion(null, userIds,
// userGroups,
// snapshotId);
}
@Test(enabled = false)
public void testResetCreateVolumePermissionsOnSnapshot() {
// TODO client.resetCreateVolumePermissionsOnSnapshotInRegion(Region.DEFAULT, snapshotId);
// TODO client.resetCreateVolumePermissionsOnSnapshotInRegion(null, snapshotId);
}
@Test(dependsOnMethods = "testCreateSnapshotInRegion")
@ -212,8 +212,8 @@ public class ElasticBlockStoreClientLiveTest {
@Test(dependsOnMethods = "testCreateSnapshotInRegion")
void testDeleteVolumeInRegion() {
client.deleteVolumeInRegion(Region.DEFAULT, volumeId);
SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegion(Region.DEFAULT,
client.deleteVolumeInRegion(null, volumeId);
SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegion(null,
volumeId));
assertEquals(result.size(), 1);
Volume volume = result.iterator().next();

View File

@ -18,41 +18,20 @@
*/
package org.jclouds.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.URI;
import java.util.Map;
import java.util.Properties;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.xml.AllocateAddressResponseHandler;
import org.jclouds.aws.ec2.xml.DescribeAddressesResponseHandler;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.reference.AWSConstants;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.CloseContentAndReturn;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Jsr330;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
/**
@ -61,14 +40,15 @@ import com.google.inject.TypeLiteral;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.ElasticIPAddressAsyncClientTest")
public class ElasticIPAddressAsyncClientTest extends RestClientTest<ElasticIPAddressAsyncClient> {
public class ElasticIPAddressAsyncClientTest extends
BaseEC2AsyncClientTest<ElasticIPAddressAsyncClient> {
public void testDisassociateAddress() throws SecurityException, NoSuchMethodException,
IOException {
Method method = ElasticIPAddressAsyncClient.class.getMethod("disassociateAddressInRegion",
Region.class, InetAddress.class);
GeneratedHttpRequest<ElasticIPAddressAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }));
method, null, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -87,7 +67,7 @@ public class ElasticIPAddressAsyncClientTest extends RestClientTest<ElasticIPAdd
Method method = ElasticIPAddressAsyncClient.class.getMethod("associateAddressInRegion",
Region.class, InetAddress.class, String.class);
GeneratedHttpRequest<ElasticIPAddressAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }), "me");
method, null, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }), "me");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -106,7 +86,7 @@ public class ElasticIPAddressAsyncClientTest extends RestClientTest<ElasticIPAdd
Method method = ElasticIPAddressAsyncClient.class.getMethod("releaseAddressInRegion",
Region.class, InetAddress.class);
GeneratedHttpRequest<ElasticIPAddressAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }));
method, null, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -124,7 +104,7 @@ public class ElasticIPAddressAsyncClientTest extends RestClientTest<ElasticIPAdd
Method method = ElasticIPAddressAsyncClient.class.getMethod("describeAddressesInRegion",
Region.class, Array.newInstance(InetAddress.class, 0).getClass());
GeneratedHttpRequest<ElasticIPAddressAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }));
method, null, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -143,7 +123,7 @@ public class ElasticIPAddressAsyncClientTest extends RestClientTest<ElasticIPAdd
Method method = ElasticIPAddressAsyncClient.class.getMethod("allocateAddressInRegion",
Region.class);
GeneratedHttpRequest<ElasticIPAddressAsyncClient> httpMethod = processor.createRequest(
method, Region.DEFAULT);
method, (Region) null);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -157,54 +137,10 @@ public class ElasticIPAddressAsyncClientTest extends RestClientTest<ElasticIPAdd
checkFilters(httpMethod);
}
@Override
protected void checkFilters(GeneratedHttpRequest<ElasticIPAddressAsyncClient> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
@Override
protected TypeLiteral<RestAnnotationProcessor<ElasticIPAddressAsyncClient>> createTypeLiteral() {
return new TypeLiteral<RestAnnotationProcessor<ElasticIPAddressAsyncClient>>() {
};
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder(new Properties())
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.DEFAULT, URI.create("https://booya"),
Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"),
Region.US_WEST_1, URI.create("https://ec2.us-west-1.amazonaws.com"));
}
};
}
}

View File

@ -61,7 +61,7 @@ public class ElasticIPAddressClientLiveTest {
@Test
void testDescribeAddresses() {
for (Region region : ImmutableSet.of(Region.DEFAULT, Region.EU_WEST_1, Region.US_EAST_1,
for (Region region : ImmutableSet.of(Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1)) {
SortedSet<PublicIpInstanceIdPair> allResults = Sets.newTreeSet(client
.describeAddressesInRegion(region));

View File

@ -18,21 +18,11 @@
*/
package org.jclouds.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Map;
import java.util.Properties;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.domain.BlockDeviceMapping;
import org.jclouds.aws.ec2.domain.InstanceType;
@ -48,24 +38,12 @@ import org.jclouds.aws.ec2.xml.InstanceTypeHandler;
import org.jclouds.aws.ec2.xml.RunInstancesResponseHandler;
import org.jclouds.aws.ec2.xml.StringValueHandler;
import org.jclouds.aws.ec2.xml.UnencodeStringValueHandler;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.reference.AWSConstants;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.CloseContentAndReturn;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Jsr330;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
/**
@ -74,12 +52,12 @@ import com.google.inject.TypeLiteral;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.InstanceAsyncClientTest")
public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient> {
public class InstanceAsyncClientTest extends BaseEC2AsyncClientTest<InstanceAsyncClient> {
public void testDescribeInstances() throws SecurityException, NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("describeInstancesInRegion",
Region.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT);
(Region) null);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -97,8 +75,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
IOException {
Method method = InstanceAsyncClient.class.getMethod("describeInstancesInRegion",
Region.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "2");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", "2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -117,8 +95,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
IOException {
Method method = InstanceAsyncClient.class.getMethod("terminateInstancesInRegion",
Region.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "2");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", "2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -137,8 +115,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
Method method = InstanceAsyncClient.class.getMethod("runInstancesInRegion", Region.class,
AvailabilityZone.class, String.class, int.class, int.class, Array.newInstance(
RunInstancesOptions.class, 0).getClass());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, null, "ami-voo", 1, 1);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
null, "ami-voo", 1, 1);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -181,8 +159,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
public void testStopInstances() throws SecurityException, NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("stopInstancesInRegion", Region.class,
boolean.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, true, "1", "2");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
true, "1", "2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -200,8 +178,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
public void testRebootInstances() throws SecurityException, NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("rebootInstancesInRegion", Region.class,
Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "2");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", "2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -219,8 +197,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
public void testStartInstances() throws SecurityException, NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("startInstancesInRegion", Region.class,
Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "2");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", "2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -239,8 +217,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("getUserDataForInstanceInRegion",
Region.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -259,8 +237,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("getRootDeviceNameForInstanceInRegion",
Region.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -279,8 +257,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
IOException {
Method method = InstanceAsyncClient.class.getMethod("getRamdiskForInstanceInRegion",
Region.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -299,8 +277,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod(
"isApiTerminationDisabledForInstanceInRegion", Region.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -319,8 +297,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
IOException {
Method method = InstanceAsyncClient.class.getMethod("getKernelForInstanceInRegion",
Region.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -339,8 +317,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("getInstanceTypeForInstanceInRegion",
Region.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -360,8 +338,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
Method method = InstanceAsyncClient.class.getMethod(
"getInstanceInitiatedShutdownBehaviorForInstanceInRegion", Region.class,
String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -381,8 +359,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod(
"getBlockDeviceMappingForInstanceInRegion", Region.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -401,8 +379,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("setUserDataForInstanceInRegion",
Region.class, String.class, Array.newInstance(byte.class, 0).getClass());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "test".getBytes());
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", "test".getBytes());
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -426,8 +404,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
IOException {
Method method = InstanceAsyncClient.class.getMethod("setRamdiskForInstanceInRegion",
Region.class, String.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "test");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", "test");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -445,8 +423,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
IOException {
Method method = InstanceAsyncClient.class.getMethod("setKernelForInstanceInRegion",
Region.class, String.class, String.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "test");
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", "test");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -465,8 +443,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
Method method = InstanceAsyncClient.class.getMethod(
"setApiTerminationDisabledForInstanceInRegion", Region.class, String.class,
boolean.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", true);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", true);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -486,8 +464,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
NoSuchMethodException, IOException {
Method method = InstanceAsyncClient.class.getMethod("setInstanceTypeForInstanceInRegion",
Region.class, String.class, InstanceType.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", InstanceType.C1_MEDIUM);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", InstanceType.C1_MEDIUM);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -508,8 +486,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
Method method = InstanceAsyncClient.class.getMethod(
"setInstanceInitiatedShutdownBehaviorForInstanceInRegion", Region.class,
String.class, InstanceInitiatedShutdownBehavior.class);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", InstanceInitiatedShutdownBehavior.TERMINATE);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", InstanceInitiatedShutdownBehavior.TERMINATE);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -534,8 +512,8 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
BlockDeviceMapping blockDeviceMapping = new BlockDeviceMapping();
blockDeviceMapping.addEbsBlockDevice("/dev/sda1", new RunningInstance.EbsBlockDevice(
"vol-test1", true));
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", blockDeviceMapping);
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
"1", blockDeviceMapping);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -555,63 +533,9 @@ public class InstanceAsyncClientTest extends RestClientTest<InstanceAsyncClient>
checkFilters(httpMethod);
}
@Override
protected void checkFilters(GeneratedHttpRequest<InstanceAsyncClient> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
@Override
protected TypeLiteral<RestAnnotationProcessor<InstanceAsyncClient>> createTypeLiteral() {
return new TypeLiteral<RestAnnotationProcessor<InstanceAsyncClient>>() {
};
}
private FormSigner filter;
@Override
@BeforeTest
protected void setupFactory() {
super.setupFactory();
this.filter = injector.getInstance(FormSigner.class);
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder(new Properties())
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.DEFAULT, URI.create("https://booya"),
Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"),
Region.US_WEST_1, URI.create("https://ec2.us-west-1.amazonaws.com"));
}
};
}
}

View File

@ -61,7 +61,7 @@ public class InstanceClientLiveTest {
@Test
void testDescribeInstances() {
for (Region region : ImmutableSet.of(Region.DEFAULT, Region.EU_WEST_1, Region.US_EAST_1,
for (Region region : ImmutableSet.of(Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1)) {
Set<Reservation> allResults = client.describeInstancesInRegion(region);
assertNotNull(allResults);

View File

@ -18,39 +18,18 @@
*/
package org.jclouds.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Map;
import java.util.Properties;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.xml.DescribeKeyPairsResponseHandler;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.reference.AWSConstants;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.CloseContentAndReturn;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Jsr330;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
/**
@ -59,13 +38,13 @@ import com.google.inject.TypeLiteral;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.KeyPairAsyncClientTest")
public class KeyPairAsyncClientTest extends RestClientTest<KeyPairAsyncClient> {
public class KeyPairAsyncClientTest extends BaseEC2AsyncClientTest<KeyPairAsyncClient> {
public void testDeleteKeyPair() throws SecurityException, NoSuchMethodException, IOException {
Method method = KeyPairAsyncClient.class.getMethod("deleteKeyPairInRegion", Region.class,
String.class);
GeneratedHttpRequest<KeyPairAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "mykey");
GeneratedHttpRequest<KeyPairAsyncClient> httpMethod = processor.createRequest(method, null,
"mykey");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -83,7 +62,7 @@ public class KeyPairAsyncClientTest extends RestClientTest<KeyPairAsyncClient> {
Method method = KeyPairAsyncClient.class.getMethod("describeKeyPairsInRegion", Region.class,
Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<KeyPairAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT);
(Region) null);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -101,8 +80,8 @@ public class KeyPairAsyncClientTest extends RestClientTest<KeyPairAsyncClient> {
IOException {
Method method = KeyPairAsyncClient.class.getMethod("describeKeyPairsInRegion", Region.class,
Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<KeyPairAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "2");
GeneratedHttpRequest<KeyPairAsyncClient> httpMethod = processor.createRequest(method, null,
"1", "2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -117,54 +96,10 @@ public class KeyPairAsyncClientTest extends RestClientTest<KeyPairAsyncClient> {
checkFilters(httpMethod);
}
@Override
protected void checkFilters(GeneratedHttpRequest<KeyPairAsyncClient> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
@Override
protected TypeLiteral<RestAnnotationProcessor<KeyPairAsyncClient>> createTypeLiteral() {
return new TypeLiteral<RestAnnotationProcessor<KeyPairAsyncClient>>() {
};
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder(new Properties())
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.DEFAULT, URI.create("https://booya"),
Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"),
Region.US_WEST_1, URI.create("https://ec2.us-west-1.amazonaws.com"));
}
};
}
}

View File

@ -61,7 +61,7 @@ public class KeyPairClientLiveTest {
@Test
void testDescribeKeyPairs() {
for (Region region : ImmutableSet.of(Region.DEFAULT, Region.EU_WEST_1, Region.US_EAST_1,
for (Region region : ImmutableSet.of(Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1)) {
SortedSet<KeyPair> allResults = Sets.newTreeSet(client.describeKeyPairsInRegion(region));
@ -83,20 +83,20 @@ public class KeyPairClientLiveTest {
void testCreateKeyPair() {
String keyName = PREFIX + "1";
try {
client.deleteKeyPairInRegion(Region.DEFAULT, keyName);
client.deleteKeyPairInRegion(null, keyName);
} catch (Exception e) {
}
client.deleteKeyPairInRegion(Region.DEFAULT, keyName);
client.deleteKeyPairInRegion(null, keyName);
KeyPair result = client.createKeyPairInRegion(Region.DEFAULT, keyName);
KeyPair result = client.createKeyPairInRegion(null, keyName);
assertNotNull(result);
assertNotNull(result.getKeyMaterial());
assertNotNull(result.getKeyFingerprint());
assertEquals(result.getKeyName(), keyName);
SortedSet<KeyPair> twoResults = Sets.newTreeSet(client.describeKeyPairsInRegion(
Region.DEFAULT, keyName));
null, keyName));
assertNotNull(twoResults);
assertEquals(twoResults.size(), 1);
KeyPair listPair = twoResults.iterator().next();

View File

@ -18,38 +18,17 @@
*/
package org.jclouds.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Map;
import java.util.Properties;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.xml.MonitoringStateHandler;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.reference.AWSConstants;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Jsr330;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
/**
@ -58,14 +37,14 @@ import com.google.inject.TypeLiteral;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.MonitoringAsyncClientTest")
public class MonitoringAsyncClientTest extends RestClientTest<MonitoringAsyncClient> {
public class MonitoringAsyncClientTest extends BaseEC2AsyncClientTest<MonitoringAsyncClient> {
public void testUnmonitorInstances() throws SecurityException, NoSuchMethodException,
IOException {
Method method = MonitoringAsyncClient.class.getMethod("unmonitorInstancesInRegion",
Region.class, String.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<MonitoringAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "instance1", "instance2");
null, "instance1", "instance2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -84,7 +63,7 @@ public class MonitoringAsyncClientTest extends RestClientTest<MonitoringAsyncCli
Method method = MonitoringAsyncClient.class.getMethod("monitorInstancesInRegion",
Region.class, String.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<MonitoringAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "instance1", "instance2");
null, "instance1", "instance2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -99,54 +78,10 @@ public class MonitoringAsyncClientTest extends RestClientTest<MonitoringAsyncCli
checkFilters(httpMethod);
}
@Override
protected void checkFilters(GeneratedHttpRequest<MonitoringAsyncClient> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
@Override
protected TypeLiteral<RestAnnotationProcessor<MonitoringAsyncClient>> createTypeLiteral() {
return new TypeLiteral<RestAnnotationProcessor<MonitoringAsyncClient>>() {
};
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder(new Properties())
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.DEFAULT, URI.create("https://booya"),
Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"),
Region.US_WEST_1, URI.create("https://ec2.us-west-1.amazonaws.com"));
}
};
}
}

View File

@ -23,7 +23,6 @@ import static org.testng.Assert.assertEquals;
import java.util.Map;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2AsyncClient;
import org.jclouds.aws.ec2.EC2Client;
import org.jclouds.aws.ec2.EC2ContextFactory;
@ -59,7 +58,7 @@ public class MonitoringClientLiveTest {
// TODO get instance
public void testMonitorInstances() {
Map<String, MonitoringState> monitoringState = client.monitorInstancesInRegion(
Region.DEFAULT, DEFAULT_INSTANCE);
null, DEFAULT_INSTANCE);
assertEquals(monitoringState.get(DEFAULT_INSTANCE), MonitoringState.PENDING);
}
@ -67,7 +66,7 @@ public class MonitoringClientLiveTest {
// TODO get instance
public void testUnmonitorInstances() {
Map<String, MonitoringState> monitoringState = client.unmonitorInstancesInRegion(
Region.DEFAULT, DEFAULT_INSTANCE);
null, DEFAULT_INSTANCE);
assertEquals(monitoringState.get(DEFAULT_INSTANCE), MonitoringState.PENDING);
}

View File

@ -18,42 +18,21 @@
*/
package org.jclouds.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Map;
import java.util.Properties;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.ec2.domain.IpProtocol;
import org.jclouds.aws.ec2.domain.UserIdGroupPair;
import org.jclouds.aws.ec2.functions.ReturnVoidOnGroupNotFound;
import org.jclouds.aws.ec2.xml.DescribeSecurityGroupsResponseHandler;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.aws.reference.AWSConstants;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.CloseContentAndReturn;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.jclouds.rest.RestClientTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Jsr330;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
/**
@ -62,14 +41,14 @@ import com.google.inject.TypeLiteral;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.SecurityGroupAsyncClientTest")
public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAsyncClient> {
public class SecurityGroupAsyncClientTest extends BaseEC2AsyncClientTest<SecurityGroupAsyncClient> {
public void testDeleteSecurityGroup() throws SecurityException, NoSuchMethodException,
IOException {
Method method = SecurityGroupAsyncClient.class.getMethod("deleteSecurityGroupInRegion",
Region.class, String.class);
GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "name");
null, "name");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -89,7 +68,7 @@ public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAs
Method method = SecurityGroupAsyncClient.class.getMethod("createSecurityGroupInRegion",
Region.class, String.class, String.class);
GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "name", "description");
null, "name", "description");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -109,7 +88,7 @@ public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAs
Method method = SecurityGroupAsyncClient.class.getMethod("describeSecurityGroupsInRegion",
Region.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT);
(Region) null);
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -128,7 +107,7 @@ public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAs
Method method = SecurityGroupAsyncClient.class.getMethod("describeSecurityGroupsInRegion",
Region.class, Array.newInstance(String.class, 0).getClass());
GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "1", "2");
null, "1", "2");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -149,7 +128,7 @@ public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAs
"authorizeSecurityGroupIngressInRegion", Region.class, String.class,
UserIdGroupPair.class);
GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "group", new UserIdGroupPair("sourceUser", "sourceGroup"));
null, "group", new UserIdGroupPair("sourceUser", "sourceGroup"));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -171,7 +150,7 @@ public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAs
"authorizeSecurityGroupIngressInRegion", Region.class, String.class,
IpProtocol.class, int.class, int.class, String.class);
GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "group", IpProtocol.TCP, 6000, 7000, "0.0.0.0/0");
null, "group", IpProtocol.TCP, 6000, 7000, "0.0.0.0/0");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -193,7 +172,7 @@ public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAs
"revokeSecurityGroupIngressInRegion", Region.class, String.class,
UserIdGroupPair.class);
GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "group", new UserIdGroupPair("sourceUser", "sourceGroup"));
null, "group", new UserIdGroupPair("sourceUser", "sourceGroup"));
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -215,7 +194,7 @@ public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAs
"revokeSecurityGroupIngressInRegion", Region.class, String.class, IpProtocol.class,
int.class, int.class, String.class);
GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "group", IpProtocol.TCP, 6000, 7000, "0.0.0.0/0");
null, "group", IpProtocol.TCP, 6000, 7000, "0.0.0.0/0");
assertRequestLineEquals(httpMethod, "POST https://ec2.amazonaws.com/ HTTP/1.1");
assertHeadersEqual(httpMethod,
@ -231,54 +210,10 @@ public class SecurityGroupAsyncClientTest extends RestClientTest<SecurityGroupAs
checkFilters(httpMethod);
}
@Override
protected void checkFilters(GeneratedHttpRequest<SecurityGroupAsyncClient> httpMethod) {
assertEquals(httpMethod.getFilters().size(), 1);
assertEquals(httpMethod.getFilters().get(0).getClass(), FormSigner.class);
}
@Override
protected TypeLiteral<RestAnnotationProcessor<SecurityGroupAsyncClient>> createTypeLiteral() {
return new TypeLiteral<RestAnnotationProcessor<SecurityGroupAsyncClient>>() {
};
}
@Override
protected Module createModule() {
return new AbstractModule() {
@Override
protected void configure() {
Jsr330.bindProperties(binder(), checkNotNull(new EC2PropertiesBuilder(new Properties())
.build(), "properties"));
bind(URI.class).annotatedWith(EC2.class).toInstance(
URI.create("https://ec2.amazonaws.com"));
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(AWSConstants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;
}
});
}
@SuppressWarnings("unused")
@Provides
@TimeStamp
String provide() {
return "2009-11-08T15:54:08.897Z";
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<Region, URI> provideMap() {
return ImmutableMap.<Region, URI> of(Region.DEFAULT, URI.create("https://booya"),
Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"),
Region.US_WEST_1, URI.create("https://ec2.us-west-1.amazonaws.com"));
}
};
}
}

View File

@ -69,8 +69,7 @@ public class SecurityGroupClientLiveTest {
@Test
void testDescribe() {
for (Region region : ImmutableSet.of(Region.DEFAULT, Region.EU_WEST_1, Region.US_EAST_1,
Region.US_WEST_1)) {
for (Region region : ImmutableSet.of(Region.EU_WEST_1, Region.US_EAST_1, Region.US_WEST_1)) {
SortedSet<SecurityGroup> allResults = Sets.newTreeSet(client
.describeSecurityGroupsInRegion(region));
assertNotNull(allResults);
@ -90,13 +89,13 @@ public class SecurityGroupClientLiveTest {
String groupName = PREFIX + "1";
String groupDescription = PREFIX + "1 description";
try {
client.deleteSecurityGroupInRegion(Region.DEFAULT, groupName);
client.deleteSecurityGroupInRegion(null, groupName);
} catch (Exception e) {
}
client.deleteSecurityGroupInRegion(Region.DEFAULT, groupName);
client.deleteSecurityGroupInRegion(null, groupName);
client.createSecurityGroupInRegion(Region.DEFAULT, groupName, groupDescription);
client.createSecurityGroupInRegion(null, groupName, groupDescription);
verifySecurityGroup(groupName, groupDescription);
}
@ -107,25 +106,24 @@ public class SecurityGroupClientLiveTest {
String groupName = PREFIX + "ingress";
try {
client.deleteSecurityGroupInRegion(Region.DEFAULT, groupName);
client.deleteSecurityGroupInRegion(null, groupName);
} catch (Exception e) {
}
client.createSecurityGroupInRegion(Region.DEFAULT, groupName, groupName);
client.authorizeSecurityGroupIngressInRegion(Region.DEFAULT, groupName, IpProtocol.TCP, 80,
80, "0.0.0.0/0");
client.createSecurityGroupInRegion(null, groupName, groupName);
client.authorizeSecurityGroupIngressInRegion(null, groupName, IpProtocol.TCP, 80, 80,
"0.0.0.0/0");
assertEventually(new GroupHasPermission(client, groupName, new IpPermission(80, 80, Sets
.<UserIdGroupPair> newTreeSet(), IpProtocol.TCP, ImmutableSortedSet.of("0.0.0.0/0"))));
client.revokeSecurityGroupIngressInRegion(Region.DEFAULT, groupName, IpProtocol.TCP, 80, 80,
client.revokeSecurityGroupIngressInRegion(null, groupName, IpProtocol.TCP, 80, 80,
"0.0.0.0/0");
assertEventually(new GroupHasNoPermissions(client, groupName));
}
private void verifySecurityGroup(String groupName, String description) {
SortedSet<SecurityGroup> oneResult = client.describeSecurityGroupsInRegion(Region.DEFAULT,
groupName);
SortedSet<SecurityGroup> oneResult = client.describeSecurityGroupsInRegion(null, groupName);
assertNotNull(oneResult);
assertEquals(oneResult.size(), 1);
SecurityGroup listPair = oneResult.iterator().next();
@ -140,38 +138,37 @@ public class SecurityGroupClientLiveTest {
String group2Name = PREFIX + "ingress2";
try {
client.deleteSecurityGroupInRegion(Region.DEFAULT, group1Name);
client.deleteSecurityGroupInRegion(null, group1Name);
} catch (Exception e) {
}
try {
client.deleteSecurityGroupInRegion(Region.DEFAULT, group2Name);
client.deleteSecurityGroupInRegion(null, group2Name);
} catch (Exception e) {
}
client.createSecurityGroupInRegion(Region.DEFAULT, group1Name, group1Name);
client.createSecurityGroupInRegion(Region.DEFAULT, group2Name, group2Name);
client.createSecurityGroupInRegion(null, group1Name, group1Name);
client.createSecurityGroupInRegion(null, group2Name, group2Name);
ensureGroupsExist(group1Name, group2Name);
client.authorizeSecurityGroupIngressInRegion(Region.DEFAULT, group1Name, IpProtocol.TCP, 80,
80, "0.0.0.0/0");
client.authorizeSecurityGroupIngressInRegion(null, group1Name, IpProtocol.TCP, 80, 80,
"0.0.0.0/0");
assertEventually(new GroupHasPermission(client, group2Name, new IpPermission(80, 80, Sets
.<UserIdGroupPair> newTreeSet(), IpProtocol.TCP, ImmutableSortedSet.of("0.0.0.0/0"))));
SortedSet<SecurityGroup> oneResult = client.describeSecurityGroupsInRegion(Region.DEFAULT,
group1Name);
SortedSet<SecurityGroup> oneResult = client.describeSecurityGroupsInRegion(null, group1Name);
assertNotNull(oneResult);
assertEquals(oneResult.size(), 1);
SecurityGroup group = oneResult.iterator().next();
assertEquals(group.getName(), group1Name);
client.authorizeSecurityGroupIngressInRegion(Region.DEFAULT, group2Name, new UserIdGroupPair(
group.getOwnerId(), group1Name));
client.authorizeSecurityGroupIngressInRegion(null, group2Name, new UserIdGroupPair(group
.getOwnerId(), group1Name));
assertEventually(new GroupHasPermission(client, group2Name, new IpPermission(80, 80, Sets
.<UserIdGroupPair> newTreeSet(), IpProtocol.TCP, ImmutableSortedSet.of("0.0.0.0/0"))));
client.revokeSecurityGroupIngressInRegion(Region.DEFAULT, group2Name, new UserIdGroupPair(
group.getOwnerId(), group1Name));
client.revokeSecurityGroupIngressInRegion(null, group2Name, new UserIdGroupPair(group
.getOwnerId(), group1Name));
assertEventually(new GroupHasNoPermissions(client, group2Name));
}
@ -188,8 +185,7 @@ public class SecurityGroupClientLiveTest {
public void run() {
try {
SortedSet<SecurityGroup> oneResult = client.describeSecurityGroupsInRegion(
Region.DEFAULT, group);
SortedSet<SecurityGroup> oneResult = client.describeSecurityGroupsInRegion(null, group);
assertNotNull(oneResult);
assertEquals(oneResult.size(), 1);
SecurityGroup listPair = oneResult.iterator().next();
@ -211,8 +207,7 @@ public class SecurityGroupClientLiveTest {
public void run() {
try {
Set<SecurityGroup> oneResult = client.describeSecurityGroupsInRegion(Region.DEFAULT,
group);
Set<SecurityGroup> oneResult = client.describeSecurityGroupsInRegion(null, group);
assertNotNull(oneResult);
assertEquals(oneResult.size(), 1);
SecurityGroup listPair = oneResult.iterator().next();
@ -224,8 +219,8 @@ public class SecurityGroupClientLiveTest {
}
private void ensureGroupsExist(String group1Name, String group2Name) {
SortedSet<SecurityGroup> twoResults = client.describeSecurityGroupsInRegion(Region.DEFAULT,
group1Name, group2Name);
SortedSet<SecurityGroup> twoResults = client.describeSecurityGroupsInRegion(null, group1Name,
group2Name);
assertNotNull(twoResults);
assertEquals(twoResults.size(), 2);
Iterator<SecurityGroup> iterator = twoResults.iterator();

View File

@ -18,15 +18,15 @@
*/
package org.jclouds.aws.ec2.xml;
import static org.easymock.classextension.EasyMock.*;
import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.createMock;
import static org.easymock.classextension.EasyMock.replay;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.date.DateService;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -37,13 +37,13 @@ import org.testng.annotations.Test;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.AttachmentHandlerTest")
public class AttachmentHandlerTest extends BaseHandlerTest {
public class AttachmentHandlerTest extends BaseEC2HandlerTest {
public void testApplyInputStream() {
DateService dateService = injector.getInstance(DateService.class);
InputStream is = getClass().getResourceAsStream("/ec2/attach.xml");
Attachment expected = new Attachment(Region.DEFAULT, "vol-4d826724", "i-6058a509",
"/dev/sdh", Attachment.Status.ATTACHING, dateService
Attachment expected = new Attachment(defaultRegion, "vol-4d826724", "i-6058a509", "/dev/sdh",
Attachment.Status.ATTACHING, dateService
.iso8601DateParse("2008-05-07T11:51:50.000Z"));
AttachmentHandler handler = injector.getInstance(AttachmentHandler.class);
@ -55,7 +55,7 @@ public class AttachmentHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT });
expect(request.getArgs()).andReturn(new Object[] { null });
replay(request);
handler.setContext(request);
}

View File

@ -0,0 +1,79 @@
/**
*
* Copyright (C) 2009 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.aws.ec2.xml;
import java.util.Map;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.EC2;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.config.ParserModule;
import org.testng.annotations.BeforeTest;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Provides;
/**
*
* @author Adrian Cole
*/
public class BaseEC2HandlerTest extends BaseHandlerTest {
protected Region defaultRegion = Region.US_EAST_1;
public BaseEC2HandlerTest() {
super();
}
@BeforeTest
@Override
protected void setUpInjector() {
injector = Guice.createInjector(new ParserModule(), new AbstractModule() {
@Override
protected void configure() {
}
@SuppressWarnings("unused")
@Singleton
@Provides
@EC2
Region provideDefaultRegion() {
return defaultRegion;
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<AvailabilityZone, Region> provideAvailabilityZoneRegionMap() {
return ImmutableMap.<AvailabilityZone, Region> of(AvailabilityZone.US_EAST_1A,
Region.US_EAST_1);
}
});
factory = injector.getInstance(ParseSax.Factory.class);
assert factory != null;
}
}

View File

@ -24,27 +24,18 @@ import static org.easymock.classextension.EasyMock.replay;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.util.Map;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.domain.Volume;
import org.jclouds.date.DateService;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.config.ParserModule;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Provides;
/**
* Tests behavior of {@code CreateVolumeResponseHandler}
@ -52,35 +43,13 @@ import com.google.inject.Provides;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.CreateVolumeResponseHandlerTest")
public class CreateVolumeResponseHandlerTest extends BaseHandlerTest {
@BeforeTest
@Override
protected void setUpInjector() {
injector = Guice.createInjector(new ParserModule(), new AbstractModule() {
@Override
protected void configure() {
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<AvailabilityZone, Region> provideAvailabilityZoneRegionMap() {
return ImmutableMap.<AvailabilityZone, Region> of(AvailabilityZone.US_EAST_1A,
Region.DEFAULT);
}
});
factory = injector.getInstance(ParseSax.Factory.class);
assert factory != null;
}
public class CreateVolumeResponseHandlerTest extends BaseEC2HandlerTest {
public void testApplyInputStream() {
DateService dateService = injector.getInstance(DateService.class);
InputStream is = getClass().getResourceAsStream("/ec2/created_volume.xml");
Volume expected = new Volume(Region.DEFAULT, "vol-2a21e543", 1, null,
Volume expected = new Volume(Region.US_EAST_1, "vol-2a21e543", 1, null,
AvailabilityZone.US_EAST_1A, Volume.Status.CREATING, dateService
.iso8601DateParse("2009-12-28T05:42:53.000Z"), Sets
.<Attachment> newLinkedHashSet());
@ -94,7 +63,7 @@ public class CreateVolumeResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT });
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -28,9 +28,7 @@ import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Set;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.PublicIpInstanceIdPair;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -43,7 +41,7 @@ import com.google.common.collect.ImmutableList;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.DescribeAddressesResponseHandlerTest")
public class DescribeAddressesResponseHandlerTest extends BaseHandlerTest {
public class DescribeAddressesResponseHandlerTest extends BaseEC2HandlerTest {
public void testApplyInputStream() throws UnknownHostException {
InputStream is = getClass().getResourceAsStream("/ec2/describe_addresses.xml");
@ -54,14 +52,14 @@ public class DescribeAddressesResponseHandlerTest extends BaseHandlerTest {
Set<PublicIpInstanceIdPair> result = factory.create(handler).parse(is);
assertEquals(result, ImmutableList.of(new PublicIpInstanceIdPair(Region.DEFAULT, InetAddress
assertEquals(result, ImmutableList.of(new PublicIpInstanceIdPair(defaultRegion, InetAddress
.getByName("67.202.55.255"), "i-f15ebb98"), new PublicIpInstanceIdPair(
Region.DEFAULT, InetAddress.getByName("67.202.55.233"), null)));
defaultRegion, InetAddress.getByName("67.202.55.233"), null)));
}
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -27,14 +27,12 @@ import java.io.InputStream;
import java.util.Set;
import java.util.SortedSet;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Image;
import org.jclouds.aws.ec2.domain.RootDeviceType;
import org.jclouds.aws.ec2.domain.Image.Architecture;
import org.jclouds.aws.ec2.domain.Image.EbsBlockDevice;
import org.jclouds.aws.ec2.domain.Image.ImageState;
import org.jclouds.aws.ec2.domain.Image.ImageType;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -48,13 +46,13 @@ import com.google.common.collect.Sets;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.DescribeImagesResponseHandlerTest")
public class DescribeImagesResponseHandlerTest extends BaseHandlerTest {
public class DescribeImagesResponseHandlerTest extends BaseEC2HandlerTest {
public void testUNIX() {
InputStream is = getClass().getResourceAsStream("/ec2/describe_images.xml");
SortedSet<Image> contents = Sets.newTreeSet();
contents.add(new Image(Region.DEFAULT, Architecture.I386, null, null, "ami-be3adfd7",
contents.add(new Image(defaultRegion, Architecture.I386, null, null, "ami-be3adfd7",
"ec2-public-images/fedora-8-i386-base-v1.04.manifest.xml", "206029621532",
ImageState.AVAILABLE, ImageType.MACHINE, false,
Sets.<String> newHashSet("9961934F"), "aki-4438dd2d", null, "ari-4538dd2c",
@ -69,7 +67,7 @@ public class DescribeImagesResponseHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/describe_images_windows.xml");
SortedSet<Image> contents = Sets.newTreeSet();
contents.add(new Image(Region.DEFAULT, Architecture.X86_64, null, null, "ami-02eb086b",
contents.add(new Image(defaultRegion, Architecture.X86_64, null, null, "ami-02eb086b",
"aws-solutions-amis/SqlSvrStd2003r2-x86_64-Win_SFWBasic5.1-v1.0.manifest.xml",
"771350841976", ImageState.AVAILABLE, ImageType.MACHINE, true, Sets
.<String> newHashSet("5771E9A6"), null, "windows", null,
@ -84,7 +82,7 @@ public class DescribeImagesResponseHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/describe_images_ebs.xml");
SortedSet<Image> contents = Sets.newTreeSet();
contents.add(new Image(Region.DEFAULT, Architecture.I386, "websrv_2009-12-10",
contents.add(new Image(defaultRegion, Architecture.I386, "websrv_2009-12-10",
"Web Server AMI", "ami-246f8d4d", "706093390852/websrv_2009-12-10", "706093390852",
ImageState.AVAILABLE, ImageType.MACHINE, true, Sets.<String> newHashSet(), null,
"windows", null, RootDeviceType.EBS, "/dev/sda1", ImmutableMap
@ -107,7 +105,7 @@ public class DescribeImagesResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT });
expect(request.getArgs()).andReturn(new Object[] { null });
replay(request);
handler.setContext(request);
}

View File

@ -28,7 +28,6 @@ import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Set;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.domain.InstanceState;
@ -38,7 +37,6 @@ import org.jclouds.aws.ec2.domain.RootDeviceType;
import org.jclouds.aws.ec2.domain.RunningInstance;
import org.jclouds.aws.ec2.domain.RunningInstance.EbsBlockDevice;
import org.jclouds.date.DateService;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.BeforeTest;
@ -54,7 +52,7 @@ import com.google.common.collect.Sets;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.DescribeInstancesResponseHandlerTest")
public class DescribeInstancesResponseHandlerTest extends BaseHandlerTest {
public class DescribeInstancesResponseHandlerTest extends BaseEC2HandlerTest {
private DateService dateService;
@ -71,8 +69,8 @@ public class DescribeInstancesResponseHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/describe_instances_running.xml");
Set<Reservation> contents = Sets.newTreeSet();
contents.add(new Reservation(Region.DEFAULT, ImmutableSet.of("adriancole.ec2ingress"),
ImmutableSet.of(new RunningInstance(Region.DEFAULT, "0",
contents.add(new Reservation(defaultRegion, ImmutableSet.of("adriancole.ec2ingress"),
ImmutableSet.of(new RunningInstance(defaultRegion, "0",
"ec2-174-129-81-68.compute-1.amazonaws.com", "ami-1fd73376", "i-0799056f",
InstanceState.RUNNING, InstanceType.M1_SMALL, InetAddress
.getByName("174.129.81.68"), "aki-a71cf9ce", "adriancole.ec21",
@ -93,8 +91,8 @@ public class DescribeInstancesResponseHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/describe_instances.xml");
Set<Reservation> contents = Sets.newTreeSet();
contents.add(new Reservation(Region.DEFAULT, ImmutableSet.of("default"), ImmutableSet.of(
new RunningInstance(Region.DEFAULT, "23", "ec2-72-44-33-4.compute-1.amazonaws.com",
contents.add(new Reservation(defaultRegion, ImmutableSet.of("default"), ImmutableSet.of(
new RunningInstance(defaultRegion, "23", "ec2-72-44-33-4.compute-1.amazonaws.com",
"ami-6ea54007", "i-28a64341", InstanceState.RUNNING, InstanceType.M1_LARGE,
(InetAddress) null, "aki-ba3adfd3", "example-key-name", dateService
.iso8601DateParse("2007-08-07T11:54:42.000Z"), false,
@ -102,7 +100,7 @@ public class DescribeInstancesResponseHandlerTest extends BaseHandlerTest {
ImmutableSet.of("774F4FF8"), "ari-badbad00", null, null, null,
RootDeviceType.INSTANCE_STORE, null, ImmutableMap
.<String, EbsBlockDevice> of()), new RunningInstance(
Region.DEFAULT, "23", "ec2-72-44-33-6.compute-1.amazonaws.com",
defaultRegion, "23", "ec2-72-44-33-6.compute-1.amazonaws.com",
"ami-6ea54007", "i-28a64435", InstanceState.RUNNING, InstanceType.M1_LARGE,
(InetAddress) null, "aki-ba3adfd3", "example-key-name", dateService
.iso8601DateParse("2007-08-07T11:54:42.000Z"), false,
@ -122,8 +120,8 @@ public class DescribeInstancesResponseHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/describe_instances_ebs.xml");
Set<Reservation> contents = Sets.newTreeSet();
contents.add(new Reservation(Region.DEFAULT, ImmutableSet.of("adriancole.ec2ebsingress"),
ImmutableSet.of(new RunningInstance(Region.DEFAULT, "0",
contents.add(new Reservation(defaultRegion, ImmutableSet.of("adriancole.ec2ebsingress"),
ImmutableSet.of(new RunningInstance(defaultRegion, "0",
"ec2-75-101-203-146.compute-1.amazonaws.com", "ami-849875ed", "i-e564438d",
InstanceState.RUNNING, InstanceType.M1_SMALL, InetAddress
.getByName("75.101.203.146"), "aki-a71cf9ce",
@ -153,7 +151,7 @@ public class DescribeInstancesResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -26,9 +26,7 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.util.Set;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -41,12 +39,12 @@ import com.google.common.collect.ImmutableSet;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.DescribeKeyPairsHandlerTest")
public class DescribeKeyPairsResponseHandlerTest extends BaseHandlerTest {
public class DescribeKeyPairsResponseHandlerTest extends BaseEC2HandlerTest {
public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/ec2/describe_keypairs.xml");
Set<KeyPair> expected = ImmutableSet.of(new KeyPair(Region.DEFAULT, "gsg-keypair",
Set<KeyPair> expected = ImmutableSet.of(new KeyPair(defaultRegion, "gsg-keypair",
"1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f", null));
DescribeKeyPairsResponseHandler handler = injector
@ -58,7 +56,7 @@ public class DescribeKeyPairsResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT });
expect(request.getArgs()).andReturn(new Object[] { null });
replay(request);
handler.setContext(request);
}

View File

@ -27,12 +27,10 @@ import java.io.InputStream;
import java.util.Set;
import java.util.SortedSet;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.IpPermission;
import org.jclouds.aws.ec2.domain.IpProtocol;
import org.jclouds.aws.ec2.domain.SecurityGroup;
import org.jclouds.aws.ec2.domain.UserIdGroupPair;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -45,20 +43,19 @@ import com.google.common.collect.ImmutableSortedSet;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.DescribeSecurityGroupsHandlerTest")
public class DescribeSecurityGroupsResponseHandlerTest extends BaseHandlerTest {
public class DescribeSecurityGroupsResponseHandlerTest extends BaseEC2HandlerTest {
public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/ec2/describe_securitygroups.xml");
SortedSet<SecurityGroup> expected = ImmutableSortedSet.of(new SecurityGroup(Region.DEFAULT,
SortedSet<SecurityGroup> expected = ImmutableSortedSet.of(new SecurityGroup(defaultRegion,
"WebServers", "UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM", "Web Servers", ImmutableSortedSet
.of(new IpPermission(80, 80, ImmutableSortedSet.<UserIdGroupPair> of(),
IpProtocol.TCP, ImmutableSortedSet.of("0.0.0.0/0")))),
new SecurityGroup(Region.DEFAULT, "RangedPortsBySource",
"UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM", "Group A", ImmutableSortedSet
.of(new IpPermission(6000, 7000, ImmutableSortedSet
.<UserIdGroupPair> of(), IpProtocol.TCP,
ImmutableSortedSet.<String> of()))));
new SecurityGroup(defaultRegion, "RangedPortsBySource", "UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM",
"Group A", ImmutableSortedSet.of(new IpPermission(6000, 7000,
ImmutableSortedSet.<UserIdGroupPair> of(), IpProtocol.TCP,
ImmutableSortedSet.<String> of()))));
DescribeSecurityGroupsResponseHandler handler = injector
.getInstance(DescribeSecurityGroupsResponseHandler.class);
@ -70,7 +67,7 @@ public class DescribeSecurityGroupsResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -26,10 +26,8 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.util.Set;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Snapshot;
import org.jclouds.date.DateService;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -42,13 +40,13 @@ import com.google.common.collect.Sets;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.DescribeSnapshotsResponseHandlerTest")
public class DescribeSnapshotsResponseHandlerTest extends BaseHandlerTest {
public class DescribeSnapshotsResponseHandlerTest extends BaseEC2HandlerTest {
public void testApplyInputStream() {
DateService dateService = injector.getInstance(DateService.class);
InputStream is = getClass().getResourceAsStream("/ec2/describe_snapshots.xml");
Set<Snapshot> expected = Sets.newLinkedHashSet();
expected.add(new Snapshot(Region.DEFAULT, "snap-78a54011", "vol-4d826724", 10,
expected.add(new Snapshot(defaultRegion, "snap-78a54011", "vol-4d826724", 10,
Snapshot.Status.PENDING, dateService.iso8601DateParse("2008-05-07T12:51:50.000Z"),
80, "218213537122", "Daily Backup", null));
@ -62,7 +60,7 @@ public class DescribeSnapshotsResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT });
expect(request.getArgs()).andReturn(new Object[] { null });
replay(request);
handler.setContext(request);
}

View File

@ -24,28 +24,17 @@ import static org.easymock.classextension.EasyMock.replay;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.util.Map;
import java.util.Set;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Attachment;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.domain.Volume;
import org.jclouds.date.DateService;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.config.ParserModule;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Provides;
/**
* Tests behavior of {@code DescribeVolumesResponseHandler}
@ -53,43 +42,21 @@ import com.google.inject.Provides;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.DescribeVolumesResponseHandlerTest")
public class DescribeVolumesResponseHandlerTest extends BaseHandlerTest {
@BeforeTest
@Override
protected void setUpInjector() {
injector = Guice.createInjector(new ParserModule(), new AbstractModule(){
public class DescribeVolumesResponseHandlerTest extends BaseEC2HandlerTest {
@Override
protected void configure() {
}
@SuppressWarnings("unused")
@Singleton
@Provides
Map<AvailabilityZone, Region> provideAvailabilityZoneRegionMap() {
return ImmutableMap.<AvailabilityZone, Region> of(AvailabilityZone.US_EAST_1A,
Region.DEFAULT);
}
});
factory = injector.getInstance(ParseSax.Factory.class);
assert factory != null;
}
public void testApplyInputStream() {
DateService dateService = injector.getInstance(DateService.class);
InputStream is = getClass().getResourceAsStream("/ec2/describe_volumes.xml");
Set<Volume> expected = Sets.newLinkedHashSet();
expected.add(new Volume(Region.DEFAULT, "vol-2a21e543", 1, null, AvailabilityZone.US_EAST_1A,
expected.add(new Volume(defaultRegion, "vol-2a21e543", 1, null, AvailabilityZone.US_EAST_1A,
Volume.Status.AVAILABLE, dateService.iso8601DateParse("2009-12-28T05:42:53.000Z"),
Sets.<Attachment> newLinkedHashSet()));
expected.add(new Volume(Region.DEFAULT, "vol-4282672b", 800, "snap-536d1b3a",
expected.add(new Volume(defaultRegion, "vol-4282672b", 800, "snap-536d1b3a",
AvailabilityZone.US_EAST_1A, Volume.Status.IN_USE, dateService
.iso8601DateParse("2008-05-07T11:51:50.000Z"), Sets
.<Attachment> newHashSet(new Attachment(Region.DEFAULT, "vol-4282672b",
"i-6058a509", "/dev/sdh", Attachment.Status.ATTACHED, dateService
.<Attachment> newHashSet(new Attachment(defaultRegion, "vol-4282672b", "i-6058a509",
"/dev/sdh", Attachment.Status.ATTACHED, dateService
.iso8601DateParse("2008-05-07T12:51:50.000Z")))));
DescribeVolumesResponseHandler handler = injector
@ -102,7 +69,7 @@ public class DescribeVolumesResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -26,11 +26,9 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.util.Set;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.InstanceState;
import org.jclouds.aws.ec2.domain.InstanceStateChange;
import org.jclouds.date.DateService;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.BeforeTest;
@ -44,7 +42,7 @@ import com.google.common.collect.ImmutableSet;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.InstanceStateChangeHandlerTest")
public class InstanceStateChangeHandlerTest extends BaseHandlerTest {
public class InstanceStateChangeHandlerTest extends BaseEC2HandlerTest {
private DateService dateService;
@ -60,7 +58,7 @@ public class InstanceStateChangeHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/terminate_instances.xml");
Set<InstanceStateChange> expected = ImmutableSet.of(new InstanceStateChange(Region.DEFAULT,
Set<InstanceStateChange> expected = ImmutableSet.of(new InstanceStateChange(defaultRegion,
"i-3ea74257", InstanceState.SHUTTING_DOWN, InstanceState.RUNNING));
InstanceStateChangeHandler handler = injector.getInstance(InstanceStateChangeHandler.class);
@ -73,7 +71,7 @@ public class InstanceStateChangeHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/start_instances.xml");
Set<InstanceStateChange> expected = ImmutableSet.of(new InstanceStateChange(Region.DEFAULT,
Set<InstanceStateChange> expected = ImmutableSet.of(new InstanceStateChange(defaultRegion,
"i-10a64379", InstanceState.PENDING, InstanceState.STOPPED));
InstanceStateChangeHandler handler = injector.getInstance(InstanceStateChangeHandler.class);
addDefaultRegionToHandler(handler);
@ -85,7 +83,7 @@ public class InstanceStateChangeHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/stop_instances.xml");
Set<InstanceStateChange> expected = ImmutableSet.of(new InstanceStateChange(Region.DEFAULT,
Set<InstanceStateChange> expected = ImmutableSet.of(new InstanceStateChange(defaultRegion,
"i-10a64379", InstanceState.STOPPING, InstanceState.RUNNING));
InstanceStateChangeHandler handler = injector.getInstance(InstanceStateChangeHandler.class);
@ -96,7 +94,7 @@ public class InstanceStateChangeHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -25,9 +25,7 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -38,13 +36,13 @@ import org.testng.annotations.Test;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.KeyPairResponseHandlerTest")
public class KeyPairResponseHandlerTest extends BaseHandlerTest {
public class KeyPairResponseHandlerTest extends BaseEC2HandlerTest {
public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/ec2/create_keypair.xml");
KeyPair expected = new KeyPair(
Region.DEFAULT,
defaultRegion,
"gsg-keypair",
"1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f",
"-----BEGIN RSA PRIVATE KEY-----\n"
@ -80,7 +78,7 @@ public class KeyPairResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -26,7 +26,6 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.net.InetAddress;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.AvailabilityZone;
import org.jclouds.aws.ec2.domain.InstanceState;
import org.jclouds.aws.ec2.domain.InstanceType;
@ -35,7 +34,6 @@ import org.jclouds.aws.ec2.domain.RootDeviceType;
import org.jclouds.aws.ec2.domain.RunningInstance;
import org.jclouds.aws.ec2.domain.RunningInstance.EbsBlockDevice;
import org.jclouds.date.DateService;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.BeforeTest;
@ -52,7 +50,7 @@ import com.google.common.collect.Sets;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.RunInstancesResponseHandlerTest")
public class RunInstancesResponseHandlerTest extends BaseHandlerTest {
public class RunInstancesResponseHandlerTest extends BaseEC2HandlerTest {
private DateService dateService;
@ -68,8 +66,8 @@ public class RunInstancesResponseHandlerTest extends BaseHandlerTest {
InputStream is = getClass().getResourceAsStream("/ec2/run_instances.xml");
Reservation expected = new Reservation(Region.DEFAULT, ImmutableSortedSet.of("default"),
ImmutableSet.of(new RunningInstance(Region.DEFAULT, "0", null, "ami-60a54009",
Reservation expected = new Reservation(defaultRegion, ImmutableSortedSet.of("default"),
ImmutableSet.of(new RunningInstance(defaultRegion, "0", null, "ami-60a54009",
"i-2ba64342", InstanceState.PENDING, InstanceType.M1_SMALL,
(InetAddress) null, null, "example-key-name", dateService
.iso8601DateParse("2007-08-07T11:51:50.000Z"), true,
@ -77,7 +75,7 @@ public class RunInstancesResponseHandlerTest extends BaseHandlerTest {
.<String> newTreeSet(), null, null, null, null,
RootDeviceType.INSTANCE_STORE, null, ImmutableMap
.<String, EbsBlockDevice> of()), new RunningInstance(
Region.DEFAULT, "1", null, "ami-60a54009", "i-2bc64242",
defaultRegion, "1", null, "ami-60a54009", "i-2bc64242",
InstanceState.PENDING, InstanceType.M1_SMALL, (InetAddress) null, null,
"example-key-name", dateService
.iso8601DateParse("2007-08-07T11:51:50.000Z"), true,
@ -85,7 +83,7 @@ public class RunInstancesResponseHandlerTest extends BaseHandlerTest {
.<String> newTreeSet(), null, null, null, null,
RootDeviceType.INSTANCE_STORE, null, ImmutableMap
.<String, EbsBlockDevice> of()), new RunningInstance(
Region.DEFAULT, "2", null, "ami-60a54009", "i-2be64332",
defaultRegion, "2", null, "ami-60a54009", "i-2be64332",
InstanceState.PENDING, InstanceType.M1_SMALL, (InetAddress) null, null,
"example-key-name", dateService
.iso8601DateParse("2007-08-07T11:51:50.000Z"), true,
@ -104,7 +102,7 @@ public class RunInstancesResponseHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -25,10 +25,8 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.ec2.domain.Snapshot;
import org.jclouds.date.DateService;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;
@ -39,14 +37,14 @@ import org.testng.annotations.Test;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "ec2.SnapshotHandlerTest")
public class SnapshotHandlerTest extends BaseHandlerTest {
public class SnapshotHandlerTest extends BaseEC2HandlerTest {
public void testApplyInputStream() {
DateService dateService = injector.getInstance(DateService.class);
InputStream is = getClass().getResourceAsStream("/ec2/created_snapshot.xml");
Snapshot expected = new Snapshot(Region.DEFAULT, "snap-78a54011", "vol-4d826724", 10, Snapshot.Status.PENDING,
dateService.iso8601DateParse("2008-05-07T12:51:50.000Z"), 60, "213457642086",
"Daily Backup", null);
Snapshot expected = new Snapshot(defaultRegion, "snap-78a54011", "vol-4d826724", 10,
Snapshot.Status.PENDING, dateService.iso8601DateParse("2008-05-07T12:51:50.000Z"),
60, "213457642086", "Daily Backup", null);
SnapshotHandler handler = injector.getInstance(SnapshotHandler.class);
addDefaultRegionToHandler(handler);
@ -56,7 +54,7 @@ public class SnapshotHandlerTest extends BaseHandlerTest {
private void addDefaultRegionToHandler(ParseSax.HandlerWithResult<?> handler) {
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
expect(request.getArgs()).andReturn(new Object[] { Region.DEFAULT }).atLeastOnce();
expect(request.getArgs()).andReturn(new Object[] { null }).atLeastOnce();
replay(request);
handler.setContext(request);
}

View File

@ -25,7 +25,6 @@ import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Properties;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.s3.blobstore.functions.BlobToObject;
@ -47,7 +46,6 @@ import org.jclouds.aws.s3.options.CopyObjectOptions;
import org.jclouds.aws.s3.options.ListBucketOptions;
import org.jclouds.aws.s3.options.PutBucketOptions;
import org.jclouds.aws.s3.options.PutObjectOptions;
import org.jclouds.aws.s3.reference.S3Constants;
import org.jclouds.aws.s3.xml.AccessControlListHandler;
import org.jclouds.aws.s3.xml.BucketLoggingHandler;
import org.jclouds.aws.s3.xml.CopyObjectHandler;
@ -385,7 +383,7 @@ public class S3AsyncClientTest extends RestClientTest<S3AsyncClient> {
Method method = S3AsyncClient.class.getMethod("putBucketInRegion", Region.class,
String.class, Array.newInstance(PutBucketOptions.class, 0).getClass());
GeneratedHttpRequest<S3AsyncClient> httpMethod = processor.createRequest(method,
Region.DEFAULT, "bucket");
(Region) null, "bucket");
assertRequestLineEquals(httpMethod, "PUT http://bucket.stub:8080/ HTTP/1.1");
assertHeadersEqual(httpMethod, "Content-Length: 0\nHost: bucket.stub\n");
@ -546,13 +544,10 @@ public class S3AsyncClientTest extends RestClientTest<S3AsyncClient> {
}, new TypeLiteral<S3Client>() {
}));
install(new S3ObjectModule());
Jsr330.bindProperties(binder(), checkNotNull(new S3PropertiesBuilder(new Properties())
.build(), "properties"));
Jsr330.bindProperties(binder(), checkNotNull(new S3PropertiesBuilder("user", "key")
.build(), "properties"));
bind(URI.class).annotatedWith(S3.class).toInstance(URI.create("http://stub:8080"));
bindConstant().annotatedWith(Jsr330.named(S3Constants.PROPERTY_AWS_ACCESSKEYID)).to(
"user");
bindConstant().annotatedWith(Jsr330.named(S3Constants.PROPERTY_AWS_SECRETACCESSKEY))
.to("key");
bind(Region.class).annotatedWith(S3.class).toInstance(Region.US_STANDARD);
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
public Logger getLogger(String category) {
return Logger.NULL;

View File

@ -1,76 +0,0 @@
/**
*
* Copyright (C) 2009 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.aws.s3.blobstore.config;
import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
import static org.testng.Assert.assertEquals;
import org.jclouds.Constants;
import org.jclouds.aws.s3.config.S3StubClientModule;
import org.jclouds.aws.s3.reference.S3Constants;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
import org.jclouds.concurrent.config.ExecutorServiceModule;
import org.jclouds.logging.jdk.config.JDKLoggingModule;
import org.jclouds.util.Jsr330;
import org.testng.annotations.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
/**
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "s3.S3BlobStoreModuleTest")
public class S3BlobStoreModuleTest {
Injector createInjector() {
return Guice.createInjector(new ExecutorServiceModule(sameThreadExecutor(),
sameThreadExecutor()), new JDKLoggingModule(), new S3StubClientModule(),
new S3BlobStoreContextModule() {
@Override
protected void configure() {
bindConstant().annotatedWith(
Jsr330.named(S3Constants.PROPERTY_AWS_ACCESSKEYID)).to("user");
bindConstant().annotatedWith(
Jsr330.named(S3Constants.PROPERTY_AWS_SECRETACCESSKEY)).to("key");
bindConstant().annotatedWith(Jsr330.named(S3Constants.PROPERTY_S3_ENDPOINT))
.to("http://localhost");
bindConstant().annotatedWith(
Jsr330.named(Constants.PROPERTY_IO_WORKER_THREADS)).to("1");
bindConstant().annotatedWith(
Jsr330.named(Constants.PROPERTY_MAX_CONNECTIONS_PER_HOST)).to("1");
bindConstant().annotatedWith(Jsr330.named(Constants.PROPERTY_USER_THREADS))
.to("1");
super.configure();
}
});
}
@Test
void testContextImplAndSingleton() {
Injector i = createInjector();
BlobStoreContext context = i.getInstance(BlobStoreContext.class);
assertEquals(context.getClass(), BlobStoreContextImpl.class);
assertEquals(context, i.getInstance(BlobStoreContext.class));
assertEquals(context.getAsyncBlobStore().getContext().getAsyncBlobStore(), context.getAsyncBlobStore());
assertEquals(context.getBlobStore().getContext().getBlobStore(), context.getBlobStore());
}
}

View File

@ -18,6 +18,7 @@
*/
package org.jclouds.aws.s3.config;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
@ -25,11 +26,10 @@ import static org.testng.Assert.assertFalse;
import javax.ws.rs.core.UriBuilder;
import org.jboss.resteasy.specimpl.UriBuilderImpl;
import org.jclouds.Constants;
import org.jclouds.aws.handlers.AWSClientErrorRetryHandler;
import org.jclouds.aws.handlers.AWSRedirectionRetryHandler;
import org.jclouds.aws.handlers.ParseAWSErrorFromXmlContent;
import org.jclouds.aws.s3.reference.S3Constants;
import org.jclouds.aws.s3.S3PropertiesBuilder;
import org.jclouds.concurrent.config.ExecutorServiceModule;
import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.http.functions.config.ParserModule;
@ -55,18 +55,8 @@ public class S3RestClientModuleTest {
new AbstractModule() {
@Override
protected void configure() {
bindConstant().annotatedWith(
Jsr330.named(S3Constants.PROPERTY_AWS_ACCESSKEYID)).to("user");
bindConstant().annotatedWith(
Jsr330.named(S3Constants.PROPERTY_AWS_SECRETACCESSKEY)).to("key");
bindConstant().annotatedWith(Jsr330.named(S3Constants.PROPERTY_S3_ENDPOINT))
.to("http://localhost");
bindConstant().annotatedWith(
Jsr330.named(S3Constants.PROPERTY_S3_SESSIONINTERVAL)).to("2");
bindConstant().annotatedWith(
Jsr330.named(Constants.PROPERTY_IO_WORKER_THREADS)).to("1");
bindConstant().annotatedWith(Jsr330.named(Constants.PROPERTY_USER_THREADS))
.to("1");
Jsr330.bindProperties(binder(), checkNotNull(new S3PropertiesBuilder("user",
"key").build(), "properties"));
bind(UriBuilder.class).to(UriBuilderImpl.class);
}
});

View File

@ -19,9 +19,11 @@
package org.jclouds.aws.s3.config;
import java.net.URI;
import java.util.Set;
import javax.inject.Singleton;
import org.jclouds.aws.domain.Region;
import org.jclouds.aws.s3.S3;
import org.jclouds.aws.s3.S3AsyncClient;
import org.jclouds.aws.s3.S3Client;
@ -33,6 +35,8 @@ import org.jclouds.rest.ConfiguresRestClient;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
import com.google.inject.internal.ImmutableSet;
/**
* adds a stub alternative to invoking S3
@ -47,6 +51,10 @@ public class S3StubClientModule extends AbstractModule {
install(new TransientBlobStoreModule());
bind(S3AsyncClient.class).to(StubS3AsyncClient.class).asEagerSingleton();
bind(URI.class).annotatedWith(S3.class).toInstance(URI.create("https://localhost/s3stub"));
bind(Region.class).annotatedWith(S3.class).toInstance(Region.US_STANDARD);
bind(new TypeLiteral<Set<Region>>() {
}).annotatedWith(S3.class).toInstance(
ImmutableSet.of(Region.US_STANDARD, Region.US_WEST_1, Region.EU_WEST_1));
}
@Provides

View File

@ -18,6 +18,7 @@
*/
package org.jclouds.aws.s3.filters;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
import static org.testng.Assert.assertEquals;
@ -28,9 +29,8 @@ import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.UriBuilder;
import org.jboss.resteasy.specimpl.UriBuilderImpl;
import org.jclouds.Constants;
import org.jclouds.aws.s3.S3PropertiesBuilder;
import org.jclouds.aws.s3.config.S3RestClientModule;
import org.jclouds.aws.s3.reference.S3Constants;
import org.jclouds.concurrent.config.ExecutorServiceModule;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.functions.config.ParserModule;
@ -144,18 +144,8 @@ public class RequestAuthorizeSignatureTest {
new AbstractModule() {
protected void configure() {
bindConstant().annotatedWith(
Jsr330.named(S3Constants.PROPERTY_AWS_ACCESSKEYID)).to("foo");
bindConstant().annotatedWith(
Jsr330.named(S3Constants.PROPERTY_AWS_SECRETACCESSKEY)).to("bar");
bindConstant().annotatedWith(
Jsr330.named(S3Constants.PROPERTY_S3_SESSIONINTERVAL)).to("2");
bindConstant().annotatedWith(
Jsr330.named(Constants.PROPERTY_IO_WORKER_THREADS)).to("1");
bindConstant().annotatedWith(Jsr330.named(Constants.PROPERTY_USER_THREADS))
.to("1");
bindConstant().annotatedWith(Jsr330.named(S3Constants.PROPERTY_S3_ENDPOINT))
.to("https://s3.amazonaws.com");
Jsr330.bindProperties(binder(), checkNotNull(
new S3PropertiesBuilder("foo", "bar")).build());
bind(UriBuilder.class).to(UriBuilderImpl.class);
}
});

Some files were not shown because too many files have changed in this diff Show More