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

Reply via email to