diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/EC2AsyncClient.java b/aws/core/src/main/java/org/jclouds/aws/ec2/EC2AsyncClient.java index 11f59a301e..3c91cf076c 100644 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/EC2AsyncClient.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/EC2AsyncClient.java @@ -23,6 +23,7 @@ import org.jclouds.aws.ec2.services.AMIAsyncClient; import org.jclouds.aws.ec2.services.AvailabilityZoneAndRegionAsyncClient; import org.jclouds.aws.ec2.services.ElasticBlockStoreAsyncClient; import org.jclouds.aws.ec2.services.ElasticIPAddressAsyncClient; +import org.jclouds.aws.ec2.services.ElasticLoadBalancerAsyncClient; import org.jclouds.aws.ec2.services.InstanceAsyncClient; import org.jclouds.aws.ec2.services.KeyPairAsyncClient; import org.jclouds.aws.ec2.services.MonitoringAsyncClient; @@ -76,4 +77,9 @@ public interface EC2AsyncClient { * Provides asynchronous access to Elastic Block Store services. */ ElasticBlockStoreAsyncClient getElasticBlockStoreServices(); + + /** + * Provides asynchronous access to Elastic Load Balancer services. + */ + ElasticLoadBalancerAsyncClient getElasticLoadBalancerServices(); } diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/EC2Client.java b/aws/core/src/main/java/org/jclouds/aws/ec2/EC2Client.java index f80734a491..12beac6aa8 100644 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/EC2Client.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/EC2Client.java @@ -23,6 +23,7 @@ import org.jclouds.aws.ec2.services.AMIClient; import org.jclouds.aws.ec2.services.AvailabilityZoneAndRegionClient; import org.jclouds.aws.ec2.services.ElasticBlockStoreClient; import org.jclouds.aws.ec2.services.ElasticIPAddressClient; +import org.jclouds.aws.ec2.services.ElasticLoadBalancerClient; import org.jclouds.aws.ec2.services.InstanceClient; import org.jclouds.aws.ec2.services.KeyPairClient; import org.jclouds.aws.ec2.services.MonitoringClient; @@ -76,4 +77,9 @@ public interface EC2Client { * Provides synchronous access to Elastic Block Store services. */ ElasticBlockStoreClient getElasticBlockStoreServices(); + + /** + * Provides synchronous access to Elastic Load Balancer services. + */ + ElasticLoadBalancerClient getElasticLoadBalancerServices(); } diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/EC2PropertiesBuilder.java b/aws/core/src/main/java/org/jclouds/aws/ec2/EC2PropertiesBuilder.java index 5f3907c391..d2da6242fc 100644 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/EC2PropertiesBuilder.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/EC2PropertiesBuilder.java @@ -19,7 +19,7 @@ package org.jclouds.aws.ec2; import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.aws.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS; +import static org.jclouds.aws.ec2.reference.EC2Constants.*; import static org.jclouds.aws.ec2.reference.EC2Constants.PROPERTY_EC2_ENDPOINT; import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_ACCESSKEYID; import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_EXPIREINTERVAL; @@ -40,6 +40,8 @@ public class EC2PropertiesBuilder extends PropertiesBuilder { protected Properties defaultProperties() { Properties properties = super.defaultProperties(); properties.setProperty(PROPERTY_EC2_ENDPOINT, "https://ec2.us-east-1.amazonaws.com"); + properties.setProperty(PROPERTY_ELB_ENDPOINT, + "https://elasticloadbalancing.us-east-1.amazonaws.com"); properties.setProperty(PROPERTY_AWS_EXPIREINTERVAL, "60"); // alestic and canonical properties.setProperty(PROPERTY_EC2_AMI_OWNERS, "063491364108,099720109477"); diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/config/EC2RestClientModule.java b/aws/core/src/main/java/org/jclouds/aws/ec2/config/EC2RestClientModule.java index 692f06f8cb..c304a859c9 100755 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/config/EC2RestClientModule.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/config/EC2RestClientModule.java @@ -27,7 +27,9 @@ import java.util.concurrent.TimeUnit; import javax.inject.Named; import javax.inject.Singleton; +import org.jclouds.aws.domain.Region; import org.jclouds.aws.ec2.EC2; +import org.jclouds.aws.ec2.ELB; import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo; import org.jclouds.aws.ec2.domain.RunningInstance; import org.jclouds.aws.ec2.predicates.InstanceStateRunning; @@ -41,6 +43,8 @@ import org.jclouds.aws.ec2.services.ElasticBlockStoreAsyncClient; import org.jclouds.aws.ec2.services.ElasticBlockStoreClient; import org.jclouds.aws.ec2.services.ElasticIPAddressAsyncClient; import org.jclouds.aws.ec2.services.ElasticIPAddressClient; +import org.jclouds.aws.ec2.services.ElasticLoadBalancerAsyncClient; +import org.jclouds.aws.ec2.services.ElasticLoadBalancerClient; import org.jclouds.aws.ec2.services.InstanceAsyncClient; import org.jclouds.aws.ec2.services.InstanceClient; import org.jclouds.aws.ec2.services.KeyPairAsyncClient; @@ -70,6 +74,7 @@ import org.jclouds.rest.RestClientFactory; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.inject.AbstractModule; import com.google.inject.Provides; @@ -110,6 +115,26 @@ public class EC2RestClientModule extends AbstractModule { bindRetryHandlers(); } + @Provides + @Singleton + @ELB + protected URI provideELBURI(@Named(EC2Constants.PROPERTY_ELB_ENDPOINT) String endpoint) { + return URI.create(endpoint); + } + + @Provides + @Singleton + @ELB + Map provideELBRegions() { + return ImmutableMap. of(Region.US_EAST_1, URI + .create("https://elasticloadbalancing.us-east-1.amazonaws.com"), Region.US_WEST_1, + URI.create("https://elasticloadbalancing.us-west-1.amazonaws.com"), + Region.EU_WEST_1, + URI.create("https://elasticloadbalancing.eu-west-1.amazonaws.com"), + Region.AP_SOUTHEAST_1, URI + .create("https://elasticloadbalancing.ap-southeast-1.amazonaws.com")); + } + @Provides @Singleton @EC2 @@ -130,8 +155,8 @@ public class EC2RestClientModule extends AbstractModule { @Provides @Singleton - Map provideAvailabilityZoneToRegions( - AvailabilityZoneAndRegionClient client, @EC2 Map regions) { + Map provideAvailabilityZoneToRegions(AvailabilityZoneAndRegionClient client, + @EC2 Map regions) { Map map = Maps.newHashMap(); for (String region : regions.keySet()) { for (AvailabilityZoneInfo zoneInfo : client.describeAvailabilityZonesInRegion(region)) { @@ -175,6 +200,13 @@ public class EC2RestClientModule extends AbstractModule { return factory.create(ElasticIPAddressAsyncClient.class); } + @Provides + @Singleton + protected ElasticLoadBalancerAsyncClient provideElasticLoadBalancerAsyncClient( + RestClientFactory factory) { + return factory.create(ElasticLoadBalancerAsyncClient.class); + } + @Provides @Singleton public ElasticIPAddressClient provideElasticIPAddressClient(ElasticIPAddressAsyncClient client) @@ -263,6 +295,14 @@ public class EC2RestClientModule extends AbstractModule { return SyncProxy.create(ElasticBlockStoreClient.class, client); } + @Provides + @Singleton + public ElasticLoadBalancerClient provideElasticLoadBalancerClient( + ElasticLoadBalancerAsyncClient client) throws IllegalArgumentException, + SecurityException, NoSuchMethodException { + return SyncProxy.create(ElasticLoadBalancerClient.class, client); + } + @Provides @Singleton @EC2 diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/internal/EC2AsyncClientImpl.java b/aws/core/src/main/java/org/jclouds/aws/ec2/internal/EC2AsyncClientImpl.java index 4a081dce99..ea7a073734 100644 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/internal/EC2AsyncClientImpl.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/internal/EC2AsyncClientImpl.java @@ -28,6 +28,7 @@ import org.jclouds.aws.ec2.services.AMIAsyncClient; import org.jclouds.aws.ec2.services.AvailabilityZoneAndRegionAsyncClient; import org.jclouds.aws.ec2.services.ElasticBlockStoreAsyncClient; import org.jclouds.aws.ec2.services.ElasticIPAddressAsyncClient; +import org.jclouds.aws.ec2.services.ElasticLoadBalancerAsyncClient; import org.jclouds.aws.ec2.services.InstanceAsyncClient; import org.jclouds.aws.ec2.services.KeyPairAsyncClient; import org.jclouds.aws.ec2.services.MonitoringAsyncClient; @@ -48,6 +49,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { private final MonitoringAsyncClient monitoringServices; private final AvailabilityZoneAndRegionAsyncClient availabilityZoneAndRegionServices; private final ElasticBlockStoreAsyncClient elasticBlockStoreServices; + private final ElasticLoadBalancerAsyncClient elasticLoadBalancerAsyncClient; @Inject public EC2AsyncClientImpl(AMIAsyncClient AMIServices, @@ -56,7 +58,8 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { SecurityGroupAsyncClient securityGroupServices, MonitoringAsyncClient monitoringServices, AvailabilityZoneAndRegionAsyncClient availabilityZoneAndRegionServices, - ElasticBlockStoreAsyncClient elasticBlockStoreServices) { + ElasticBlockStoreAsyncClient elasticBlockStoreServices, + ElasticLoadBalancerAsyncClient elasticLoadBalancerAsyncClient) { this.AMIServices = checkNotNull(AMIServices, "AMIServices"); this.elasticIPAddressServices = checkNotNull(elasticIPAddressServices, "elasticIPAddressServices"); @@ -68,11 +71,14 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { "availabilityZoneAndRegionServices"); this.elasticBlockStoreServices = checkNotNull(elasticBlockStoreServices, "elasticBlockStoreServices"); + this.elasticLoadBalancerAsyncClient = checkNotNull(elasticLoadBalancerAsyncClient, + "elasticLoadBalancerAsyncClient"); } /** * {@inheritDoc} */ + @Override public AMIAsyncClient getAMIServices() { return AMIServices; } @@ -80,6 +86,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { /** * {@inheritDoc} */ + @Override public ElasticIPAddressAsyncClient getElasticIPAddressServices() { return elasticIPAddressServices; } @@ -87,6 +94,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { /** * {@inheritDoc} */ + @Override public InstanceAsyncClient getInstanceServices() { return instanceServices; } @@ -94,6 +102,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { /** * {@inheritDoc} */ + @Override public KeyPairAsyncClient getKeyPairServices() { return keyPairServices; } @@ -101,6 +110,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { /** * {@inheritDoc} */ + @Override public SecurityGroupAsyncClient getSecurityGroupServices() { return securityGroupServices; } @@ -108,6 +118,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { /** * {@inheritDoc} */ + @Override public MonitoringAsyncClient getMonitoringServices() { return monitoringServices; } @@ -115,6 +126,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { /** * {@inheritDoc} */ + @Override public AvailabilityZoneAndRegionAsyncClient getAvailabilityZoneAndRegionServices() { return availabilityZoneAndRegionServices; } @@ -122,8 +134,17 @@ public class EC2AsyncClientImpl implements EC2AsyncClient { /** * {@inheritDoc} */ + @Override public ElasticBlockStoreAsyncClient getElasticBlockStoreServices() { return elasticBlockStoreServices; } + /** + * {@inheritDoc} + */ + @Override + public ElasticLoadBalancerAsyncClient getElasticLoadBalancerServices() { + return elasticLoadBalancerAsyncClient; + } + } diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/internal/EC2ClientImpl.java b/aws/core/src/main/java/org/jclouds/aws/ec2/internal/EC2ClientImpl.java index dfb0445dc3..5751b43a13 100644 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/internal/EC2ClientImpl.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/internal/EC2ClientImpl.java @@ -28,6 +28,7 @@ import org.jclouds.aws.ec2.services.AMIClient; import org.jclouds.aws.ec2.services.AvailabilityZoneAndRegionClient; import org.jclouds.aws.ec2.services.ElasticBlockStoreClient; import org.jclouds.aws.ec2.services.ElasticIPAddressClient; +import org.jclouds.aws.ec2.services.ElasticLoadBalancerClient; import org.jclouds.aws.ec2.services.InstanceClient; import org.jclouds.aws.ec2.services.KeyPairClient; import org.jclouds.aws.ec2.services.MonitoringClient; @@ -48,13 +49,15 @@ public class EC2ClientImpl implements EC2Client { private final MonitoringClient monitoringServices; private final AvailabilityZoneAndRegionClient availabilityZoneAndRegionServices; private final ElasticBlockStoreClient elasticBlockStoreServices; + private final ElasticLoadBalancerClient elasticLoadBalancerClient; @Inject public EC2ClientImpl(AMIClient AMIServices, ElasticIPAddressClient elasticIPAddressServices, InstanceClient instanceServices, KeyPairClient keyPairServices, SecurityGroupClient securityGroupServices, MonitoringClient monitoringServices, AvailabilityZoneAndRegionClient availabilityZoneAndRegionServices, - ElasticBlockStoreClient elasticBlockStoreServices) { + ElasticBlockStoreClient elasticBlockStoreServices, + ElasticLoadBalancerClient elasticLoadBalancerClient) { this.AMIServices = checkNotNull(AMIServices, "AMIServices"); this.elasticIPAddressServices = checkNotNull(elasticIPAddressServices, "elasticIPAddressServices"); @@ -66,11 +69,14 @@ public class EC2ClientImpl implements EC2Client { "availabilityZoneAndRegionServices"); this.elasticBlockStoreServices = checkNotNull(elasticBlockStoreServices, "elasticBlockStoreServices"); + this.elasticLoadBalancerClient = checkNotNull(elasticLoadBalancerClient, + "elasticLoadBalancerClient"); } /** * {@inheritDoc} */ + @Override public AMIClient getAMIServices() { return AMIServices; } @@ -78,6 +84,7 @@ public class EC2ClientImpl implements EC2Client { /** * {@inheritDoc} */ + @Override public ElasticIPAddressClient getElasticIPAddressServices() { return elasticIPAddressServices; } @@ -85,6 +92,7 @@ public class EC2ClientImpl implements EC2Client { /** * {@inheritDoc} */ + @Override public InstanceClient getInstanceServices() { return instanceServices; } @@ -92,6 +100,7 @@ public class EC2ClientImpl implements EC2Client { /** * {@inheritDoc} */ + @Override public KeyPairClient getKeyPairServices() { return keyPairServices; } @@ -99,6 +108,7 @@ public class EC2ClientImpl implements EC2Client { /** * {@inheritDoc} */ + @Override public SecurityGroupClient getSecurityGroupServices() { return securityGroupServices; } @@ -106,6 +116,7 @@ public class EC2ClientImpl implements EC2Client { /** * {@inheritDoc} */ + @Override public MonitoringClient getMonitoringServices() { return monitoringServices; } @@ -113,6 +124,7 @@ public class EC2ClientImpl implements EC2Client { /** * {@inheritDoc} */ + @Override public AvailabilityZoneAndRegionClient getAvailabilityZoneAndRegionServices() { return availabilityZoneAndRegionServices; } @@ -120,8 +132,17 @@ public class EC2ClientImpl implements EC2Client { /** * {@inheritDoc} */ + @Override public ElasticBlockStoreClient getElasticBlockStoreServices() { return elasticBlockStoreServices; } + /** + * {@inheritDoc} + */ + @Override + public ElasticLoadBalancerClient getElasticLoadBalancerServices() { + return elasticLoadBalancerClient; + } + } diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/reference/EC2Constants.java b/aws/core/src/main/java/org/jclouds/aws/ec2/reference/EC2Constants.java index 309277a9e2..eab3116e33 100755 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/reference/EC2Constants.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/reference/EC2Constants.java @@ -33,5 +33,6 @@ public interface EC2Constants extends AWSConstants { * the ami owners you wish to use in {@link ComputeService} */ public static final String PROPERTY_EC2_AMI_OWNERS = "jclouds.ec2.ami-owners"; + public static final String PROPERTY_ELB_ENDPOINT = "jclouds.elb.endpoint"; } diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/util/EC2Utils.java b/aws/core/src/main/java/org/jclouds/aws/ec2/util/EC2Utils.java index d9a3348a83..70a378bce6 100644 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/util/EC2Utils.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/util/EC2Utils.java @@ -59,12 +59,11 @@ public class EC2Utils { for (Object arg : gRequest.getArgs()) { if (arg instanceof String) { String regionName = (String) arg; - if(Region.EU_WEST_1.equals(regionName) || - Region.US_WEST_1.equals(regionName) || - Region.US_EAST_1.equals(regionName) || - Region.US_STANDARD.equals(regionName) || - Region.AP_SOUTHEAST_1.equals(regionName) - ) return regionName; + if (Region.EU_WEST_1.equals(regionName) || Region.US_WEST_1.equals(regionName) + || Region.US_EAST_1.equals(regionName) + || Region.US_STANDARD.equals(regionName) + || Region.AP_SOUTHEAST_1.equals(regionName)) + return regionName; } } return null; @@ -74,9 +73,22 @@ public class EC2Utils { for (Object arg : gRequest.getArgs()) { if (arg instanceof String) { String zone = (String) arg; - if(AvailabilityZone.zones.contains(zone)) return zone; + if (AvailabilityZone.zones.contains(zone)) + return zone; } } return null; } + + public static void indexStringArrayToFormValuesWithStringFormat(GeneratedHttpRequest request, + String format, Object input) { + checkArgument(checkNotNull(input, "input") instanceof String[], + "this binder is only valid for String[] : " + input.getClass()); + String[] values = (String[]) input; + for (int i = 0; i < values.length; i++) { + request.addFormParam(String.format(format, (i + 1)), checkNotNull(values[i], format + .toLowerCase() + + "s[" + i + "]")); + } + } } \ No newline at end of file diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/xml/DescribeLoadBalancersResponseHandler.java b/aws/core/src/main/java/org/jclouds/aws/ec2/xml/DescribeLoadBalancersResponseHandler.java index c548158976..b37fba4cb3 100644 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/xml/DescribeLoadBalancersResponseHandler.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/xml/DescribeLoadBalancersResponseHandler.java @@ -20,222 +20,164 @@ import org.xml.sax.Attributes; import com.google.common.collect.Sets; public class DescribeLoadBalancersResponseHandler extends - ParseSax.HandlerWithResult> -{ - @Inject - public DescribeLoadBalancersResponseHandler(@EC2 String defaultRegion) - { - this.defaultRegion = defaultRegion; - this.listenerHandler = new LoadBalancerListenerHandler(); - } + ParseSax.HandlerWithResult> { + @Inject + public DescribeLoadBalancersResponseHandler(@EC2 String defaultRegion) { + this.defaultRegion = defaultRegion; + this.listenerHandler = new LoadBalancerListenerHandler(); + } - @Inject - protected DateService dateService; + @Inject + protected DateService dateService; - @Resource - protected Logger logger = Logger.NULL; + @Resource + protected Logger logger = Logger.NULL; - private Set contents = Sets - .newLinkedHashSet(); - private StringBuilder currentText = new StringBuilder(); - private final String defaultRegion; - private final LoadBalancerListenerHandler listenerHandler; + private Set contents = Sets.newLinkedHashSet(); + private StringBuilder currentText = new StringBuilder(); + private final String defaultRegion; + private final LoadBalancerListenerHandler listenerHandler; - private boolean inListenerDescriptions = false; - private boolean inInstances = false; - private boolean inAppCookieStickinessPolicies = false; - private boolean inLBCookieStickinessPolicies = false; - private boolean inAvailabilityZones = false; - private boolean inLoadBalancerDescriptions = false; + private boolean inListenerDescriptions = false; + private boolean inInstances = false; + private boolean inAppCookieStickinessPolicies = false; + private boolean inLBCookieStickinessPolicies = false; + private boolean inAvailabilityZones = false; + //TODO unused? + private boolean inLoadBalancerDescriptions = false; - private ElasticLoadBalancer elb; - private AppCookieStickinessPolicy appCookieStickinessPolicy; - private LBCookieStickinessPolicy lBCookieStickinessPolicy; + private ElasticLoadBalancer elb; + //TODO unused? + private AppCookieStickinessPolicy appCookieStickinessPolicy; + //TODO unused? + private LBCookieStickinessPolicy lBCookieStickinessPolicy; - public void startElement(String uri, String localName, String qName, - Attributes attributes) - { - - if (qName.equals("ListenerDescriptions") || inListenerDescriptions) - { - inListenerDescriptions = true; - } - else if (qName.equals("AppCookieStickinessPolicies")) - { - inAppCookieStickinessPolicies = true; - } - else if (qName.equals("LBCookieStickinessPolicies")) - { - inLBCookieStickinessPolicies = true; - } - else if (qName.equals("LoadBalancerDescriptions")) - { - inLoadBalancerDescriptions = true; - } - else if (qName.equals("Instances")) - { - inInstances = true; - } - else if (qName.equals("AvailabilityZones")) - { - inAvailabilityZones = true; - } + public void startElement(String uri, String localName, String qName, Attributes attributes) { - if (qName.equals("member")) - { - if (!(inListenerDescriptions || inAppCookieStickinessPolicies || inInstances - || inLBCookieStickinessPolicies || inAvailabilityZones)) - { - elb = new ElasticLoadBalancer(); - } - } - } + if (qName.equals("ListenerDescriptions") || inListenerDescriptions) { + inListenerDescriptions = true; + } else if (qName.equals("AppCookieStickinessPolicies")) { + inAppCookieStickinessPolicies = true; + } else if (qName.equals("LBCookieStickinessPolicies")) { + inLBCookieStickinessPolicies = true; + } else if (qName.equals("LoadBalancerDescriptions")) { + inLoadBalancerDescriptions = true; + } else if (qName.equals("Instances")) { + inInstances = true; + } else if (qName.equals("AvailabilityZones")) { + inAvailabilityZones = true; + } - public void endElement(String uri, String localName, String qName) - { - logger.info(qName); - - //if end tag is one of below then set inXYZ to false - if (qName.equals("ListenerDescriptions")) - { - inListenerDescriptions = false; - } - else if (qName.equals("AppCookieStickinessPolicies")) - { - inAppCookieStickinessPolicies = false; - } - else if (qName.equals("LBCookieStickinessPolicies")) - { - inLBCookieStickinessPolicies = false; - } - else if (qName.equals("LoadBalancerDescriptions")) - { - inLoadBalancerDescriptions = false; - } - else if (qName.equals("Instances")) - { - inInstances = false; - } - else if (qName.equals("AvailabilityZones")) - { - inAvailabilityZones = false; - } - + if (qName.equals("member")) { + if (!(inListenerDescriptions || inAppCookieStickinessPolicies || inInstances + || inLBCookieStickinessPolicies || inAvailabilityZones)) { + elb = new ElasticLoadBalancer(); + } + } + } - if (qName.equals("DNSName")) - { - elb.setDnsName(currentText.toString().trim()); - } - else if (qName.equals("LoadBalancerName")) - { - elb.setName(currentText.toString().trim()); - } - else if (qName.equals("InstanceId")) - { - elb.getInstanceIds().add(currentText.toString().trim()); - } + public void endElement(String uri, String localName, String qName) { + logger.info(qName); - else if (qName.equals("member")) - { + // if end tag is one of below then set inXYZ to false + if (qName.equals("ListenerDescriptions")) { + inListenerDescriptions = false; + } else if (qName.equals("AppCookieStickinessPolicies")) { + inAppCookieStickinessPolicies = false; + } else if (qName.equals("LBCookieStickinessPolicies")) { + inLBCookieStickinessPolicies = false; + } else if (qName.equals("LoadBalancerDescriptions")) { + inLoadBalancerDescriptions = false; + } else if (qName.equals("Instances")) { + inInstances = false; + } else if (qName.equals("AvailabilityZones")) { + inAvailabilityZones = false; + } - if (inAvailabilityZones) - { - elb.getAvailabilityZones().add(currentText.toString().trim()); - } - else if (!(inListenerDescriptions || inAppCookieStickinessPolicies || inInstances - || inLBCookieStickinessPolicies || inAvailabilityZones)) - { - try - { - String region = EC2Utils.findRegionInArgsOrNull(request); - if (region == null) - region = defaultRegion; + if (qName.equals("DNSName")) { + elb.setDnsName(currentText.toString().trim()); + } else if (qName.equals("LoadBalancerName")) { + elb.setName(currentText.toString().trim()); + } else if (qName.equals("InstanceId")) { + elb.getInstanceIds().add(currentText.toString().trim()); + } - elb.setRegion(region); - contents.add(elb); - } - catch (NullPointerException e) - { - logger.warn(e, "malformed load balancer: %s", localName); - } + else if (qName.equals("member")) { - this.elb = null; + if (inAvailabilityZones) { + elb.getAvailabilityZones().add(currentText.toString().trim()); + } else if (!(inListenerDescriptions || inAppCookieStickinessPolicies || inInstances + || inLBCookieStickinessPolicies || inAvailabilityZones)) { + try { + String region = EC2Utils.findRegionInArgsOrNull(request); + if (region == null) + region = defaultRegion; + elb.setRegion(region); + contents.add(elb); + } catch (NullPointerException e) { + logger.warn(e, "malformed load balancer: %s", localName); } - } + this.elb = null; - currentText = new StringBuilder(); - } + } - @Override - public Set getResult() - { - return contents; - } + } - public void characters(char ch[], int start, int length) - { - currentText.append(ch, start, length); - } - - @Override - public void setContext(GeneratedHttpRequest request) { - listenerHandler.setContext(request); - super.setContext(request); - } + currentText = new StringBuilder(); + } - public class LoadBalancerListenerHandler extends - ParseSax.HandlerWithResult> - { - private Set listeners = Sets.newHashSet(); - private StringBuilder currentText = new StringBuilder(); - private LoadBalancerListener listener; + @Override + public Set getResult() { + return contents; + } - public void startElement(String uri, String name, String qName, - Attributes attrs) - { - if (qName.equals("member")) - { - listener = new LoadBalancerListener(); - } - } + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } - public void endElement(String uri, String name, String qName) - { - if (qName.equals("Protocol")) - { - listener.setProtocol(currentText.toString().trim()); - } - else if (qName.equals("LoadBalancerPort")) - { - listener.setLoadBalancerPort(Integer.parseInt(currentText - .toString().trim())); - } - else if (qName.equals("InstancePort")) - { - listener.setInstancePort(Integer.parseInt(currentText - .toString().trim())); - } - else if (qName.equals("member")) - { - listeners.add(listener); - } - - currentText = new StringBuilder(); + @Override + public void setContext(GeneratedHttpRequest request) { + listenerHandler.setContext(request); + super.setContext(request); + } - } + public class LoadBalancerListenerHandler extends + ParseSax.HandlerWithResult> { + private Set listeners = Sets.newHashSet(); + private StringBuilder currentText = new StringBuilder(); + private LoadBalancerListener listener; - @Override - public Set getResult() - { - return listeners; - } + public void startElement(String uri, String name, String qName, Attributes attrs) { + if (qName.equals("member")) { + listener = new LoadBalancerListener(); + } + } - public void characters(char ch[], int start, int length) - { - currentText.append(ch, start, length); - } + public void endElement(String uri, String name, String qName) { + if (qName.equals("Protocol")) { + listener.setProtocol(currentText.toString().trim()); + } else if (qName.equals("LoadBalancerPort")) { + listener.setLoadBalancerPort(Integer.parseInt(currentText.toString().trim())); + } else if (qName.equals("InstancePort")) { + listener.setInstancePort(Integer.parseInt(currentText.toString().trim())); + } else if (qName.equals("member")) { + listeners.add(listener); + } - } + currentText = new StringBuilder(); + + } + + @Override + public Set getResult() { + return listeners; + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } + + } } diff --git a/aws/core/src/test/java/org/jclouds/aws/ec2/services/BaseEC2AsyncClientTest.java b/aws/core/src/test/java/org/jclouds/aws/ec2/services/BaseEC2AsyncClientTest.java index 2c4e4b4fba..a874703c56 100644 --- a/aws/core/src/test/java/org/jclouds/aws/ec2/services/BaseEC2AsyncClientTest.java +++ b/aws/core/src/test/java/org/jclouds/aws/ec2/services/BaseEC2AsyncClientTest.java @@ -29,6 +29,7 @@ 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.ELB; import org.jclouds.aws.ec2.domain.AvailabilityZone; import org.jclouds.aws.filters.FormSigner; import org.jclouds.date.TimeStamp; @@ -79,6 +80,8 @@ public abstract class BaseEC2AsyncClientTest extends RestClientTest { .build(), "properties")); bind(URI.class).annotatedWith(EC2.class).toInstance( URI.create("https://ec2.amazonaws.com")); + bind(URI.class).annotatedWith(ELB.class).toInstance( + URI.create("https://elasticloadbalancing.us-east-1.amazonaws.com")); bind(String.class).annotatedWith(EC2.class).toInstance(Region.US_EAST_1); bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() { public Logger getLogger(String category) { @@ -105,12 +108,26 @@ public abstract class BaseEC2AsyncClientTest extends RestClientTest { .create("https://ec2.us-west-1.amazonaws.com")); } + @SuppressWarnings("unused") + @Provides + @Singleton + @ELB + Map provideELBRegions() { + return ImmutableMap. of(Region.US_EAST_1, URI + .create("https://elasticloadbalancing.us-east-1.amazonaws.com"), + Region.US_WEST_1, URI + .create("https://elasticloadbalancing.us-west-1.amazonaws.com"), + Region.EU_WEST_1, URI + .create("https://elasticloadbalancing.eu-west-1.amazonaws.com"), + Region.AP_SOUTHEAST_1, URI + .create("https://elasticloadbalancing.ap-southeast-1.amazonaws.com")); + } + @SuppressWarnings("unused") @Singleton @Provides Map provideAvailabilityZoneRegionMap() { - return ImmutableMap. of(AvailabilityZone.US_EAST_1A, - Region.US_EAST_1); + return ImmutableMap. of(AvailabilityZone.US_EAST_1A, Region.US_EAST_1); } }; } diff --git a/aws/core/src/test/java/org/jclouds/aws/ec2/services/ElasticLoadBalancerAsyncClientTest.java b/aws/core/src/test/java/org/jclouds/aws/ec2/services/ElasticLoadBalancerAsyncClientTest.java new file mode 100644 index 0000000000..a8bef31db4 --- /dev/null +++ b/aws/core/src/test/java/org/jclouds/aws/ec2/services/ElasticLoadBalancerAsyncClientTest.java @@ -0,0 +1,72 @@ +/** + * + * Copyright (C) 2009 Cloud Conscious, LLC. + * + * ==================================================================== + * 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 java.io.IOException; +import java.lang.reflect.Method; + +import org.jclouds.aws.ec2.xml.RegisterInstancesWithLoadBalancerResponseHandler; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.rest.internal.GeneratedHttpRequest; +import org.jclouds.rest.internal.RestAnnotationProcessor; +import org.testng.annotations.Test; + +import com.google.inject.TypeLiteral; + +/** + * Tests behavior of {@code ElasticLoadBalancerAsyncClient} + * + * @author Adrian Cole + */ +@Test(groups = "unit", testName = "ec2.ElasticLoadBalancerAsyncClientTest") +public class ElasticLoadBalancerAsyncClientTest extends + BaseEC2AsyncClientTest { + + public void testRegisterInstancesWithLoadBalancer() throws SecurityException, + NoSuchMethodException, IOException { + Method method = ElasticLoadBalancerAsyncClient.class.getMethod( + "registerInstancesWithLoadBalancer", String.class, String.class, String[].class); + + GeneratedHttpRequest httpMethod = processor.createRequest( + method, null, "ReferenceAP1", "i-6055fa09"); + + assertRequestLineEquals(httpMethod, + "POST https://elasticloadbalancing.us-east-1.amazonaws.com/ HTTP/1.1"); + assertHeadersEqual( + httpMethod, + "Content-Length: 89\nContent-Type: application/x-www-form-urlencoded\nHost: elasticloadbalancing.us-east-1.amazonaws.com\n"); + assertPayloadEquals( + httpMethod, + "Version=2009-11-25&Action=RegisterInstancesWithLoadBalancer&LoadBalancerName=ReferenceAP1&Instances.member.1.InstanceId=i-6055fa09"); + + assertResponseParserClassEquals(method, httpMethod, ParseSax.class); + assertSaxResponseParserClassEquals(method, + RegisterInstancesWithLoadBalancerResponseHandler.class); + assertExceptionParserClassEquals(method, null); + + checkFilters(httpMethod); + } + + @Override + protected TypeLiteral> createTypeLiteral() { + return new TypeLiteral>() { + }; + } + +} diff --git a/aws/core/src/test/java/org/jclouds/aws/ec2/services/ElasticLoadBalancerClientLiveTest.java b/aws/core/src/test/java/org/jclouds/aws/ec2/services/ElasticLoadBalancerClientLiveTest.java index 9fa354caae..1d30b1687c 100644 --- a/aws/core/src/test/java/org/jclouds/aws/ec2/services/ElasticLoadBalancerClientLiveTest.java +++ b/aws/core/src/test/java/org/jclouds/aws/ec2/services/ElasticLoadBalancerClientLiveTest.java @@ -22,6 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.testng.Assert.assertNotNull; import java.util.Set; +import java.util.Map.Entry; import org.jclouds.aws.domain.Region; import org.jclouds.aws.ec2.EC2AsyncClient; @@ -35,6 +36,7 @@ import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeGroups; import org.testng.annotations.Test; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; /** @@ -43,67 +45,56 @@ import com.google.common.collect.ImmutableSet; * @author Lili Nader */ @Test(groups = "live", sequential = true, testName = "ec2.ElasticLoadBalancerClientLiveTest") -public class ElasticLoadBalancerClientLiveTest -{ +public class ElasticLoadBalancerClientLiveTest { - private ElasticLoadBalancerClient client; - private RestContext context; + private ElasticLoadBalancerClient client; + private RestContext context; - @BeforeGroups(groups = { "live" }) - public void setupClient() - { - String user = checkNotNull(System.getProperty("jclouds.test.user"), - "jclouds.test.user"); - String password = checkNotNull(System.getProperty("jclouds.test.key"), - "jclouds.test.key"); + @BeforeGroups(groups = { "live" }) + public void setupClient() { + String user = checkNotNull(System.getProperty("jclouds.test.user"), "jclouds.test.user"); + String password = checkNotNull(System.getProperty("jclouds.test.key"), "jclouds.test.key"); - context = EC2ContextFactory.createContext(user, password, - new Log4JLoggingModule()).getProviderSpecificContext(); - client = context.getApi().getElasticLoadBalancerServices(); - } + context = EC2ContextFactory.createContext(user, password, new Log4JLoggingModule()) + .getProviderSpecificContext(); + client = context.getApi().getElasticLoadBalancerServices(); + } - @Test - void testCreateLoadBalancer() - { - String name = "TestLoadBalancer"; - for (String region : ImmutableSet.of(Region.US_EAST_1)) - { - String dnsName = client.createLoadBalancer(region, name, "http", - 80, 80, AvailabilityZone.US_EAST_1A); - assertNotNull(dnsName); - assert (dnsName.startsWith(name)); - } - } + @Test + void testCreateLoadBalancer() { + String name = "TestLoadBalancer"; + for (Entry regionZone : ImmutableMap. of(Region.US_EAST_1, + AvailabilityZone.US_EAST_1A, Region.US_WEST_1, AvailabilityZone.US_WEST_1A, + Region.EU_WEST_1, AvailabilityZone.EU_WEST_1A, Region.AP_SOUTHEAST_1, + AvailabilityZone.AP_SOUTHEAST_1A).entrySet()) { + String dnsName = client.createLoadBalancer(regionZone.getKey(), name, "http", 80, 80, + regionZone.getValue()); + assertNotNull(dnsName); + assert (dnsName.startsWith(name)); + } + } - @Test - void testDescribeLoadBalancers() - { - String name = "TestDescribeLoadBalancer"; - for (String region : ImmutableSet.of(Region.US_EAST_1)) - { - client.createLoadBalancer(region, name, "http", - 80, 80, AvailabilityZone.US_EAST_1A); - Set allResults = client.describeLoadBalancers( - region, name); - assertNotNull(allResults); - assert (allResults.size() >= 1); - - client.deleteLoadBalancer(region, name); - } - } + @Test(dependsOnMethods = "testCreateLoadBalancer") + void testDescribeLoadBalancers() { + String name = "TestDescribeLoadBalancer"; + for (String region : ImmutableSet.of(Region.US_EAST_1, Region.US_WEST_1, Region.EU_WEST_1, + Region.AP_SOUTHEAST_1)) { + Set allResults = client.describeLoadBalancers(region, name); + assertNotNull(allResults); + assert (allResults.size() >= 1); + } + } - @Test - void testDeleteLoadBalancer() - { - for (String region : ImmutableSet.of(Region.US_EAST_1)) - { - client.deleteLoadBalancer(region, "TestLoadBalancer"); - } - } + @Test + void testDeleteLoadBalancer() { + for (String region : ImmutableSet.of(Region.US_EAST_1, Region.US_WEST_1, Region.EU_WEST_1, + Region.AP_SOUTHEAST_1)) { + client.deleteLoadBalancer(region, "TestLoadBalancer"); + } + } - @AfterTest - public void shutdown() - { - context.close(); - } + @AfterTest + public void shutdown() { + context.close(); + } } diff --git a/aws/core/src/test/java/org/jclouds/aws/ec2/xml/DescribeLoadBalancerResponseHandlerTest.java b/aws/core/src/test/java/org/jclouds/aws/ec2/xml/DescribeLoadBalancerResponseHandlerTest.java index cd760be32b..ce2e2ec965 100644 --- a/aws/core/src/test/java/org/jclouds/aws/ec2/xml/DescribeLoadBalancerResponseHandlerTest.java +++ b/aws/core/src/test/java/org/jclouds/aws/ec2/xml/DescribeLoadBalancerResponseHandlerTest.java @@ -24,16 +24,9 @@ import static org.easymock.classextension.EasyMock.replay; import static org.testng.Assert.assertEquals; import java.io.InputStream; -import java.util.Date; import java.util.Set; -import org.jclouds.aws.domain.Region; -import org.jclouds.aws.ec2.domain.AvailabilityZone; import org.jclouds.aws.ec2.domain.ElasticLoadBalancer; -import org.jclouds.aws.ec2.domain.Image; -import org.jclouds.aws.ec2.domain.ElasticLoadBalancer.AppCookieStickinessPolicy; -import org.jclouds.aws.ec2.domain.ElasticLoadBalancer.LBCookieStickinessPolicy; -import org.jclouds.aws.ec2.domain.ElasticLoadBalancer.LoadBalancerListener; import org.jclouds.http.functions.ParseSax; import org.jclouds.rest.internal.GeneratedHttpRequest; import org.testng.annotations.Test; @@ -51,11 +44,12 @@ public class DescribeLoadBalancerResponseHandlerTest extends BaseEC2HandlerTest public void testParse() { InputStream is = getClass().getResourceAsStream("/ec2/describe_loadbalancers.xml"); - + Set contents = Sets.newHashSet(); ElasticLoadBalancer dummy = new ElasticLoadBalancer(defaultRegion, "my-load-balancer", - ImmutableSet.of("i-5b33e630", "i-8f26d7e4", "i-5933e632"), ImmutableSet.of("us-east-1a"), - "my-load-balancer-1400212309.us-east-1.elb.amazonaws.com"); + ImmutableSet.of("i-5b33e630", "i-8f26d7e4", "i-5933e632"), ImmutableSet + .of("us-east-1a"), + "my-load-balancer-1400212309.us-east-1.elb.amazonaws.com"); contents.add(dummy); Set result = parseLoadBalancers(is); @@ -63,19 +57,18 @@ public class DescribeLoadBalancerResponseHandlerTest extends BaseEC2HandlerTest assertEquals(result, contents); } - private Set parseLoadBalancers(InputStream is) { - DescribeLoadBalancersResponseHandler handler = injector - .getInstance(DescribeLoadBalancersResponseHandler.class); - addDefaultRegionToHandler(handler); - Set result = factory.create(handler).parse(is); - return result; - } + DescribeLoadBalancersResponseHandler handler = injector + .getInstance(DescribeLoadBalancersResponseHandler.class); + addDefaultRegionToHandler(handler); + Set result = factory.create(handler).parse(is); + return result; + } - private void addDefaultRegionToHandler(ParseSax.HandlerWithResult handler) { - GeneratedHttpRequest request = createMock(GeneratedHttpRequest.class); - expect(request.getArgs()).andReturn(new Object[] { null }); - replay(request); - handler.setContext(request); - } + private void addDefaultRegionToHandler(ParseSax.HandlerWithResult handler) { + GeneratedHttpRequest request = createMock(GeneratedHttpRequest.class); + expect(request.getArgs()).andReturn(new Object[] { null }); + replay(request); + handler.setContext(request); + } }