You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2014/03/27 23:45:55 UTC
[07/13] Forking jclouds provider/aws-ec2 for STRATOS-559
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateBuilderLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateBuilderLiveTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateBuilderLiveTest.java
new file mode 100644
index 0000000..3cbad70
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateBuilderLiveTest.java
@@ -0,0 +1,367 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute;
+
+import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
+import static org.jclouds.http.internal.TrackingJavaUrlHttpCommandExecutorService.getInvokerOfRequestAtIndex;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+
+import org.jclouds.aws.domain.Region;
+import org.jclouds.aws.ec2.AWSEC2Api;
+import org.jclouds.aws.ec2.reference.AWSEC2Constants;
+import org.jclouds.compute.ComputeServiceContext;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.domain.OsFamilyVersion64Bit;
+import org.jclouds.compute.domain.Template;
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.compute.EC2TemplateBuilderLiveTest;
+import org.jclouds.ec2.compute.predicates.EC2ImagePredicates;
+import org.jclouds.ec2.domain.InstanceType;
+import org.jclouds.ec2.domain.RootDeviceType;
+import org.jclouds.ec2.features.AvailabilityZoneAndRegionApi;
+import org.jclouds.ec2.options.DescribeAvailabilityZonesOptions;
+import org.jclouds.ec2.options.DescribeRegionsOptions;
+import org.jclouds.ec2.reference.EC2Constants;
+import org.jclouds.http.HttpCommand;
+import org.jclouds.http.internal.TrackingJavaUrlHttpCommandExecutorService;
+import org.jclouds.location.reference.LocationConstants;
+import org.jclouds.logging.log4j.config.Log4JLoggingModule;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.inject.Module;
+
+/**
+ *
+ * @author Adrian Cole
+ */
+@Test(groups = "live", testName = "AWSEC2TemplateBuilderLiveTest")
+public class AWSEC2TemplateBuilderLiveTest extends EC2TemplateBuilderLiveTest {
+
+ public AWSEC2TemplateBuilderLiveTest() {
+ provider = "aws-ec2";
+ }
+
+ @Override
+ protected Predicate<OsFamilyVersion64Bit> defineUnsupportedOperatingSystems() {
+ return Predicates.not(new Predicate<OsFamilyVersion64Bit>() {
+ @Override
+ public boolean apply(OsFamilyVersion64Bit input) {
+ switch (input.family) {
+ case UBUNTU:
+ return true;
+ case DEBIAN:
+ return true;
+ case RHEL:
+ return input.version.equals("5.6") || input.version.equals("")
+ || (input.version.matches("[56].0") && input.is64Bit);
+ case CENTOS:
+ return input.version.matches("5.[0246]") || (input.version.equals("6.0") && input.is64Bit)
+ || input.version.equals("");
+ case WINDOWS:
+ return input.version.matches("200[38]") || (input.version.equals("7") && !input.is64Bit)
+ || input.version.equals("");
+ default:
+ return false;
+ }
+ }
+
+ });
+ }
+
+ @Test
+ public void testTemplateBuilderM1MEDIUMWithNegativeLookaroundDoesntMatchTestImages() {
+
+ Template template = view.getComputeService().templateBuilder().hardwareId(InstanceType.M1_MEDIUM)
+ // need to select versions with double-digits so that lexicographic
+ // doesn't end up prefering 9.x vs 11.x
+ .osVersionMatches("1[012].[10][04]")
+ // negative lookahead for daily and testing, but ensure match
+ // ubuntu-images
+ // http://www.regular-expressions.info/lookaround.html
+ .imageDescriptionMatches("^(?!.*(daily|testing)).*ubuntu-images.*$").osFamily(OsFamily.UBUNTU).build();
+
+ assert template.getImage().getProviderId().startsWith("ami-") : template;
+ assert template.getImage().getDescription().indexOf("test") == -1 : template;
+ assert template.getImage().getDescription().indexOf("daily") == -1 : template;
+ assertEquals(template.getImage().getVersion(), "20100224");
+ assertEquals(template.getImage().getOperatingSystem().getVersion(), "10.04");
+ assertEquals(template.getImage().getOperatingSystem().is64Bit(), false);
+ assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
+ assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
+ assertEquals(template.getLocation().getId(), "us-east-1");
+ assertEquals(getCores(template.getHardware()), 1.0d);
+ assertEquals(template.getHardware().getId(), InstanceType.M1_MEDIUM);
+ assertEquals(template.getImage().getOperatingSystem().getArch(), "paravirtual");
+ }
+
+ @Test
+ public void testUbuntuInstanceStoreGoesM1SmallNegativeLookaroundDoesntMatchTestImages() {
+
+ Template template = view.getComputeService().templateBuilder()
+ .imageMatches(EC2ImagePredicates.rootDeviceType(RootDeviceType.INSTANCE_STORE))
+ // need to select versions with double-digits so that lexicographic
+ // doesn't end up prefering 9.x vs 11.x
+ .osVersionMatches("1[012].[10][04]")
+ // negative lookahead for daily and testing, but ensure match
+ // ubuntu-images
+ // http://www.regular-expressions.info/lookaround.html
+ .imageDescriptionMatches("^(?!.*(daily|testing)).*ubuntu-images.*$").osFamily(OsFamily.UBUNTU).build();
+
+ assert template.getImage().getProviderId().startsWith("ami-") : template;
+ assert template.getImage().getDescription().indexOf("test") == -1 : template;
+ assert template.getImage().getDescription().indexOf("daily") == -1 : template;
+ assertEquals(template.getImage().getOperatingSystem().getVersion(), "10.04");
+ assertEquals(template.getImage().getOperatingSystem().is64Bit(), false);
+ assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
+ assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
+ assertEquals(template.getLocation().getId(), "us-east-1");
+ assertEquals(getCores(template.getHardware()), 1.0d);
+ assertEquals(template.getHardware().getId(), InstanceType.M1_SMALL);
+ assertEquals(template.getImage().getOperatingSystem().getArch(), "paravirtual");
+ }
+
+ @Test
+ public void testTemplateBuilderCanUseImageIdAndhardwareIdAndAZ() {
+
+ Template template = view.getComputeService().templateBuilder().imageId("us-east-1/ami-ccb35ea5")
+ .hardwareId(InstanceType.M2_2XLARGE).locationId("us-east-1a").build();
+
+ assert template.getImage().getProviderId().startsWith("ami-") : template;
+ assertEquals(template.getImage().getOperatingSystem().getVersion(), "5.4");
+ assertEquals(template.getImage().getOperatingSystem().is64Bit(), true);
+ assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS);
+ assertEquals(template.getImage().getVersion(), "4.4.10");
+ assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
+ assertEquals(template.getLocation().getId(), "us-east-1a");
+ assertEquals(template.getImage().getLocation().getId(), "us-east-1");
+ assertEquals(getCores(template.getHardware()), 4.0d);
+ assertEquals(template.getHardware().getId(), InstanceType.M2_2XLARGE);
+ assertEquals(template.getImage().getOperatingSystem().getArch(), "paravirtual");
+ }
+
+ @Test
+ public void testDefaultTemplateBuilder() throws IOException {
+ Template defaultTemplate = view.getComputeService().templateBuilder().build();
+ assert defaultTemplate.getImage().getProviderId().startsWith("ami-") : defaultTemplate;
+ assertTrue(defaultTemplate.getImage().getOperatingSystem().getVersion().contains("pv-201"),
+ "Default template version should include 'pv-201' but is "
+ + defaultTemplate.getImage().getOperatingSystem().getVersion());
+ assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
+ assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.AMZN_LINUX);
+ assertEquals(defaultTemplate.getImage().getUserMetadata().get("rootDeviceType"), "ebs");
+ assertEquals(defaultTemplate.getLocation().getId(), "us-east-1");
+ assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
+ assertEquals(defaultTemplate.getImage().getOperatingSystem().getArch(), "paravirtual");
+ }
+
+ @Test
+ public void testAmazonLinuxInstanceStore() throws IOException {
+
+ Template defaultTemplate = view.getComputeService().templateBuilder().osFamily(OsFamily.AMZN_LINUX)
+ .imageMatches(EC2ImagePredicates.rootDeviceType(RootDeviceType.INSTANCE_STORE)).build();
+ assert defaultTemplate.getImage().getProviderId().startsWith("ami-") : defaultTemplate;
+ assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "pv-2013.09.rc-1");
+ assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
+ assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.AMZN_LINUX);
+ assertEquals(defaultTemplate.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
+ assertEquals(defaultTemplate.getLocation().getId(), "us-east-1");
+ assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
+ assertEquals(defaultTemplate.getImage().getOperatingSystem().getArch(), "paravirtual");
+ }
+
+ @Test
+ public void testFastestTemplateBuilder() throws IOException {
+ Template fastestTemplate = view.getComputeService().templateBuilder().fastest().osFamily(OsFamily.AMZN_LINUX)
+ .build();
+ assert fastestTemplate.getImage().getProviderId().startsWith("ami-") : fastestTemplate;
+ assertEquals(fastestTemplate.getHardware().getProviderId(), InstanceType.CC2_8XLARGE);
+ assertEquals(fastestTemplate.getImage().getOperatingSystem().getVersion(), "2011.09.2");
+ assertEquals(fastestTemplate.getImage().getOperatingSystem().is64Bit(), true);
+ assertEquals(fastestTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.AMZN_LINUX);
+ assertEquals(fastestTemplate.getImage().getUserMetadata().get("rootDeviceType"), "ebs");
+ assertEquals(fastestTemplate.getLocation().getId(), "us-east-1");
+ assertEquals(getCores(fastestTemplate.getHardware()), 16.0d);
+ assertEquals(fastestTemplate.getImage().getOperatingSystem().getArch(), "hvm");
+ }
+
+ @Test
+ public void testTemplateBuilderMicro() throws IOException {
+
+ Template microTemplate = view.getComputeService().templateBuilder().hardwareId(InstanceType.T1_MICRO)
+ .osFamily(OsFamily.UBUNTU).osVersionMatches("10.10").os64Bit(true).build();
+
+ assert microTemplate.getImage().getProviderId().startsWith("ami-") : microTemplate;
+ assertEquals(microTemplate.getImage().getOperatingSystem().getVersion(), "10.10");
+ assertEquals(microTemplate.getImage().getOperatingSystem().is64Bit(), true);
+ assertEquals(microTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
+ assertEquals(microTemplate.getImage().getUserMetadata().get("rootDeviceType"), "ebs");
+ assertEquals(microTemplate.getLocation().getId(), "us-east-1");
+ assertEquals(getCores(microTemplate.getHardware()), 1.0d);
+ assertEquals(microTemplate.getImage().getOperatingSystem().getArch(), "paravirtual");
+ }
+
+ @Test
+ public void testTemplateBuilderWithNoOwnersParsesImageOnDemand() throws IOException {
+ ComputeServiceContext context = null;
+ try {
+ Properties overrides = setupProperties();
+ // set owners to nothing
+ overrides.setProperty(AWSEC2Constants.PROPERTY_EC2_AMI_QUERY, "");
+ overrides.setProperty(AWSEC2Constants.PROPERTY_EC2_CC_AMI_QUERY, "");
+
+ context = createView(overrides, setupModules());
+
+ assertEquals(context.getComputeService().listImages().size(), 0);
+
+ Template template = context.getComputeService().templateBuilder().imageId("us-east-1/ami-ccb35ea5").build();
+ assert template.getImage().getProviderId().startsWith("ami-") : template;
+ assertEquals(template.getImage().getOperatingSystem().getVersion(), "5.4");
+ assertEquals(template.getImage().getOperatingSystem().is64Bit(), true);
+ assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS);
+ assertEquals(template.getImage().getVersion(), "4.4.10");
+ assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
+ assertEquals(template.getLocation().getId(), "us-east-1");
+ assertEquals(getCores(template.getHardware()), 1.0d);
+ assertEquals(template.getHardware().getId(), "m1.small");
+
+ // ensure we cache the new image for next time
+ assertEquals(context.getComputeService().listImages().size(), 1);
+
+ } finally {
+ if (context != null)
+ context.close();
+ }
+ }
+
+ @Test
+ public void testTemplateBuilderWithNoOwnersParsesImageOnDemandDeprecated() throws IOException {
+ ComputeServiceContext context = null;
+ try {
+ Properties overrides = setupProperties();
+ // set owners to nothing
+ overrides.setProperty(EC2Constants.PROPERTY_EC2_AMI_OWNERS, "");
+ overrides.setProperty(AWSEC2Constants.PROPERTY_EC2_CC_AMI_QUERY, "");
+
+ context = createView(overrides, setupModules());
+
+ assertEquals(context.getComputeService().listImages().size(), 0);
+
+ Template template = context.getComputeService().templateBuilder().imageId("us-east-1/ami-ccb35ea5").build();
+ assert template.getImage().getProviderId().startsWith("ami-") : template;
+ assertEquals(template.getImage().getOperatingSystem().getVersion(), "5.4");
+ assertEquals(template.getImage().getOperatingSystem().is64Bit(), true);
+ assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS);
+ assertEquals(template.getImage().getVersion(), "4.4.10");
+ assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
+ assertEquals(template.getLocation().getId(), "us-east-1");
+ assertEquals(getCores(template.getHardware()), 1.0d);
+ assertEquals(template.getHardware().getId(), "m1.small");
+
+ // ensure we cache the new image for next time
+ assertEquals(context.getComputeService().listImages().size(), 1);
+
+ } finally {
+ if (context != null)
+ context.close();
+ }
+ }
+
+ @Test
+ public void testTemplateBuilderWithLessRegions() throws IOException, SecurityException, NoSuchMethodException {
+ ComputeServiceContext context = null;
+ try {
+ Properties overrides = setupProperties();
+ // set regions to only 1
+ overrides.setProperty(LocationConstants.PROPERTY_REGIONS, Region.EU_WEST_1);
+ overrides.setProperty(AWSEC2Constants.PROPERTY_EC2_CC_REGIONS, "");
+ overrides.setProperty(AWSEC2Constants.PROPERTY_EC2_AMI_QUERY, "");
+ overrides.setProperty(AWSEC2Constants.PROPERTY_EC2_CC_AMI_QUERY, "");
+
+ final List<HttpCommand> commandsInvoked = Lists.newArrayList();
+
+ context = createView(
+ overrides,
+ ImmutableSet.<Module> of(new Log4JLoggingModule(),
+ TrackingJavaUrlHttpCommandExecutorService.newTrackingModule(commandsInvoked)));
+
+ assert context.getComputeService().listAssignableLocations().size() < this.view.getComputeService()
+ .listAssignableLocations().size();
+
+ assertOnlyOneRegionQueriedForAvailabilityZone(commandsInvoked);
+
+ assert context.getComputeService().listImages().size() < this.view.getComputeService().listImages().size();
+
+ Template template = context.getComputeService().templateBuilder().imageId("eu-west-1/ami-a33b06d7").build();
+ assert template.getImage().getProviderId().startsWith("ami-") : template;
+ assertEquals(template.getImage().getOperatingSystem().getVersion(), "2011.09.2");
+ assertEquals(template.getImage().getOperatingSystem().is64Bit(), true);
+ assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.AMZN_LINUX);
+ assertEquals(template.getImage().getVersion(), "2011.09.2");
+ assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
+ assertEquals(template.getLocation().getId(), "eu-west-1");
+ assertEquals(getCores(template.getHardware()), 1.0d);
+ assertEquals(template.getHardware().getId(), "m1.small");
+
+ } finally {
+ if (context != null)
+ context.close();
+ }
+ }
+
+ private static void assertOnlyOneRegionQueriedForAvailabilityZone(List<HttpCommand> commandsInvoked)
+ throws NoSuchMethodException {
+ assert commandsInvoked.size() == 2 : commandsInvoked;
+ assertEquals(getInvokerOfRequestAtIndex(commandsInvoked, 0),
+ AvailabilityZoneAndRegionApi.class.getMethod("describeRegions", DescribeRegionsOptions[].class));
+ assertEquals(getInvokerOfRequestAtIndex(commandsInvoked, 1),
+ AvailabilityZoneAndRegionApi.class.getMethod("describeAvailabilityZonesInRegion", String.class,
+ DescribeAvailabilityZonesOptions[].class));
+ }
+
+ @Test
+ public void testTemplateBuilderCanUseImageIdFromNonDefaultOwner() {
+ // This is the id of a public image, not owned by one of the four default
+ // owners
+ String imageId = "us-east-1/ami-44d02f2d";
+ Template defaultTemplate = view.getComputeService().templateBuilder().imageId(imageId)
+ .imageMatches(EC2ImagePredicates.rootDeviceType(RootDeviceType.INSTANCE_STORE)).build();
+ assert defaultTemplate.getImage().getProviderId().startsWith("ami-") : defaultTemplate;
+ assertEquals(defaultTemplate.getImage().getId(), imageId);
+ }
+
+ @Test
+ public void testAssignability() {
+ view.unwrapApi(EC2Api.class);
+ view.unwrapApi(AWSEC2Api.class);
+ }
+
+ @Override
+ protected Set<String> getIso3166Codes() {
+ return ImmutableSet.<String> of("US-VA", "US-CA", "US-OR", "BR-SP", "IE", "SG", "AU-NSW", "JP-13");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/config/AWSEC2ComputeServiceContextModuleTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/config/AWSEC2ComputeServiceContextModuleTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/config/AWSEC2ComputeServiceContextModuleTest.java
new file mode 100644
index 0000000..27e3e57
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/config/AWSEC2ComputeServiceContextModuleTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.config;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.testng.Assert.fail;
+
+import org.jclouds.compute.domain.Image;
+import org.jclouds.ec2.compute.domain.RegionAndName;
+import org.jclouds.ec2.compute.loaders.RegionAndIdToImage;
+import org.jclouds.rest.AuthorizationException;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Supplier;
+import com.google.common.cache.CacheLoader;
+
+/**
+ * @author Aled Sage
+ */
+@Test(groups = "unit")
+public class AWSEC2ComputeServiceContextModuleTest {
+
+ @Test
+ public void testCacheLoaderDoesNotReloadAfterAuthorizationException() throws Exception {
+ AWSEC2ComputeServiceContextModule module = new AWSEC2ComputeServiceContextModule() {
+ public Supplier<CacheLoader<RegionAndName, Image>> provideRegionAndNameToImageSupplierCacheLoader(RegionAndIdToImage delegate) {
+ return super.provideRegionAndNameToImageSupplierCacheLoader(delegate);
+ }
+ };
+
+ RegionAndName regionAndName = new RegionAndName("myregion", "myname");
+ AuthorizationException authException = new AuthorizationException();
+
+ RegionAndIdToImage mockRegionAndIdToImage = createMock(RegionAndIdToImage.class);
+ expect(mockRegionAndIdToImage.load(regionAndName)).andThrow(authException).once();
+ replay(mockRegionAndIdToImage);
+
+ CacheLoader<RegionAndName, Image> cacheLoader = module.provideRegionAndNameToImageSupplierCacheLoader(mockRegionAndIdToImage).get();
+
+ for (int i = 0; i < 2; i++) {
+ try {
+ Image image = cacheLoader.load(regionAndName);
+ fail("Expected Authorization exception, but got " + image);
+ } catch (AuthorizationException e) {
+ // success
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2ImageExtensionLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2ImageExtensionLiveTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2ImageExtensionLiveTest.java
new file mode 100644
index 0000000..4ae398b
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2ImageExtensionLiveTest.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.extensions;
+
+import static com.google.common.collect.Iterables.transform;
+
+import org.jclouds.aws.ec2.AWSEC2Api;
+import org.jclouds.aws.util.AWSUtils;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.extensions.internal.BaseImageExtensionLiveTest;
+import org.jclouds.ec2.compute.functions.EC2ImageParser;
+import org.jclouds.ec2.options.DescribeImagesOptions;
+import org.jclouds.sshj.config.SshjSshClientModule;
+import org.testng.annotations.Test;
+
+import com.google.inject.Module;
+
+/**
+ * Live test for aws-ec2 {@link ImageExtension} implementation
+ *
+ * @author David Alves
+ *
+ */
+@Test(groups = "live", singleThreaded = true, testName = "AWSEC2ImageExtensionLiveTest")
+public class AWSEC2ImageExtensionLiveTest extends BaseImageExtensionLiveTest {
+
+ public AWSEC2ImageExtensionLiveTest() {
+ provider = "aws-ec2";
+ }
+
+ @Override
+ protected Iterable<? extends Image> listImages() {
+ AWSEC2Api client = view.unwrapApi(AWSEC2Api.class);
+ String[] parts = AWSUtils.parseHandle(imageId);
+ String region = parts[0];
+ String imageId = parts[1];
+ EC2ImageParser parser = view.utils().injector().getInstance(EC2ImageParser.class);
+ return transform(
+ client.getAMIApi().get().describeImagesInRegion(region, new DescribeImagesOptions().imageIds(imageId)),
+ parser);
+ }
+
+ @Override
+ protected Module getSshModule() {
+ return new SshjSshClientModule();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2SecurityGroupExtensionExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2SecurityGroupExtensionExpectTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2SecurityGroupExtensionExpectTest.java
new file mode 100644
index 0000000..f13737a
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2SecurityGroupExtensionExpectTest.java
@@ -0,0 +1,364 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.extensions;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.aws.ec2.compute.internal.BaseAWSEC2ComputeServiceExpectTest;
+import org.jclouds.compute.domain.SecurityGroup;
+import org.jclouds.compute.domain.SecurityGroupBuilder;
+import org.jclouds.compute.extensions.SecurityGroupExtension;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.net.domain.IpPermission;
+import org.jclouds.net.domain.IpProtocol;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.LinkedHashMultimap;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
+
+/**
+ *
+ * @author Andrew Bayer
+ */
+@Test(groups = "unit", testName = "AWSEC2SecurityGroupExtensionExpectTest")
+public class AWSEC2SecurityGroupExtensionExpectTest extends BaseAWSEC2ComputeServiceExpectTest {
+
+ public void testAddIpPermissionCidrFromIpPermission() {
+ HttpRequest describeSecurityGroupsSingleRequest =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "DescribeSecurityGroups")
+ .addFormParam("GroupId.1", "sg-3c6ef654").build());
+
+ HttpResponse describeSecurityGroupsSingleResponse =
+ HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType(
+ "/describe_securitygroups_extension_cidr.xml", MediaType.APPLICATION_XML)).build();
+
+
+ HttpRequest authorizeSecurityGroupIngressRequestRange =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "AuthorizeSecurityGroupIngress")
+ .addFormParam("GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.0.FromPort", "22")
+ .addFormParam("IpPermissions.0.IpProtocol", "tcp")
+ .addFormParam("IpPermissions.0.IpRanges.0.CidrIp", "0.0.0.0/0")
+ .addFormParam("IpPermissions.0.ToPort", "40")
+ .build());
+
+ Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder();
+ requestResponseMap.put(describeRegionsRequest, describeRegionsResponse);
+ requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse);
+ requestResponseMap.put(describeSecurityGroupsSingleRequest, describeSecurityGroupsSingleResponse);
+ requestResponseMap.put(createKeyPairRequest, createKeyPairResponse);
+ requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse);
+
+ requestResponseMap.put(authorizeSecurityGroupIngressRequestRange, authorizeSecurityGroupIngressResponse);
+
+ IpPermission.Builder builder = IpPermission.builder();
+
+ builder.ipProtocol(IpProtocol.TCP);
+ builder.fromPort(22);
+ builder.toPort(40);
+ builder.cidrBlock("0.0.0.0/0");
+
+ IpPermission perm = builder.build();
+
+ SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+
+ SecurityGroupBuilder groupBuilder = new SecurityGroupBuilder();
+ groupBuilder.id("us-east-1/sg-3c6ef654");
+ groupBuilder.providerId("sg-3c6ef654");
+ groupBuilder.name("jclouds#some-group");
+ groupBuilder.location(new LocationBuilder()
+ .scope(LocationScope.REGION)
+ .id(region)
+ .description("region")
+ .build());
+
+ SecurityGroup origGroup = groupBuilder.build();
+
+ SecurityGroup newGroup = extension.addIpPermission(perm, origGroup);
+
+ assertEquals(1, newGroup.getIpPermissions().size());
+
+ IpPermission newPerm = Iterables.getOnlyElement(newGroup.getIpPermissions());
+
+ assertNotNull(newPerm);
+ assertEquals(IpProtocol.TCP, newPerm.getIpProtocol());
+ assertEquals(22, newPerm.getFromPort());
+ assertEquals(40, newPerm.getToPort());
+ assertEquals(1, newPerm.getCidrBlocks().size());
+ assertTrue(newPerm.getCidrBlocks().contains("0.0.0.0/0"));
+ }
+
+ public void testAddIpPermissionCidrFromParams() {
+ HttpRequest describeSecurityGroupsSingleRequest =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "DescribeSecurityGroups")
+ .addFormParam("GroupId.1", "sg-3c6ef654").build());
+
+ HttpResponse describeSecurityGroupsSingleResponse =
+ HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType(
+ "/describe_securitygroups_extension_cidr.xml", MediaType.APPLICATION_XML)).build();
+
+
+ HttpRequest authorizeSecurityGroupIngressRequestRange =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "AuthorizeSecurityGroupIngress")
+ .addFormParam("GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.0.FromPort", "22")
+ .addFormParam("IpPermissions.0.IpProtocol", "tcp")
+ .addFormParam("IpPermissions.0.IpRanges.0.CidrIp", "0.0.0.0/0")
+ .addFormParam("IpPermissions.0.ToPort", "40")
+ .build());
+
+ Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder();
+ requestResponseMap.put(describeRegionsRequest, describeRegionsResponse);
+ requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse);
+ requestResponseMap.put(describeSecurityGroupsSingleRequest, describeSecurityGroupsSingleResponse);
+ requestResponseMap.put(createKeyPairRequest, createKeyPairResponse);
+ requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse);
+
+ requestResponseMap.put(authorizeSecurityGroupIngressRequestRange, authorizeSecurityGroupIngressResponse);
+
+ SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+
+ SecurityGroupBuilder groupBuilder = new SecurityGroupBuilder();
+ groupBuilder.id("us-east-1/sg-3c6ef654");
+ groupBuilder.providerId("sg-3c6ef654");
+ groupBuilder.name("jclouds#some-group");
+ groupBuilder.location(new LocationBuilder()
+ .scope(LocationScope.REGION)
+ .id(region)
+ .description("region")
+ .build());
+
+ SecurityGroup origGroup = groupBuilder.build();
+
+ SecurityGroup newGroup = extension.addIpPermission(IpProtocol.TCP,
+ 22,
+ 40,
+ emptyMultimap(),
+ ImmutableSet.of("0.0.0.0/0"),
+ emptyStringSet(),
+ origGroup);
+
+ assertEquals(1, newGroup.getIpPermissions().size());
+
+ IpPermission newPerm = Iterables.getOnlyElement(newGroup.getIpPermissions());
+
+ assertNotNull(newPerm);
+ assertEquals(IpProtocol.TCP, newPerm.getIpProtocol());
+ assertEquals(22, newPerm.getFromPort());
+ assertEquals(40, newPerm.getToPort());
+ assertEquals(1, newPerm.getCidrBlocks().size());
+ assertTrue(newPerm.getCidrBlocks().contains("0.0.0.0/0"));
+ }
+
+ public void testAddIpPermissionGroupFromIpPermission() {
+ HttpRequest describeSecurityGroupsSingleRequest =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "DescribeSecurityGroups")
+ .addFormParam("GroupId.1", "sg-3c6ef654").build());
+
+ HttpResponse describeSecurityGroupsSingleResponse =
+ HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType(
+ "/describe_securitygroups_extension_group.xml", MediaType.APPLICATION_XML)).build();
+
+
+ HttpRequest authorizeSecurityGroupIngressRequestGroupTenant =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "AuthorizeSecurityGroupIngress")
+ .addFormParam("GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.0.FromPort", "22")
+ .addFormParam("IpPermissions.0.Groups.0.GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.0.Groups.0.UserId", "993194456877")
+ .addFormParam("IpPermissions.0.IpProtocol", "tcp")
+ .addFormParam("IpPermissions.0.ToPort", "40")
+ .build());
+
+ Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder();
+ requestResponseMap.put(describeRegionsRequest, describeRegionsResponse);
+ requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse);
+ requestResponseMap.put(describeSecurityGroupsSingleRequest, describeSecurityGroupsSingleResponse);
+ requestResponseMap.put(createKeyPairRequest, createKeyPairResponse);
+ requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse);
+
+ requestResponseMap.put(authorizeSecurityGroupIngressRequestGroupTenant, authorizeSecurityGroupIngressResponse);
+
+ IpPermission.Builder builder = IpPermission.builder();
+
+ builder.ipProtocol(IpProtocol.TCP);
+ builder.fromPort(22);
+ builder.toPort(40);
+ builder.tenantIdGroupNamePair("993194456877", "sg-3c6ef654");
+
+ IpPermission perm = builder.build();
+
+ SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+
+ SecurityGroupBuilder groupBuilder = new SecurityGroupBuilder();
+ groupBuilder.id("us-east-1/sg-3c6ef654");
+ groupBuilder.providerId("sg-3c6ef654");
+ groupBuilder.name("jclouds#some-group");
+ groupBuilder.location(new LocationBuilder()
+ .scope(LocationScope.REGION)
+ .id(region)
+ .description("region")
+ .build());
+ groupBuilder.ownerId("993194456877");
+
+ SecurityGroup origGroup = groupBuilder.build();
+
+ SecurityGroup newGroup = extension.addIpPermission(perm, origGroup);
+
+ assertEquals(1, newGroup.getIpPermissions().size());
+
+ IpPermission newPerm = Iterables.getOnlyElement(newGroup.getIpPermissions());
+
+ assertNotNull(newPerm);
+ assertEquals(IpProtocol.TCP, newPerm.getIpProtocol());
+ assertEquals(22, newPerm.getFromPort());
+ assertEquals(40, newPerm.getToPort());
+ assertEquals(0, newPerm.getCidrBlocks().size());
+ assertEquals(1, newPerm.getTenantIdGroupNamePairs().size());
+ assertTrue(newPerm.getTenantIdGroupNamePairs().keySet().contains(origGroup.getOwnerId()));
+ assertTrue(newPerm.getTenantIdGroupNamePairs().values().contains(origGroup.getProviderId()));
+ }
+
+
+ public void testAddIpPermissionGroupFromParams() {
+ HttpRequest describeSecurityGroupsSingleRequest =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "DescribeSecurityGroups")
+ .addFormParam("GroupId.1", "sg-3c6ef654").build());
+
+ HttpResponse describeSecurityGroupsSingleResponse =
+ HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType(
+ "/describe_securitygroups_extension_group.xml", MediaType.APPLICATION_XML)).build();
+
+
+ HttpRequest authorizeSecurityGroupIngressRequestGroupTenant =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "AuthorizeSecurityGroupIngress")
+ .addFormParam("GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.0.FromPort", "22")
+ .addFormParam("IpPermissions.0.Groups.0.GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.0.Groups.0.UserId", "993194456877")
+ .addFormParam("IpPermissions.0.IpProtocol", "tcp")
+ .addFormParam("IpPermissions.0.ToPort", "40")
+ .build());
+
+ Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder();
+ requestResponseMap.put(describeRegionsRequest, describeRegionsResponse);
+ requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse);
+ requestResponseMap.put(describeSecurityGroupsSingleRequest, describeSecurityGroupsSingleResponse);
+ requestResponseMap.put(createKeyPairRequest, createKeyPairResponse);
+ requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse);
+
+ requestResponseMap.put(authorizeSecurityGroupIngressRequestGroupTenant, authorizeSecurityGroupIngressResponse);
+
+ SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+
+ SecurityGroupBuilder groupBuilder = new SecurityGroupBuilder();
+ groupBuilder.id("us-east-1/sg-3c6ef654");
+ groupBuilder.providerId("sg-3c6ef654");
+ groupBuilder.name("jclouds#some-group");
+ groupBuilder.ownerId("993194456877");
+ groupBuilder.location(new LocationBuilder()
+ .scope(LocationScope.REGION)
+ .id(region)
+ .description("region")
+ .build());
+
+ SecurityGroup origGroup = groupBuilder.build();
+
+ ImmutableMultimap.Builder<String, String> permBuilder = ImmutableMultimap.builder();
+ permBuilder.put(origGroup.getOwnerId(), origGroup.getId());
+
+ SecurityGroup newGroup = extension.addIpPermission(IpProtocol.TCP,
+ 22,
+ 40,
+ permBuilder.build(),
+ emptyStringSet(),
+ emptyStringSet(),
+ origGroup);
+
+ assertEquals(1, newGroup.getIpPermissions().size());
+
+ IpPermission newPerm = Iterables.getOnlyElement(newGroup.getIpPermissions());
+
+ assertNotNull(newPerm);
+ assertEquals(IpProtocol.TCP, newPerm.getIpProtocol());
+ assertEquals(22, newPerm.getFromPort());
+ assertEquals(40, newPerm.getToPort());
+ assertEquals(0, newPerm.getCidrBlocks().size());
+ assertEquals(1, newPerm.getTenantIdGroupNamePairs().size());
+ assertTrue(newPerm.getTenantIdGroupNamePairs().keySet().contains(origGroup.getOwnerId()));
+ assertTrue(newPerm.getTenantIdGroupNamePairs().values().contains(origGroup.getProviderId()));
+ }
+
+ private Multimap<String, String> emptyMultimap() {
+ return LinkedHashMultimap.create();
+ }
+
+ private Set<String> emptyStringSet() {
+ return Sets.newLinkedHashSet();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2SecurityGroupExtensionLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2SecurityGroupExtensionLiveTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2SecurityGroupExtensionLiveTest.java
new file mode 100644
index 0000000..c3d77eb
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/extensions/AWSEC2SecurityGroupExtensionLiveTest.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.extensions;
+
+
+import org.jclouds.compute.extensions.internal.BaseSecurityGroupExtensionLiveTest;
+import org.testng.annotations.Test;
+
+
+/**
+ * Live test for aws-ec2 {@link SecurityGroupExtension} implementation
+ *
+ * @author Andrew Bayer
+ *
+ */
+@Test(groups = "live", singleThreaded = true, testName = "AWSEC2SecurityGroupExtensionLiveTest")
+public class AWSEC2SecurityGroupExtensionLiveTest extends BaseSecurityGroupExtensionLiveTest {
+
+ public AWSEC2SecurityGroupExtensionLiveTest() {
+ provider = "aws-ec2";
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSEC2SecurityGroupToSecurityGroupTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSEC2SecurityGroupToSecurityGroupTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSEC2SecurityGroupToSecurityGroupTest.java
new file mode 100644
index 0000000..8c0bc44
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSEC2SecurityGroupToSecurityGroupTest.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.functions;
+
+import static org.testng.Assert.assertEquals;
+
+import java.util.Set;
+
+import org.jclouds.compute.domain.SecurityGroup;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.ec2.util.IpPermissions;
+import org.jclouds.net.domain.IpPermission;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * @author Andrew Bayer
+ */
+@Test(groups = "unit", testName = "AWSEC2SecurityGroupToSecurityGroupTest")
+public class AWSEC2SecurityGroupToSecurityGroupTest {
+
+ static Location provider = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1")
+ .description("us-east-1").build();
+
+ @Test
+ public void testApply() {
+ IpPermissions authorization = IpPermissions.permitAnyProtocol();
+
+ org.jclouds.ec2.domain.SecurityGroup origGroup = org.jclouds.ec2.domain.SecurityGroup.builder()
+ .region("us-east-1")
+ .id("some-id")
+ .name("some-group")
+ .ownerId("some-owner")
+ .description("some-description")
+ .ipPermission(authorization)
+ .build();
+
+ AWSEC2SecurityGroupToSecurityGroup parser = createGroupParser(ImmutableSet.of(provider));
+
+ SecurityGroup group = parser.apply(origGroup);
+
+ assertEquals(group.getLocation(), provider);
+ assertEquals(group.getId(), provider.getId() + "/" + origGroup.getId());
+ assertEquals(group.getProviderId(), origGroup.getId());
+ assertEquals(group.getName(), origGroup.getName());
+ assertEquals(group.getIpPermissions(), (Set<IpPermission>)origGroup);
+ assertEquals(group.getOwnerId(), origGroup.getOwnerId());
+ }
+
+ private AWSEC2SecurityGroupToSecurityGroup createGroupParser(final ImmutableSet<Location> locations) {
+ Supplier<Set<? extends Location>> locationSupplier = new Supplier<Set<? extends Location>>() {
+
+ @Override
+ public Set<? extends Location> get() {
+ return locations;
+ }
+
+ };
+
+ AWSEC2SecurityGroupToSecurityGroup parser = new AWSEC2SecurityGroupToSecurityGroup(locationSupplier);
+
+ return parser;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSRunningInstanceToNodeMetadataTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSRunningInstanceToNodeMetadataTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSRunningInstanceToNodeMetadataTest.java
new file mode 100644
index 0000000..f231882
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSRunningInstanceToNodeMetadataTest.java
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.functions;
+
+import static org.testng.Assert.assertEquals;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.jclouds.aws.ec2.AWSEC2ApiMetadata;
+import org.jclouds.aws.ec2.domain.AWSRunningInstance;
+import org.jclouds.aws.ec2.domain.MonitoringState;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.domain.NodeMetadata.Status;
+import org.jclouds.compute.functions.GroupNamingConvention;
+import org.jclouds.date.DateService;
+import org.jclouds.domain.Credentials;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.ec2.compute.config.EC2ComputeServiceDependenciesModule;
+import org.jclouds.ec2.compute.domain.RegionAndName;
+import org.jclouds.ec2.compute.functions.ImagesToRegionAndIdMap;
+import org.jclouds.ec2.domain.Attachment;
+import org.jclouds.ec2.domain.BlockDevice;
+import org.jclouds.ec2.domain.Hypervisor;
+import org.jclouds.ec2.domain.InstanceState;
+import org.jclouds.ec2.domain.RootDeviceType;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.name.Names;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "unit")
+public class AWSRunningInstanceToNodeMetadataTest {
+
+ private static final String defaultRegion = "us-east-1";
+ static Location provider = new LocationBuilder().scope(LocationScope.REGION).id(defaultRegion).description(
+ defaultRegion).build();
+
+ private DateService dateService;
+
+ @BeforeTest
+ protected void setUpInjector() {
+ dateService = Guice.createInjector().getInstance(DateService.class);
+ assert dateService != null;
+ }
+
+ @Test
+ public void test2Nodes() {
+
+ AWSRunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.<Hardware> of(), ImmutableSet
+ .<Location> of(), ImmutableSet.<Image> of(), ImmutableMap.<String, Credentials> of());
+
+ ImmutableSet<AWSRunningInstance> contents = ImmutableSet.of(new AWSRunningInstance.Builder()
+ .region(defaultRegion)
+ .instanceId("i-911444f0")
+ .imageId("ami-63be790a")
+ .instanceState(InstanceState.RUNNING)
+ .rawState("running")
+ .privateDnsName("ip-10-212-81-7.ec2.internal")
+ .dnsName("ec2-174-129-173-155.compute-1.amazonaws.com")
+ .keyName("jclouds#zkclustertest#23")
+ .amiLaunchIndex("0")
+ .instanceType("t1.micro")
+ .launchTime(dateService.iso8601DateParse("2011-08-16T13:40:50.000Z"))
+ .availabilityZone("us-east-1c")
+ .kernelId("aki-427d952b")
+ .monitoringState(MonitoringState.DISABLED)
+ .privateIpAddress("10.212.81.7")
+ .ipAddress("174.129.173.155")
+ .securityGroupIdToNames(ImmutableMap.<String, String> of("sg-ef052b86", "jclouds#zkclustertest"))
+ .rootDeviceType(RootDeviceType.EBS)
+ .rootDeviceName("/dev/sda1")
+ .device("/dev/sda1", new BlockDevice("vol-5829fc32", Attachment.Status.ATTACHED, dateService.iso8601DateParse("2011-08-16T13:41:19.000Z"), true))
+ .virtualizationType("paravirtual")
+ .tag("Name", "foo")
+ .tag("Empty", "")
+ .hypervisor(Hypervisor.XEN)
+ .build(),//
+ new AWSRunningInstance.Builder()
+ .region(defaultRegion)
+ .instanceId("i-931444f2")
+ .imageId("ami-63be790a")
+ .instanceState(InstanceState.RUNNING)
+ .rawState("running")
+ .privateDnsName("ip-10-212-185-8.ec2.internal")
+ .dnsName("ec2-50-19-207-248.compute-1.amazonaws.com")
+ .keyName("jclouds#zkclustertest#23")
+ .amiLaunchIndex("0")
+ .instanceType("t1.micro")
+ .launchTime(dateService.iso8601DateParse("2011-08-16T13:40:50.000Z"))
+ .availabilityZone("us-east-1c")
+ .kernelId("aki-427d952b")
+ .monitoringState(MonitoringState.DISABLED)
+ .privateIpAddress("10.212.185.8")
+ .ipAddress("50.19.207.248")
+ .securityGroupIdToNames(ImmutableMap.<String, String>of("sg-ef052b86", "jclouds#zkclustertest"))
+ .rootDeviceType(RootDeviceType.EBS)
+ .rootDeviceName("/dev/sda1")
+ .device("/dev/sda1", new BlockDevice("vol-5029fc3a", Attachment.Status.ATTACHED, dateService.iso8601DateParse("2011-08-16T13:41:19.000Z"), true))
+ .virtualizationType("paravirtual")
+ .hypervisor(Hypervisor.XEN)
+ .build());
+
+ assertEquals(
+ parser.apply(Iterables.get(contents, 0)).toString(),
+ new NodeMetadataBuilder()
+ .status(Status.RUNNING)
+ .backendStatus("running")
+ .group("zkclustertest")
+ .name("foo")
+ .hostname("ip-10-212-81-7")
+ .privateAddresses(ImmutableSet.of("10.212.81.7"))
+ .publicAddresses(ImmutableSet.of("174.129.173.155"))
+ .imageId("us-east-1/ami-63be790a")
+ .id("us-east-1/i-911444f0")
+ .providerId("i-911444f0")
+ .tags(ImmutableSet.of("Empty"))
+ .userMetadata(ImmutableMap.of("Name", "foo")).build().toString());
+ assertEquals(
+ parser.apply(Iterables.get(contents, 1)).toString(),
+ new NodeMetadataBuilder()
+ .status(Status.RUNNING)
+ .backendStatus("running")
+ .group("zkclustertest")
+ .hostname("ip-10-212-185-8")
+ .privateAddresses(ImmutableSet.of("10.212.185.8"))
+ .publicAddresses(ImmutableSet.of("50.19.207.248"))
+ .imageId("us-east-1/ami-63be790a")
+ .id("us-east-1/i-931444f2")
+ .providerId("i-931444f2")
+ .build().toString());
+ }
+
+ protected AWSRunningInstanceToNodeMetadata createNodeParser(final ImmutableSet<Hardware> hardware,
+ final ImmutableSet<Location> locations, Set<org.jclouds.compute.domain.Image> images,
+ Map<String, Credentials> credentialStore) {
+ Map<InstanceState, Status> instanceToNodeStatus = EC2ComputeServiceDependenciesModule.toPortableNodeStatus;
+
+ final Map<RegionAndName, ? extends Image> backing = ImagesToRegionAndIdMap.imagesToMap(images);
+
+ LoadingCache<RegionAndName, Image> instanceToImage = CacheBuilder.newBuilder().build(new CacheLoader<RegionAndName, Image>() {
+
+ @Override
+ public Image load(RegionAndName key) throws Exception {
+ return backing.get(key);
+ }
+
+ });
+
+
+ return createNodeParser(hardware, locations, credentialStore, instanceToNodeStatus, instanceToImage);
+ }
+
+ private AWSRunningInstanceToNodeMetadata createNodeParser(final ImmutableSet<Hardware> hardware,
+ final ImmutableSet<Location> locations, Map<String, Credentials> credentialStore,
+ Map<InstanceState, Status> instanceToNodeStatus, LoadingCache<RegionAndName, ? extends Image> instanceToImage) {
+ Supplier<Set<? extends Location>> locationSupplier = new Supplier<Set<? extends Location>>() {
+
+ @Override
+ public Set<? extends Location> get() {
+ return locations;
+ }
+
+ };
+ Supplier<Set<? extends Hardware>> hardwareSupplier = new Supplier<Set<? extends Hardware>>() {
+
+ @Override
+ public Set<? extends Hardware> get() {
+ return hardware;
+ }
+
+ };
+
+ GroupNamingConvention.Factory namingConvention = Guice.createInjector(new AbstractModule() {
+
+ @Override
+ protected void configure() {
+ Names.bindProperties(binder(),new AWSEC2ApiMetadata().getDefaultProperties());
+ }
+
+ }).getInstance(GroupNamingConvention.Factory.class);
+
+ AWSRunningInstanceToNodeMetadata parser = new AWSRunningInstanceToNodeMetadata(instanceToNodeStatus,
+ credentialStore, Suppliers.<LoadingCache<RegionAndName, ? extends Image>> ofInstance(instanceToImage),
+ locationSupplier, hardwareSupplier, namingConvention);
+ return parser;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/PresentSpotRequestsAndInstancesTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/PresentSpotRequestsAndInstancesTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/PresentSpotRequestsAndInstancesTest.java
new file mode 100644
index 0000000..babe978
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/functions/PresentSpotRequestsAndInstancesTest.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.functions;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.testng.Assert.assertEquals;
+
+import java.util.Set;
+
+import org.jclouds.aws.ec2.AWSEC2Api;
+import org.jclouds.aws.ec2.domain.AWSRunningInstance;
+import org.jclouds.aws.ec2.domain.SpotInstanceRequest;
+import org.jclouds.aws.ec2.features.AWSInstanceApi;
+import org.jclouds.aws.ec2.features.SpotInstanceApi;
+import org.jclouds.ec2.compute.domain.RegionAndName;
+import org.jclouds.ec2.domain.Reservation;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "unit")
+public class PresentSpotRequestsAndInstancesTest {
+ AWSRunningInstance instance1 = createMock(AWSRunningInstance.class);
+ AWSRunningInstance instance2 = createMock(AWSRunningInstance.class);
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testWhenInstancesPresentSingleCall() {
+
+ AWSEC2Api client = createMock(AWSEC2Api.class);
+ AWSInstanceApi instanceApi = createMock(AWSInstanceApi.class);
+ Function<SpotInstanceRequest, AWSRunningInstance> converter = createMock(Function.class);
+
+ expect(client.getInstanceApi()).andReturn((Optional) Optional.of(instanceApi));
+
+ // avoid imatcher fail. if you change this, be sure to check multiple jres
+ expect(instanceApi.describeInstancesInRegion("us-east-1", "i-aaaa", "i-bbbb")).andReturn(
+ Set.class.cast(ImmutableSet.of(Reservation.<AWSRunningInstance> builder().region("us-east-1")
+ .instances(ImmutableSet.of(instance1, instance2)).build())));
+
+ replay(client, instanceApi, converter);
+
+ PresentSpotRequestsAndInstances fn = new PresentSpotRequestsAndInstances(client, converter);
+
+ assertEquals(fn.apply(ImmutableSet.of(new RegionAndName("us-east-1", "i-aaaa"), new RegionAndName("us-east-1",
+ "i-bbbb"))), ImmutableSet.of(instance1, instance2));
+
+ verify(client, instanceApi, converter);
+ }
+
+ SpotInstanceRequest spot1 = createMock(SpotInstanceRequest.class);
+ SpotInstanceRequest spot2 = createMock(SpotInstanceRequest.class);
+
+ @Test
+ public void testWhenSpotsPresentSingleCall() {
+
+ Function<SpotInstanceRequest, AWSRunningInstance> converter = Functions.forMap(ImmutableMap.of(spot1, instance1,
+ spot2, instance2));
+
+ AWSEC2Api client = createMock(AWSEC2Api.class);
+ SpotInstanceApi spotApi = createMock(SpotInstanceApi.class);
+
+ expect(client.getSpotInstanceApi()).andReturn((Optional) Optional.of(spotApi));
+ expect(spotApi.describeSpotInstanceRequestsInRegion("us-east-1", "sir-aaaa", "sir-bbbb")).andReturn(
+ ImmutableSet.of(spot1, spot2));
+
+ replay(client, spotApi);
+
+ PresentSpotRequestsAndInstances fn = new PresentSpotRequestsAndInstances(client, converter);
+
+ assertEquals(fn.apply(ImmutableSet.of(new RegionAndName("us-east-1", "sir-aaaa"), new RegionAndName("us-east-1",
+ "sir-bbbb"))), ImmutableSet.of(instance1, instance2));
+
+ verify(client, spotApi);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/internal/BaseAWSEC2ComputeServiceExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/internal/BaseAWSEC2ComputeServiceExpectTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/internal/BaseAWSEC2ComputeServiceExpectTest.java
new file mode 100644
index 0000000..c5f9838
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/internal/BaseAWSEC2ComputeServiceExpectTest.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.internal;
+
+import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMI_QUERY;
+import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_GENERATE_INSTANCE_NAMES;
+
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.jclouds.aws.ec2.config.AWSEC2HttpApiModule;
+import org.jclouds.date.DateService;
+import org.jclouds.ec2.compute.internal.BaseEC2ComputeServiceExpectTest;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.rest.ConfiguresHttpApi;
+import org.testng.annotations.BeforeClass;
+
+import com.google.common.base.Supplier;
+import com.google.inject.Module;
+import com.google.inject.Provides;
+import com.google.inject.TypeLiteral;
+
+/**
+ * Tests the compute service abstraction of the EC2 api.
+ *
+ * @author Adrian Cole
+ */
+public abstract class BaseAWSEC2ComputeServiceExpectTest extends BaseEC2ComputeServiceExpectTest {
+
+ protected HttpRequest describeSecurityGroupByIdRequest;
+
+ public BaseAWSEC2ComputeServiceExpectTest() {
+ provider = "aws-ec2";
+ }
+
+ @Override
+ protected Properties setupProperties() {
+ Properties properties = super.setupProperties();
+ // zero out cluster image query for now
+ properties.setProperty(PROPERTY_EC2_CC_AMI_QUERY, "");
+ properties.setProperty(PROPERTY_EC2_GENERATE_INSTANCE_NAMES, "false");
+ return properties;
+ }
+
+ @BeforeClass
+ @Override
+ protected void setupDefaultRequests() {
+ super.setupDefaultRequests();
+
+ describeSecurityGroupByIdRequest =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "DescribeSecurityGroups")
+ .addFormParam("GroupId.1", "sg-3c6ef654").build());
+
+ authorizeSecurityGroupIngressRequestGroup =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "AuthorizeSecurityGroupIngress")
+ .addFormParam("SourceSecurityGroupId", "sg-3c6ef654")
+ .addFormParam("SourceSecurityGroupOwnerId", "993194456877")
+ .addFormParam("GroupName", "jclouds#test").build());
+
+ authorizeSecurityGroupIngressRequest22 =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "AuthorizeSecurityGroupIngress")
+ .addFormParam("GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.0.FromPort", "22")
+ .addFormParam("IpPermissions.0.ToPort", "22")
+ .addFormParam("IpPermissions.0.IpRanges.0.CidrIp", "0.0.0.0/0")
+ .addFormParam("IpPermissions.0.IpProtocol", "tcp")
+ .addFormParam("IpPermissions.1.FromPort", "0")
+ .addFormParam("IpPermissions.1.ToPort", "65535")
+ .addFormParam("IpPermissions.1.Groups.0.GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.1.Groups.0.UserId", "993194456877")
+ .addFormParam("IpPermissions.1.IpProtocol", "tcp")
+ .addFormParam("IpPermissions.2.FromPort", "0")
+ .addFormParam("IpPermissions.2.ToPort", "65535")
+ .addFormParam("IpPermissions.2.Groups.0.GroupId", "sg-3c6ef654")
+ .addFormParam("IpPermissions.2.Groups.0.UserId", "993194456877")
+ .addFormParam("IpPermissions.2.IpProtocol", "udp")
+ .build());
+
+ describeImagesRequest =
+ formSigner.filter(HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2." + region + ".amazonaws.com/")
+ .addHeader("Host", "ec2." + region + ".amazonaws.com")
+ .addFormParam("Action", "DescribeImages")
+ .addFormParam("Filter.1.Name", "owner-id")
+ .addFormParam("Filter.1.Value.1", "137112412989")
+ .addFormParam("Filter.1.Value.2", "801119661308")
+ .addFormParam("Filter.1.Value.3", "063491364108")
+ .addFormParam("Filter.1.Value.4", "099720109477")
+ .addFormParam("Filter.1.Value.5", "411009282317")
+ .addFormParam("Filter.2.Name", "state")
+ .addFormParam("Filter.2.Value.1", "available")
+ .addFormParam("Filter.3.Name", "image-type")
+ .addFormParam("Filter.3.Value.1", "machine").build());
+ }
+
+ @ConfiguresHttpApi
+ protected static class TestAWSEC2HttpApiModule extends AWSEC2HttpApiModule {
+
+ @Override
+ protected void configure() {
+ super.configure();
+ // predicatable node names
+ final AtomicInteger suffix = new AtomicInteger();
+ bind(new TypeLiteral<Supplier<String>>() {
+ }).toInstance(new Supplier<String>() {
+
+ @Override
+ public String get() {
+ return suffix.getAndIncrement() + "";
+ }
+
+ });
+ }
+
+ @Override
+ @Provides
+ protected String provideTimeStamp(DateService dateService) {
+ return CONSTANT_DATE;
+ }
+ }
+
+ @Override
+ protected Module createModule() {
+ return new TestAWSEC2HttpApiModule();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/60b2f3fa/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/loaders/AWSEC2CreateSecurityGroupIfNeededTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/loaders/AWSEC2CreateSecurityGroupIfNeededTest.java b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/loaders/AWSEC2CreateSecurityGroupIfNeededTest.java
new file mode 100644
index 0000000..60f86f5
--- /dev/null
+++ b/dependencies/jclouds/provider/aws-ec2/1.7.1-stratos/src/test/java/org/jclouds/aws/ec2/compute/loaders/AWSEC2CreateSecurityGroupIfNeededTest.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.ec2.compute.loaders;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.testng.Assert.assertEquals;
+
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+
+import org.jclouds.aws.ec2.features.AWSSecurityGroupApi;
+import org.jclouds.ec2.compute.domain.RegionAndName;
+import org.jclouds.ec2.compute.domain.RegionNameAndIngressRules;
+import org.jclouds.ec2.compute.functions.EC2SecurityGroupIdFromName;
+import org.jclouds.ec2.domain.SecurityGroup;
+import org.jclouds.net.domain.IpPermission;
+import org.jclouds.net.domain.IpProtocol;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * @author Adrian Cole
+ * @author Andrew Bayer
+ */
+@Test(groups = "unit", singleThreaded = true, testName = "AWSEC2CreateSecurityGroupIfNeeded")
+public class AWSEC2CreateSecurityGroupIfNeededTest {
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testWhenPort22AndToItselfAuthorizesIngressOnce() throws ExecutionException {
+
+ AWSSecurityGroupApi client = createMock(AWSSecurityGroupApi.class);
+ Predicate<RegionAndName> tester = Predicates.alwaysTrue();
+
+ SecurityGroup group = createNiceMock(SecurityGroup.class);
+ Set<SecurityGroup> groups = ImmutableSet.<SecurityGroup> of(group);
+
+ EC2SecurityGroupIdFromName groupIdFromName = createMock(EC2SecurityGroupIdFromName.class);
+
+ ImmutableSet.Builder<IpPermission> permissions = ImmutableSet.builder();
+
+ permissions.add(IpPermission.builder()
+ .fromPort(22)
+ .toPort(22)
+ .ipProtocol(IpProtocol.TCP)
+ .cidrBlock("0.0.0.0/0")
+ .build());
+
+ permissions.add(IpPermission.builder()
+ .fromPort(0)
+ .toPort(65535)
+ .ipProtocol(IpProtocol.TCP)
+ .tenantIdGroupNamePair("ownerId", "sg-123456")
+ .build());
+ permissions.add(IpPermission.builder()
+ .fromPort(0)
+ .toPort(65535)
+ .ipProtocol(IpProtocol.UDP)
+ .tenantIdGroupNamePair("ownerId", "sg-123456")
+ .build());
+
+ client.createSecurityGroupInRegion("region", "group", "group");
+ expect(group.getOwnerId()).andReturn("ownerId");
+ expect(groupIdFromName.apply("region/group")).andReturn("sg-123456");
+ client.authorizeSecurityGroupIngressInRegion("region", "sg-123456", permissions.build());
+ expect(client.describeSecurityGroupsInRegion("region", "group")).andReturn(Set.class.cast(groups));
+
+
+ replay(client);
+ replay(group);
+ replay(groupIdFromName);
+
+ AWSEC2CreateSecurityGroupIfNeeded function = new AWSEC2CreateSecurityGroupIfNeeded(client, groupIdFromName, tester);
+
+ assertEquals("group", function.load(new RegionNameAndIngressRules("region", "group", new int[] { 22 }, true)));
+
+ verify(client);
+ verify(group);
+ verify(groupIdFromName);
+
+ }
+}