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());
+ }
}