brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aleds...@apache.org
Subject [1/2] brooklyn-server git commit: BROOKLYN-520: better error if type missing
Date Wed, 28 Jun 2017 22:01:49 GMT
Repository: brooklyn-server
Updated Branches:
  refs/heads/master 1df0db3c8 -> c2326132d


BROOKLYN-520: better error if type missing


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/eb03dca5
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/eb03dca5
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/eb03dca5

Branch: refs/heads/master
Commit: eb03dca56796c72cace595a2b8a86224365da8bd
Parents: 1df0db3
Author: Aled Sage <aled.sage@gmail.com>
Authored: Wed Jun 28 16:04:35 2017 +0100
Committer: Aled Sage <aled.sage@gmail.com>
Committed: Wed Jun 28 17:38:09 2017 +0100

----------------------------------------------------------------------
 .../BrooklynComponentTemplateResolver.java      |  12 +-
 .../brooklyn/ValidationMissingTypeYamlTest.java | 222 +++++++++++++++++++
 2 files changed, 232 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eb03dca5/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index 7e9b562..e0cbe47 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -18,6 +18,8 @@
  */
 package org.apache.brooklyn.camp.brooklyn.spi.creation;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedHashSet;
@@ -97,12 +99,12 @@ public class BrooklynComponentTemplateResolver {
     private final EntitySpecResolver serviceSpecResolver;
 
     private BrooklynComponentTemplateResolver(BrooklynClassLoadingContext loader, ConfigBag
attrs, AbstractResource optionalTemplate, String type) {
-        this.loader = loader;
+        this.loader = checkNotNull(loader, "loader");
         this.mgmt = loader.getManagementContext();
         this.attrs = ConfigBag.newInstanceCopying(attrs);
         this.template = Maybe.fromNullable(optionalTemplate);
         this.yamlLoader = new BrooklynYamlTypeInstantiator.Factory(loader, this);
-        this.type = type;
+        this.type = checkNotNull(type, "type");
         this.serviceSpecResolver = new CampServiceSpecResolver(mgmt, getServiceTypeResolverOverrides());
     }
 
@@ -130,6 +132,12 @@ public class BrooklynComponentTemplateResolver {
 
         private static BrooklynComponentTemplateResolver newInstance(BrooklynClassLoadingContext
context, ConfigBag attrs, AbstractResource optionalTemplate) {
             String type = getDeclaredType(null, optionalTemplate, attrs);
+            if (Strings.isBlank(type)) {
+                String msg = "No type defined " 
+                        + (attrs == null ? ", no attributes supplied" : "in " + "[" + attrs.getAllConfigRaw()
+ "]")
+                        + (optionalTemplate == null ? "" : ", template " + optionalTemplate);
+                throw new IllegalArgumentException(msg);
+            }
             return new BrooklynComponentTemplateResolver(context, attrs, optionalTemplate,
type);
         }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eb03dca5/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ValidationMissingTypeYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ValidationMissingTypeYamlTest.java
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ValidationMissingTypeYamlTest.java
new file mode 100644
index 0000000..d71f381
--- /dev/null
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ValidationMissingTypeYamlTest.java
@@ -0,0 +1,222 @@
+/*
+ * 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.apache.brooklyn.camp.brooklyn;
+
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.core.test.entity.TestEntityImpl;
+import org.apache.brooklyn.core.test.policy.TestEnricher;
+import org.apache.brooklyn.core.test.policy.TestPolicy;
+import org.apache.brooklyn.entity.group.DynamicCluster;
+import org.apache.brooklyn.test.Asserts;
+import org.apache.brooklyn.util.text.Identifiers;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.Test;
+
+@Test
+public class ValidationMissingTypeYamlTest extends AbstractYamlTest {
+    private static final Logger log = LoggerFactory.getLogger(ValidationMissingTypeYamlTest.class);
+
+    
+    @Test
+    public void testNoEntityTypeSpecifiedInTopLevelService() throws Exception {
+        try {
+            createAndStartApplication(
+                    "services:",
+                    "- foo: " + TestEntityImpl.class.getName());
+            Asserts.shouldHaveFailedPreviously();
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "must declare a type");
+        }
+    }
+
+    @Test
+    public void testNoEntityTypeInTopLevelCatalogEntity() throws Exception {
+        try {
+            addCatalogItems(
+                    "brooklyn.catalog:",
+                    "  id: " + Identifiers.makeRandomId(8),
+                    "  version: 1.0.0",
+                    "  itemType: entity",
+                    "  item:",
+                    "    foo: " + TestEntity.class.getName());
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "must declare a type");
+        }
+    }
+
+    @Test
+    public void testNoEntityTypeInTopLevelCatalogApp() throws Exception {
+        try {
+            addCatalogItems(
+                    "brooklyn.catalog:",
+                    "  id: " + Identifiers.makeRandomId(8),
+                    "  version: 1.0.0",
+                    "  itemType: template",
+                    "  item:",
+                    "    services:",
+                    "    - foo: " + TestEntity.class.getName());
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "must declare a type");
+        }
+    }
+
+    @Test
+    public void testNoEntityTypeSpecifiedInChildService() throws Exception {
+        try {
+            createAndStartApplication(
+                    "services:",
+                    "- type: " + TestApplication.class.getName(),
+                    "  brooklyn.children:",
+                    "  - foo: " + TestEntityImpl.class.getName());
+            Asserts.shouldHaveFailedPreviously();
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "No type defined");
+        }
+    }
+    
+    @Test
+    public void testNoEntityTypeInChildCatalogEntity() throws Exception {
+        try {
+            addCatalogItems(
+                    "brooklyn.catalog:",
+                    "  id: " + Identifiers.makeRandomId(8),
+                    "  version: 1.0.0",
+                    "  itemType: entity",
+                    "  item:",
+                    "    type: " + TestApplication.class.getName(),
+                    "    brooklyn.children:",
+                    "    - foo: " + TestEntityImpl.class.getName());
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "No type defined");
+        }
+    }
+
+    @Test
+    public void testNoEntityTypeInChildCatalogApp() throws Exception {
+        try {
+            addCatalogItems(
+                    "brooklyn.catalog:",
+                    "  id: " + Identifiers.makeRandomId(8),
+                    "  version: 1.0.0",
+                    "  itemType: template",
+                    "  item:",
+                    "    services:",
+                    "    - type: " + TestApplication.class.getName(),
+                    "      brooklyn.children:",
+                    "      - foo: " + TestEntityImpl.class.getName());
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "No type defined");
+        }
+    }
+
+    @Test
+    public void testNoEntityTypeSpecifiedInEntitySpec() throws Exception {
+        try {
+            createAndStartApplication(
+                    "services:",
+                    "- type: " + DynamicCluster.class.getName(),
+                    "  brooklyn.config:",
+                    "    initialSize: 0",
+                    "    memberSpec: ",
+                    "      $brooklyn:entitySpec:",
+                    "        foo: " + TestEntityImpl.class.getName());
+            Asserts.shouldHaveFailedPreviously();
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "No type defined");
+        }
+    }
+    
+    @Test
+    public void testNoEntityTypeInEntitySpecInCatalogEntity() throws Exception {
+        try {
+            addCatalogItems(
+                    "brooklyn.catalog:",
+                    "  id: " + Identifiers.makeRandomId(8),
+                    "  version: 1.0.0",
+                    "  itemType: entity",
+                    "  item:",
+                    "    type: " + DynamicCluster.class.getName(),
+                    "    brooklyn.config:",
+                    "      initialSize: 0",
+                    "      memberSpec: ",
+                    "        $brooklyn:entitySpec:",
+                    "          foo: " + TestEntityImpl.class.getName());
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "No type defined");
+        }
+    }
+
+    @Test
+    public void testNoEntityTypeInEntitySpecInCatalogApp() throws Exception {
+        try {
+            addCatalogItems(
+                    "brooklyn.catalog:",
+                    "  id: " + Identifiers.makeRandomId(8),
+                    "  version: 1.0.0",
+                    "  itemType: template",
+                    "  item:",
+                    "    services:",
+                    "    - type: " + DynamicCluster.class.getName(),
+                    "      brooklyn.config:",
+                    "        initialSize: 0",
+                    "        memberSpec: ",
+                    "          $brooklyn:entitySpec:",
+                    "            foo: " + TestEntityImpl.class.getName());
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "No type defined");
+        }
+    }
+
+    // TODO Preferred name should not be 'policy_type'; it should be 'type'!
+    @Test
+    public void testNoPolicyTypeSpecified() throws Exception {
+        try {
+            createAndStartApplication(
+                    "services:",
+                    "- type: " + TestApplication.class.getName(),
+                    "  brooklyn.policies:",
+                    "  - foo: " + TestPolicy.class.getName());
+            Asserts.shouldHaveFailedPreviously();
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "Missing key 'policy_type'");
+        }
+    }
+    
+    // TODO Preferred name should not be 'enricher_type'; it should be 'type'!
+    @Test
+    public void testNoEnricherTypeSpecified() throws Exception {
+        try {
+            createAndStartApplication(
+                    "services:",
+                    "- type: " + TestApplication.class.getName(),
+                    "  brooklyn.enrichers:",
+                    "  - foo: " + TestEnricher.class.getName());
+            Asserts.shouldHaveFailedPreviously();
+        } catch (Exception e) {
+            Asserts.expectedFailureContains(e, "Missing key 'enricher_type'");
+        }
+    }
+    
+    @Override
+    protected Logger getLogger() {
+        return log;
+    }
+}


Mime
View raw message