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:26 UTC
[17/21] incubator-brooklyn git commit: Unwrap camp plan with parent
overriding child displayName
Unwrap camp plan with parent overriding child displayName
Don't prevent unwrapping in case displayName is different, override the child's name instead
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/94263c60
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/94263c60
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/94263c60
Branch: refs/heads/master
Commit: 94263c60ca54f37dab8855b48cc38f47bd11d23e
Parents: ae30539
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Fri Nov 6 18:48:05 2015 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Mon Nov 9 12:49:38 2015 +0200
----------------------------------------------------------------------
.../core/mgmt/EntityManagementUtils.java | 31 +---
.../brooklyn/camp/brooklyn/AppYamlTest.java | 9 +-
.../camp/brooklyn/ApplicationsYamlTest.java | 163 ++++++++++++++++---
3 files changed, 149 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/94263c60/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
index 9c4ebc1..59bcc87 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
@@ -246,7 +246,7 @@ public class EntityManagementUtils {
* See {@link #WRAPPER_APP_MARKER}. */
@Beta //where should this live long-term?
public static void mergeWrapperParentSpecToChildEntity(EntitySpec<? extends Application> wrapperParent, EntitySpec<?> wrappedChild) {
- if (Strings.isEmpty(wrappedChild.getDisplayName()))
+ if (Strings.isNonEmpty(wrapperParent.getDisplayName()))
wrappedChild.displayName(wrapperParent.getDisplayName());
if (!wrapperParent.getLocations().isEmpty())
wrappedChild.locations(wrapperParent.getLocations());
@@ -270,7 +270,7 @@ public class EntityManagementUtils {
* for use when adding from a plan specifying an application which was wrapped because it had to be.
* @see #WRAPPER_APP_MARKER */
public static boolean canPromoteWrappedApplication(EntitySpec<? extends Application> app) {
- if (app.getChildren().size()!=1)
+ if (!hasSingleChild(app))
return false;
EntitySpec<?> childSpec = Iterables.getOnlyElement(app.getChildren());
@@ -283,9 +283,8 @@ public class EntityManagementUtils {
/** returns true if the spec is for an empty-ish wrapper app,
* for use when adding from a plan specifying multiple entities but nothing significant at the application level.
* @see #WRAPPER_APP_MARKER */
- public static boolean canPromoteChildrenInWrappedApplication(EntitySpec<?> spec) {
- return canPromoteBasedOnName(spec) &&
- isWrapperApp(spec) &&
+ public static boolean canPromoteChildrenInWrappedApplication(EntitySpec<? extends Application> spec) {
+ return isWrapperApp(spec) && hasSingleChild(spec) &&
//equivalent to no keys starting with "brooklyn."
spec.getEnrichers().isEmpty() &&
spec.getInitializers().isEmpty() &&
@@ -296,26 +295,8 @@ public class EntityManagementUtils {
return Boolean.TRUE.equals(spec.getConfig().get(EntityManagementUtils.WRAPPER_APP_MARKER));
}
- private static boolean canPromoteBasedOnName(EntitySpec<?> spec) {
- if (!Strings.isEmpty(spec.getDisplayName())) {
- if (spec.getChildren().size()==1) {
- String childName = Iterables.getOnlyElement(spec.getChildren()).getDisplayName();
- if (Strings.isEmpty(childName) || childName.equals(spec.getDisplayName())) {
- // if child has no name, or it's the same, could still promote
- return true;
- } else {
- return false;
- }
- } else {
- // if name set at root and promoting children would be ambiguous, do not promote
- return false;
- }
- } else if (spec.getChildren().size()>1) {
- // don't allow multiple children if a name is specified as a root
- return false;
- } else {
- return true;
- }
+ private static boolean hasSingleChild(EntitySpec<?> spec) {
+ return spec.getChildren().size() == 1;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/94263c60/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AppYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AppYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AppYamlTest.java
index c4e1d7d..c462889 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AppYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AppYamlTest.java
@@ -19,10 +19,13 @@
package org.apache.brooklyn.camp.brooklyn;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.io.StringReader;
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
import org.apache.brooklyn.core.test.entity.TestApplication;
import org.apache.brooklyn.core.test.entity.TestEntity;
import org.apache.brooklyn.entity.stock.BasicApplication;
@@ -66,10 +69,10 @@ public class AppYamlTest extends AbstractYamlTest {
"- serviceType: org.apache.brooklyn.core.test.entity.TestApplication",
" name: myEntityName");
- BasicApplication app = (BasicApplication) createStartWaitAndLogApplication(new StringReader(yaml));
- TestApplication entity = (TestApplication) Iterables.getOnlyElement(app.getChildren());
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ assertNull(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
assertEquals(app.getDisplayName(), "myTopLevelName");
- assertEquals(entity.getDisplayName(), "myEntityName");
+ assertEquals(app.getChildren().size(), 0);
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/94263c60/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ApplicationsYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ApplicationsYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ApplicationsYamlTest.java
index 01d90f5..b58e5ca 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ApplicationsYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ApplicationsYamlTest.java
@@ -22,8 +22,14 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
+import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.camp.brooklyn.TestSensorAndEffectorInitializer.TestConfigurableInitializer;
import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
+import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
+import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
+import org.apache.brooklyn.core.test.policy.TestEnricher;
+import org.apache.brooklyn.core.test.policy.TestPolicy;
import org.apache.brooklyn.entity.stock.BasicApplication;
import org.apache.brooklyn.entity.stock.BasicEntity;
import org.slf4j.Logger;
@@ -36,24 +42,31 @@ import com.google.common.collect.Iterables;
public class ApplicationsYamlTest extends AbstractYamlTest {
private static final Logger log = LoggerFactory.getLogger(ApplicationsYamlTest.class);
+ @Override
+ protected LocalManagementContext newTestManagementContext() {
+ // Don't need osgi
+ return LocalManagementContextForTests.newInstance();
+ }
+
@Test
public void testWrapsEntity() throws Exception {
Entity app = createAndStartApplication(
"services:",
"- type: " + BasicEntity.class.getName());
- assertTrue(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
- assertTrue(app instanceof BasicApplication);
- assertTrue(Iterables.getOnlyElement(app.getChildren()) instanceof BasicEntity);
+ assertWrapped(app, BasicEntity.class);
}
@Test
- public void testDoesNotWrapApp() throws Exception {
+ public void testWrapsMultipleApps() throws Exception {
Entity app = createAndStartApplication(
"services:",
+ "- type: " + BasicApplication.class.getName(),
"- type: " + BasicApplication.class.getName());
- assertNull(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
+ assertTrue(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
assertTrue(app instanceof BasicApplication);
- assertTrue(app.getChildren().isEmpty());
+ assertEquals(app.getChildren().size(), 2);
+ }
+
}
@Test
@@ -62,10 +75,15 @@ public class ApplicationsYamlTest extends AbstractYamlTest {
"wrappedApp: true",
"services:",
"- type: " + BasicApplication.class.getName());
- assertTrue(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
- assertTrue(app instanceof BasicApplication);
- assertTrue(Iterables.getOnlyElement(app.getChildren()) instanceof BasicApplication);
- assertTrue(Iterables.getOnlyElement(app.getChildren()).getChildren().isEmpty());
+ assertWrapped(app, BasicApplication.class);
+ }
+
+ @Test
+ public void testDoesNotWrapApp() throws Exception {
+ Entity app = createAndStartApplication(
+ "services:",
+ "- type: " + BasicApplication.class.getName());
+ assertDoesNotWrap(app, BasicApplication.class, null);
}
@Test
@@ -74,41 +92,134 @@ public class ApplicationsYamlTest extends AbstractYamlTest {
"wrappedApp: false",
"services:",
"- type: " + BasicApplication.class.getName());
- assertNull(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
- assertTrue(app instanceof BasicApplication);
- assertTrue(app.getChildren().isEmpty());
+ assertDoesNotWrap(app, BasicApplication.class, null);
}
@Test
- public void testWrapsEntityIfDifferentTopLevelName() throws Exception {
+ public void testDoesNotWrapEntityIfDifferentTopLevelName() throws Exception {
Entity app = createAndStartApplication(
"name: topLevel",
"services:",
"- type: " + BasicApplication.class.getName(),
" name: bottomLevel");
- assertTrue(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
- assertTrue(app instanceof BasicApplication);
- assertEquals(app.getDisplayName(), "topLevel");
- assertTrue(Iterables.getOnlyElement(app.getChildren()) instanceof BasicApplication);
- assertTrue(Iterables.getOnlyElement(app.getChildren()).getChildren().isEmpty());
- assertEquals(Iterables.getOnlyElement(app.getChildren()).getDisplayName(), "bottomLevel");
+ assertDoesNotWrap(app, BasicApplication.class, "topLevel");
}
-
+
@Test
public void testDoesNotWrapsEntityIfNoNameOnService() throws Exception {
Entity app = createAndStartApplication(
"name: topLevel",
"services:",
"- type: " + BasicApplication.class.getName());
- assertNull(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
- assertTrue(app instanceof BasicApplication);
- assertTrue(app.getChildren().isEmpty());
- assertEquals(app.getDisplayName(), "topLevel");
+ assertDoesNotWrap(app, BasicApplication.class, "topLevel");
}
-
+
+ @Test
+ public void testDoesNotWrapCatalogItemWithDisplayName() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " id: simple",
+ " version: " + TEST_VERSION,
+ " displayName: catalogLevel",
+ " item:",
+ " services:",
+ " - type: " + BasicApplication.class.getName());
+ Entity app = createAndStartApplication(
+ "name: topLevel",
+ "services:",
+ "- type: simple:" + TEST_VERSION);
+ assertDoesNotWrap(app, BasicApplication.class, "topLevel");
+ }
+
+ @Test
+ public void testDoesNotWrapCatalogItemWithServiceName() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " id: simple",
+ " version: " + TEST_VERSION,
+ " displayName: catalogLevel",
+ " item:",
+ " services:",
+ " - type: " + BasicApplication.class.getName(),
+ " defaultDisplayName: defaultServiceName",
+ " displayName: explicitServiceName");
+ Entity app = createAndStartApplication(
+ "name: topLevel",
+ "services:",
+ "- type: simple:" + TEST_VERSION);
+ assertDoesNotWrap(app, BasicApplication.class, "topLevel");
+ }
+
+ @Test
+ public void testDoesNotWrapCatalogItemAndOverridesName() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " id: simple",
+ " version: " + TEST_VERSION,
+ " displayName: catalogLevel",
+ " item:",
+ " services:",
+ " - type: " + BasicApplication.class.getName());
+ Entity app = createAndStartApplication(
+ "services:",
+ "- type: simple:" + TEST_VERSION,
+ " name: serviceLevel");
+ assertDoesNotWrap(app, BasicApplication.class, "serviceLevel");
+ }
+
+ @Test
+ public void testDoesNotWrapCatalogItemAndUsesCatalogName() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " id: simple",
+ " version: " + TEST_VERSION,
+ " displayName: catalogLevel",
+ " item:",
+ " services:",
+ " - type: " + BasicApplication.class.getName());
+ Entity app = createAndStartApplication(
+ "services:",
+ "- type: simple:" + TEST_VERSION);
+ assertDoesNotWrap(app, BasicApplication.class, "catalogLevel");
+ }
+
+ @Test
+ public void testDoesNotWrapCatalogItemAndUsesCatalogServiceName() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " id: simple",
+ " version: " + TEST_VERSION,
+ " displayName: catalogLevel",
+ " item:",
+ " services:",
+ " - type: " + BasicApplication.class.getName(),
+ " name: catalogServiceLevel");
+ Entity app = createAndStartApplication(
+ "services:",
+ "- type: simple:" + TEST_VERSION);
+ assertDoesNotWrap(app, BasicApplication.class, "catalogServiceLevel");
+ }
+
@Override
protected Logger getLogger() {
return log;
}
+ private void assertWrapped(Entity app, Class<? extends Entity> wrappedEntityType) {
+ assertTrue(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
+ assertTrue(app instanceof BasicApplication);
+ Entity child = Iterables.getOnlyElement(app.getChildren());
+ assertTrue(wrappedEntityType.isInstance(child));
+ assertTrue(child.getChildren().isEmpty());
+ }
+
+ private void assertDoesNotWrap(Entity app, Class<? extends Application> entityType, String displayName) {
+ assertNull(app.getConfig(EntityManagementUtils.WRAPPER_APP_MARKER));
+ assertTrue(entityType.isInstance(app));
+ if (displayName != null) {
+ assertEquals(app.getDisplayName(), displayName);
+ }
+ assertEquals(app.getChildren().size(), 0);
+ }
+
}