You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ha...@apache.org on 2015/08/05 22:56:12 UTC
[08/20] incubator-brooklyn git commit: Package rename to
org.apache.brooklyn: usage/camp/
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/LocationsYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/LocationsYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/LocationsYamlTest.java
new file mode 100644
index 0000000..6f79471
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/LocationsYamlTest.java
@@ -0,0 +1,285 @@
+/*
+ * 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 static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.io.StringReader;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.Entity;
+import brooklyn.location.Location;
+import brooklyn.location.MachineLocation;
+import brooklyn.location.basic.FixedListMachineProvisioningLocation;
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
+import brooklyn.location.basic.MultiLocation;
+import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.text.Strings;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+
+public class LocationsYamlTest extends AbstractYamlTest {
+ private static final Logger log = LoggerFactory.getLogger(LocationsYamlTest.class);
+
+ @Test
+ public void testLocationString() throws Exception {
+ String yaml =
+ "location: localhost\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ LocalhostMachineProvisioningLocation loc = (LocalhostMachineProvisioningLocation) Iterables.getOnlyElement(app.getLocations());
+ assertNotNull(loc);
+ }
+
+ @Test
+ public void testLocationComplexString() throws Exception {
+ String yaml =
+ "location: localhost:(name=myname)\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ LocalhostMachineProvisioningLocation loc = (LocalhostMachineProvisioningLocation) Iterables.getOnlyElement(app.getLocations());
+ assertEquals(loc.getDisplayName(), "myname");
+ }
+
+ @Test
+ public void testLocationSplitLineWithNoConfig() throws Exception {
+ String yaml =
+ "location:\n"+
+ " localhost\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ LocalhostMachineProvisioningLocation loc = (LocalhostMachineProvisioningLocation) Iterables.getOnlyElement(app.getLocations());
+ assertNotNull(loc);
+ }
+
+ @Test
+ public void testMultiLocations() throws Exception {
+ String yaml =
+ "locations:\n"+
+ "- localhost:(name=loc1)\n"+
+ "- localhost:(name=loc2)\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ List<Location> locs = ImmutableList.copyOf(app.getLocations());
+ assertEquals(locs.size(), 2, "locs="+locs);
+ LocalhostMachineProvisioningLocation loc1 = (LocalhostMachineProvisioningLocation) locs.get(0);
+ LocalhostMachineProvisioningLocation loc2 = (LocalhostMachineProvisioningLocation) locs.get(1);
+ assertEquals(loc1.getDisplayName(), "loc1");
+ assertEquals(loc2.getDisplayName(), "loc2");
+ }
+
+ @Test
+ public void testLocationConfig() throws Exception {
+ String yaml =
+ "location:\n"+
+ " localhost:\n"+
+ " displayName: myname\n"+
+ " myconfkey: myconfval\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ LocalhostMachineProvisioningLocation loc = (LocalhostMachineProvisioningLocation) Iterables.getOnlyElement(app.getLocations());
+ assertEquals(loc.getDisplayName(), "myname");
+ assertEquals(loc.config().getLocalBag().getStringKey("myconfkey"), "myconfval");
+ }
+
+ @Test
+ public void testMultiLocationConfig() throws Exception {
+ String yaml =
+ "locations:\n"+
+ "- localhost:\n"+
+ " displayName: myname1\n"+
+ " myconfkey: myconfval1\n"+
+ "- localhost:\n"+
+ " displayName: myname2\n"+
+ " myconfkey: myconfval2\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ List<Location> locs = ImmutableList.copyOf(app.getLocations());
+ assertEquals(locs.size(), 2, "locs="+locs);
+ LocalhostMachineProvisioningLocation loc1 = (LocalhostMachineProvisioningLocation) locs.get(0);
+ LocalhostMachineProvisioningLocation loc2 = (LocalhostMachineProvisioningLocation) locs.get(1);
+ assertEquals(loc1.getDisplayName(), "myname1");
+ assertEquals(loc1.config().getLocalBag().getStringKey("myconfkey"), "myconfval1");
+ assertEquals(loc2.getDisplayName(), "myname2");
+ assertEquals(loc2.config().getLocalBag().getStringKey("myconfkey"), "myconfval2");
+ }
+
+ // TODO Fails because PlanInterpretationContext constructor throws NPE on location's value (using ImmutableMap).
+ @Test(groups="WIP")
+ public void testLocationBlank() throws Exception {
+ String yaml =
+ "location: \n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ assertTrue(app.getLocations().isEmpty(), "locs="+app.getLocations());
+ }
+
+ @Test
+ public void testInvalidLocationAndLocations() throws Exception {
+ String yaml =
+ "location: localhost\n"+
+ "locations:\n"+
+ "- localhost\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ try {
+ createStartWaitAndLogApplication(new StringReader(yaml));
+ } catch (IllegalStateException e) {
+ if (!e.toString().contains("Conflicting 'location' and 'locations'")) throw e;
+ }
+ }
+
+ @Test
+ public void testInvalidLocationList() throws Exception {
+ // should have used "locations:" instead of "location:"
+ String yaml =
+ "location:\n"+
+ "- localhost\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ try {
+ createStartWaitAndLogApplication(new StringReader(yaml));
+ } catch (IllegalStateException e) {
+ if (!e.toString().contains("must be a string or map")) throw e;
+ }
+ }
+
+ @Test
+ public void testRootLocationPassedToChild() throws Exception {
+ String yaml =
+ "locations:\n"+
+ "- localhost:(name=loc1)\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ Entity child = Iterables.getOnlyElement(app.getChildren());
+ LocalhostMachineProvisioningLocation loc = (LocalhostMachineProvisioningLocation) Iterables.getOnlyElement(child.getLocations());
+ assertEquals(loc.getDisplayName(), "loc1");
+ }
+
+ @Test
+ public void testByonYamlHosts() throws Exception {
+ String yaml =
+ "locations:\n"+
+ "- byon:\n"+
+ " user: root\n"+
+ " privateKeyFile: /tmp/key_file\n"+
+ " hosts: \n"+
+ " - 127.0.0.1\n"+
+ " - brooklyn@127.0.0.2\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ Entity child = Iterables.getOnlyElement(app.getChildren());
+ FixedListMachineProvisioningLocation<?> loc = (FixedListMachineProvisioningLocation<?>) Iterables.getOnlyElement(child.getLocations());
+ Assert.assertEquals(loc.getChildren().size(), 2);
+
+ SshMachineLocation l1 = (SshMachineLocation)loc.obtain();
+ assertUserAddress(l1, "root", "127.0.0.1");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "brooklyn", "127.0.0.2");
+ Assert.assertEquals(l1.getConfig(SshMachineLocation.PRIVATE_KEY_FILE), "/tmp/key_file");
+ }
+
+ @Test
+ public void testByonYamlHostsString() throws Exception {
+ String yaml =
+ "locations:\n"+
+ "- byon:\n"+
+ " user: root\n"+
+ " hosts: \"{127.0.{0,127}.{1-2},brooklyn@127.0.0.127}\"\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ Entity child = Iterables.getOnlyElement(app.getChildren());
+ FixedListMachineProvisioningLocation<?> loc = (FixedListMachineProvisioningLocation<?>) Iterables.getOnlyElement(child.getLocations());
+ Assert.assertEquals(loc.getChildren().size(), 5);
+
+ assertUserAddress((SshMachineLocation)loc.obtain(), "root", "127.0.0.1");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "root", "127.0.0.2");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "root", "127.0.127.1");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "root", "127.0.127.2");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "brooklyn", "127.0.0.127");
+ }
+
+ @Test
+ public void testMultiByonYaml() throws Exception {
+ String yaml =
+ "locations:\n"+
+ "- multi:\n"+
+ " targets:\n"+
+ " - byon:\n"+
+ " user: root\n"+
+ " hosts: 127.0.{0,127}.{1-2}\n"+
+ " - byon:\n"+
+ " user: brooklyn\n"+
+ " hosts:\n"+
+ " - 127.0.0.127\n"+
+ "services:\n"+
+ "- serviceType: brooklyn.test.entity.TestEntity\n";
+
+ Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
+ Entity child = Iterables.getOnlyElement(app.getChildren());
+ MultiLocation<?> loc = (MultiLocation<?>) Iterables.getOnlyElement(child.getLocations());
+ Assert.assertEquals(loc.getSubLocations().size(), 2);
+
+ assertUserAddress((SshMachineLocation)loc.obtain(), "root", "127.0.0.1");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "root", "127.0.0.2");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "root", "127.0.127.1");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "root", "127.0.127.2");
+ assertUserAddress((SshMachineLocation)loc.obtain(), "brooklyn", "127.0.0.127");
+ }
+
+ public static void assertUserAddress(MachineLocation l, String user, String address) {
+ Assert.assertEquals(l.getAddress().getHostAddress(), address);
+ if (!Strings.isBlank(user)) Assert.assertEquals(((SshMachineLocation)l).getUser(), user);
+ }
+
+ @Override
+ protected Logger getLogger() {
+ return log;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/MapReferenceYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/MapReferenceYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/MapReferenceYamlTest.java
new file mode 100644
index 0000000..bd000e9
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/MapReferenceYamlTest.java
@@ -0,0 +1,130 @@
+/*
+ * 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 java.util.Map;
+import java.util.concurrent.Callable;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.BasicEntity;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.proxy.ProxySslConfig;
+import brooklyn.test.entity.TestEntity;
+import brooklyn.util.task.Tasks;
+
+import com.google.common.collect.Iterables;
+
+@Test
+public class MapReferenceYamlTest extends AbstractYamlTest {
+ private static final Logger log = LoggerFactory.getLogger(MapReferenceYamlTest.class);
+
+ protected Entity setupAndCheckTestEntityInBasicYamlWith(String ...extras) throws Exception {
+ Entity app = createAndStartApplication(loadYaml("test-entity-reference-map-template.yaml", extras));
+ waitForApplicationTasks(app);
+
+ Assert.assertEquals(app.getDisplayName(), "test-entity-reference-map-template");
+
+ log.info("App started:");
+ Entities.dumpInfo(app);
+
+ Assert.assertEquals(Iterables.size(app.getChildren()), 3, "Expected app to have child entity");
+ Iterable<BasicEntity> basicEntities = Iterables.filter(app.getChildren(), BasicEntity.class);
+ Iterable<TestEntity> testEntities = Iterables.filter(app.getChildren(), TestEntity.class);
+ Assert.assertEquals(Iterables.size(basicEntities), 2, "Expected app to have two basic entities");
+ Assert.assertEquals(Iterables.size(testEntities), 1, "Expected app to have one test entity");
+
+ return Iterables.getOnlyElement(testEntities);
+ }
+
+ @Test
+ public void testSingleEntity() throws Exception {
+ setupAndCheckTestEntityInBasicYamlWith();
+ }
+
+ @Test
+ public void testBrooklynConfigWithMapFunction() throws Exception {
+ final Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
+ " brooklyn.config:",
+ " test.confMapThing.obj:",
+ " frog: $brooklyn:formatString(\"%s\", \"frog\")",
+ " object:",
+ " $brooklyn:object:",
+ " type: brooklyn.entity.proxy.ProxySslConfig",
+ " one: $brooklyn:entity(\"one\")",
+ " two: $brooklyn:entity(\"two\")");
+
+ Map<?,?> testMap = (Map<?,?>) Entities.submit(testEntity, Tasks.builder().body(new Callable<Object>() {
+ @Override
+ public Object call() throws Exception {
+ return testEntity.getConfig(TestEntity.CONF_MAP_THING_OBJECT);
+ }
+ }).build()).get();
+ Object frog = testMap.get("frog");
+ Object one = testMap.get("one");
+ Object two = testMap.get("two");
+ Object object = testMap.get("object");
+
+ Assert.assertTrue(frog instanceof String, "Should have found a String: " + frog);
+ Assert.assertEquals(frog, "frog", "Should have found a formatted String: " + frog);
+ Assert.assertTrue(object instanceof ProxySslConfig, "Should have found a ProxySslConfig: " + object);
+ Assert.assertTrue(one instanceof BasicEntity, "Should have found a BasicEntity: " + one);
+ Assert.assertTrue(two instanceof BasicEntity, "Should have found a BasicEntity: " + two);
+ }
+
+ @Test
+ public void testBrooklynConfigWithPlainMapFunction() throws Exception {
+ final Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
+ " brooklyn.config:",
+ " test.confMapPlain:",
+ " frog: $brooklyn:formatString(\"%s\", \"frog\")",
+ " object:",
+ " $brooklyn:object:",
+ " type: brooklyn.entity.proxy.ProxySslConfig",
+ " one: $brooklyn:entity(\"one\")",
+ " two: $brooklyn:entity(\"two\")");
+
+ Map<?,?> testMap = (Map<?,?>) Entities.submit(testEntity, Tasks.builder().body(new Callable<Object>() {
+ @Override
+ public Object call() throws Exception {
+ return testEntity.getConfig(TestEntity.CONF_MAP_PLAIN);
+ }
+ }).build()).get();
+ Object frog = testMap.get("frog");
+ Object one = testMap.get("one");
+ Object two = testMap.get("two");
+ Object object = testMap.get("object");
+
+ Assert.assertTrue(frog instanceof String, "Should have found a String: " + frog);
+ Assert.assertEquals(frog, "frog", "Should have found a formatted String: " + frog);
+ Assert.assertTrue(object instanceof ProxySslConfig, "Should have found a ProxySslConfig: " + object);
+ Assert.assertTrue(one instanceof BasicEntity, "Should have found a BasicEntity: " + one);
+ Assert.assertTrue(two instanceof BasicEntity, "Should have found a BasicEntity: " + two);
+ }
+
+ @Override
+ protected Logger getLogger() {
+ return log;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ObjectsYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ObjectsYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ObjectsYamlTest.java
new file mode 100644
index 0000000..174b5bf
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ObjectsYamlTest.java
@@ -0,0 +1,280 @@
+/*
+ * 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 java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import brooklyn.config.ConfigKey;
+import brooklyn.config.ConfigKey.HasConfigKey;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.ConfigKeys;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.proxy.ProxySslConfig;
+import brooklyn.entity.trait.Configurable;
+import brooklyn.management.ManagementContext;
+import brooklyn.management.ManagementContextInjectable;
+import brooklyn.management.Task;
+import brooklyn.test.entity.TestEntity;
+import brooklyn.util.config.ConfigBag;
+import brooklyn.util.flags.SetFromFlag;
+import brooklyn.util.flags.TypeCoercions;
+
+import com.google.common.collect.Lists;
+
+@Test
+public class ObjectsYamlTest extends AbstractYamlTest {
+ private static final Logger log = LoggerFactory.getLogger(ObjectsYamlTest.class);
+
+ private static final AtomicBoolean managementContextInjected = new AtomicBoolean(false);
+ private static final List<String> configKeys = Lists.newLinkedList();
+
+ public static class TestObject implements ManagementContextInjectable {
+ private String string;
+ private Integer number;
+ private Object object;
+
+ public TestObject() { }
+
+ public String getString() { return string; }
+ public void setString(String string) { this.string = string; }
+
+ public Integer getNumber() { return number; }
+ public void setNumber(Integer number) { this.number = number; }
+
+ public Object getObject() { return object; }
+ public void setObject(Object object) { this.object = object; }
+
+ @Override
+ public void injectManagementContext(ManagementContext managementContext) {
+ log.info("Detected injection of {}", managementContext);
+ managementContextInjected.set(true);
+ }
+ }
+
+ public static class ConfigurableObject implements Configurable {
+ public static final ConfigKey<Integer> INTEGER = ConfigKeys.newIntegerConfigKey("config.number");
+ @SetFromFlag("object")
+ public static final ConfigKey<Object> OBJECT = ConfigKeys.newConfigKey(Object.class, "config.object");
+
+ @SetFromFlag("flag")
+ private String string;
+
+ private Integer number;
+ private Object object;
+ private Double value;
+ BasicConfigurationSupport configSupport = new BasicConfigurationSupport();
+
+ public ConfigurableObject() { }
+
+ public String getString() { return string; }
+
+ public Integer getNumber() { return number; }
+
+ public Object getObject() { return object; }
+
+ public Double getDouble() { return value; }
+ public void setDouble(Double value) { this.value = value; }
+
+ @Override
+ public <T> T setConfig(ConfigKey<T> key, T value) {
+ return config().set(key, value);
+ }
+
+ @Override
+ public ConfigurationSupport config() {
+ return configSupport;
+ }
+
+ private class BasicConfigurationSupport implements ConfigurationSupport {
+ private final ConfigBag bag = new ConfigBag();
+
+ @Override
+ public <T> T get(ConfigKey<T> key) {
+ return bag.get(key);
+ }
+
+ @Override
+ public <T> T get(HasConfigKey<T> key) {
+ return get(key.getConfigKey());
+ }
+
+ @Override
+ public <T> T set(ConfigKey<T> key, T val) {
+ log.info("Detected configuration injection for {}: {}", key.getName(), val);
+ configKeys.add(key.getName());
+ if ("config.number".equals(key.getName())) number = TypeCoercions.coerce(val, Integer.class);
+ if ("config.object".equals(key.getName())) object = val;
+ T old = bag.get(key);
+ bag.configure(key, val);
+ return old;
+ }
+
+ @Override
+ public <T> T set(HasConfigKey<T> key, T val) {
+ return set(key.getConfigKey(), val);
+ }
+
+ @Override
+ public <T> T set(ConfigKey<T> key, Task<T> val) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public <T> T set(HasConfigKey<T> key, Task<T> val) {
+ return set(key.getConfigKey(), val);
+ }
+ }
+ }
+
+ protected Entity setupAndCheckTestEntityInBasicYamlWith(String ...extras) throws Exception {
+ managementContextInjected.set(false);
+ configKeys.clear();
+ Entity app = createAndStartApplication(loadYaml("test-entity-basic-template.yaml", extras));
+ waitForApplicationTasks(app);
+
+ Assert.assertEquals(app.getDisplayName(), "test-entity-basic-template");
+
+ log.info("App started:");
+ Entities.dumpInfo(app);
+
+ Assert.assertTrue(app.getChildren().iterator().hasNext(), "Expected app to have child entity");
+ Entity entity = app.getChildren().iterator().next();
+ Assert.assertTrue(entity instanceof TestEntity, "Expected TestEntity, found " + entity.getClass());
+
+ return (TestEntity)entity;
+ }
+
+ @Test
+ public void testSingleEntity() throws Exception {
+ setupAndCheckTestEntityInBasicYamlWith();
+ }
+
+ @Test
+ public void testBrooklynObject() throws Exception {
+ Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
+ " brooklyn.config:",
+ " test.confObject:",
+ " $brooklyn:object:",
+ " type: "+ObjectsYamlTest.class.getName()+"$TestObject",
+ " object.fields:",
+ " number: 7",
+ " object:",
+ " $brooklyn:object:",
+ " type: brooklyn.entity.proxy.ProxySslConfig",
+ " string: \"frog\"");
+
+ Object testObject = testEntity.getConfig(TestEntity.CONF_OBJECT);
+
+ Assert.assertTrue(testObject instanceof TestObject, "Expected a TestObject: "+testObject);
+ Assert.assertTrue(managementContextInjected.get());
+ Assert.assertEquals(((TestObject) testObject).getNumber(), Integer.valueOf(7));
+ Assert.assertEquals(((TestObject) testObject).getString(), "frog");
+
+ Object testObjectObject = ((TestObject) testObject).getObject();
+ Assert.assertTrue(testObjectObject instanceof ProxySslConfig, "Expected a ProxySslConfig: "+testObjectObject);
+ }
+
+ @Test
+ public void testBrooklynConfigurableObject() throws Exception {
+ Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
+ " brooklyn.config:",
+ " test.confObject:",
+ " $brooklyn:object:",
+ " type: "+ObjectsYamlTest.class.getName()+"$ConfigurableObject",
+ " object.fields:",
+ " double: 1.4",
+ " brooklyn.config:",
+ " flag: frog",
+ " config.number: 7",
+ " object:",
+ " $brooklyn:object:",
+ " type: brooklyn.entity.proxy.ProxySslConfig");
+
+ Object testObject = testEntity.getConfig(TestEntity.CONF_OBJECT);
+
+ Assert.assertTrue(testObject instanceof ConfigurableObject, "Expected a ConfigurableObject: "+testObject);
+ Assert.assertEquals(((ConfigurableObject) testObject).getDouble(), Double.valueOf(1.4));
+ Assert.assertEquals(((ConfigurableObject) testObject).getString(), "frog");
+ Assert.assertEquals(((ConfigurableObject) testObject).getNumber(), Integer.valueOf(7));
+
+ Object testObjectObject = ((ConfigurableObject) testObject).getObject();
+ Assert.assertTrue(testObjectObject instanceof ProxySslConfig, "Expected a ProxySslConfig: "+testObjectObject);
+
+ Assert.assertTrue(configKeys.contains(ConfigurableObject.INTEGER.getName()), "Expected INTEGER key: "+configKeys);
+ Assert.assertTrue(configKeys.contains(ConfigurableObject.OBJECT.getName()), "Expected OBJECT key: "+configKeys);
+ }
+
+ @Test
+ public void testBrooklynObjectPrefix() throws Exception {
+ Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
+ " brooklyn.config:",
+ " test.confListPlain:",
+ " - $brooklyn:object:",
+ " objectType: brooklyn.entity.proxy.ProxySslConfig",
+ " - $brooklyn:object:",
+ " object_type: brooklyn.entity.proxy.ProxySslConfig",
+ " - $brooklyn:object:",
+ " type: brooklyn.entity.proxy.ProxySslConfig");
+
+ List<?> testList = testEntity.getConfig(TestEntity.CONF_LIST_PLAIN);
+
+ Assert.assertEquals(testList.size(), 3);
+ for (Object entry : testList) {
+ Assert.assertTrue(entry instanceof ProxySslConfig, "Expected a ProxySslConfig: "+entry);
+ }
+ }
+
+ @Test
+ public void testBrooklynObjectWithFunction() throws Exception {
+ Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
+ " brooklyn.config:",
+ " test.confObject:",
+ " $brooklyn:object:",
+ " type: "+ObjectsYamlTest.class.getName()+"$TestObject",
+ " object.fields:",
+ " number: 7",
+ " object:",
+ " $brooklyn:object:",
+ " type: brooklyn.entity.proxy.ProxySslConfig",
+ " string:",
+ " $brooklyn:formatString(\"%s\", \"frog\")");
+
+ Object testObject = testEntity.getConfig(TestEntity.CONF_OBJECT);
+
+ Assert.assertTrue(testObject instanceof TestObject, "Expected a TestObject: "+testObject);
+ Assert.assertTrue(managementContextInjected.get());
+ Assert.assertEquals(((TestObject) testObject).getNumber(), Integer.valueOf(7));
+ Assert.assertEquals(((TestObject) testObject).getString(), "frog");
+
+ Object testObjectObject = ((TestObject) testObject).getObject();
+ Assert.assertTrue(testObjectObject instanceof ProxySslConfig, "Expected a ProxySslConfig: "+testObjectObject);
+ }
+
+ @Override
+ protected Logger getLogger() {
+ return log;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
new file mode 100644
index 0000000..241fefb
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
@@ -0,0 +1,215 @@
+/*
+ * 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 java.util.Map;
+import java.util.concurrent.Callable;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.basic.EntityInternal;
+import brooklyn.policy.Policy;
+import brooklyn.test.Asserts;
+import brooklyn.test.entity.TestEntity;
+import brooklyn.test.policy.TestPolicy;
+import brooklyn.util.collections.MutableMap;
+
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+@Test
+public class PoliciesYamlTest extends AbstractYamlTest {
+ static final Logger log = LoggerFactory.getLogger(PoliciesYamlTest.class);
+
+ @Test
+ public void testWithAppPolicy() throws Exception {
+ Entity app = createAndStartApplication(loadYaml("test-app-with-policy.yaml"));
+ waitForApplicationTasks(app);
+ Assert.assertEquals(app.getDisplayName(), "test-app-with-policy");
+
+ log.info("App started:");
+ Entities.dumpInfo(app);
+
+ Assert.assertEquals(app.getPolicies().size(), 1);
+ Policy policy = app.getPolicies().iterator().next();
+ Assert.assertTrue(policy instanceof TestPolicy);
+ Assert.assertEquals(policy.getConfig(TestPolicy.CONF_NAME), "Name from YAML");
+ Assert.assertEquals(policy.getConfig(TestPolicy.CONF_FROM_FUNCTION), "$brooklyn: is a fun place");
+ Map<?, ?> leftoverProperties = ((TestPolicy) policy).getLeftoverProperties();
+ Assert.assertEquals(leftoverProperties.get("policyLiteralValue1"), "Hello");
+ Assert.assertEquals(leftoverProperties.get("policyLiteralValue2"), "World");
+ Assert.assertEquals(leftoverProperties.size(), 2);
+ }
+
+ @Test
+ public void testWithEntityPolicy() throws Exception {
+ Entity app = createAndStartApplication(loadYaml("test-entity-with-policy.yaml"));
+ waitForApplicationTasks(app);
+ Assert.assertEquals(app.getDisplayName(), "test-entity-with-policy");
+
+ log.info("App started:");
+ Entities.dumpInfo(app);
+
+ Assert.assertEquals(app.getPolicies().size(), 0);
+ Assert.assertEquals(app.getChildren().size(), 1);
+ Entity child = app.getChildren().iterator().next();
+ Assert.assertEquals(child.getPolicies().size(), 1);
+ Policy policy = child.getPolicies().iterator().next();
+ Assert.assertNotNull(policy);
+ Assert.assertTrue(policy instanceof TestPolicy, "policy=" + policy + "; type=" + policy.getClass());
+ Assert.assertEquals(policy.getConfig(TestPolicy.CONF_NAME), "Name from YAML");
+ Assert.assertEquals(policy.getConfig(TestPolicy.CONF_FROM_FUNCTION), "$brooklyn: is a fun place");
+ Assert.assertEquals(((TestPolicy) policy).getLeftoverProperties(),
+ ImmutableMap.of("policyLiteralValue1", "Hello", "policyLiteralValue2", "World"));
+ Assert.assertEquals(policy.getConfig(TestPolicy.TEST_ATTRIBUTE_SENSOR), TestEntity.NAME);
+ }
+
+ @Test
+ public void testChildWithPolicy() throws Exception {
+ Entity app = createAndStartApplication(loadYaml("test-entity-basic-template.yaml",
+ " brooklyn.config:",
+ " test.confName: parent entity",
+ " brooklyn.children:",
+ " - serviceType: brooklyn.test.entity.TestEntity",
+ " name: Child Entity",
+ " brooklyn.policies:",
+ " - policyType: brooklyn.test.policy.TestPolicy",
+ " brooklyn.config:",
+ " test.confName: Name from YAML",
+ " test.attributeSensor: $brooklyn:sensor(\"brooklyn.test.entity.TestEntity\", \"test.name\")"));
+ waitForApplicationTasks(app);
+
+ Assert.assertEquals(app.getChildren().size(), 1);
+ Entity firstEntity = app.getChildren().iterator().next();
+ Assert.assertEquals(firstEntity.getChildren().size(), 1);
+ final Entity child = firstEntity.getChildren().iterator().next();
+ Assert.assertEquals(child.getChildren().size(), 0);
+
+ Assert.assertEquals(app.getPolicies().size(), 0);
+ Assert.assertEquals(firstEntity.getPolicies().size(), 0);
+
+ Asserts.eventually(new Supplier<Integer>() {
+ @Override
+ public Integer get() {
+ return child.getPolicies().size();
+ }
+ }, Predicates.<Integer> equalTo(1));
+
+ Policy policy = child.getPolicies().iterator().next();
+ Assert.assertTrue(policy instanceof TestPolicy);
+ Assert.assertEquals(policy.getConfig(TestPolicy.TEST_ATTRIBUTE_SENSOR), TestEntity.NAME);
+ }
+
+ @Test
+ public void testMultiplePolicyReferences() throws Exception {
+ final Entity app = createAndStartApplication(loadYaml("test-referencing-policies.yaml"));
+ waitForApplicationTasks(app);
+ Assert.assertEquals(app.getDisplayName(), "test-referencing-policies");
+
+ Entity entity1 = null, entity2 = null, child1 = null, child2 = null, grandchild1 = null, grandchild2 = null;
+
+ Assert.assertEquals(app.getChildren().size(), 2);
+ for (Entity child : app.getChildren()) {
+ if (child.getDisplayName().equals("entity 1"))
+ entity1 = child;
+ if (child.getDisplayName().equals("entity 2"))
+ entity2 = child;
+ }
+ Assert.assertNotNull(entity1);
+ Assert.assertNotNull(entity2);
+
+ Assert.assertEquals(entity1.getChildren().size(), 2);
+ for (Entity child : entity1.getChildren()) {
+ if (child.getDisplayName().equals("child 1"))
+ child1 = child;
+ if (child.getDisplayName().equals("child 2"))
+ child2 = child;
+ }
+ Assert.assertNotNull(child1);
+ Assert.assertNotNull(child2);
+
+ Assert.assertEquals(child1.getChildren().size(), 2);
+ for (Entity child : child1.getChildren()) {
+ if (child.getDisplayName().equals("grandchild 1"))
+ grandchild1 = child;
+ if (child.getDisplayName().equals("grandchild 2"))
+ grandchild2 = child;
+ }
+ Assert.assertNotNull(grandchild1);
+ Assert.assertNotNull(grandchild2);
+
+ ImmutableSet<Policy> policies = new ImmutableSet.Builder<Policy>()
+ .add(getPolicy(app))
+ .add(getPolicy(entity1))
+ .add(getPolicy(entity2))
+ .add(getPolicy(child1))
+ .add(getPolicy(child2))
+ .add(getPolicy(grandchild1))
+ .add(getPolicy(grandchild2))
+ .build();
+
+ Map<ConfigKey<Entity>, Entity> keyToEntity = new ImmutableMap.Builder<ConfigKey<Entity>, Entity>()
+ .put(ReferencingYamlTestEntity.TEST_REFERENCE_APP, app)
+ .put(ReferencingYamlTestEntity.TEST_REFERENCE_ENTITY1, entity1)
+ .put(ReferencingYamlTestEntity.TEST_REFERENCE_ENTITY2, entity2)
+ .put(ReferencingYamlTestEntity.TEST_REFERENCE_CHILD1, child1)
+ .put(ReferencingYamlTestEntity.TEST_REFERENCE_CHILD2, child2)
+ .put(ReferencingYamlTestEntity.TEST_REFERENCE_GRANDCHILD1, grandchild1)
+ .put(ReferencingYamlTestEntity.TEST_REFERENCE_GRANDCHILD2, grandchild2)
+ .build();
+
+ for (Policy policy : policies)
+ checkReferences(policy, keyToEntity);
+
+ }
+
+ private void checkReferences(final Policy policy, Map<ConfigKey<Entity>, Entity> keyToEntity) throws Exception {
+ for (final ConfigKey<Entity> key : keyToEntity.keySet()) {
+ final Entity entity = keyToEntity.get(key); // Grab an entity whose execution context we can use
+ Entity fromConfig = ((EntityInternal)entity).getExecutionContext().submit(MutableMap.of(), new Callable<Entity>() {
+ @Override
+ public Entity call() throws Exception {
+ return (Entity) policy.getConfig(key);
+ }
+ }).get();
+ Assert.assertEquals(fromConfig, keyToEntity.get(key));
+ }
+ }
+
+ private Policy getPolicy(Entity entity) {
+ Assert.assertEquals(entity.getPolicies().size(), 1);
+ Policy policy = entity.getPolicies().iterator().next();
+ Assert.assertTrue(policy instanceof TestReferencingPolicy);
+ return policy;
+ }
+
+ @Override
+ protected Logger getLogger() {
+ return log;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencedYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencedYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencedYamlTest.java
new file mode 100644
index 0000000..1d1997e
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencedYamlTest.java
@@ -0,0 +1,180 @@
+/*
+ * 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 java.util.Collection;
+
+import org.apache.brooklyn.test.TestResourceUnavailableException;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.BasicApplication;
+import brooklyn.entity.basic.BasicEntity;
+import brooklyn.management.osgi.OsgiStandaloneTest;
+
+import com.google.common.collect.Iterables;
+
+public class ReferencedYamlTest extends AbstractYamlTest {
+
+ @Test
+ public void testReferenceEntityYamlAsPlatformComponent() throws Exception {
+ String entityName = "Reference child name";
+ Entity app = createAndStartApplication(
+ "services:",
+ "- name: " + entityName,
+ " type: classpath://yaml-ref-entity.yaml");
+
+ checkChildEntitySpec(app, entityName);
+ }
+
+ @Test
+ public void testAnonymousReferenceEntityYamlAsPlatformComponent() throws Exception {
+ Entity app = createAndStartApplication(
+ "services:",
+ "- type: classpath://yaml-ref-entity.yaml");
+
+ checkChildEntitySpec(app, "service");
+ }
+
+ @Test
+ public void testReferenceAppYamlAsPlatformComponent() throws Exception {
+ Entity app = createAndStartApplication(
+ "services:",
+ "- name: Reference child name",
+ " type: classpath://yaml-ref-app.yaml");
+
+ Assert.assertEquals(app.getChildren().size(), 0);
+ Assert.assertEquals(app.getDisplayName(), "Reference child name");
+
+ //child is a proxy so equality test won't do
+ Assert.assertEquals(app.getEntityType().getName(), BasicApplication.class.getName());
+ }
+
+ @Test
+ public void testReferenceYamlAsChild() throws Exception {
+ String entityName = "Reference child name";
+ Entity createAndStartApplication = createAndStartApplication(
+ "services:",
+ "- type: brooklyn.entity.basic.BasicEntity",
+ " brooklyn.children:",
+ " - name: " + entityName,
+ " type: classpath://yaml-ref-entity.yaml");
+
+ checkGrandchildEntitySpec(createAndStartApplication, entityName);
+ }
+
+ @Test
+ public void testAnonymousReferenceYamlAsChild() throws Exception {
+ Entity createAndStartApplication = createAndStartApplication(
+ "services:",
+ "- type: brooklyn.entity.basic.BasicEntity",
+ " brooklyn.children:",
+ " - type: classpath://yaml-ref-entity.yaml");
+
+ checkGrandchildEntitySpec(createAndStartApplication, "service");
+ }
+
+ @Test
+ public void testCatalogReferencingYamlUrl() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " id: yaml.reference",
+ " version: " + TEST_VERSION,
+ "services:",
+ "- type: classpath://yaml-ref-entity.yaml");
+
+ String entityName = "YAML -> catalog item -> yaml url";
+ Entity app = createAndStartApplication(
+ "services:",
+ "- name: " + entityName,
+ " type: " + ver("yaml.reference"));
+
+ checkChildEntitySpec(app, entityName);
+ }
+
+ @Test
+ public void testYamlUrlReferencingCatalog() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " id: yaml.basic",
+ " version: " + TEST_VERSION,
+ "services:",
+ "- type: brooklyn.entity.basic.BasicEntity");
+
+ String entityName = "YAML -> yaml url -> catalog item";
+ Entity app = createAndStartApplication(
+ "services:",
+ "- name: " + entityName,
+ " type: classpath://yaml-ref-catalog.yaml");
+
+ checkChildEntitySpec(app, entityName);
+ }
+
+ /**
+ * Tests that a YAML referenced by URL from a catalog item
+ * will have access to the catalog item's bundles.
+ */
+ @Test
+ public void testCatalogLeaksBundlesToReferencedYaml() throws Exception {
+ TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_PATH);
+
+ String parentCatalogId = "my.catalog.app.id.url.parent";
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " id: " + parentCatalogId,
+ " version: " + TEST_VERSION,
+ " libraries:",
+ " - url: " + OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_URL,
+ "",
+ "services:",
+ "- type: classpath://yaml-ref-bundle-without-libraries.yaml");
+
+ Entity app = createAndStartApplication(
+ "services:",
+ "- type: " + ver(parentCatalogId));
+
+ Collection<Entity> children = app.getChildren();
+ Assert.assertEquals(children.size(), 1);
+ Entity child = Iterables.getOnlyElement(children);
+ Assert.assertEquals(child.getEntityType().getName(), "brooklyn.osgi.tests.SimpleEntity");
+
+ deleteCatalogEntity(parentCatalogId);
+ }
+
+ private void checkChildEntitySpec(Entity app, String entityName) {
+ Collection<Entity> children = app.getChildren();
+ Assert.assertEquals(children.size(), 1);
+ Entity child = Iterables.getOnlyElement(children);
+ Assert.assertEquals(child.getDisplayName(), entityName);
+ Assert.assertEquals(child.getEntityType().getName(), BasicEntity.class.getName());
+ }
+
+ private void checkGrandchildEntitySpec(Entity createAndStartApplication, String entityName) {
+ Collection<Entity> children = createAndStartApplication.getChildren();
+ Assert.assertEquals(children.size(), 1);
+ Entity child = Iterables.getOnlyElement(children);
+ Collection<Entity> grandChildren = child.getChildren();
+ Assert.assertEquals(grandChildren.size(), 1);
+ Entity grandChild = Iterables.getOnlyElement(grandChildren);
+ Assert.assertEquals(grandChild.getDisplayName(), entityName);
+ Assert.assertEquals(grandChild.getEntityType().getName(), BasicEntity.class.getName());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencingYamlTestEntity.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencingYamlTestEntity.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencingYamlTestEntity.java
new file mode 100644
index 0000000..bab503d
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencingYamlTestEntity.java
@@ -0,0 +1,66 @@
+/*
+ * 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 brooklyn.config.ConfigKey;
+import brooklyn.entity.Entity;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.basic.BasicConfigKey;
+
+import com.google.common.reflect.TypeToken;
+
+@ImplementedBy(ReferencingYamlTestEntityImpl.class)
+public interface ReferencingYamlTestEntity extends Entity {
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_APP = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.app")
+ .build();
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_ENTITY1 = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.entity1")
+ .build();
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_ENTITY1_ALT = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.entity1a")
+ .build();
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_ENTITY2 = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.entity2")
+ .build();
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_CHILD1 = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.child1")
+ .build();
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_CHILD2 = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.child2")
+ .build();
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_GRANDCHILD1 = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.grandchild1")
+ .build();
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_GRANDCHILD2 = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.grandchild2")
+ .build();
+ @SuppressWarnings("serial")
+ public static final ConfigKey<Entity> TEST_REFERENCE_BOGUS = BasicConfigKey.builder(new TypeToken<Entity>(){})
+ .name("test.reference.bogus")
+ .build();
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencingYamlTestEntityImpl.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencingYamlTestEntityImpl.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencingYamlTestEntityImpl.java
new file mode 100644
index 0000000..4d98c6b
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReferencingYamlTestEntityImpl.java
@@ -0,0 +1,25 @@
+/*
+ * 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 brooklyn.entity.basic.AbstractApplication;
+
+public class ReferencingYamlTestEntityImpl extends AbstractApplication implements ReferencingYamlTestEntity {
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
new file mode 100644
index 0000000..23aa759
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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 io.brooklyn.camp.CampPlatform;
+import io.brooklyn.camp.spi.Assembly;
+import io.brooklyn.camp.spi.AssemblyTemplate;
+
+import java.io.Reader;
+
+import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
+import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherNoServer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.trait.Startable;
+import brooklyn.management.ManagementContext;
+import brooklyn.test.EntityTestUtils;
+import brooklyn.util.ResourceUtils;
+import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.stream.Streams;
+
+public class ReloadBrooklynPropertiesTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ReloadBrooklynPropertiesTest.class);
+
+ private ManagementContext brooklynMgmt;
+
+ @BeforeMethod(alwaysRun=true)
+ public void setup() {
+ brooklynMgmt = new BrooklynCampPlatformLauncherNoServer().launch().getBrooklynMgmt();
+ }
+
+ @AfterMethod(alwaysRun=true)
+ public void teardown() {
+ if (brooklynMgmt!=null) Entities.destroyAll(brooklynMgmt);
+ }
+
+ @Test
+ public void testReloadBrooklynPropertiesNonDeploy() {
+ CampPlatform platform = brooklynMgmt.getConfig().getConfig(BrooklynCampConstants.CAMP_PLATFORM);
+ Assert.assertNotNull(platform);
+ brooklynMgmt.reloadBrooklynProperties();
+ CampPlatform reloadedPlatform = brooklynMgmt.getConfig().getConfig(BrooklynCampConstants.CAMP_PLATFORM);
+ Assert.assertEquals(reloadedPlatform, platform);
+ }
+
+ @Test
+ public void testReloadBrooklynPropertiesDeploy() {
+ brooklynMgmt.reloadBrooklynProperties();
+ CampPlatform reloadedPlatform = brooklynMgmt.getConfig().getConfig(BrooklynCampConstants.CAMP_PLATFORM);
+ Assert.assertNotNull(reloadedPlatform);
+ Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("test-entity-basic-template.yaml"));
+ AssemblyTemplate template = reloadedPlatform.pdp().registerDeploymentPlan(input);
+ try {
+ Assembly assembly = template.getInstantiator().newInstance().instantiate(template, reloadedPlatform);
+ LOG.info("Test - created " + assembly);
+ final Entity app = brooklynMgmt.getEntityManager().getEntity(assembly.getId());
+ LOG.info("App - " + app);
+ Assert.assertEquals(app.getDisplayName(), "test-entity-basic-template");
+ EntityTestUtils.assertAttributeEqualsEventually(app, Startable.SERVICE_UP, true);
+ } catch (Exception e) {
+ LOG.warn("Unable to instantiate " + template + " (rethrowing): " + e);
+ throw Exceptions.propagate(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java
new file mode 100644
index 0000000..2e557c7
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java
@@ -0,0 +1,35 @@
+/*
+ * 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 brooklyn.config.ConfigKey;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.EntityInternal;
+import brooklyn.entity.basic.EntityLocal;
+import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.entity.trait.Startable;
+import brooklyn.event.basic.BasicConfigKey;
+
+@ImplementedBy(TestEntityWithInitConfigImpl.class)
+public interface TestEntityWithInitConfig extends Entity, Startable, EntityLocal, EntityInternal {
+ public static final ConfigKey<Entity> TEST_ENTITY = BasicConfigKey.builder(Entity.class)
+ .name("test.entity")
+ .build();
+ public Entity getEntityCachedOnInit();
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfigImpl.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfigImpl.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfigImpl.java
new file mode 100644
index 0000000..b17ce4f
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfigImpl.java
@@ -0,0 +1,59 @@
+/*
+ * 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 java.util.Collection;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.AbstractEntity;
+import brooklyn.location.Location;
+
+public class TestEntityWithInitConfigImpl extends AbstractEntity implements TestEntityWithInitConfig {
+
+ private static final Logger LOG = LoggerFactory.getLogger(TestEntityWithInitConfigImpl.class);
+ private Entity entityCachedOnInit;
+
+ @Override
+ public void init() {
+ super.init();
+ entityCachedOnInit = getConfig(TEST_ENTITY);
+ }
+
+ @Override
+ public void start(Collection<? extends Location> locations) {
+ LOG.trace("Starting {}", this);
+ }
+
+ @Override
+ public void stop() {
+ LOG.trace("Stopping {}", this);
+ }
+
+ @Override
+ public void restart() {
+ LOG.trace("Restarting {}", this);
+ }
+
+ public Entity getEntityCachedOnInit() {
+ return entityCachedOnInit;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestReferencingEnricher.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestReferencingEnricher.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestReferencingEnricher.java
new file mode 100644
index 0000000..2db2667
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestReferencingEnricher.java
@@ -0,0 +1,34 @@
+/*
+ * 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 brooklyn.config.ConfigKey;
+import brooklyn.enricher.basic.AbstractEnricher;
+import brooklyn.entity.Entity;
+import brooklyn.event.basic.BasicConfigKey;
+
+public class TestReferencingEnricher extends AbstractEnricher {
+ public static final ConfigKey<Entity> TEST_APPLICATION = new BasicConfigKey<Entity>(Entity.class, "test.reference.app");
+ public static final ConfigKey<Entity> TEST_ENTITY_1 = new BasicConfigKey<Entity>(Entity.class, "test.reference.entity1");
+ public static final ConfigKey<Entity> TEST_ENTITY_2 = new BasicConfigKey<Entity>(Entity.class, "test.reference.entity2");
+ public static final ConfigKey<Entity> TEST_CHILD_1 = new BasicConfigKey<Entity>(Entity.class, "test.reference.child1");
+ public static final ConfigKey<Entity> TEST_CHILD_2 = new BasicConfigKey<Entity>(Entity.class, "test.reference.child2");
+ public static final ConfigKey<Entity> TEST_GRANDCHILD_1 = new BasicConfigKey<Entity>(Entity.class, "test.reference.grandchild1");
+ public static final ConfigKey<Entity> TEST_GRANDCHILD_2 = new BasicConfigKey<Entity>(Entity.class, "test.reference.grandchild2");
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestReferencingPolicy.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestReferencingPolicy.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestReferencingPolicy.java
new file mode 100644
index 0000000..0718cf4
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestReferencingPolicy.java
@@ -0,0 +1,34 @@
+/*
+ * 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 brooklyn.config.ConfigKey;
+import brooklyn.entity.Entity;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.policy.basic.AbstractPolicy;
+
+public class TestReferencingPolicy extends AbstractPolicy {
+ public static final ConfigKey<Entity> TEST_APPLICATION = new BasicConfigKey<Entity>(Entity.class, "test.reference.app");
+ public static final ConfigKey<Entity> TEST_ENTITY_1 = new BasicConfigKey<Entity>(Entity.class, "test.reference.entity1");
+ public static final ConfigKey<Entity> TEST_ENTITY_2 = new BasicConfigKey<Entity>(Entity.class, "test.reference.entity2");
+ public static final ConfigKey<Entity> TEST_CHILD_1 = new BasicConfigKey<Entity>(Entity.class, "test.reference.child1");
+ public static final ConfigKey<Entity> TEST_CHILD_2 = new BasicConfigKey<Entity>(Entity.class, "test.reference.child2");
+ public static final ConfigKey<Entity> TEST_GRANDCHILD_1 = new BasicConfigKey<Entity>(Entity.class, "test.reference.grandchild1");
+ public static final ConfigKey<Entity> TEST_GRANDCHILD_2 = new BasicConfigKey<Entity>(Entity.class, "test.reference.grandchild2");
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
new file mode 100644
index 0000000..1aa70e6
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
@@ -0,0 +1,86 @@
+/*
+ * 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 java.util.Map;
+
+import org.testng.Assert;
+
+import com.google.common.base.Preconditions;
+
+import brooklyn.entity.Effector;
+import brooklyn.entity.basic.EntityInternal;
+import brooklyn.entity.basic.EntityLocal;
+import brooklyn.entity.effector.EffectorBody;
+import brooklyn.entity.effector.Effectors;
+import brooklyn.entity.proxying.EntityInitializer;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.Sensors;
+import brooklyn.util.config.ConfigBag;
+
+public class TestSensorAndEffectorInitializer implements EntityInitializer {
+
+ public static final String EFFECTOR_SAY_HELLO = "sayHello";
+ public static final String SENSOR_LAST_HELLO = "lastHello";
+ public static final String SENSOR_HELLO_DEFINED = "sensorHelloDefined";
+ public static final String SENSOR_HELLO_DEFINED_EMITTED = "sensorHelloDefinedEmitted";
+
+ protected String helloWord() { return "Hello"; }
+
+ @Override
+ public void apply(EntityLocal entity) {
+ Effector<String> eff = Effectors.effector(String.class, EFFECTOR_SAY_HELLO).parameter(String.class, "name").impl(
+ new EffectorBody<String>() {
+ @Override
+ public String call(ConfigBag parameters) {
+ Object name = parameters.getStringKey("name");
+ entity().setAttribute(Sensors.newStringSensor(SENSOR_LAST_HELLO), ""+name);
+ return helloWord()+" "+name;
+ }
+ }).build();
+ ((EntityInternal)entity).getMutableEntityType().addEffector(eff);
+
+ ((EntityInternal)entity).getMutableEntityType().addSensor(Sensors.newStringSensor(SENSOR_HELLO_DEFINED));
+
+ AttributeSensor<String> emitted = Sensors.newStringSensor(SENSOR_HELLO_DEFINED_EMITTED);
+ ((EntityInternal)entity).getMutableEntityType().addSensor(emitted);
+ entity.setAttribute(emitted, "1");
+ }
+
+ public static class TestConfigurableInitializer extends TestSensorAndEffectorInitializer {
+ public static final String HELLO_WORD = "helloWord";
+ final String helloWord;
+ public TestConfigurableInitializer(Map<String,String> params) {
+ Preconditions.checkNotNull(params);
+ if (params.containsKey(HELLO_WORD)) {
+ helloWord = params.get(HELLO_WORD);
+ Assert.assertEquals(params.size(), 1);
+ } else {
+ helloWord = "Hello";
+ Assert.assertEquals(params.size(), 0);
+ }
+ }
+
+ @Override
+ protected String helloWord() {
+ return helloWord;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
new file mode 100644
index 0000000..bde5016
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.camp.brooklyn.BrooklynCampConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.Effector;
+import brooklyn.entity.Entity;
+import brooklyn.entity.basic.Attributes;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.basic.EntityPredicates;
+import brooklyn.entity.basic.Lifecycle;
+import brooklyn.entity.effector.Effectors;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.Sensors;
+import brooklyn.management.Task;
+import brooklyn.test.EntityTestUtils;
+import brooklyn.util.collections.MutableMap;
+import brooklyn.util.net.Networking;
+import brooklyn.util.text.StringPredicates;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
+
+@Test
+public class VanillaBashNetcatYamlTest extends AbstractYamlTest {
+
+ private static final Logger log = LoggerFactory.getLogger(VanillaBashNetcatYamlTest.class);
+
+ private static final AttributeSensor<String> SENSOR_OUTPUT_ALL = Sensors.newStringSensor("output.all");
+ final static Effector<String> EFFECTOR_SAY_HI = Effectors.effector(String.class, "sayHiNetcat").buildAbstract();
+
+ @Test(groups="Integration")
+ public void testInvocationSensorAndEnricher() throws Exception {
+ Preconditions.checkArgument(Networking.isPortAvailable(4321), "port 4321 must not be in use (no leaked nc instances) for this test to succeed!");
+
+ Entity app = createAndStartApplication(loadYaml("vanilla-bash-netcat-w-client.yaml"));
+ waitForApplicationTasks(app);
+
+ log.info("App started:");
+ Entities.dumpInfo(app);
+
+ Assert.assertEquals(app.getDisplayName(), "Simple Netcat with Client");
+
+ // comparing by plan ID is one common way
+ Iterable<Entity> netcatI = Iterables.filter(app.getChildren(), EntityPredicates.configEqualTo(BrooklynCampConstants.PLAN_ID, "netcat-server"));
+ Assert.assertTrue(netcatI.iterator().hasNext(), "no 'netcat-server' child of app: "+app.getChildren());
+ Entity netcat = Iterables.getOnlyElement(netcatI);
+
+ // make sure netcat is running
+ EntityTestUtils.assertAttributeEventually(netcat, Attributes.SERVICE_STATE_ACTUAL, Predicates.equalTo(Lifecycle.RUNNING));
+
+ // find the pinger, now comparing by name
+ Iterable<Entity> pingerI = Iterables.filter(app.getChildren(), EntityPredicates.displayNameEqualTo("Simple Pinger"));
+ Assert.assertTrue(pingerI.iterator().hasNext(), "no 'Simple Pinger' child of app: "+app.getChildren());
+ Entity pinger = Iterables.getOnlyElement(pingerI);
+
+ // invoke effector
+ Task<String> ping;
+ ping = pinger.invoke(EFFECTOR_SAY_HI, MutableMap.<String,Object>of());
+ Assert.assertEquals(ping.get().trim(), "hello");
+ // and check we get the right result
+ EntityTestUtils.assertAttributeEventually(netcat, SENSOR_OUTPUT_ALL, StringPredicates.containsLiteral("hi netcat"));
+ log.info("invoked ping from "+pinger+" to "+netcat+", 'all' sensor shows:\n"+
+ netcat.getAttribute(SENSOR_OUTPUT_ALL));
+
+ // netcat should now fail and restart
+ EntityTestUtils.assertAttributeEventually(netcat, Attributes.SERVICE_STATE_ACTUAL, Predicates.not(Predicates.equalTo(Lifecycle.RUNNING)));
+ log.info("detected failure, state is: "+netcat.getAttribute(Attributes.SERVICE_STATE_ACTUAL));
+ EntityTestUtils.assertAttributeEventually(netcat, Attributes.SERVICE_STATE_ACTUAL, Predicates.equalTo(Lifecycle.RUNNING));
+ log.info("detected recovery, state is: "+netcat.getAttribute(Attributes.SERVICE_STATE_ACTUAL));
+
+ // invoke effector again, now with a parameter
+ ping = pinger.invoke(EFFECTOR_SAY_HI, MutableMap.<String,Object>of("message", "yo yo yo"));
+ Assert.assertEquals(ping.get().trim(), "hello");
+ // checking right result
+ EntityTestUtils.assertAttributeEventually(netcat, SENSOR_OUTPUT_ALL, StringPredicates.containsLiteral("yo yo yo"));
+ log.info("invoked ping again from "+pinger+" to "+netcat+", 'all' sensor shows:\n"+
+ netcat.getAttribute(SENSOR_OUTPUT_ALL));
+
+ // and it's propagated to the app
+ EntityTestUtils.assertAttributeEventually(app, Sensors.newStringSensor("output.last"), StringPredicates.containsLiteral("yo yo yo"));
+
+ log.info("after all is said and done, app is:");
+ Entities.dumpInfo(app);
+ }
+
+ @Override
+ protected Logger getLogger() {
+ return log;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WrapAppTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WrapAppTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WrapAppTest.java
new file mode 100644
index 0000000..e94e8c5
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WrapAppTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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 java.io.StringReader;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.StartableApplication;
+
+public class WrapAppTest extends AbstractYamlTest {
+ private static final String NO_WRAP_APP_IMPLICIT =
+ "name: Empty App\n" +
+ "services:\n" +
+ " - type: brooklyn.test.entity.TestApplication";
+
+ private static final String NO_WRAP_APP_EXPLICIT =
+ "name: Empty App\n" +
+ "wrappedApp: false\n" +
+ "services:\n" +
+ " - type: brooklyn.test.entity.TestApplication";
+
+ private static final String WRAP_APP_IMPLICIT =
+ "name: Empty App\n" +
+ "services:\n" +
+ " - type: brooklyn.test.entity.TestApplication\n" +
+ " - type: brooklyn.test.entity.TestApplication";
+
+ private static final String WRAP_APP_EXPLICIT =
+ "name: Empty App\n" +
+ "wrappedApp: true\n" +
+ "services:\n" +
+ " - type: brooklyn.test.entity.TestApplication";
+
+ private static final String WRAP_ENTITY =
+ "name: Empty App\n" +
+ "services:\n" +
+ " - type: brooklyn.test.entity.TestEntity";
+
+ @Test
+ public void testNoWrapAppImplicit() throws Exception {
+ StartableApplication app = createApp(NO_WRAP_APP_IMPLICIT);
+ Assert.assertTrue(app.getChildren().size() == 0);
+ }
+
+ @Test
+ public void testNoWrapAppExplicit() throws Exception {
+ StartableApplication app = createApp(NO_WRAP_APP_EXPLICIT);
+ Assert.assertTrue(app.getChildren().size() == 0);
+ }
+
+ @Test
+ public void testWrapAppImplicit() throws Exception {
+ StartableApplication app = createApp(WRAP_APP_IMPLICIT);
+ Assert.assertTrue(app.getChildren().size() == 2);
+ }
+
+ @Test
+ public void testWrapAppExplicit() throws Exception {
+ StartableApplication app = createApp(WRAP_APP_EXPLICIT);
+ Assert.assertTrue(app.getChildren().size() == 1);
+ }
+
+ @Test
+ public void testWrapEntity() throws Exception {
+ StartableApplication app = createApp(WRAP_ENTITY);
+ Assert.assertTrue(app.getChildren().size() == 1);
+ }
+
+ private StartableApplication createApp(String yaml) throws Exception {
+ StringReader in = new StringReader(yaml);
+ StartableApplication app = (StartableApplication)createAndStartApplication(in);
+ in.close();
+ return app;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e406d1ad/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/AbstractCatalogXmlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/AbstractCatalogXmlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/AbstractCatalogXmlTest.java
new file mode 100644
index 0000000..d8675c9
--- /dev/null
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/AbstractCatalogXmlTest.java
@@ -0,0 +1,109 @@
+/*
+ * 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 org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
+import org.apache.brooklyn.test.TestResourceUnavailableException;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.StringReader;
+
+import brooklyn.config.BrooklynProperties;
+import brooklyn.config.BrooklynServerConfig;
+import brooklyn.entity.Entity;
+import brooklyn.management.internal.LocalManagementContext;
+import brooklyn.management.osgi.OsgiTestResources;
+import brooklyn.test.entity.LocalManagementContextForTests;
+import brooklyn.util.ResourceUtils;
+import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.os.Os;
+import brooklyn.util.stream.ReaderInputStream;
+import brooklyn.util.stream.Streams;
+
+import com.google.common.io.ByteStreams;
+
+public class AbstractCatalogXmlTest extends AbstractYamlTest {
+
+ private String catalogUrl;
+
+ public AbstractCatalogXmlTest(String catalogUrl) {
+ this.catalogUrl = catalogUrl;
+ }
+
+ @Override
+ protected LocalManagementContext newTestManagementContext() {
+ ResourceUtils ru = new ResourceUtils(this);
+ File jar = createJar(ru);
+ File catalog = createCatalog(ru, jar);
+
+ BrooklynProperties properties = BrooklynProperties.Factory.newEmpty();
+ properties.put(BrooklynServerConfig.BROOKLYN_CATALOG_URL, catalog.toURI().toString());
+ return LocalManagementContextForTests.builder(true)
+ .useProperties(properties)
+ .disableOsgi(false)
+ .build();
+ }
+
+ protected Entity startApp(String type) throws Exception {
+ String yaml = "name: simple-app-yaml\n" +
+ "location: localhost\n" +
+ "services: \n" +
+ " - type: " + type;
+ return createAndStartApplication(yaml);
+ }
+
+ private File createCatalog(ResourceUtils ru, File tmpJar) {
+ String catalogTemplate = ru.getResourceAsString(catalogUrl);
+ String catalog = catalogTemplate.replace("${osgi-entities-path}", tmpJar.toURI().toString());
+ File catalogTmp = Os.newTempFile("simple-catalog-", ".xml");
+ copy(catalog, catalogTmp);
+ return catalogTmp;
+ }
+
+ private File createJar(ResourceUtils ru) {
+ TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH);
+ File tmpJar = Os.newTempFile("osgi-entities-", ".jar");
+ InputStream in = ru.getResourceFromUrl("classpath://" + OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH);
+ copy(in, tmpJar);
+ return tmpJar;
+ }
+
+ private void copy(String src, File dst) {
+ try {
+ copy(new ReaderInputStream(new StringReader(src), "UTF-8"), dst);
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+ }
+
+ private void copy(InputStream in, File tmpJar) {
+ try {
+ OutputStream out = new FileOutputStream(tmpJar);
+ ByteStreams.copy(in, out);
+ Streams.closeQuietly(in);
+ Streams.closeQuietly(out);
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+ }
+
+}