You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/11/09 13:55:13 UTC

[04/21] incubator-brooklyn git commit: Parameters test coverage

Parameters test coverage


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

Branch: refs/heads/master
Commit: 9b985431e82bef78c09710093f0518f80121495c
Parents: 3965638
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Tue Nov 3 17:31:49 2015 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Nov 5 15:23:38 2015 +0200

----------------------------------------------------------------------
 .../objs/BasicSpecParameterFromClassTest.java   |  29 +-
 .../camp/brooklyn/AbstractYamlTest.java         |   7 +-
 .../brooklyn/catalog/CatalogParametersTest.java | 318 +++++++++++++++++++
 3 files changed, 351 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9b985431/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromClassTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromClassTest.java b/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromClassTest.java
index 2009c98..b0f71a0 100644
--- a/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromClassTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/objs/BasicSpecParameterFromClassTest.java
@@ -24,15 +24,27 @@ import java.util.List;
 
 import org.apache.brooklyn.api.catalog.CatalogConfig;
 import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.ImplementedBy;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.objs.SpecParameter;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.entity.AbstractEntity;
+import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
+import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Predicate;
 import com.google.common.reflect.TypeToken;
 
 public class BasicSpecParameterFromClassTest {
+    private ManagementContext mgmt;
+    @BeforeMethod(alwaysRun=true)
+    public void setUp() {
+        mgmt = LocalManagementContextForTests.newInstance();
+    }
+
     public interface SpecParameterTestEntity extends Entity {
         @CatalogConfig(label="String Key", priority=3)
         ConfigKey<String> STRING_KEY = ConfigKeys.newStringConfigKey("string_key");
@@ -47,15 +59,30 @@ public class BasicSpecParameterFromClassTest {
         ConfigKey<String> UNPINNNED_KEY = ConfigKeys.newStringConfigKey("unpinned_key");
     }
 
+    @ImplementedBy(ConfigInImplParameterTestEntityImpl.class)
+    public static interface ConfigInImplParameterTestEntity extends Entity {}
+    public static class ConfigInImplParameterTestEntityImpl extends AbstractEntity implements ConfigInImplParameterTestEntity {
+        public static final ConfigKey<String> SUGGESTED_VERSION = BrooklynConfigKeys.SUGGESTED_VERSION;
+    }
+
     @Test
     public void testFullDefinition() {
-        List<SpecParameter<?>> inputs = BasicSpecParameter.fromClass(SpecParameterTestEntity.class);
+        List<SpecParameter<?>> inputs = BasicSpecParameter.fromClass(mgmt, SpecParameterTestEntity.class);
+        assertEquals(inputs.size(), 4);
         assertInput(inputs.get(0), "Predicate Key", true, SpecParameterTestEntity.PREDICATE_KEY);
         assertInput(inputs.get(1), "Integer Key", true, SpecParameterTestEntity.INTEGER_KEY);
         assertInput(inputs.get(2), "String Key", true, SpecParameterTestEntity.STRING_KEY);
         assertInput(inputs.get(3), "unpinned_key", false, SpecParameterTestEntity.UNPINNNED_KEY);
     }
 
+    @Test
+    public void testConfigInImplVisible() {
+        List<SpecParameter<?>> inputs = BasicSpecParameter.fromClass(mgmt, ConfigInImplParameterTestEntity.class);
+        assertEquals(inputs.size(), 1);
+        ConfigKey<String> key = ConfigInImplParameterTestEntityImpl.SUGGESTED_VERSION;
+        assertInput(inputs.get(0), key.getName(), false, key);
+    }
+
     private void assertInput(SpecParameter<?> input, String label, boolean pinned, ConfigKey<?> type) {
         assertEquals(input.getLabel(), label);
         assertEquals(input.isPinned(), pinned);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9b985431/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java
index 8a858cf..a45d272 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java
@@ -22,6 +22,7 @@ import java.io.Reader;
 import java.io.StringReader;
 import java.util.Set;
 
+import org.apache.brooklyn.api.catalog.BrooklynCatalog;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
@@ -52,6 +53,7 @@ public abstract class AbstractYamlTest {
     protected static final String TEST_VERSION = "0.1.2";
 
     private ManagementContext brooklynMgmt;
+    protected BrooklynCatalog catalog;
     protected BrooklynCampPlatform platform;
     protected BrooklynCampPlatformLauncherNoServer launcher;
     private boolean forceUpdate;
@@ -73,6 +75,7 @@ public abstract class AbstractYamlTest {
         };
         launcher.launch();
         brooklynMgmt = launcher.getBrooklynMgmt();
+        catalog = brooklynMgmt.getCatalog();
         platform = launcher.getCampPlatform();
     }
 
@@ -168,11 +171,11 @@ public abstract class AbstractYamlTest {
         return LOG;
     }
 
-    private String joinLines(Iterable<String> catalogYaml) {
+    protected String joinLines(Iterable<String> catalogYaml) {
         return Joiner.on("\n").join(catalogYaml);
     }
 
-    private String joinLines(String[] catalogYaml) {
+    protected String joinLines(String... catalogYaml) {
         return Joiner.on("\n").join(catalogYaml);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9b985431/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogParametersTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogParametersTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogParametersTest.java
new file mode 100644
index 0000000..6407d4a
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogParametersTest.java
@@ -0,0 +1,318 @@
+/*
+ * 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.catalog;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.objs.SpecParameter;
+import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.entity.AbstractEntity;
+import org.apache.brooklyn.core.location.AbstractLocation;
+import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
+import org.apache.brooklyn.core.objs.BasicSpecParameter;
+import org.apache.brooklyn.core.policy.AbstractPolicy;
+import org.apache.brooklyn.entity.stock.BasicApplication;
+import org.testng.SkipException;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
+public class CatalogParametersTest extends AbstractYamlTest {
+    private static final String SYMBOLIC_NAME = "my.catalog.app.id.load";
+
+    private static final ConfigKey<String> SHARED_CONFIG = ConfigKeys.newStringConfigKey("sample.config");
+    public static class ConfigEntityForTest extends AbstractEntity {
+        public static final ConfigKey<String> SAMPLE_CONFIG = SHARED_CONFIG;
+    }
+    public static class ConfigPolicyForTest extends AbstractPolicy {
+        public static final ConfigKey<String> SAMPLE_CONFIG = SHARED_CONFIG;
+    }
+    public static class ConfigLocationForTest extends AbstractLocation {
+        private static final long serialVersionUID = 1L;
+        public static final ConfigKey<String> SAMPLE_CONFIG = SHARED_CONFIG;
+    }
+
+    @DataProvider(name="brooklynTypes")
+    public Object[][] brooklynTypes() {
+        return new Object[][] {
+            {ConfigEntityForTest.class},
+            {ConfigPolicyForTest.class},
+            {ConfigLocationForTest.class}};
+    }
+    
+    @DataProvider(name="catalogTemplates")
+    public Object[][] catalogTemplates() {
+        return new Object[][] {
+            {joinLines(
+                    "brooklyn.catalog:",
+                    "  id: " + SYMBOLIC_NAME,
+                    "  version: " + TEST_VERSION,
+                    "  item:",
+                    "    type: ${testClass}",
+                    "    brooklyn.parameters:",
+                    "    - simple")},
+            {joinLines(
+                    "brooklyn.catalog:",
+                    "  id: " + SYMBOLIC_NAME,
+                    "  version: " + TEST_VERSION,
+                    "  brooklyn.parameters:",
+                    "  - simple",
+                    "  item:",
+                    "    type: ${testClass}")}
+        };
+    }
+    
+    @DataProvider(name="typesAndTemplates")
+    public Object[][] typesAndTemplates() {
+        // cartesian product of brooklynTypes X catalogTemplates
+        Object[][] brooklynTypes = brooklynTypes();
+        Object[][] catalogTemplates = catalogTemplates();
+        Object[][] arr = new Object[brooklynTypes.length * catalogTemplates.length][];
+        for (int i = 0; i < catalogTemplates.length; i++) {
+            for (int j = 0; j < brooklynTypes.length; j++) {
+                Object[] item = new Object[2];
+                item[0] = brooklynTypes[j][0];
+                item[1] = catalogTemplates[i][0];
+                arr[i*brooklynTypes.length + j] = item;
+            }
+        }
+        return arr;
+    }
+
+    @Test(dataProvider = "typesAndTemplates")
+    public void testParameters(Class<? extends BrooklynObject> testClass, String template) {
+        addCatalogItems(template.replace("${testClass}", testClass.getName()));
+
+        ConfigKey<String> SIMPLE_CONFIG = ConfigKeys.newStringConfigKey("simple");
+        SpecParameter<String> SIMPLE_PARAM = new BasicSpecParameter<>("simple", true, SIMPLE_CONFIG);
+        CatalogItem<?, ?> item = catalog.getCatalogItem(SYMBOLIC_NAME, TEST_VERSION);
+        assertEquals(item.getParameters(), ImmutableList.of(SIMPLE_PARAM));
+        @SuppressWarnings({"unchecked", "rawtypes"})
+        AbstractBrooklynObjectSpec<?,?> spec = catalog.createSpec((CatalogItem)item);
+        assertEquals(ImmutableSet.copyOf(spec.getParameters()), ImmutableList.of(SIMPLE_PARAM));
+    }
+
+    @Test(dataProvider = "brooklynTypes")
+    public void testDefaultParameters(Class<? extends BrooklynObject> testClass) {
+        addCatalogItems(
+            "brooklyn.catalog:",
+            "  id: " + SYMBOLIC_NAME,
+            "  version: " + TEST_VERSION,
+            "  item:",
+            "    type: "+ testClass.getName());
+
+        CatalogItem<?, ?> item = catalog.getCatalogItem(SYMBOLIC_NAME, TEST_VERSION);
+        assertEquals(ImmutableSet.copyOf(item.getParameters()), ImmutableSet.copyOf(BasicSpecParameter.fromClass(mgmt(), testClass)));
+        @SuppressWarnings({"unchecked", "rawtypes"})
+        AbstractBrooklynObjectSpec<?,?> spec = (AbstractBrooklynObjectSpec<?,?>) catalog.createSpec((CatalogItem)item);
+        assertEquals(ImmutableSet.copyOf(spec.getParameters()), ImmutableSet.copyOf(BasicSpecParameter.fromClass(mgmt(),testClass)));
+    }
+
+
+    @Test
+    public void testRootParametersUnwrapped() {
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  id: " + SYMBOLIC_NAME,
+                "  version: " + TEST_VERSION,
+                "  item:",
+                "    services:",
+                "    - type: " + ConfigEntityForTest.class.getName(),
+                "    brooklyn.parameters:",
+                "    - simple");
+
+        CatalogItem<?, ?> item = catalog.getCatalogItem(SYMBOLIC_NAME, TEST_VERSION);
+        List<SpecParameter<?>> inputs = item.getParameters();
+        assertEquals(inputs.size(), 1);
+        SpecParameter<?> firstInput = inputs.get(0);
+        assertEquals(firstInput.getLabel(), "simple");
+    }
+
+    @Test
+    public void testExplicitParametersInMetaOverride() {
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  id: " + SYMBOLIC_NAME,
+                "  version: " + TEST_VERSION,
+                "  brooklyn.parameters:",
+                "    - metaSimple",
+                "  item:",
+                "    type: " + ConfigEntityForTest.class.getName(),
+                "    brooklyn.parameters:",
+                "    - simple");
+
+        CatalogItem<?, ?> item = catalog.getCatalogItem(SYMBOLIC_NAME, TEST_VERSION);
+        List<SpecParameter<?>> inputs = item.getParameters();
+        assertEquals(inputs.size(), 1);
+        SpecParameter<?> firstInput = inputs.get(0);
+        assertEquals(firstInput.getLabel(), "metaSimple");
+    }
+
+    @Test(dataProvider="brooklynTypes")
+    public void testDepentantCatalogsInheritParameters(Class<? extends BrooklynObject> type) {
+        if (type == ConfigLocationForTest.class) {
+            //TODO
+            throw new SkipException("Locations don't inherit parameters, should migrate to the type registry first");
+        }
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  version: " + TEST_VERSION,
+                "  items:",
+                "  - id: paramItem",
+                "    item:",
+                "      type: " + type.getName(),
+                "      brooklyn.parameters:",
+                "      - simple",
+                "  - id: " + SYMBOLIC_NAME,
+                "    item:",
+                "      type: paramItem:" + TEST_VERSION);
+
+        CatalogItem<?, ?> item = catalog.getCatalogItem(SYMBOLIC_NAME, TEST_VERSION);
+        List<SpecParameter<?>> inputs = item.getParameters();
+        assertEquals(inputs.size(), 1);
+        SpecParameter<?> firstInput = inputs.get(0);
+        assertEquals(firstInput.getLabel(), "simple");
+    }
+
+    @Test(dataProvider="brooklynTypes")
+    public void testDepentantCatalogsOverrideParameters(Class<? extends BrooklynObject> type) {
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  version: " + TEST_VERSION,
+                "  items:",
+                "  - id: paramItem",
+                "    item:",
+                "      type: " + type.getName(),
+                "      brooklyn.parameters:",
+                "      - simple",
+                "  - id: " + SYMBOLIC_NAME,
+                "    item:",
+                "      type: paramItem:" + TEST_VERSION,
+                "      brooklyn.parameters:",
+                "      - override");
+
+        CatalogItem<?, ?> item = catalog.getCatalogItem(SYMBOLIC_NAME, TEST_VERSION);
+        List<SpecParameter<?>> inputs = item.getParameters();
+        assertEquals(inputs.size(), 1);
+        SpecParameter<?> firstInput = inputs.get(0);
+        assertEquals(firstInput.getLabel(), "override");
+    }
+
+    @Test
+    public void testChildEntitiyHasParameters() {
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  id: " + SYMBOLIC_NAME,
+                "  version: " + TEST_VERSION,
+                "  items:",
+                "  - item:",
+                "      type: " + ConfigEntityForTest.class.getName(),
+                "      brooklyn.children:",
+                "      - type: " + ConfigEntityForTest.class.getName(),
+                "        brooklyn.parameters:",
+                "        - simple");
+
+        CatalogItem<?, ?> item = catalog.getCatalogItem(SYMBOLIC_NAME, TEST_VERSION);
+        @SuppressWarnings({ "rawtypes", "unchecked"})
+        EntitySpec<?> parentSpec = (EntitySpec<?>) catalog.createSpec((CatalogItem)item);
+        EntitySpec<?> spec = parentSpec.getChildren().get(0);
+        SpecParameter<?> firstInput = spec.getParameters().get(0);
+        assertEquals(firstInput.getLabel(), "simple");
+    }
+
+    @Test
+    public void testAppSpecInheritsCatalogParameters() {
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  version: " + TEST_VERSION,
+                "  items:",
+                "  - id: " + SYMBOLIC_NAME,
+                "    item:",
+                "      type: " + BasicApplication.class.getName(),
+                "      brooklyn.parameters:",
+                "      - simple");
+
+        EntitySpec<? extends Application> spec = EntityManagementUtils.createEntitySpecForApplication(mgmt(), joinLines(
+                "services:",
+                "- type: " + ver(SYMBOLIC_NAME)));
+        List<SpecParameter<?>> params = spec.getParameters();
+        assertEquals(params.size(), 1);
+        SpecParameter<?> firstInput = params.get(0);
+        assertEquals(firstInput.getLabel(), "simple");
+    }
+
+    @Test
+    public void testParametersCoercedOnSetAndReferences() throws Exception {
+        Integer testValue = Integer.valueOf(55);
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  id: " + SYMBOLIC_NAME,
+                "  version: " + TEST_VERSION,
+                "  brooklyn.parameters:",
+                "  - name: num",
+                "    type: integer",
+                "  item:",
+                "    type: " + BasicApplication.class.getName(),
+                "    brooklyn.children:",
+                "    - type: " + ConfigEntityForTest.class.getName(),
+                "      brooklyn.config:",
+                "        refConfig: $brooklyn:scopeRoot().config(\"num\")",
+                "    - type: " + ConfigEntityForTest.class.getName(),
+                "      brooklyn.config:",
+                "        refConfig: $brooklyn:config(\"num\")"); //inherited config
+
+        Entity app = createAndStartApplication(
+                "services:",
+                "- type: " + BasicApplication.class.getName(),
+                "  brooklyn.children:",
+                "  - type: " + ver(SYMBOLIC_NAME),
+                "    brooklyn.config:",
+                "      num: \"" + testValue + "\"");
+
+        Entity scopeRoot = Iterables.getOnlyElement(app.getChildren());
+
+        ConfigKey<Object> numKey = ConfigKeys.newConfigKey(Object.class, "num");
+        assertEquals(scopeRoot.config().get(numKey), testValue);
+
+        ConfigKey<Object> refConfigKey = ConfigKeys.newConfigKey(Object.class, "refConfig");
+
+        Iterator<Entity> childIter = scopeRoot.getChildren().iterator();
+        Entity c1 = childIter.next();
+        assertEquals(c1.config().get(refConfigKey), testValue);
+        Entity c2 = childIter.next();
+        assertEquals(c2.config().get(refConfigKey), testValue);
+        assertFalse(childIter.hasNext());
+    }
+
+}