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);
+ }
+
+}