You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2016/04/20 18:37:37 UTC

[2/3] brooklyn-server git commit: Add integration tests for CatalogBomScanner.

Add integration tests for CatalogBomScanner.


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

Branch: refs/heads/master
Commit: 3277583f5e64722ffbfaee6f4eda7b5c7ffd357b
Parents: 7046ba5
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Apr 15 16:58:57 2016 +0100
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Wed Apr 20 17:28:54 2016 +0100

----------------------------------------------------------------------
 .../catalog/internal/CatalogBomScanner.java     |  10 +-
 .../catalog/internal/CatalogBomScannerTest.java | 173 +++++++++++++++++++
 .../org/apache/brooklyn/util/text/Strings.java  |  16 +-
 .../apache/brooklyn/util/text/StringsTest.java  |  26 +++
 4 files changed, 217 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3277583f/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScanner.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScanner.java
index 9c14d6d..ae2885a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScanner.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScanner.java
@@ -91,7 +91,7 @@ public class CatalogBomScanner {
 
     public void setWhiteList(String whiteListText) {
         LOG.debug("Setting whiteList to ", whiteListText);
-        this.whiteList = Strings.parseCsv(whiteListText, ",");
+        this.whiteList = Strings.parseCsv(whiteListText);
     }
 
     public List<String> getBlackList() {
@@ -104,7 +104,7 @@ public class CatalogBomScanner {
 
     public void setBlackList(String blackListText) {
         LOG.debug("Setting blackList to ", blackListText);
-        this.blackList = Strings.parseCsv(blackListText, ",");
+        this.blackList = Strings.parseCsv(blackListText);
     }
 
     public class CatalogPopulator extends BundleTracker<Iterable<? extends CatalogItem<?, ?>>> {
@@ -170,7 +170,7 @@ public class CatalogBomScanner {
             } catch (Exception e) {
                 Exceptions.propagateIfFatal(e);
                 LOG.warn(Strings.join(new String[] {
-                    "Failed to remove", item.getSymbolicName(), item.getVersion(), "{} {} from catalog"
+                    "Failed to remove", item.getSymbolicName(), item.getVersion(), "from catalog"
                 }, " "), e);
             }
         }
@@ -200,7 +200,9 @@ public class CatalogBomScanner {
             return catalogItems;
         }
 
-        private Iterable<? extends CatalogItem<?, ?>> removeAnyApplications(Iterable<? extends CatalogItem<?, ?>> catalogItems) {
+        private Iterable<? extends CatalogItem<?, ?>> removeAnyApplications(
+            Iterable<? extends CatalogItem<?, ?>> catalogItems) {
+
             List<CatalogItem<?, ?>> result = MutableList.of();
 
             for (CatalogItem<?, ?> item: catalogItems) {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3277583f/karaf/itest/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScannerTest.java
----------------------------------------------------------------------
diff --git a/karaf/itest/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScannerTest.java b/karaf/itest/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScannerTest.java
new file mode 100644
index 0000000..137ede4
--- /dev/null
+++ b/karaf/itest/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogBomScannerTest.java
@@ -0,0 +1,173 @@
+/*
+ * 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.core.catalog.internal;
+
+import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.core.BrooklynVersion;
+import org.apache.brooklyn.test.Asserts;
+import org.apache.brooklyn.test.IntegrationTest;
+import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.time.Duration;
+import org.apache.karaf.features.BootFinished;
+import org.apache.karaf.features.FeaturesService;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.karaf.options.KarafDistributionOption;
+import org.ops4j.pax.exam.karaf.options.LogLevelOption;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.ops4j.pax.exam.spi.reactors.PerMethod;
+import org.ops4j.pax.exam.util.Filter;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.inject.Inject;
+
+import java.util.Dictionary;
+
+import static org.apache.brooklyn.KarafTestUtils.defaultOptionsWith;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfigurationFilePut;
+import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.keepRuntimeFolder;
+import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.logLevel;
+
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerMethod.class)
+public class CatalogBomScannerTest {
+
+    private static final Logger LOG = LoggerFactory.getLogger(CatalogBomScannerTest.class);
+    public static final String KARAF_INIT_BLUEPRINT_BOMSCANNER_PID = "org.apache.brooklyn.core.catalog.bomscanner";
+
+    @Inject
+    protected FeaturesService featuresService;
+
+    @Inject
+    protected ConfigurationAdmin configAdmin;
+
+    @Inject
+    protected ManagementContext managementContext;
+
+    /**
+     * To make sure the tests run only when the boot features are fully
+     * installed
+     */
+    @Inject
+    @Filter(timeout = 120000)
+    BootFinished bootFinished;
+
+
+    @Configuration
+    public static Option[] configuration() throws Exception {
+        return defaultOptionsWith(
+            logLevel(LogLevelOption.LogLevel.DEBUG),
+            editConfigurationFilePut("etc/org.ops4j.pax.logging.cfg", "log4j.logger.org.apache.brooklyn", "DEBUG"),
+            keepRuntimeFolder()
+            // Uncomment this for remote debugging the tests on port 5005
+//             , KarafDistributionOption.debugConfiguration()
+        );
+    }
+
+
+    @Test
+    @Category(IntegrationTest.class)
+    public void shouldFindBrooklynSoftwareBaseCatalogExampleServer() throws Exception {
+        final CatalogItem<?, ?> catalogItem = managementContext.getCatalog()
+            .getCatalogItem("server-template", BrooklynVersion.get());  // from brooklyn-software-base catalog.bom
+        assertNotNull(catalogItem);
+        assertEquals("Template: Server", catalogItem.getDisplayName());
+    }
+
+
+
+    @Test
+    @Category(IntegrationTest.class)
+    public void shouldFindWebAppCatalogExampleOnlyAfterItsFeatureIsInstalled() throws Exception {
+
+        final CatalogItem<?, ?> catalogItem = managementContext.getCatalog()
+            .getCatalogItem("load-balancer", BrooklynVersion.get());  // from brooklyn-software-webapp
+        assertNull(catalogItem);
+
+        featuresService.installFeature("brooklyn-software-webapp", BrooklynVersion.get());
+
+        Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TEN_SECONDS), new Runnable() {
+            @Override
+            public void run() {
+                final CatalogItem<?, ?> lb = managementContext.getCatalog()
+                    .getCatalogItem("load-balancer", BrooklynVersion.get());
+                assertNotNull(lb);
+            }
+        });
+    }
+
+
+
+    @Test
+    @Category(IntegrationTest.class)
+    public void shouldNotFindNoSqlCatalogExampleIfItIsBlacklisted() throws Exception {
+
+        // verify no NoSQL entities are loaded yet
+        final String riakTemplate = "bash-web-and-riak-template"; // from brooklyn-software-nosql
+        CatalogItem<?, ?> catalogItem = getCatalogItem(riakTemplate);
+        assertNull(catalogItem);
+
+        final String redisStore = "org.apache.brooklyn.entity.nosql.redis.RedisStore"; // ditto
+        catalogItem = getCatalogItem(redisStore);
+        assertNull(catalogItem);
+
+        // blacklist the org.apache.brooklyn.software-nosql bundle
+        final org.osgi.service.cm.Configuration bomScannerConfig =
+            configAdmin.getConfiguration(KARAF_INIT_BLUEPRINT_BOMSCANNER_PID);
+        final Dictionary<String, Object> bomProps = bomScannerConfig.getProperties();
+        assertEquals(".*", bomProps.get("whiteList"));
+        assertEquals("", bomProps.get("blackList"));
+
+        bomProps.put("blackList", ".*nosql.*");
+        bomScannerConfig.update(bomProps);
+
+        // install the NoSQL feature
+        featuresService.installFeature("brooklyn-software-nosql", BrooklynVersion.get());
+
+        // verify that the non-template entity org.apache.brooklyn.entity.nosql.redis.RedisStore gets added to catalog
+        Asserts.succeedsEventually(MutableMap.of("timeout", Duration.TEN_SECONDS), new Runnable() {
+            @Override
+            public void run() {
+                final CatalogItem<?, ?> redis = managementContext.getCatalog()
+                    .getCatalogItem(redisStore, BrooklynVersion.get());
+                assertNotNull(redis);
+            }
+        });
+
+        // verify that the template application hasn't made it into the catalog (because it's blacklisted)
+        catalogItem = getCatalogItem(riakTemplate);
+        assertNull(catalogItem);
+    }
+
+    private CatalogItem<?, ?> getCatalogItem(String itemName) {
+        return managementContext.getCatalog().getCatalogItem(itemName, BrooklynVersion.get());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3277583f/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java b/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java
index 96c81b1..6e3afab 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java
@@ -919,14 +919,22 @@ public class Strings {
 
     /**
      * Parses a string as comma separated values and returns a list of the entries with whitespace removed.
-     * @param csv
-     * @param separators
+     * @param csv The "comma" separated values.
+     * @param separatorRegex Regex of separatorRegex.
      */
-    public static List<String> parseCsv(String csv, String separators) {
+    public static List<String> parseCsv(String csv, String separatorRegex) {
         List<String> result = MutableList.of();
-        for (String value: csv.split(separators)) {
+        final String input = csv.trim();
+        if ("".equals(input)) {
+            return result;
+        }
+        for (String value: input.split(separatorRegex)) {
             result.add(value.trim());
         }
         return result;
     }
+
+    public static List<String> parseCsv(String csv) {
+        return parseCsv(csv, ",");
+    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3277583f/utils/common/src/test/java/org/apache/brooklyn/util/text/StringsTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/text/StringsTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/text/StringsTest.java
index a861a10..cc758ab 100644
--- a/utils/common/src/test/java/org/apache/brooklyn/util/text/StringsTest.java
+++ b/utils/common/src/test/java/org/apache/brooklyn/util/text/StringsTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
 import java.util.Arrays;
+import java.util.List;
 
 import org.apache.brooklyn.test.FixedLocaleTest;
 import org.apache.brooklyn.util.collections.MutableMap;
@@ -359,4 +360,29 @@ public class StringsTest extends FixedLocaleTest {
         Assert.assertEquals(Strings.getRemainderOfLineAfter("the message is hello", null), null);
         Assert.assertEquals(Strings.getRemainderOfLineAfter("the message is hello", "foo"), null);
     }
+
+    @Test
+    public void shouldParseCsv() {
+
+        final String commaSeparated = "liberty, equality, fraternity";
+        final List<String> ideals = Strings.parseCsv(commaSeparated);
+        Assert.assertTrue(ideals.contains("liberty"));
+        Assert.assertTrue(ideals.contains("equality"));
+        Assert.assertTrue(ideals.contains("fraternity"));
+
+        final String assortedWords = "this, that; the, other";
+        final List<String> thisAndThat = Strings.parseCsv(assortedWords, "[,;]");
+        Assert.assertEquals(4, thisAndThat.size());
+        Assert.assertTrue(thisAndThat.contains("this"));
+        Assert.assertTrue(thisAndThat.contains("that"));
+        Assert.assertTrue(thisAndThat.contains("the"));
+        Assert.assertTrue(thisAndThat.contains("other"));
+
+        final List<String> differentSep = Strings.parseCsv(assortedWords, "@");
+        Assert.assertEquals(1, differentSep.size());
+        Assert.assertTrue(differentSep.contains(assortedWords));
+
+        Assert.assertEquals(0, Strings.parseCsv("", ",").size());
+        Assert.assertEquals(0, Strings.parseCsv("        ", ",").size());
+    }
 }