You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/04/02 11:14:22 UTC

[10/25] forking jclouds ec2 api

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/extensions/EC2SecurityGroupExtensionExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/extensions/EC2SecurityGroupExtensionExpectTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/extensions/EC2SecurityGroupExtensionExpectTest.java
new file mode 100644
index 0000000..496026c
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/extensions/EC2SecurityGroupExtensionExpectTest.java
@@ -0,0 +1,583 @@
+/*
+ * 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.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.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.ec2.compute.domain.RegionAndName;
+import org.jclouds.ec2.compute.internal.BaseEC2ComputeServiceExpectTest;
+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 Adrian Cole
+ */
+@Test(groups = "unit", testName = "EC2SecurityGroupExtensionExpectTest")
+public class EC2SecurityGroupExtensionExpectTest extends BaseEC2ComputeServiceExpectTest {
+   
+   public void testListSecurityGroups() {
+      HttpRequest describeSecurityGroupsAllRequest = 
+         formSigner.filter(HttpRequest.builder()
+                           .method("POST")
+                           .endpoint("https://ec2." + region + ".amazonaws.com/")
+                           .addHeader("Host", "ec2." + region + ".amazonaws.com")
+                           .addFormParam("Action", "DescribeSecurityGroups").build());
+      
+      HttpResponse describeSecurityGroupsAllResponse = 
+         HttpResponse.builder().statusCode(200)
+         .payload(payloadFromResourceWithContentType(
+                                                     "/describe_securitygroups_extension_new.xml", MediaType.APPLICATION_XML)).build();
+      
+      Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder();
+      requestResponseMap.put(describeRegionsRequest, describeRegionsResponse);
+      requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse);
+      requestResponseMap.put(describeSecurityGroupsAllRequest, describeSecurityGroupsAllResponse);
+      requestResponseMap.put(createKeyPairRequest, createKeyPairResponse);
+      requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse);
+
+      requestResponseMap.put(authorizeSecurityGroupIngressRequest22, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(authorizeSecurityGroupIngressRequestGroup, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(describeInstanceRequest, describeInstanceResponse);
+      
+
+      SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+      
+      Set<SecurityGroup> groups = extension.listSecurityGroups();
+      assertEquals(2, groups.size());
+   }
+
+   public void testListSecurityGroupsInLocation() {
+      HttpRequest describeSecurityGroupsAllRequest = 
+         formSigner.filter(HttpRequest.builder()
+                           .method("POST")
+                           .endpoint("https://ec2." + region + ".amazonaws.com/")
+                           .addHeader("Host", "ec2." + region + ".amazonaws.com")
+                           .addFormParam("Action", "DescribeSecurityGroups").build());
+      
+      HttpResponse describeSecurityGroupsAllResponse = 
+         HttpResponse.builder().statusCode(200)
+         .payload(payloadFromResourceWithContentType(
+                                                     "/describe_securitygroups_extension_new.xml", MediaType.APPLICATION_XML)).build();
+      
+      Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder();
+      requestResponseMap.put(describeRegionsRequest, describeRegionsResponse);
+      requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse);
+      requestResponseMap.put(describeSecurityGroupsAllRequest, describeSecurityGroupsAllResponse);
+      requestResponseMap.put(createKeyPairRequest, createKeyPairResponse);
+      requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse);
+
+      requestResponseMap.put(authorizeSecurityGroupIngressRequest22, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(authorizeSecurityGroupIngressRequestGroup, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(describeInstanceRequest, describeInstanceResponse);
+      
+
+      SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+      
+      Set<SecurityGroup> groups = extension.listSecurityGroupsInLocation(new LocationBuilder()
+                                                                         .scope(LocationScope.REGION)
+                                                                         .id(region)
+                                                                         .description("region")
+                                                                         .build());
+      assertEquals(2, groups.size());
+   }
+
+   
+   public void testListSecurityGroupsForNode() {
+      HttpRequest describeSecurityGroupsSingleRequest = 
+         formSigner.filter(HttpRequest.builder()
+                           .method("POST")
+                           .endpoint("https://ec2." + region + ".amazonaws.com/")
+                           .addHeader("Host", "ec2." + region + ".amazonaws.com")
+                           .addFormParam("Action", "DescribeSecurityGroups")
+                           .addFormParam("GroupName.1", "sg-3c6ef654").build());
+      
+      HttpResponse describeSecurityGroupsSingleResponse = 
+         HttpResponse.builder().statusCode(200)
+         .payload(payloadFromResourceWithContentType(
+                                                     "/describe_securitygroups_extension_single.xml", MediaType.APPLICATION_XML)).build();
+      
+      HttpResponse describeInstanceWithSGResponse = 
+            HttpResponse.builder().statusCode(200)
+                           .payload(payloadFromResourceWithContentType(
+                                 "/describe_instances_running_securitygroups.xml", MediaType.APPLICATION_XML)).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(authorizeSecurityGroupIngressRequest22, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(authorizeSecurityGroupIngressRequestGroup, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(describeInstanceRequest, describeInstanceWithSGResponse);
+      
+
+      SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+      
+      Set<SecurityGroup> groups = extension.listSecurityGroupsForNode(new RegionAndName(region, "i-2baa5550").slashEncode());
+      assertEquals(1, groups.size());
+   }
+
+   public void testGetSecurityGroupById() {
+      HttpRequest describeSecurityGroupsSingleRequest = 
+         formSigner.filter(HttpRequest.builder()
+                           .method("POST")
+                           .endpoint("https://ec2." + region + ".amazonaws.com/")
+                           .addHeader("Host", "ec2." + region + ".amazonaws.com")
+                           .addFormParam("Action", "DescribeSecurityGroups")
+                           .addFormParam("GroupName.1", "jclouds#some-group").build());
+      
+      HttpResponse describeSecurityGroupsSingleResponse = 
+         HttpResponse.builder().statusCode(200)
+         .payload(payloadFromResourceWithContentType(
+                                                     "/describe_securitygroups_extension_single.xml", MediaType.APPLICATION_XML)).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(authorizeSecurityGroupIngressRequest22, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(authorizeSecurityGroupIngressRequestGroup, authorizeSecurityGroupIngressResponse);
+      
+
+      SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+      
+      SecurityGroup group = extension.getSecurityGroupById(new RegionAndName(region, "jclouds#some-group").slashEncode());
+      assertEquals("sg-3c6ef654", group.getProviderId());
+      assertEquals(region + "/jclouds#some-group", group.getId());
+   }
+
+   public void testCreateSecurityGroup() {
+      HttpRequest createSecurityGroupExtRequest = 
+               formSigner.filter(HttpRequest.builder()
+                          .method("POST")
+                          .endpoint("https://ec2." + region + ".amazonaws.com/")
+                          .addHeader("Host", "ec2." + region + ".amazonaws.com")
+                          .addFormParam("Action", "CreateSecurityGroup")
+                          .addFormParam("GroupDescription", "jclouds#some-group")
+                          .addFormParam("GroupName", "jclouds#some-group").build());
+
+      HttpRequest describeSecurityGroupsSingleRequest = 
+         formSigner.filter(HttpRequest.builder()
+                           .method("POST")
+                           .endpoint("https://ec2." + region + ".amazonaws.com/")
+                           .addHeader("Host", "ec2." + region + ".amazonaws.com")
+                           .addFormParam("Action", "DescribeSecurityGroups")
+                           .addFormParam("GroupName.1", "jclouds#some-group").build());
+
+      HttpResponse describeSecurityGroupsSingleResponse = 
+         HttpResponse.builder().statusCode(200)
+         .payload(payloadFromResourceWithContentType(
+                                                     "/describe_securitygroups_extension_single.xml", MediaType.APPLICATION_XML)).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(createSecurityGroupExtRequest, createSecurityGroupResponse);
+
+      requestResponseMap.put(authorizeSecurityGroupIngressRequest22, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(authorizeSecurityGroupIngressRequestGroup, authorizeSecurityGroupIngressResponse);
+      
+
+      SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+      
+      SecurityGroup group = extension.createSecurityGroup("some-group", new LocationBuilder()
+                                                          .scope(LocationScope.REGION)
+                                                          .id(region)
+                                                          .description("region")
+                                                          .build());
+      
+      assertEquals("sg-3c6ef654", group.getProviderId());
+      assertEquals(region + "/jclouds#some-group", group.getId());
+   }
+
+   public void testRemoveSecurityGroup() {
+      HttpRequest describeSecurityGroupsSingleRequest = 
+         formSigner.filter(HttpRequest.builder()
+                           .method("POST")
+                           .endpoint("https://ec2." + region + ".amazonaws.com/")
+                           .addHeader("Host", "ec2." + region + ".amazonaws.com")
+                           .addFormParam("Action", "DescribeSecurityGroups")
+                           .addFormParam("GroupName.1", "jclouds#some-group").build());
+      
+      HttpResponse describeSecurityGroupsSingleResponse = 
+         HttpResponse.builder().statusCode(200)
+         .payload(payloadFromResourceWithContentType(
+                                                     "/describe_securitygroups_extension_single.xml", MediaType.APPLICATION_XML)).build();
+      
+      HttpRequest deleteSecurityGroupRequest = 
+         formSigner.filter(HttpRequest.builder()
+                           .method("POST")
+                           .endpoint("https://ec2." + region + ".amazonaws.com/")
+                           .addHeader("Host", "ec2." + region + ".amazonaws.com")
+                           .addFormParam("Action", "DeleteSecurityGroup")
+                           .addFormParam("GroupName", "jclouds#some-group").build());
+      
+      HttpResponse deleteSecurityGroupResponse = 
+         HttpResponse.builder().statusCode(200)
+         .payload(payloadFromResourceWithContentType(
+                                                     "/delete_securitygroup.xml", MediaType.APPLICATION_XML)).build();
+
+      Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder();
+      requestResponseMap.put(describeRegionsRequest, describeRegionsResponse);
+      requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse);
+      requestResponseMap.put(describeSecurityGroupsSingleRequest, describeSecurityGroupsSingleResponse);
+      requestResponseMap.put(deleteSecurityGroupRequest, deleteSecurityGroupResponse);
+      requestResponseMap.put(createKeyPairRequest, createKeyPairResponse);
+      requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse);
+
+      requestResponseMap.put(authorizeSecurityGroupIngressRequest22, authorizeSecurityGroupIngressResponse);
+      requestResponseMap.put(authorizeSecurityGroupIngressRequestGroup, authorizeSecurityGroupIngressResponse);
+      
+
+      SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+      
+      assertTrue(extension.removeSecurityGroup(new RegionAndName(region, "jclouds#some-group").slashEncode()));
+   }
+
+   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("GroupName.1", "jclouds#some-group").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("CidrIp", "0.0.0.0/0")
+                          .addFormParam("FromPort", "22")
+                          .addFormParam("ToPort", "40")
+                          .addFormParam("GroupName", "jclouds#some-group")
+                          .addFormParam("IpProtocol", "tcp").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("jclouds#some-group");
+      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("GroupName.1", "jclouds#some-group").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("CidrIp", "0.0.0.0/0")
+                          .addFormParam("FromPort", "22")
+                          .addFormParam("ToPort", "40")
+                          .addFormParam("GroupName", "jclouds#some-group")
+                          .addFormParam("IpProtocol", "tcp").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("jclouds#some-group");
+      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("GroupName.1", "jclouds#some-group").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("SourceSecurityGroupName", "jclouds#some-group")
+                          .addFormParam("SourceSecurityGroupOwnerId", "993194456877")
+                          .addFormParam("GroupName", "jclouds#some-group").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", "jclouds#some-group");
+
+      IpPermission perm = builder.build();
+
+      SecurityGroupExtension extension = requestsSendResponses(requestResponseMap.build()).getSecurityGroupExtension().get();
+
+      SecurityGroupBuilder groupBuilder = new SecurityGroupBuilder();
+      groupBuilder.id("jclouds#some-group");
+      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.getName()));
+   }
+
+   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("GroupName.1", "jclouds#some-group").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("SourceSecurityGroupName", "jclouds#some-group")
+                          .addFormParam("SourceSecurityGroupOwnerId", "993194456877")
+                          .addFormParam("GroupName", "jclouds#some-group").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("jclouds#some-group");
+      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.getName());
+      
+      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.getName()));
+   }
+
+   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/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/extensions/EC2SecurityGroupExtensionLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/extensions/EC2SecurityGroupExtensionLiveTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/extensions/EC2SecurityGroupExtensionLiveTest.java
new file mode 100644
index 0000000..4054e06
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/extensions/EC2SecurityGroupExtensionLiveTest.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.ec2.compute.extensions;
+
+import org.jclouds.compute.extensions.internal.BaseSecurityGroupExtensionLiveTest;
+import org.testng.annotations.Test;
+
+
+/**
+ * Live test for ec2 {@link SecurityGroupExtension} implementation
+ * 
+ * @author Andrew Bayer
+ * 
+ */
+@Test(groups = "live", singleThreaded = true, testName = "EC2SecurityGroupExtensionLiveTest")
+public class EC2SecurityGroupExtensionLiveTest extends BaseSecurityGroupExtensionLiveTest {
+
+   public EC2SecurityGroupExtensionLiveTest() {
+      provider = "ec2";
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadataTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadataTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadataTest.java
new file mode 100644
index 0000000..7926362
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadataTest.java
@@ -0,0 +1,90 @@
+/*
+ * 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.ec2.compute.functions;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.domain.NodeMetadata.Status;
+import org.jclouds.ec2.compute.domain.RegionAndName;
+import org.testng.annotations.Test;
+
+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;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", singleThreaded = true, testName = "AddElasticIpsToNodemetadataTest")
+public class AddElasticIpsToNodemetadataTest {
+
+   NodeMetadata node = new NodeMetadataBuilder().status(Status.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();
+
+   @Test
+   public void testReturnsNodeWithElasticIpWhenFoundInCacheAndNodeHadAPublicIp() throws Exception {
+      RegionAndName key = new RegionAndName("us-east-1", node.getProviderId());
+      String val = "1.1.1.1";
+      LoadingCache<RegionAndName, String> cache = cacheOf(key, val);
+
+      AddElasticIpsToNodemetadata fn = new AddElasticIpsToNodemetadata(cache);
+
+      assertEquals(fn.apply(node).getPublicAddresses(), ImmutableSet.of("1.1.1.1"));
+   }
+
+   @Test
+   public void testReturnsNodeWithIpWhenFoundInCacheAndNodeHadNoPublicIp() throws Exception {
+      RegionAndName key = new RegionAndName("us-east-1", node.getProviderId());
+      String val = "1.1.1.1";
+      LoadingCache<RegionAndName, String> cache = cacheOf(key, val);
+
+      AddElasticIpsToNodemetadata fn = new AddElasticIpsToNodemetadata(cache);
+
+      assertEquals(fn.apply(
+               NodeMetadataBuilder.fromNodeMetadata(node).publicAddresses(ImmutableSet.<String> of()).build())
+               .getPublicAddresses(), ImmutableSet.of("1.1.1.1"));
+   }
+
+   @Test
+   public void testReturnsSameNodeWhenNotFoundInCache() throws Exception {
+      RegionAndName key = new RegionAndName("us-east-1", node.getProviderId());
+      String val = null;
+      LoadingCache<RegionAndName, String> cache = cacheOf(key, val);
+
+      AddElasticIpsToNodemetadata fn = new AddElasticIpsToNodemetadata(cache);
+
+      assertEquals(fn.apply(node).getPublicAddresses(), ImmutableSet.of("174.129.173.155"));
+   }
+
+   private LoadingCache<RegionAndName, String> cacheOf(final RegionAndName key, final String val) {
+      return CacheBuilder.newBuilder().build(new CacheLoader<RegionAndName, String>() {
+
+         @Override
+         public String load(RegionAndName in) throws Exception {
+            return key.equals(in) ? val : null;
+         }
+
+      });
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/CreateUniqueKeyPairTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/CreateUniqueKeyPairTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/CreateUniqueKeyPairTest.java
new file mode 100644
index 0000000..ddee5e1
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/CreateUniqueKeyPairTest.java
@@ -0,0 +1,116 @@
+/*
+ * 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.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.net.UnknownHostException;
+
+import org.jclouds.ec2.EC2ApiMetadata;
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.KeyPair;
+import org.jclouds.ec2.features.KeyPairApi;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "CreateUniqueKeyPairTest")
+public class CreateUniqueKeyPairTest {
+   
+   @Test
+   public void testApply() throws UnknownHostException {
+      final EC2Api client = createMock(EC2Api.class);
+      KeyPairApi keyClient = createMock(KeyPairApi.class);
+      KeyPair pair = createMock(KeyPair.class);
+
+      expect(client.getKeyPairApi()).andReturn((Optional) Optional.of(keyClient)).atLeastOnce();
+
+      expect(keyClient.createKeyPairInRegion("region", "jclouds#group#1")).andReturn(pair);
+
+      replay(client);
+      replay(keyClient);
+
+      CreateUniqueKeyPair parser = Guice.createInjector(new AbstractModule() {
+
+         @Override
+         protected void configure() {
+            Names.bindProperties(binder(),new EC2ApiMetadata().getDefaultProperties());
+            bind(new TypeLiteral<Supplier<String>>() {
+            }).toInstance(Suppliers.ofInstance("1"));
+            bind(EC2Api.class).toInstance(client);
+         }
+
+      }).getInstance(CreateUniqueKeyPair.class);
+
+      assertEquals(parser.createNewKeyPairInRegion("region", "group"), pair);
+
+      verify(client);
+      verify(keyClient);
+   }
+
+   @SuppressWarnings( { "unchecked" })
+   @Test
+   public void testApplyWithIllegalStateException() throws UnknownHostException {
+      final EC2Api client = createMock(EC2Api.class);
+      KeyPairApi keyClient = createMock(KeyPairApi.class);
+      final Supplier<String> uniqueIdSupplier = createMock(Supplier.class);
+
+      KeyPair pair = createMock(KeyPair.class);
+
+      expect(client.getKeyPairApi()).andReturn((Optional) Optional.of(keyClient)).atLeastOnce();
+
+      expect(uniqueIdSupplier.get()).andReturn("1");
+      expect(keyClient.createKeyPairInRegion("region", "jclouds#group#1")).andThrow(new IllegalStateException());
+      expect(uniqueIdSupplier.get()).andReturn("2");
+      expect(keyClient.createKeyPairInRegion("region", "jclouds#group#2")).andReturn(pair);
+
+      replay(client);
+      replay(keyClient);
+      replay(uniqueIdSupplier);
+
+      CreateUniqueKeyPair parser = Guice.createInjector(new AbstractModule() {
+
+         @Override
+         protected void configure() {
+            Names.bindProperties(binder(),new EC2ApiMetadata().getDefaultProperties());
+            bind(new TypeLiteral<Supplier<String>>() {
+            }).toInstance(uniqueIdSupplier);
+            bind(EC2Api.class).toInstance(client);
+         }
+
+      }).getInstance(CreateUniqueKeyPair.class);
+
+      assertEquals(parser.createNewKeyPairInRegion("region", "group"), pair);
+
+      verify(client);
+      verify(keyClient);
+      verify(uniqueIdSupplier);
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/EC2ImageParserTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/EC2ImageParserTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/EC2ImageParserTest.java
new file mode 100644
index 0000000..808051c
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/EC2ImageParserTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.ec2.compute.functions;
+
+import static org.testng.Assert.assertEquals;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.jclouds.compute.config.BaseComputeServiceContextModule;
+import org.jclouds.compute.domain.Image.Status;
+import org.jclouds.compute.domain.ImageBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.reference.ComputeServiceConstants;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.ec2.compute.config.EC2ComputeServiceDependenciesModule;
+import org.jclouds.ec2.compute.strategy.EC2PopulateDefaultLoginCredentialsForImageStrategy;
+import org.jclouds.ec2.compute.strategy.ReviseParsedImage;
+import org.jclouds.ec2.domain.Image;
+import org.jclouds.ec2.xml.DescribeImagesResponseHandlerTest;
+import org.jclouds.json.Json;
+import org.jclouds.json.config.GsonModule;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicates;
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+import com.google.inject.Guice;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "EC2ImageParserTest")
+public class EC2ImageParserTest {
+
+   public void testParseAmznImage() {
+
+      Set<org.jclouds.compute.domain.Image> result = convertImages("/amzn_images.xml");
+      for (org.jclouds.compute.domain.Image image : result) {
+         assertEquals(image.getStatus(), Status.AVAILABLE);
+         assertEquals(image.getBackendStatus(), "available");
+      }
+      
+      assertImageEquals(Iterables.get(result, 0), new ImageBuilder().operatingSystem(
+               new OperatingSystem.Builder().family(OsFamily.UNRECOGNIZED).arch("paravirtual").version("").description(
+                        "137112412989/amzn-ami-0.9.7-beta.i386-ebs").is64Bit(false).build()).description("Amazon")
+               .defaultCredentials(LoginCredentials.builder().user("ec2-user").build()).id("us-east-1/ami-82e4b5c7").name(
+                        "amzn-ami-0.9.7-beta.i386-ebs").providerId("ami-82e4b5c7").location(defaultLocation)
+               .userMetadata(ImmutableMap.of("owner", "137112412989", "rootDeviceType", "ebs")).status(
+                        Status.AVAILABLE).backendStatus("available").build());
+
+      assertImageEquals(Iterables.get(result, 3), new ImageBuilder().operatingSystem(
+               new OperatingSystem.Builder().family(OsFamily.UNRECOGNIZED).arch("paravirtual").version("").description(
+                        "amzn-ami-us-west-1/amzn-ami-0.9.7-beta.x86_64.manifest.xml").is64Bit(true).build())
+               .description("Amazon Linux AMI x86_64 S3").defaultCredentials(LoginCredentials.builder().user("ec2-user").build())
+               .id("us-east-1/ami-f2e4b5b7").providerId("ami-f2e4b5b7").name("amzn-ami-0.9.7-beta.x86_64-S3").location(
+                        defaultLocation)
+               .userMetadata(ImmutableMap.of("owner", "137112412989", "rootDeviceType", "ebs")).status(
+                        Status.AVAILABLE).backendStatus("available").build());
+      
+      assertImageEquals(Iterables.get(result, 4), new ImageBuilder().operatingSystem(
+               new OperatingSystem.Builder().family(OsFamily.WINDOWS).arch("hvm").version("2008").description(
+                        "amazon/NameGivesNoClue_Server-2008-R2_SP1-Language_Packs-64Bit-Base-2012.05.10")
+                        .is64Bit(true).build())
+               .description("Microsoft Windows Server 2008 R2 SP1 Datacenter 64-bit Multi-language AMI provided by Amazon")
+               .defaultCredentials(LoginCredentials.builder().user("root").build())
+               .id("us-east-1/ami-85457ff1").providerId("ami-85457ff1").name("NameGivesNoClue_Server-2008-R2_SP1-Language_Packs-64Bit-Base-2012.05.10")
+                        .location(defaultLocation)
+               .userMetadata(ImmutableMap.of("owner", "801119661308", "rootDeviceType", "ebs"))
+               .status(Status.AVAILABLE).backendStatus("available").build());
+      
+   }
+
+   private void assertImageEquals(org.jclouds.compute.domain.Image actual, org.jclouds.compute.domain.Image expected) {
+      // Note that ImageImpl.equals does not compare operating system etc; there's an explicit comment:
+      // equals from super is sufficient to establish identity equivalence
+      assertEquals(actual, expected);
+      assertEquals(actual.getOperatingSystem(), expected.getOperatingSystem());
+      assertEquals(actual.getStatus(), expected.getStatus());
+      assertEquals(actual.getBackendStatus(), expected.getBackendStatus());
+      assertEquals(actual.getVersion(), expected.getVersion());
+      assertEquals(actual.getDescription(), expected.getDescription());
+      assertEquals(actual.getDefaultCredentials(), expected.getDefaultCredentials());
+   }
+   
+   static Location defaultLocation = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1").description(
+            "us-east-1").build();
+
+   public static Set<org.jclouds.compute.domain.Image> convertImages(String resource) {
+
+      Map<OsFamily, Map<String, String>> map = new BaseComputeServiceContextModule() {
+      }.provideOsVersionMap(new ComputeServiceConstants.ReferenceData(), Guice.createInjector(new GsonModule())
+               .getInstance(Json.class));
+
+      Set<Image> result = DescribeImagesResponseHandlerTest.parseImages(resource);
+      EC2ImageParser parser = new EC2ImageParser(EC2ComputeServiceDependenciesModule.toPortableImageStatus,
+               new EC2PopulateDefaultLoginCredentialsForImageStrategy(), map, Suppliers
+                        .<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
+                        .ofInstance(defaultLocation), new ReviseParsedImage.NoopReviseParsedImage());
+      return Sets.newLinkedHashSet(Iterables.filter(Iterables.transform(result, parser), Predicates.notNull()));
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/EC2SecurityGroupToSecurityGroupTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/EC2SecurityGroupToSecurityGroupTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/EC2SecurityGroupToSecurityGroupTest.java
new file mode 100644
index 0000000..61eff5b
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/EC2SecurityGroupToSecurityGroupTest.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.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 = "EC2SecurityGroupToSecurityGroupTest")
+public class EC2SecurityGroupToSecurityGroupTest {
+
+   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();
+
+      EC2SecurityGroupToSecurityGroup parser = createGroupParser(ImmutableSet.of(provider));
+
+      SecurityGroup group = parser.apply(origGroup);
+      
+      assertEquals(group.getLocation(), provider);
+      assertEquals(group.getId(), provider.getId() + "/" + origGroup.getName());
+      assertEquals(group.getProviderId(), origGroup.getId());
+      assertEquals(group.getName(), origGroup.getName());
+      assertEquals(group.getIpPermissions(), (Set<IpPermission>)origGroup);
+      assertEquals(group.getOwnerId(), origGroup.getOwnerId());
+   }
+
+   private EC2SecurityGroupToSecurityGroup createGroupParser(final ImmutableSet<Location> locations) {
+      Supplier<Set<? extends Location>> locationSupplier = new Supplier<Set<? extends Location>>() {
+
+         @Override
+         public Set<? extends Location> get() {
+            return locations;
+         }
+
+      };
+
+      EC2SecurityGroupToSecurityGroup parser = new EC2SecurityGroupToSecurityGroup(locationSupplier);
+
+      return parser;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/PresentInstancesTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/PresentInstancesTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/PresentInstancesTest.java
new file mode 100644
index 0000000..d27b4e9
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/PresentInstancesTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.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.ec2.EC2Api;
+import org.jclouds.ec2.compute.domain.RegionAndName;
+import org.jclouds.ec2.domain.Reservation;
+import org.jclouds.ec2.domain.RunningInstance;
+import org.jclouds.ec2.features.InstanceApi;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "unit")
+public class PresentInstancesTest {
+   RunningInstance instance1 = createMock(RunningInstance.class);
+   RunningInstance instance2 = createMock(RunningInstance.class);
+
+   @SuppressWarnings("unchecked")
+   @Test
+   public void testWhenInstancesPresentSingleCall() {
+
+      EC2Api client = createMock(EC2Api.class);
+      InstanceApi instanceClient = createMock(InstanceApi.class);
+
+      expect(client.getInstanceApi()).andReturn((Optional) Optional.of(instanceClient));
+
+      // avoid imatcher fail.  if you change this, be sure to check multiple jres
+      expect(instanceClient.describeInstancesInRegion("us-east-1", "i-aaaa", "i-bbbb")).andReturn(
+            Set.class.cast(ImmutableSet.of(Reservation.builder().region("us-east-1")
+                  .instances(ImmutableSet.of(instance1, instance2)).build())));
+
+      replay(client, instanceClient);
+
+      PresentInstances fn = new PresentInstances(client);
+
+      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, instanceClient);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/RunningInstanceToNodeMetadataTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/RunningInstanceToNodeMetadataTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/RunningInstanceToNodeMetadataTest.java
new file mode 100644
index 0000000..b6c04c6
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/RunningInstanceToNodeMetadataTest.java
@@ -0,0 +1,298 @@
+/*
+ * 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.ec2.compute.functions;
+
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m1_small;
+import static org.testng.Assert.assertEquals;
+
+import java.net.UnknownHostException;
+import java.util.Map;
+import java.util.Set;
+
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.domain.NodeMetadata.Status;
+import org.jclouds.compute.functions.GroupNamingConvention;
+import org.jclouds.domain.Credentials;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.ec2.EC2ApiMetadata;
+import org.jclouds.ec2.compute.config.EC2ComputeServiceDependenciesModule;
+import org.jclouds.ec2.compute.domain.RegionAndName;
+import org.jclouds.ec2.domain.InstanceState;
+import org.jclouds.ec2.domain.RunningInstance;
+import org.jclouds.ec2.xml.DescribeInstancesResponseHandlerTest;
+import org.jclouds.javax.annotation.Nullable;
+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", testName = "RunningInstanceToNodeMetadataTest")
+public class RunningInstanceToNodeMetadataTest {
+
+   public void testAllStatesCovered() {
+
+      for (InstanceState status : InstanceState.values()) {
+         assert EC2ComputeServiceDependenciesModule.toPortableNodeStatus.containsKey(status) : status;
+      }
+
+   }
+
+   @Test
+   public void testPrivateIpAddressIncorrectlyInPublicAddressFieldGoesToPrivateAddressCollection() {
+      RunningInstance instance = RunningInstance.builder().instanceId("id").imageId("image").instanceType("m1.small")
+               .instanceState(InstanceState.RUNNING).rawState("running").region("us-east-1").ipAddress("10.1.1.1").build();
+
+      RunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.<Hardware> of(), ImmutableSet
+               .<Location> of(), ImmutableSet.<Image> of(), ImmutableMap.<String, Credentials> of());
+
+      assertEquals(parser.apply(instance).toString(), new NodeMetadataBuilder().status(Status.RUNNING).backendStatus("running").publicAddresses(
+               ImmutableSet.<String> of()).privateAddresses(ImmutableSet.of("10.1.1.1")).id("us-east-1/id").imageId(
+               "us-east-1/image").providerId("id").build().toString());
+   }
+
+   @Test
+   public void testPublicIpAddressIncorrectlyInPrivateAddressFieldGoesToPublicAddressCollection() {
+      RunningInstance instance = RunningInstance.builder().instanceId("id").imageId("image").instanceType("m1.small")
+               .instanceState(InstanceState.RUNNING).rawState("running").region("us-east-1").privateIpAddress("1.1.1.1").build();
+
+      RunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.<Hardware> of(), ImmutableSet
+               .<Location> of(), ImmutableSet.<Image> of(), ImmutableMap.<String, Credentials> of());
+
+      assertEquals(parser.apply(instance).toString(), new NodeMetadataBuilder().status(Status.RUNNING).backendStatus("running").privateAddresses(
+               ImmutableSet.<String> of()).publicAddresses(ImmutableSet.of("1.1.1.1")).id("us-east-1/id").imageId(
+               "us-east-1/image").providerId("id").build().toString());
+   }
+
+   static Location provider = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1")
+            .description("us-east-1").build();
+
+   @Test
+   public void testApplyWhereTagDoesntMatchAndImageHardwareAndLocationNotFoundButCredentialsFound()
+            throws UnknownHostException {
+      LoginCredentials creds = LoginCredentials.builder().user("root").password("abdce").build();
+
+      RunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.<Hardware> of(), ImmutableSet
+               .<Location> of(), ImmutableSet.<Image> of(), ImmutableMap.<String, Credentials> of(
+               "node#us-east-1/i-0799056f", creds));
+
+      RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
+
+      assertEquals(
+            parser.apply(server).toString(),
+            new NodeMetadataBuilder().status(Status.RUNNING).backendStatus("running").hostname("ip-10-243-42-70")
+                  .publicAddresses(ImmutableSet.<String> of()).privateAddresses(ImmutableSet.of("10.243.42.70"))
+                  .publicAddresses(ImmutableSet.of("174.129.81.68")).credentials(creds)
+                  .imageId("us-east-1/ami-82e4b5c7").id("us-east-1/i-0799056f").providerId("i-0799056f").build().toString());
+   }
+
+   @Test
+   public void testApplyWhereTagDoesntMatchAndImageHardwareAndLocationNotFound() throws UnknownHostException {
+      RunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.<Hardware> of(), ImmutableSet
+               .<Location> of(), ImmutableSet.<Image> of(), ImmutableMap.<String, Credentials> of());
+
+      RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
+
+      assertEquals(parser.apply(server).toString(),
+            new NodeMetadataBuilder().hostname("ip-10-243-42-70").status(Status.RUNNING).backendStatus("running")
+                  .publicAddresses(ImmutableSet.<String> of()).privateAddresses(ImmutableSet.of("10.243.42.70"))
+                  .publicAddresses(ImmutableSet.of("174.129.81.68")).imageId("us-east-1/ami-82e4b5c7")
+                  .id("us-east-1/i-0799056f").providerId("i-0799056f").build().toString());
+   }
+
+   @Test
+   public void testApplyWhereTagDoesntMatchAndLocationFoundAndImageAndHardwareNotFound() throws UnknownHostException {
+      RunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.<Hardware> of(), ImmutableSet.of(provider),
+               ImmutableSet.<Image> of(), ImmutableMap.<String, Credentials> of());
+
+      RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
+      NodeMetadata expected = new NodeMetadataBuilder().hostname("ip-10-243-42-70").status(Status.RUNNING).backendStatus("running")
+               .privateAddresses(ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68"))
+               .imageId("us-east-1/ami-82e4b5c7").id("us-east-1/i-0799056f").providerId("i-0799056f")
+               .location(provider).build();
+
+      assertEquals(parser.apply(server).toString(), expected.toString());
+   }
+
+   @Test
+   public void testApplyWhereTagDoesntMatchAndImageAndLocationFoundAndHardwareNotFound() throws UnknownHostException {
+      RunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.<Hardware> of(), ImmutableSet.of(provider),
+               EC2ImageParserTest.convertImages("/amzn_images.xml"), ImmutableMap.<String, Credentials> of());
+
+      RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
+
+      assertEquals(
+            parser.apply(server).toString(),
+            new NodeMetadataBuilder()
+                  .status(Status.RUNNING).backendStatus("running")
+                  .hostname("ip-10-243-42-70")
+                  .privateAddresses(ImmutableSet.of("10.243.42.70"))
+                  .publicAddresses(ImmutableSet.of("174.129.81.68"))
+                  .imageId("us-east-1/ami-82e4b5c7")
+                  .operatingSystem(
+                        new OperatingSystem.Builder().family(OsFamily.UNRECOGNIZED).version("").arch("paravirtual")
+                              .description("137112412989/amzn-ami-0.9.7-beta.i386-ebs").is64Bit(false).build())
+                  .id("us-east-1/i-0799056f").providerId("i-0799056f").location(provider).build().toString());
+   }
+
+   @Test
+   public void testApplyWhereTagDoesntMatchAndImageHardwareAndLocationFound() throws UnknownHostException {
+      RunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.of(m1_small().build()), ImmutableSet
+               .of(provider), EC2ImageParserTest.convertImages("/amzn_images.xml"), ImmutableMap
+               .<String, Credentials> of());
+
+      RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
+
+      assertEquals(
+            parser.apply(server).toString(),
+            new NodeMetadataBuilder()
+                  .hostname("ip-10-243-42-70")
+                  .status(Status.RUNNING).backendStatus("running")
+                  .privateAddresses(ImmutableSet.of("10.243.42.70"))
+                  .publicAddresses(ImmutableSet.of("174.129.81.68"))
+                  .imageId("us-east-1/ami-82e4b5c7")
+                  .hardware(m1_small().build())
+                  .operatingSystem(
+                        new OperatingSystem.Builder().family(OsFamily.UNRECOGNIZED).version("").arch("paravirtual")
+                              .description("137112412989/amzn-ami-0.9.7-beta.i386-ebs").is64Bit(false).build())
+                  .id("us-east-1/i-0799056f").providerId("i-0799056f").location(provider).build().toString());
+   }
+
+   @Test
+   public void testHandleMissingAMIs() {
+
+      // Handle the case when the installed AMI no longer can be found in AWS.
+
+      // Create a null-returning function to simulate that the AMI can't be found.
+      CacheLoader<RegionAndName, Image> nullReturningFunction = new CacheLoader<RegionAndName, Image>() {
+
+         @Override
+         public Image load(@Nullable RegionAndName from) {
+            return null;
+         }
+      };
+      LoadingCache<RegionAndName, Image> instanceToImage = CacheBuilder.newBuilder().build(nullReturningFunction);
+
+      RunningInstanceToNodeMetadata parser = createNodeParser(ImmutableSet.of(m1_small().build()), ImmutableSet
+               .of(provider), ImmutableMap.<String, Credentials> of(),
+               EC2ComputeServiceDependenciesModule.toPortableNodeStatus, instanceToImage);
+
+      RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
+
+      assertEquals(
+            parser.apply(server).toString(),
+            new NodeMetadataBuilder().hostname("ip-10-243-42-70").status(Status.RUNNING).backendStatus("running")
+                  .privateAddresses(ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68"))
+                  .imageId("us-east-1/ami-82e4b5c7").id("us-east-1/i-0799056f").providerId("i-0799056f")
+                  .hardware(m1_small().build()).location(provider).build().toString());
+   }
+
+   @Test
+   public void testGroupNameIsSetWhenCustomKeyNameIsSetAndSecurityGroupIsGenerated() {
+      checkGroupName(RunningInstance.builder().instanceId("id").imageId("image").instanceType("m1.small")
+              .instanceState(InstanceState.RUNNING).rawState("running").region("us-east-1").keyName("custom-key")
+              .groupName("jclouds#groupname").build());
+   }
+
+   @Test
+   public void testGroupNameIsSetWhenCustomSecurityGroupIsSetAndKeyNameIsGenerated() {
+      checkGroupName(RunningInstance.builder().instanceId("id").imageId("image").instanceType("m1.small")
+              .instanceState(InstanceState.RUNNING).rawState("running").region("us-east-1").groupName("custom-sec")
+              .keyName("jclouds#groupname#23").build());
+   }
+
+   protected RunningInstance firstInstanceFromResource(String resource) {
+      return Iterables.get(Iterables.get(DescribeInstancesResponseHandlerTest.parseRunningInstances(resource), 0), 0);
+   }
+
+   protected RunningInstanceToNodeMetadata createNodeParser(final ImmutableSet<Hardware> hardware,
+            final ImmutableSet<Location> locations, final Set<org.jclouds.compute.domain.Image> images,
+            Map<String, Credentials> credentialStore) {
+      Map<InstanceState, Status> instanceToNodeStatus = EC2ComputeServiceDependenciesModule.toPortableNodeStatus;
+
+      CacheLoader<RegionAndName, Image> getRealImage = new CacheLoader<RegionAndName, Image>() {
+
+         @Override
+         public Image load(@Nullable RegionAndName from) {
+            return ImagesToRegionAndIdMap.imagesToMap(images).get(from);
+         }
+      };
+      LoadingCache<RegionAndName, Image> instanceToImage = CacheBuilder.newBuilder().build(getRealImage);
+      return createNodeParser(hardware, locations, credentialStore, instanceToNodeStatus, instanceToImage);
+   }
+
+   private void checkGroupName(RunningInstance instance) {
+      assertEquals("groupname", createNodeParser(ImmutableSet.<Hardware> of(), ImmutableSet
+            .<Location> of(), ImmutableSet.<Image> of(), ImmutableMap.<String, Credentials> of())
+            .apply(instance).getGroup());
+   }
+
+   private RunningInstanceToNodeMetadata createNodeParser(final ImmutableSet<Hardware> hardware,
+            final ImmutableSet<Location> locations, Map<String, Credentials> credentialStore,
+            Map<InstanceState, Status> instanceToNodeStatus, LoadingCache<RegionAndName, 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 EC2ApiMetadata().getDefaultProperties());
+         }
+
+      }).getInstance(GroupNamingConvention.Factory.class);
+
+      RunningInstanceToNodeMetadata parser = new RunningInstanceToNodeMetadata(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/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/WindowsLoginCredentialsFromEncryptedDataTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/WindowsLoginCredentialsFromEncryptedDataTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/WindowsLoginCredentialsFromEncryptedDataTest.java
new file mode 100644
index 0000000..532c86b
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/functions/WindowsLoginCredentialsFromEncryptedDataTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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.ec2.compute.functions;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+
+import org.jclouds.date.DateService;
+import org.jclouds.date.internal.SimpleDateFormatDateService;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.ec2.compute.domain.PasswordDataAndPrivateKey;
+import org.jclouds.ec2.domain.PasswordData;
+import org.jclouds.encryption.internal.JCECrypto;
+import org.testng.annotations.Test;
+
+/**
+ * @author Richard Downer
+ */
+public class WindowsLoginCredentialsFromEncryptedDataTest {
+
+   private static final String PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" +
+      "MIIEowIBAAKCAQEAmN6GOSMnyGNWN19ETBh11tJB5OGs3Dps8kPWqAhF9RyL/mKwkW26vH+h/5Z5\n" +
+      "cA5T80pK72kNnXObFaMHNoX3lavrc6yXF+8F3f1tlFX2Z+iB1pYXz1oBPqT6oOmc2XzcsJuJRakd\n" +
+      "zwRwHDaqljpaW7+TZlxhMa1DmUkD/HHMxDCK8jbUIZDc6BZSrnj2uPwHwW737NRE4aC3fcu4LMwf\n" +
+      "b2VotbNGNiAnNmrb/vtIIGkFE8NYEMpiz0WYTWX4eVKpJImv1PR6G1fMLSvudJs0ARObuLDvuonn\n" +
+      "SCFFdkibrwMKYbHVGGh6FoY1Vy0sqI55dgQU1kSNouiDgOGxgx+TIwIDAQABAoIBAHCS/nk5QGS7\n" +
+      "cpRYXa1EHhNSxx/MaUXM6MoH1x3q6cm1egqdlrWh/vAtdZkIsOkqQ/xX65Me493dcomegwNN6KOZ\n" +
+      "9Uw7/xCq/sEZjga8vzaJ7IOgCGy0NVJyn/a70rv+zW5pO8/G2KLI+95rC3iSBFSoYd3xjcnNdIh/\n" +
+      "UqYnD8oxYpKmf7418pMPsBrkglkFlbVBPiDXdpoSziqSN6uWQG4Yh0WR87aElhM9JJW50Hh6h7g5\n" +
+      "OvgCBzS8G+KXCjqimk108+/ed5Nl6VhPAf79yCVZUueKBhaf2r0Kkyxg7M/Y+LJwcoUusIP7Cv7G\n" +
+      "xyzG2vi21prWRCm2sVCUDyQy5qECgYEA92jGVAaB3OGEUIXn7eVE3U3FQH37XcJMGsHqBIzDG13p\n" +
+      "C97HdN21rwRkz+G2eAsIxA+p9BsO7dSmtKC60kl6iMRgltS3W7xoC37N9BtjhpciHcLg8c70oyDx\n" +
+      "qHiLKuDi90mZ1FPmWupO4FJnGEB3evHUKZSpTrVVMzt+tyEn/psCgYEAni1hrYoMkQgN3sEC3CKB\n" +
+      "0jQkrOMvY219B8Tdf9LXSuP6z9POagDBDhkeT3xn8rAOmOfVGHYdO0CvPqmAkmXhf+g+OREdecQa\n" +
+      "uY0FmvcTt+Dx0c6pRZmm5AhvUVXFXqONsSg79iviXbUy5Hik0k5HTs5E6B4obrh5W+xfMTUXghkC\n" +
+      "gYBn92uAW8uumkYT4HF6EuJBbTD6zPYYjFGW3O4OQ2ip02jfSBrhDVoP1fTXNq6K+3gPi9WLcuNv\n" +
+      "JfF37iMTwzTuzDcaqwDyV9YRHpRFhEzqfhAkGYSVmLZM5scmWKGCv0YhTJiMFUWz5sqGkZopIs4S\n" +
+      "qBTT9FjBbooDIXk6U4CPCQKBgFdVBxEhnz6UC9RpDIMuKi88yuMJrChhUx7u+ryQVH3s0ZXdg6HT\n" +
+      "OMPn6mxIa7v6qJSTq3wN+qW0WQ1n2Kz7wz0zpOctI/EO7RJ1YhrlP+XONLV6PMtIwnQ0lAF8MbTG\n" +
+      "6HxfknugTyMd4DN0yMu0nHpOOI1P2VMIVzkBkK1CevBBAoGBALROGR7a+eijHdp0/A0chfUoBmud\n" +
+      "/TsUt+0g/vf1p69rMt6DqEGMgMtp2jIRnwvLElS7gVqnCTEclxNU/0rCXR+V7ImJm8J4f0ff8m0Y\n" +
+      "Fir9nfCYStszo25NvLFfynS9d/aoBuvqGJaiQyNXiyBJ4MaxxFYagzAWTnDX+kzTlkZ2\n" +
+      "-----END RSA PRIVATE KEY-----";
+   private static final String ENCRYPTED_PASSWORD = "gO1oMoIjjIifv2iqcfIKiQD7ziOTVXsuaBJFEQrZdb8uJH/LsAiJXZeGKEeXlHl/oMoR3HEIoYuHxl+p5iHdrpP889RmxWBDGOWC5iTUzK6CRa5mFmF1I5Lpt7v2YeVoQWihSM8B19BEdBdY1svQp9nyhPB4AqLDrY28x/OrmRh/qYq953i6Y4Z8c76OHqqGcUYM4ePysRlcizSgQjdkEDmKC10Ak3OFRRx3/LqYsFIMiOHeg47APg+UANNTyRiTIia5FDhSeHJzaeYCBRQ7UYH0z2rg4cX3YjOz/MoznjHiaaN4MO+5N3v84VawnqwKOvlwPyI2bmz0+9Tr6DKzqA==";
+
+   protected final DateService dateService = new SimpleDateFormatDateService();
+
+   @Test
+   public void testApply() throws Exception {
+      WindowsLoginCredentialsFromEncryptedData f = new WindowsLoginCredentialsFromEncryptedData(new JCECrypto());
+
+      PasswordData passwordData = PasswordData.builder()
+                                              .instanceId("i-2574e22a")
+                                              .timestamp(dateService.iso8601DateParse("2012-07-30T07:27:23.000+0000"))
+                                              .passwordData(ENCRYPTED_PASSWORD).build();
+
+      LoginCredentials credentials = f.apply(new PasswordDataAndPrivateKey(passwordData, PRIVATE_KEY));
+
+      assertEquals(credentials.getUser(), "Administrator");
+      assertEquals(credentials.getPassword(), "u4.y9mb;nR.");
+      assertFalse(credentials.getOptionalPrivateKey().isPresent());
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/internal/BaseEC2ComputeServiceContextExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/internal/BaseEC2ComputeServiceContextExpectTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/internal/BaseEC2ComputeServiceContextExpectTest.java
new file mode 100644
index 0000000..cc9790b
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/compute/internal/BaseEC2ComputeServiceContextExpectTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.ec2.compute.internal;
+
+import java.util.Properties;
+
+import org.jclouds.compute.ComputeServiceContext;
+import org.jclouds.ec2.internal.BaseEC2ApiExpectTest;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+
+import com.google.common.base.Function;
+import com.google.inject.Module;
+
+public abstract class BaseEC2ComputeServiceContextExpectTest<T> extends BaseEC2ApiExpectTest<T> implements
+         Function<ComputeServiceContext, T> {
+
+   @Override
+   public T createClient(Function<HttpRequest, HttpResponse> fn, Module module, Properties props) {
+      return apply(createComputeServiceContext(fn, module, props));
+   }
+
+   private ComputeServiceContext createComputeServiceContext(Function<HttpRequest, HttpResponse> fn, Module module,
+            Properties props) {
+      return createInjector(fn, module, props).getInstance(ComputeServiceContext.class);
+   }
+
+}