Repository: camel Updated Branches: refs/heads/master abf40872d -> 38f32b76d
CAMEL-8834 Camel-AWS EC2: Add describeInstances Operation Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/38f32b76 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/38f32b76 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/38f32b76 Branch: refs/heads/master Commit: 38f32b76d4169755335128e8b1f7dc3cf682206c Parents: abf4087 Author: Andrea Cosentino <anco...@gmail.com> Authored: Fri Jun 5 12:12:20 2015 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Fri Jun 5 12:12:46 2015 +0200 ---------------------------------------------------------------------- .../camel/component/aws/ec2/EC2Operations.java | 3 +- .../camel/component/aws/ec2/EC2Producer.java | 22 +++++++++ .../component/aws/ec2/AmazonEC2ClientMock.java | 47 ++++++++++++++++++++ .../component/aws/ec2/EC2OperationsTest.java | 4 +- .../component/aws/ec2/EC2ProducerTest.java | 44 ++++++++++++++++++ 5 files changed, 118 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/38f32b76/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java index d3d7af1..ef3fb2a 100644 --- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java +++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Operations.java @@ -21,5 +21,6 @@ public enum EC2Operations { createAndRunInstances, startInstances, stopInstances, - terminateInstances + terminateInstances, + describeInstances } http://git-wip-us.apache.org/repos/asf/camel/blob/38f32b76/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java index 9ad9bf9..0d848e3 100644 --- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java +++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java @@ -20,6 +20,8 @@ import java.util.Collection; import com.amazonaws.AmazonServiceException; import com.amazonaws.services.ec2.AmazonEC2Client; +import com.amazonaws.services.ec2.model.DescribeInstancesRequest; +import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.InstanceType; import com.amazonaws.services.ec2.model.RunInstancesRequest; import com.amazonaws.services.ec2.model.RunInstancesResult; @@ -64,6 +66,9 @@ public class EC2Producer extends DefaultProducer { case terminateInstances: terminateInstances(getEndpoint().getEc2Client(), exchange); break; + case describeInstances: + describeInstances(getEndpoint().getEc2Client(), exchange); + break; default: throw new IllegalArgumentException("Unsupported operation"); } @@ -202,4 +207,21 @@ public class EC2Producer extends DefaultProducer { } exchange.getIn().setBody(result); } + + private void describeInstances(AmazonEC2Client ec2Client, Exchange exchange) { + Collection instanceIds; + DescribeInstancesRequest request = new DescribeInstancesRequest(); + if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EC2Constants.INSTANCES_IDS))) { + instanceIds = exchange.getIn().getHeader(EC2Constants.INSTANCES_IDS, Collection.class); + request.withInstanceIds(instanceIds); + } + DescribeInstancesResult result; + try { + result = ec2Client.describeInstances(request); + } catch (AmazonServiceException ase) { + LOG.trace("Describe Instances command returned the error code {}", ase.getErrorCode()); + throw ase; + } + exchange.getIn().setBody(result); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/38f32b76/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java index bf8db56..25c7e27 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java @@ -22,10 +22,13 @@ import java.util.Collection; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.ec2.AmazonEC2Client; +import com.amazonaws.services.ec2.model.DescribeInstancesRequest; +import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.Instance; import com.amazonaws.services.ec2.model.InstanceState; import com.amazonaws.services.ec2.model.InstanceStateChange; import com.amazonaws.services.ec2.model.InstanceStateName; +import com.amazonaws.services.ec2.model.InstanceType; import com.amazonaws.services.ec2.model.Reservation; import com.amazonaws.services.ec2.model.RunInstancesRequest; import com.amazonaws.services.ec2.model.RunInstancesResult; @@ -133,4 +136,48 @@ public class AmazonEC2ClientMock extends AmazonEC2Client { } return result; } + + @Override + public DescribeInstancesResult describeInstances(DescribeInstancesRequest describeInstancesRequest) { + DescribeInstancesResult result = new DescribeInstancesResult(); + if (describeInstancesRequest.getInstanceIds().isEmpty()) { + Collection<Reservation> list = new ArrayList<Reservation>(); + Reservation res = new Reservation(); + res.setOwnerId("1"); + res.setRequesterId("user-test"); + res.setReservationId("res-1"); + Collection<Instance> instances = new ArrayList(); + Instance ins = new Instance(); + ins.setImageId("id-1"); + ins.setInstanceType(InstanceType.T2Micro); + ins.setInstanceId("instance-1"); + instances.add(ins); + Instance ins1 = new Instance(); + ins1.setImageId("id-2"); + ins1.setInstanceType(InstanceType.T2Micro); + ins1.setInstanceId("instance-2"); + instances.add(ins1); + res.setInstances(instances); + list.add(res); + result.setReservations(list); + } else { + if (describeInstancesRequest.getInstanceIds().contains("instance-1")) { + Collection<Reservation> list = new ArrayList<Reservation>(); + Reservation res = new Reservation(); + res.setOwnerId("1"); + res.setRequesterId("user-test"); + res.setReservationId("res-1"); + Collection<Instance> instances = new ArrayList(); + Instance ins = new Instance(); + ins.setImageId("id-1"); + ins.setInstanceType(InstanceType.T2Micro); + ins.setInstanceId("instance-1"); + instances.add(ins); + res.setInstances(instances); + list.add(res); + result.setReservations(list); + } + } + return result; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/38f32b76/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java index 7cb3bdb..ce18e1f 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2OperationsTest.java @@ -24,7 +24,7 @@ public class EC2OperationsTest { @Test public void supportedOperationCount() { - assertEquals(4, EC2Operations.values().length); + assertEquals(5, EC2Operations.values().length); } @Test @@ -33,6 +33,7 @@ public class EC2OperationsTest { assertEquals(EC2Operations.startInstances, EC2Operations.valueOf("startInstances")); assertEquals(EC2Operations.stopInstances, EC2Operations.valueOf("stopInstances")); assertEquals(EC2Operations.terminateInstances, EC2Operations.valueOf("terminateInstances")); + assertEquals(EC2Operations.describeInstances, EC2Operations.valueOf("describeInstances")); } @Test @@ -41,5 +42,6 @@ public class EC2OperationsTest { assertEquals(EC2Operations.startInstances.toString(), "startInstances"); assertEquals(EC2Operations.stopInstances.toString(), "stopInstances"); assertEquals(EC2Operations.terminateInstances.toString(), "terminateInstances"); + assertEquals(EC2Operations.describeInstances.toString(), "describeInstances"); } } http://git-wip-us.apache.org/repos/asf/camel/blob/38f32b76/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java index c0dd4af..97f2bb8 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java @@ -19,6 +19,7 @@ package org.apache.camel.component.aws.ec2; import java.util.ArrayList; import java.util.Collection; +import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.InstanceStateName; import com.amazonaws.services.ec2.model.InstanceType; import com.amazonaws.services.ec2.model.RunInstancesResult; @@ -146,6 +147,46 @@ public class EC2ProducerTest extends CamelTestSupport { assertEquals(resultGet.getTerminatingInstances().get(0).getCurrentState().getName(), InstanceStateName.Terminated.toString()); } + @Test + public void ec2DescribeInstancesTest() throws Exception { + + mock.expectedMessageCount(1); + Exchange exchange = template.request("direct:describe", new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + + } + }); + + assertMockEndpointsSatisfied(); + + DescribeInstancesResult resultGet = (DescribeInstancesResult) exchange.getIn().getBody(); + assertEquals(resultGet.getReservations().size(), 1); + assertEquals(resultGet.getReservations().get(0).getInstances().size(), 2); + } + + @Test + public void ec2DescribeSpecificInstancesTest() throws Exception { + + mock.expectedMessageCount(1); + Exchange exchange = template.request("direct:describe", new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + Collection l = new ArrayList(); + l.add("instance-1"); + exchange.getIn().setHeader(EC2Constants.INSTANCES_IDS, l); + } + }); + + assertMockEndpointsSatisfied(); + + DescribeInstancesResult resultGet = (DescribeInstancesResult) exchange.getIn().getBody(); + assertEquals(resultGet.getReservations().size(), 1); + assertEquals(resultGet.getReservations().get(0).getInstances().size(), 1); + } + @Override protected JndiRegistry createRegistry() throws Exception { JndiRegistry registry = super.createRegistry(); @@ -174,6 +215,9 @@ public class EC2ProducerTest extends CamelTestSupport { from("direct:terminate") .to("aws-ec2://test?amazonEc2Client=#amazonEc2Client&operation=terminateInstances") .to("mock:result"); + from("direct:describe") + .to("aws-ec2://test?amazonEc2Client=#amazonEc2Client&operation=describeInstances") + .to("mock:result"); } }; }