Repository: stratos
Updated Branches:
  refs/heads/4.0.0-grouping 8db918085 -> 91a8babd7


tests for parsing Applications


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/91a8babd
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/91a8babd
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/91a8babd

Branch: refs/heads/4.0.0-grouping
Commit: 91a8babd73f4c094c976865d337833ff4210ea05
Parents: 8db9180
Author: Isuru Haththotuwa <[email protected]>
Authored: Sun Oct 12 19:14:25 2014 +0530
Committer: Isuru Haththotuwa <[email protected]>
Committed: Sun Oct 12 19:14:25 2014 +0530

----------------------------------------------------------------------
 .../application/parser/ParserUtils.java         |  33 ++++-
 .../CompositeApplicationParseTest.java          | 134 ++++++++++++++++++-
 2 files changed, 155 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/91a8babd/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java
index 62a98ab..dd72508 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.cloud.controller.application.parser;
 
+import 
org.apache.stratos.cloud.controller.exception.ApplicationDefinitionException;
 import org.apache.stratos.cloud.controller.pojo.application.GroupContext;
 import 
org.apache.stratos.cloud.controller.pojo.application.SubscribableContext;
 import org.apache.stratos.messaging.domain.topology.StartupOrder;
@@ -27,7 +28,7 @@ import java.util.*;
 
 public class ParserUtils {
 
-    public static Set<StartupOrder> convert (String [] startupOrderArr) {
+    public static Set<StartupOrder> convert (String [] startupOrderArr) throws 
ApplicationDefinitionException {
 
         Set<StartupOrder> startupOrders = new HashSet<StartupOrder>();
 
@@ -36,13 +37,30 @@ public class ParserUtils {
         }
 
         for (String commaSeparatedStartupOrder : startupOrderArr) {
-            startupOrders.add(new 
StartupOrder(Arrays.asList(commaSeparatedStartupOrder.split(","))));
+            startupOrders.add(getStartupOrder(commaSeparatedStartupOrder));
         }
 
         return startupOrders;
     }
 
-    public static Set<StartupOrder> convert (String [] startupOrderArr, 
GroupContext groupContext) {
+    private static StartupOrder getStartupOrder (String 
commaSeparatedStartupOrder) throws ApplicationDefinitionException{
+
+        List<String> startupOrders = new ArrayList<String>();
+
+        for (String startupOrder : 
Arrays.asList(commaSeparatedStartupOrder.split(","))) {
+            startupOrder = startupOrder.trim();
+            if (!startupOrder.startsWith("cartridge.")) {
+                throw new ApplicationDefinitionException("Incorrect Startup 
Order specified, should start with 'cartridge.'");
+            }
+
+            startupOrders.add(startupOrder);
+        }
+
+        return new StartupOrder(startupOrders);
+    }
+
+    public static Set<StartupOrder> convert (String [] startupOrderArr, 
GroupContext groupContext)
+            throws ApplicationDefinitionException {
 
         Set<StartupOrder> startupOrders = new HashSet<StartupOrder>();
 
@@ -60,7 +78,8 @@ public class ParserUtils {
         return startupOrders;
     }
 
-    private static StartupOrder getStartupOrder (List<String> components, 
GroupContext groupContext) {
+    private static StartupOrder getStartupOrder (List<String> components, 
GroupContext groupContext)
+            throws ApplicationDefinitionException {
 
         List<String> aliasBasedComponents = new ArrayList<String>();
 
@@ -72,7 +91,7 @@ public class ParserUtils {
                 String cartridgeType = component.substring(10);
                 aliasBasedComponent = getAliasForServiceType(cartridgeType, 
groupContext);
                 if (aliasBasedComponent == null) {
-                    throw new RuntimeException("Unable convert Startup Order 
to alias-based; " +
+                    throw new ApplicationDefinitionException("Unable convert 
Startup Order to alias-based; " +
                             "cannot find the matching alias for Service type " 
+ cartridgeType);
                 }
 
@@ -82,14 +101,14 @@ public class ParserUtils {
                 String groupName = component.substring(6);
                 aliasBasedComponent = getAliasForGroupName(groupName, 
groupContext);
                 if (aliasBasedComponent == null) {
-                    throw new RuntimeException("Unable convert Startup Order 
to alias-based; " +
+                    throw new ApplicationDefinitionException("Unable convert 
Startup Order to alias-based; " +
                             "cannot find the matching alias for Group name " + 
groupName);
                 }
 
                 aliasBasedComponent = "group.".concat(aliasBasedComponent);
 
             } else {
-                throw new RuntimeException("Incorrect Startup Order 
specified");
+                throw new ApplicationDefinitionException("Incorrect Startup 
Order specified");
             }
             aliasBasedComponents.add(aliasBasedComponent);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/91a8babd/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/stratos/cloud/controller/application/CompositeApplicationParseTest.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/stratos/cloud/controller/application/CompositeApplicationParseTest.java
 
b/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/stratos/cloud/controller/application/CompositeApplicationParseTest.java
index c2b76af..a2dc30a 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/stratos/cloud/controller/application/CompositeApplicationParseTest.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/test/java/org/apache/stratos/cloud/controller/application/CompositeApplicationParseTest.java
@@ -25,10 +25,7 @@ import 
org.apache.stratos.cloud.controller.interfaces.ApplicationParser;
 import org.apache.stratos.cloud.controller.pojo.Cartridge;
 import org.apache.stratos.cloud.controller.pojo.Dependencies;
 import org.apache.stratos.cloud.controller.pojo.ServiceGroup;
-import org.apache.stratos.cloud.controller.pojo.application.ApplicationContext;
-import org.apache.stratos.cloud.controller.pojo.application.ComponentContext;
-import 
org.apache.stratos.cloud.controller.pojo.application.SubscribableContext;
-import 
org.apache.stratos.cloud.controller.pojo.application.SubscribableInfoContext;
+import org.apache.stratos.cloud.controller.pojo.application.*;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -104,7 +101,7 @@ public class CompositeApplicationParseTest {
     }
 
     @Test(expected = ApplicationDefinitionException.class)
-    public void testParseSimpleInvalidCartridgeApplication() throws 
ApplicationDefinitionException {
+    public void testParseSimpleApplicationWithInvalidCartridge() throws 
ApplicationDefinitionException {
 
         ApplicationParser applicationParser = new DefaultApplicationParser();
         ApplicationContext simpleAppCtxt = new ApplicationContext();
@@ -136,6 +133,133 @@ public class CompositeApplicationParseTest {
         applicationParser.parse(simpleAppCtxt);
     }
 
+    @Test(expected = ApplicationDefinitionException.class)
+    public void testParseSimpleApplicationWithoutSubcriptionInformation() 
throws ApplicationDefinitionException {
+
+        ApplicationParser applicationParser = new DefaultApplicationParser();
+        ApplicationContext simpleAppCtxt = new ApplicationContext();
+        // app id
+        simpleAppCtxt.setApplicationId("simpleInvalidApp");
+        simpleAppCtxt.setAlias("simpleInvalidAppAlias");
+        // tenant info
+        simpleAppCtxt.setTenantId(-1234);
+        // components
+        ComponentContext simpleAppComponentCtxt = new ComponentContext();
+        SubscribableContext simpleAppSubscribableContext = new 
SubscribableContext();
+        // give invalid cartridge type
+        simpleAppSubscribableContext.setType("php1");
+        simpleAppSubscribableContext.setAlias("myphp");
+        simpleAppComponentCtxt.setSubscribableContexts(new 
SubscribableContext[]{simpleAppSubscribableContext});
+        simpleAppCtxt.setComponents(simpleAppComponentCtxt);
+        // invalid Subscription information
+        SubscribableInfoContext simpleAppEmptySubscribableInfoCtxt = new 
SubscribableInfoContext();
+        simpleAppCtxt.setSubscribableInfoContext(new 
SubscribableInfoContext[]{simpleAppEmptySubscribableInfoCtxt});
+
+        // parse
+        applicationParser.parse(simpleAppCtxt);
+    }
+
+    @Test
+    public void testParseSimpleApplicationWithMultipleSubsriptions () throws 
ApplicationDefinitionException {
+
+        ApplicationParser applicationParser = new DefaultApplicationParser();
+        ApplicationContext simpleAppCtxt = new ApplicationContext();
+        // app id
+        simpleAppCtxt.setApplicationId("simpleInvalidApp");
+        simpleAppCtxt.setAlias("simpleInvalidAppAlias");
+        // tenant info
+        simpleAppCtxt.setTenantId(-1234);
+        // components
+        ComponentContext simpleAppComponentCtxt = new ComponentContext();
+        SubscribableContext simpleAppPhpSubscribableContext = new 
SubscribableContext();
+        simpleAppPhpSubscribableContext.setType("php");
+        simpleAppPhpSubscribableContext.setAlias("myphp");
+        SubscribableContext simpleAppMySqlSubscribableContext = new 
SubscribableContext();
+        simpleAppMySqlSubscribableContext.setType("mysql");
+        simpleAppMySqlSubscribableContext.setAlias("mysql1");
+        simpleAppComponentCtxt.setSubscribableContexts(new 
SubscribableContext[]{simpleAppPhpSubscribableContext,
+                simpleAppMySqlSubscribableContext});
+
+        DependencyContext simpleAppDependecyCtxt = new DependencyContext();
+        simpleAppDependecyCtxt.setKillBehaviour("kill-dependents");
+        simpleAppDependecyCtxt.setStartupOrdersContexts(new 
String[]{"cartridge.mysql1,cartridge.myphp"});
+        simpleAppComponentCtxt.setDependencyContext(simpleAppDependecyCtxt);
+
+        simpleAppCtxt.setComponents(simpleAppComponentCtxt);
+
+        // subscribable information
+        SubscribableInfoContext simpleAppPhpSubscribableInfoCtxt = new 
SubscribableInfoContext();
+        simpleAppPhpSubscribableInfoCtxt.setAlias("myphp");
+        
simpleAppPhpSubscribableInfoCtxt.setAutoscalingPolicy("deployment_policy_1");
+        
simpleAppPhpSubscribableInfoCtxt.setAutoscalingPolicy("autoscale_policy_1");
+        simpleAppPhpSubscribableInfoCtxt.setRepoUrl("www.mygit.com/myphp.git");
+        simpleAppPhpSubscribableInfoCtxt.setPrivateRepo(true);
+        simpleAppPhpSubscribableInfoCtxt.setRepoUsername("admin");
+        simpleAppPhpSubscribableInfoCtxt.setRepoUrl("admin123");
+
+        SubscribableInfoContext simpleAppMySqlSubscribableInfoCtxt = new 
SubscribableInfoContext();
+        simpleAppMySqlSubscribableInfoCtxt.setAlias("mysql1");
+        
simpleAppMySqlSubscribableInfoCtxt.setAutoscalingPolicy("deployment_policy_2");
+        
simpleAppMySqlSubscribableInfoCtxt.setAutoscalingPolicy("autoscale_policy_2");
+
+        simpleAppCtxt.setSubscribableInfoContext(new 
SubscribableInfoContext[]{simpleAppPhpSubscribableInfoCtxt,
+                simpleAppMySqlSubscribableInfoCtxt});
+
+        // parse
+        applicationParser.parse(simpleAppCtxt);
+    }
+
+    @Test(expected = ApplicationDefinitionException.class)
+    public void 
testParseSimpleApplicationWithMultipleSubsriptionsInvalidStartupOrder () throws 
ApplicationDefinitionException {
+
+        ApplicationParser applicationParser = new DefaultApplicationParser();
+        ApplicationContext simpleAppCtxt = new ApplicationContext();
+        // app id
+        simpleAppCtxt.setApplicationId("simpleInvalidApp");
+        simpleAppCtxt.setAlias("simpleInvalidAppAlias");
+        // tenant info
+        simpleAppCtxt.setTenantId(-1234);
+        // components
+        ComponentContext simpleAppComponentCtxt = new ComponentContext();
+        SubscribableContext simpleAppPhpSubscribableContext = new 
SubscribableContext();
+        simpleAppPhpSubscribableContext.setType("php");
+        simpleAppPhpSubscribableContext.setAlias("myphp");
+        SubscribableContext simpleAppMySqlSubscribableContext = new 
SubscribableContext();
+        simpleAppMySqlSubscribableContext.setType("mysql");
+        simpleAppMySqlSubscribableContext.setAlias("mysql1");
+        simpleAppComponentCtxt.setSubscribableContexts(new 
SubscribableContext[]{simpleAppPhpSubscribableContext,
+                simpleAppMySqlSubscribableContext});
+
+        DependencyContext simpleAppDependecyCtxt = new DependencyContext();
+        simpleAppDependecyCtxt.setKillBehaviour("kill-dependents");
+        // startup order is invalid, without prefix 'cartridge.' for mysql1
+        simpleAppDependecyCtxt.setStartupOrdersContexts(new 
String[]{"mysql1,cartridge.myphp"});
+        simpleAppComponentCtxt.setDependencyContext(simpleAppDependecyCtxt);
+
+        simpleAppCtxt.setComponents(simpleAppComponentCtxt);
+
+        // subscribable information
+        SubscribableInfoContext simpleAppPhpSubscribableInfoCtxt = new 
SubscribableInfoContext();
+        simpleAppPhpSubscribableInfoCtxt.setAlias("myphp");
+        
simpleAppPhpSubscribableInfoCtxt.setAutoscalingPolicy("deployment_policy_1");
+        
simpleAppPhpSubscribableInfoCtxt.setAutoscalingPolicy("autoscale_policy_1");
+        simpleAppPhpSubscribableInfoCtxt.setRepoUrl("www.mygit.com/myphp.git");
+        simpleAppPhpSubscribableInfoCtxt.setPrivateRepo(true);
+        simpleAppPhpSubscribableInfoCtxt.setRepoUsername("admin");
+        simpleAppPhpSubscribableInfoCtxt.setRepoUrl("admin123");
+
+        SubscribableInfoContext simpleAppMySqlSubscribableInfoCtxt = new 
SubscribableInfoContext();
+        simpleAppMySqlSubscribableInfoCtxt.setAlias("mysql1");
+        
simpleAppMySqlSubscribableInfoCtxt.setAutoscalingPolicy("deployment_policy_2");
+        
simpleAppMySqlSubscribableInfoCtxt.setAutoscalingPolicy("autoscale_policy_2");
+
+        simpleAppCtxt.setSubscribableInfoContext(new 
SubscribableInfoContext[]{simpleAppPhpSubscribableInfoCtxt,
+                simpleAppMySqlSubscribableInfoCtxt});
+
+        // parse
+        applicationParser.parse(simpleAppCtxt);
+    }
+
     @AfterClass
     public static void tearDownAfterClass() {
 

Reply via email to