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

[1/8] brooklyn-server git commit: Disable JavaWebAppWithDslYamlRebindIntegrationTest

Repository: brooklyn-server
Updated Branches:
  refs/heads/master 0b474bbe7 -> 0fe1e5d9c


Disable JavaWebAppWithDslYamlRebindIntegrationTest

Needs to be moved to brooklyn-library, or deleted

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

Branch: refs/heads/master
Commit: 554f50e9745a9c06ca43bb023c541bb14d1919ce
Parents: ff02188
Author: Aled Sage <al...@gmail.com>
Authored: Wed Oct 19 00:37:02 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Oct 19 00:40:45 2016 +0100

----------------------------------------------------------------------
 .../brooklyn/JavaWebAppWithDslYamlRebindIntegrationTest.java | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/554f50e9/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppWithDslYamlRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppWithDslYamlRebindIntegrationTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppWithDslYamlRebindIntegrationTest.java
index bf54f0f..f379556 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppWithDslYamlRebindIntegrationTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppWithDslYamlRebindIntegrationTest.java
@@ -45,6 +45,10 @@ import com.google.common.io.Files;
 @Test
 public class JavaWebAppWithDslYamlRebindIntegrationTest extends AbstractYamlTest {
     
+    // TODO Tests rely on being able to access ControlledDynamicWebAppCluster, but that is in
+    // brooklyn-library, rather than brooklyn-server repo. This test needs to either be moved
+    // or deleted.
+
     private static final Logger log = LoggerFactory.getLogger(JavaWebAppWithDslYamlRebindIntegrationTest.class);
     
     protected ClassLoader classLoader = getClass().getClassLoader();
@@ -87,7 +91,7 @@ public class JavaWebAppWithDslYamlRebindIntegrationTest extends AbstractYamlTest
     }
 
     /** as {@link JavaWebAppsIntegrationTest#testWithDbDeploy()} but with rebind */
-    @Test(groups="Integration")
+    @Test(groups={"Integration", "WIP", "Broken"})
     public void testJavaWebAppDeployAndRebind() throws Exception {
         Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("java-web-app-and-db-with-function.yaml"));
         AssemblyTemplate at = platform.pdp().registerDeploymentPlan(input);
@@ -104,7 +108,7 @@ public class JavaWebAppWithDslYamlRebindIntegrationTest extends AbstractYamlTest
     }
 
     // test for https://github.com/brooklyncentral/brooklyn/issues/1422
-    @Test(groups="Integration")
+    @Test(groups={"Integration", "WIP", "Broken"})
     public void testJavaWebWithMemberSpecRebind() throws Exception {
         Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("test-java-web-app-spec-and-db-with-function.yaml"));
         AssemblyTemplate at = platform.pdp().registerDeploymentPlan(input);


[3/8] brooklyn-server git commit: Rename JcloudsLocationExternalConfigYamlLiveTest

Posted by sv...@apache.org.
Rename JcloudsLocationExternalConfigYamlLiveTest


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

Branch: refs/heads/master
Commit: b1407d08ca077c49ae8bd454613d7f593021c197
Parents: 44d11e2
Author: Aled Sage <al...@gmail.com>
Authored: Tue Oct 18 19:11:35 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Oct 19 00:40:45 2016 +0100

----------------------------------------------------------------------
 .../brooklyn/JcloudsExternalConfigYamlTest.java | 121 +++++++++++++++++++
 ...loudsLocationExternalConfigYamlLiveTest.java | 121 -------------------
 2 files changed, 121 insertions(+), 121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b1407d08/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java
new file mode 100644
index 0000000..a29a813
--- /dev/null
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java
@@ -0,0 +1,121 @@
+/*
+ * 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 java.io.StringReader;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.camp.brooklyn.ExternalConfigYamlTest.MyExternalConfigSupplier;
+import org.apache.brooklyn.camp.brooklyn.ExternalConfigYamlTest.MyExternalConfigSupplierWithoutMapArg;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.entity.StartableApplication;
+import org.apache.brooklyn.core.internal.BrooklynProperties;
+import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
+import org.apache.brooklyn.entity.software.base.EmptySoftwareProcess;
+import org.apache.brooklyn.location.jclouds.JcloudsLocation;
+import org.apache.brooklyn.util.core.internal.ssh.SshTool;
+import org.apache.brooklyn.util.core.task.DeferredSupplier;
+import org.apache.brooklyn.util.guava.Maybe;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.Iterables;
+
+// also see ExternalConfigYamlTest
+public class JcloudsExternalConfigYamlTest extends AbstractYamlRebindTest {
+
+    private static final Logger log = LoggerFactory.getLogger(JcloudsExternalConfigYamlTest.class);
+
+    private static final ConfigKey<String> MY_CONFIG_KEY = ConfigKeys.newStringConfigKey("my.config.key");
+
+    @Override
+    protected BrooklynProperties createBrooklynProperties() {
+        BrooklynProperties props = BrooklynProperties.Factory.newDefault();
+        props.put("brooklyn.external.myprovider", MyExternalConfigSupplier.class.getName());
+        props.put("brooklyn.external.myprovider.mykey", "myval");
+        props.put("brooklyn.external.myproviderWithoutMapArg", MyExternalConfigSupplierWithoutMapArg.class.getName());
+        return props;
+    }
+
+    @Test(groups="Live")
+    public void testJcloudsInheritanceAndPasswordSecret() throws Exception {
+        String yaml = Joiner.on("\n").join(
+                "services:",
+                "- type: "+EmptySoftwareProcess.class.getName(),
+                "location:",
+                "  jclouds:aws-ec2:",
+                "    password: $brooklyn:external(\"myprovider\", \"mykey\")",
+                "    my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")");
+
+        origApp = (StartableApplication) createAndStartApplication(new StringReader(yaml));
+
+        Entity entity = Iterables.getOnlyElement( origApp.getChildren() );
+        Location l = Iterables.getOnlyElement( entity.getLocations() );
+        log.info("Location: "+l);
+        assertEquals(l.config().get(MY_CONFIG_KEY), "myval");
+
+        Maybe<Object> rawConfig = ((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(MY_CONFIG_KEY);
+        log.info("Raw config: "+rawConfig);
+        Assert.assertTrue(rawConfig.isPresentAndNonNull());
+        Assert.assertTrue(rawConfig.get() instanceof DeferredSupplier, "Expected deferred raw value; got "+rawConfig.get());
+
+        rawConfig = ((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(SshTool.PROP_PASSWORD);
+        log.info("Raw config password: "+rawConfig);
+        Assert.assertTrue(rawConfig.isPresentAndNonNull());
+        Assert.assertTrue(rawConfig.get() instanceof DeferredSupplier, "Expected deferred raw value; got "+rawConfig.get());
+    }
+
+    @Test(groups="Live")
+    public void testProvisioningPropertyInheritance() throws Exception {
+        String yaml = Joiner.on("\n").join(
+                "services:",
+                "- type: "+EmptySoftwareProcess.class.getName(),
+                "  provisioning.properties:",
+                "      password: $brooklyn:external(\"myprovider\", \"mykey\")",
+                // note that these 2 do not get transferred -- see below
+                "      simple: 42",
+                "      my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")",
+                "location: aws-ec2");
+
+        origApp = (StartableApplication) createAndStartApplication(new StringReader(yaml));
+
+        Entity entity = Iterables.getOnlyElement( origApp.getChildren() );
+        Location l = Iterables.getOnlyElement( entity.getLocations() );
+        log.info("Location: "+l);
+        assertEquals(l.config().get(JcloudsLocation.PASSWORD), "myval");
+
+        Maybe<Object> rawConfig = ((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(ConfigKeys.newStringConfigKey("password"));
+        log.info("Raw config password: "+rawConfig);
+        Assert.assertTrue(rawConfig.isPresentAndNonNull());
+        Assert.assertTrue(rawConfig.get() instanceof DeferredSupplier, "Expected deferred raw value; got "+rawConfig.get());
+
+        // these are null as only recognised provisioning properties are transmitted by jclouds
+        log.info("my config key: "+l.getConfig(MY_CONFIG_KEY));
+        log.info("my config key raw: "+((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(MY_CONFIG_KEY));
+        log.info("simple: "+l.getConfig(ConfigKeys.builder(Integer.class, "simple").build()));
+        log.info("simple raw: "+((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(ConfigKeys.builder(Integer.class, "simple").build()));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b1407d08/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsLocationExternalConfigYamlLiveTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsLocationExternalConfigYamlLiveTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsLocationExternalConfigYamlLiveTest.java
deleted file mode 100644
index 6a946d3..0000000
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsLocationExternalConfigYamlLiveTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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 java.io.StringReader;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.camp.brooklyn.ExternalConfigYamlTest.MyExternalConfigSupplier;
-import org.apache.brooklyn.camp.brooklyn.ExternalConfigYamlTest.MyExternalConfigSupplierWithoutMapArg;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.entity.StartableApplication;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
-import org.apache.brooklyn.entity.software.base.EmptySoftwareProcess;
-import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-import org.apache.brooklyn.util.core.internal.ssh.SshTool;
-import org.apache.brooklyn.util.core.task.DeferredSupplier;
-import org.apache.brooklyn.util.guava.Maybe;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.Iterables;
-
-// also see ExternalConfigYamlTest
-public class JcloudsLocationExternalConfigYamlLiveTest extends AbstractYamlRebindTest {
-
-    private static final Logger log = LoggerFactory.getLogger(ExternalConfigYamlTest.class);
-
-    private static final ConfigKey<String> MY_CONFIG_KEY = ConfigKeys.newStringConfigKey("my.config.key");
-
-    @Override
-    protected BrooklynProperties createBrooklynProperties() {
-        BrooklynProperties props = BrooklynProperties.Factory.newDefault();
-        props.put("brooklyn.external.myprovider", MyExternalConfigSupplier.class.getName());
-        props.put("brooklyn.external.myprovider.mykey", "myval");
-        props.put("brooklyn.external.myproviderWithoutMapArg", MyExternalConfigSupplierWithoutMapArg.class.getName());
-        return props;
-    }
-
-    @Test(groups="Live")
-    public void testJcloudsInheritanceAndPasswordSecret() throws Exception {
-        String yaml = Joiner.on("\n").join(
-                "services:",
-                "- type: "+EmptySoftwareProcess.class.getName(),
-                "location:",
-                "  jclouds:aws-ec2:",
-                "    password: $brooklyn:external(\"myprovider\", \"mykey\")",
-                "    my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")");
-
-        origApp = (StartableApplication) createAndStartApplication(new StringReader(yaml));
-
-        Entity entity = Iterables.getOnlyElement( origApp.getChildren() );
-        Location l = Iterables.getOnlyElement( entity.getLocations() );
-        log.info("Location: "+l);
-        assertEquals(l.config().get(MY_CONFIG_KEY), "myval");
-
-        Maybe<Object> rawConfig = ((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(MY_CONFIG_KEY);
-        log.info("Raw config: "+rawConfig);
-        Assert.assertTrue(rawConfig.isPresentAndNonNull());
-        Assert.assertTrue(rawConfig.get() instanceof DeferredSupplier, "Expected deferred raw value; got "+rawConfig.get());
-
-        rawConfig = ((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(SshTool.PROP_PASSWORD);
-        log.info("Raw config password: "+rawConfig);
-        Assert.assertTrue(rawConfig.isPresentAndNonNull());
-        Assert.assertTrue(rawConfig.get() instanceof DeferredSupplier, "Expected deferred raw value; got "+rawConfig.get());
-    }
-
-    @Test(groups="Live")
-    public void testProvisioningPropertyInheritance() throws Exception {
-        String yaml = Joiner.on("\n").join(
-                "services:",
-                "- type: "+EmptySoftwareProcess.class.getName(),
-                "  provisioning.properties:",
-                "      password: $brooklyn:external(\"myprovider\", \"mykey\")",
-                // note that these 2 do not get transferred -- see below
-                "      simple: 42",
-                "      my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")",
-                "location: aws-ec2");
-
-        origApp = (StartableApplication) createAndStartApplication(new StringReader(yaml));
-
-        Entity entity = Iterables.getOnlyElement( origApp.getChildren() );
-        Location l = Iterables.getOnlyElement( entity.getLocations() );
-        log.info("Location: "+l);
-        assertEquals(l.config().get(JcloudsLocation.PASSWORD), "myval");
-
-        Maybe<Object> rawConfig = ((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(ConfigKeys.newStringConfigKey("password"));
-        log.info("Raw config password: "+rawConfig);
-        Assert.assertTrue(rawConfig.isPresentAndNonNull());
-        Assert.assertTrue(rawConfig.get() instanceof DeferredSupplier, "Expected deferred raw value; got "+rawConfig.get());
-
-        // these are null as only recognised provisioning properties are transmitted by jclouds
-        log.info("my config key: "+l.getConfig(MY_CONFIG_KEY));
-        log.info("my config key raw: "+((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(MY_CONFIG_KEY));
-        log.info("simple: "+l.getConfig(ConfigKeys.builder(Integer.class, "simple").build()));
-        log.info("simple raw: "+((BrooklynObjectInternal.ConfigurationSupportInternal)l.config()).getRaw(ConfigKeys.builder(Integer.class, "simple").build()));
-    }
-}
\ No newline at end of file


[4/8] brooklyn-server git commit: Reflections utils: improve use of generics

Posted by sv...@apache.org.
Reflections utils: improve use of generics

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

Branch: refs/heads/master
Commit: cb3bfa5ab67d950d9e02678fb86324c796f6e171
Parents: 554f50e
Author: Aled Sage <al...@gmail.com>
Authored: Wed Oct 19 00:38:39 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Oct 19 00:40:46 2016 +0100

----------------------------------------------------------------------
 .../java/org/apache/brooklyn/util/javalang/Reflections.java  | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cb3bfa5a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java b/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
index 5af8ae9..95bbf7f 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
@@ -825,11 +825,11 @@ public class Reflections {
 
     /** @deprecated since 0.10.0 use {@link #invokeMethodFromArgs(Object, String, List)};
      * this allows null return values */ @Deprecated
-    public static Optional<Object> invokeMethodWithArgs(Object clazzOrInstance, String method, List<Object> args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+    public static Optional<Object> invokeMethodWithArgs(Object clazzOrInstance, String method, List<?> args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
         return invokeMethodWithArgs(clazzOrInstance, method, args, false);
     }
     /** @deprecated since 0.10.0 use {@link #invokeMethodFromArgs(Object, String, List)} */ @Deprecated
-    public static Optional<Object> invokeMethodWithArgs(Object clazzOrInstance, String method, List<Object> args, boolean setAccessible) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+    public static Optional<Object> invokeMethodWithArgs(Object clazzOrInstance, String method, List<?> args, boolean setAccessible) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
         return invokeMethodFromArgs(clazzOrInstance, method, args, setAccessible).toOptional();
     }
     
@@ -837,11 +837,11 @@ public class Reflections {
      * @throws InvocationTargetException 
      * @throws IllegalAccessException 
      * @throws IllegalArgumentException */
-    public static Maybe<Object> invokeMethodFromArgs(Object clazzOrInstance, String method, List<Object> args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+    public static Maybe<Object> invokeMethodFromArgs(Object clazzOrInstance, String method, List<?> args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
         return invokeMethodFromArgs(clazzOrInstance, method, args, false);
     }
     /** as {@link #invokeMethodFromArgs(Object, String, List)} but giving control over whether to set it accessible */
-    public static Maybe<Object> invokeMethodFromArgs(Object clazzOrInstance, String method, List<Object> args, boolean setAccessible) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+    public static Maybe<Object> invokeMethodFromArgs(Object clazzOrInstance, String method, List<?> args, boolean setAccessible) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
         Preconditions.checkNotNull(clazzOrInstance, "clazz or instance");
         Preconditions.checkNotNull(method, "method");
         Preconditions.checkNotNull(args, "args to "+method);


[5/8] brooklyn-server git commit: Convert jclouds yaml tests to unit tests

Posted by sv...@apache.org.
Convert jclouds yaml tests to unit tests


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

Branch: refs/heads/master
Commit: 70fd9bdf74d42c3a2a735c782392ae6b771700a3
Parents: cb3bfa5
Author: Aled Sage <al...@gmail.com>
Authored: Wed Oct 19 09:54:48 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Oct 19 10:15:11 2016 +0100

----------------------------------------------------------------------
 camp/camp-brooklyn/pom.xml                      |   7 +
 .../AbstractJcloudsRebindStubYamlTest.java      | 139 ++++++++++++
 .../brooklyn/AbstractJcloudsStubYamlTest.java   | 179 ++++++++++++++++
 ...loudsCustomizerInstantiationYamlDslTest.java |  46 +---
 .../brooklyn/JcloudsExternalConfigYamlTest.java |  45 ++--
 .../brooklyn/JcloudsRebindStubYamlTest.java     |  99 ---------
 .../JcloudsRebindWithExternalConfigTest.java    |  34 ++-
 .../brooklyn/JcloudsRebindWithYamlDslTest.java  |  20 +-
 .../jclouds/AbstractJcloudsLiveTest.java        |   4 +
 .../jclouds/AbstractJcloudsStubbedUnitTest.java |  37 +---
 .../JcloudsLocationExtensionStubbedTest.java    |   2 +-
 .../jclouds/JcloudsRebindStubUnitTest.java      | 212 +++++++++++++++++++
 .../jclouds/JcloudsStubTemplateBuilder.java     |   5 +
 .../jclouds/StubbedComputeServiceRegistry.java  |  22 ++
 .../JcloudsPortForwardingStubbedTest.java       |   2 +-
 15 files changed, 629 insertions(+), 224 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/camp/camp-brooklyn/pom.xml
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/pom.xml b/camp/camp-brooklyn/pom.xml
index ac12285..232e5c2 100644
--- a/camp/camp-brooklyn/pom.xml
+++ b/camp/camp-brooklyn/pom.xml
@@ -146,6 +146,13 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.brooklyn</groupId>
+            <artifactId>brooklyn-software-winrm</artifactId>
+            <version>${project.version}</version>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <!-- jsr311 excluded from jclouds; see jclouds module's pom for further comments. -->
             <groupId>javax.ws.rs</groupId>
             <artifactId>javax.ws.rs-api</artifactId>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsRebindStubYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsRebindStubYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsRebindStubYamlTest.java
new file mode 100644
index 0000000..d12b885
--- /dev/null
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsRebindStubYamlTest.java
@@ -0,0 +1,139 @@
+/*
+ * 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.File;
+
+import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityMode;
+import org.apache.brooklyn.camp.brooklyn.AbstractJcloudsStubYamlTest.ByonComputeServiceStaticRef;
+import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
+import org.apache.brooklyn.location.jclouds.ComputeServiceRegistry;
+import org.apache.brooklyn.location.jclouds.JcloudsLocation;
+import org.apache.brooklyn.location.jclouds.JcloudsRebindStubTest;
+import org.apache.brooklyn.location.jclouds.JcloudsRebindStubUnitTest;
+import org.apache.brooklyn.location.jclouds.JcloudsStubTemplateBuilder;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
+import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
+import org.apache.brooklyn.util.core.internal.winrm.RecordingWinRmTool;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicates;
+
+/**
+ * Implementation notes. This relies on the test {@link JcloudsRebindStubTest#testRebind()}.
+ * It changes the setup for the test in the following ways:
+ * <ul>
+ *   <li>Location is defined in YAML (added to the catalog, to make it easier for sub-classes to use).
+ *   <li>When creating management context, it also creates {@link BrooklynCampPlatformLauncherNoServer}.
+ *   <li>It uses {@link JcloudsRebindStubYamlTest#ByonComputeServiceStaticRef} to allow
+ *       the test's {@link ComputeServiceRegistry} to be wired up via YAML. This is important so that
+ *       we can serialize/deserialize in the rebind test.
+ * </ul>
+ */
+public abstract class AbstractJcloudsRebindStubYamlTest extends JcloudsRebindStubUnitTest {
+
+    // TODO Some duplication compared to AbstractJcloudsStubYamlTest
+
+    public static final String LOCATION_CATALOG_ID = "stubbed-aws-ec2";
+
+    protected BrooklynCampPlatformLauncherNoServer origLauncher;
+    protected BrooklynCampPlatformLauncherNoServer newLauncher;
+
+    @BeforeMethod(alwaysRun=true)
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        addStubbedLocationToCatalog();
+    }
+    
+    @Override
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        try {
+            super.tearDown();
+        } finally {
+            ByonComputeServiceStaticRef.clearInstance();
+            if (origLauncher != null) origLauncher.stopServers();
+            if (newLauncher != null) newLauncher.stopServers();
+        }
+    }
+    
+    @Override
+    protected LocalManagementContext createOrigManagementContext() {
+        origLauncher = new BrooklynCampPlatformLauncherNoServer() {
+            @Override
+            protected LocalManagementContext newMgmtContext() {
+                return AbstractJcloudsRebindStubYamlTest.super.createOrigManagementContext();
+            }
+        };
+        origLauncher.launch();
+        LocalManagementContext mgmt = (LocalManagementContext) origLauncher.getBrooklynMgmt();
+        return mgmt;
+    }
+
+    @Override
+    protected LocalManagementContext createNewManagementContext(final File mementoDir, final HighAvailabilityMode haMode) {
+        newLauncher = new BrooklynCampPlatformLauncherNoServer() {
+            @Override
+            protected LocalManagementContext newMgmtContext() {
+                return AbstractJcloudsRebindStubYamlTest.super.createNewManagementContext(mementoDir, haMode);
+            }
+        };
+        newLauncher.launch();
+        return (LocalManagementContext) newLauncher.getBrooklynMgmt();
+    }
+    
+    protected void addStubbedLocationToCatalog() {
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  id: " + LOCATION_CATALOG_ID,
+                "  version: 1.0.0",
+                "  itemType: location",
+                "  item:",
+                "    type: " + LOCATION_SPEC,
+                "    brooklyn.config:",
+                "      identity: myidentity",
+                "      credential: mycredential",
+                "      jclouds.computeServiceRegistry:",
+                "        $brooklyn:object:",
+                "          type: " + ByonComputeServiceStaticRef.class.getName(),
+                "      " + SshMachineLocation.SSH_TOOL_CLASS.getName() + ": " + RecordingSshTool.class.getName(),
+                "      templateBuilder:",
+                "        $brooklyn:object:",
+                "          type: "+JcloudsStubTemplateBuilder.class.getName(),
+                "          factoryMethod.name: create",
+                "      " + JcloudsLocation.POLL_FOR_FIRST_REACHABLE_ADDRESS_PREDICATE.getName() + ":",
+                "        $brooklyn:object:",
+                "          type: "+Predicates.class.getName(),
+                "          factoryMethod.name: alwaysTrue",
+                "      " + SshMachineLocation.SSH_TOOL_CLASS.getName() + ": " + RecordingSshTool.class.getName(),
+                "      " + WinRmMachineLocation.WINRM_TOOL_CLASS.getName() + ": " + RecordingWinRmTool.class.getName());
+    }
+    
+    protected void addCatalogItems(String... catalogYaml) {
+        addCatalogItems(Joiner.on("\n").join(catalogYaml));
+    }
+    
+    protected void addCatalogItems(String catalogYaml) {
+        mgmt().getCatalog().addItems(catalogYaml, false);
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java
new file mode 100644
index 0000000..456f05d
--- /dev/null
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java
@@ -0,0 +1,179 @@
+/*
+ * 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 com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Reader;
+import java.util.Set;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.camp.brooklyn.AbstractJcloudsStubYamlTest.ByonComputeServiceStaticRef;
+import org.apache.brooklyn.camp.spi.Assembly;
+import org.apache.brooklyn.camp.spi.AssemblyTemplate;
+import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
+import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
+import org.apache.brooklyn.location.jclouds.AbstractJcloudsStubbedUnitTest;
+import org.apache.brooklyn.location.jclouds.ComputeServiceRegistry;
+import org.apache.brooklyn.location.jclouds.JcloudsLocation;
+import org.apache.brooklyn.location.jclouds.JcloudsStubTemplateBuilder;
+import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry;
+import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.NodeCreator;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
+import org.apache.brooklyn.util.core.internal.winrm.RecordingWinRmTool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+
+/**
+ * This is a combination of the jclouds tests and the yaml tests. As such, it extends
+ * {@link AbstractJcloudsStubbedUnitTest} and duplicates some of the utility methods in
+ * {@link AbstractYamlTest}.
+ */
+public abstract class AbstractJcloudsStubYamlTest extends AbstractJcloudsStubbedUnitTest {
+
+    // TODO Some duplication compared to AbstractJcloudsRebindStubYamlTest
+    
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractJcloudsStubYamlTest.class);
+
+    public static final String LOCATION_CATALOG_ID = "stubbed-aws-ec2";
+    
+    protected BrooklynCampPlatformLauncherNoServer launcher;
+    protected BrooklynCampPlatform platform;
+
+    @BeforeMethod(alwaysRun=true)
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        
+        NodeCreator nodeCreator = newNodeCreator();
+        StubbedComputeServiceRegistry computeServiceRegistry = new StubbedComputeServiceRegistry(nodeCreator, false);
+        ByonComputeServiceStaticRef.setInstance(computeServiceRegistry);
+        
+        addStubbedLocationToCatalog();
+    }
+    
+    @AfterMethod(alwaysRun=true)
+    @Override
+    public void tearDown() throws Exception {
+        try {
+            super.tearDown();
+        } finally {
+            ByonComputeServiceStaticRef.clearInstance();
+            if (launcher != null) launcher.stopServers();
+        }
+    }
+    
+    @Override
+    protected LocalManagementContext newManagementContext() {
+        launcher = new BrooklynCampPlatformLauncherNoServer() {
+            @Override
+            protected LocalManagementContext newMgmtContext() {
+                return AbstractJcloudsStubYamlTest.super.newManagementContext();
+            }
+        };
+        launcher.launch();
+        platform = launcher.getCampPlatform();
+        LocalManagementContext mgmt = (LocalManagementContext) launcher.getBrooklynMgmt();
+        return mgmt;
+    }
+
+    protected void addStubbedLocationToCatalog() {
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  id: " + LOCATION_CATALOG_ID,
+                "  version: 1.0.0",
+                "  itemType: location",
+                "  item:",
+                "    type: " + LOCATION_SPEC,
+                "    brooklyn.config:",
+                "      identity: myidentity",
+                "      credential: mycredential",
+                "      jclouds.computeServiceRegistry:",
+                "        $brooklyn:object:",
+                "          type: " + ByonComputeServiceStaticRef.class.getName(),
+                "      " + SshMachineLocation.SSH_TOOL_CLASS.getName() + ": " + RecordingSshTool.class.getName(),
+                "      templateBuilder:",
+                "        $brooklyn:object:",
+                "          type: "+JcloudsStubTemplateBuilder.class.getName(),
+                "          factoryMethod.name: create",
+                "      " + JcloudsLocation.POLL_FOR_FIRST_REACHABLE_ADDRESS_PREDICATE.getName() + ":",
+                "        $brooklyn:object:",
+                "          type: "+Predicates.class.getName(),
+                "          factoryMethod.name: alwaysTrue",
+                "      " + SshMachineLocation.SSH_TOOL_CLASS.getName() + ": " + RecordingSshTool.class.getName(),
+                "      " + WinRmMachineLocation.WINRM_TOOL_CLASS.getName() + ": " + RecordingWinRmTool.class.getName());
+    }
+
+    protected void addCatalogItems(String... catalogYaml) {
+        addCatalogItems(Joiner.on("\n").join(catalogYaml));
+    }
+    
+    protected void addCatalogItems(String catalogYaml) {
+        mgmt().getCatalog().addItems(catalogYaml, false);
+    }
+    
+    protected Entity createAndStartApplication(Reader input) throws Exception {
+        AssemblyTemplate at = platform.pdp().registerDeploymentPlan(input);
+        Assembly assembly;
+        try {
+            assembly = at.getInstantiator().newInstance().instantiate(at, platform);
+        } catch (Exception e) {
+            LOG.warn("Unable to instantiate " + at + " (rethrowing): " + e);
+            throw e;
+        }
+        LOG.info("Test - created " + assembly);
+        final Entity app = mgmt().getEntityManager().getEntity(assembly.getId());
+        LOG.info("App - " + app);
+        
+        // wait for app to have started
+        Set<Task<?>> tasks = mgmt().getExecutionManager().getTasksWithAllTags(ImmutableList.of(
+                BrooklynTaskTags.EFFECTOR_TAG, 
+                BrooklynTaskTags.tagForContextEntity(app), 
+                BrooklynTaskTags.tagForEffectorCall(app, "start", ConfigBag.newInstance(ImmutableMap.of("locations", ImmutableMap.of())))));
+        Iterables.getOnlyElement(tasks).get();
+        
+        return app;
+    }
+
+    public static class ByonComputeServiceStaticRef {
+        private static volatile ComputeServiceRegistry instance;
+
+        public ComputeServiceRegistry asComputeServiceRegistry() {
+            return checkNotNull(instance, "instance");
+        }
+        static void setInstance(ComputeServiceRegistry val) {
+            instance = val;
+        }
+        static void clearInstance() {
+            instance = null;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsCustomizerInstantiationYamlDslTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsCustomizerInstantiationYamlDslTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsCustomizerInstantiationYamlDslTest.java
index 7083fc2..a845831 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsCustomizerInstantiationYamlDslTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsCustomizerInstantiationYamlDslTest.java
@@ -22,23 +22,18 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertSame;
 
 import java.util.List;
-import java.util.Map;
 
 import org.apache.brooklyn.api.entity.Application;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.camp.brooklyn.spi.creation.CampTypePlanTransformer;
 import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.core.location.Machines;
 import org.apache.brooklyn.core.typereg.RegisteredTypeLoadingContexts;
 import org.apache.brooklyn.entity.machine.MachineEntity;
 import org.apache.brooklyn.location.jclouds.BasicJcloudsLocationCustomizer;
-import org.apache.brooklyn.location.jclouds.ComputeServiceRegistry;
 import org.apache.brooklyn.location.jclouds.JcloudsLocation;
 import org.apache.brooklyn.location.jclouds.JcloudsMachineLocation;
-import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.MutableList;
-import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
 import org.jclouds.compute.ComputeService;
 import org.jclouds.compute.domain.Template;
 import org.jclouds.compute.domain.TemplateBuilder;
@@ -49,7 +44,6 @@ import org.testng.annotations.Test;
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 
 /**
@@ -72,10 +66,8 @@ import com.google.common.collect.Lists;
  * }
  * </pre>
  */
-@Test(groups = {"Live", "Live-sanity"})
-public class JcloudsCustomizerInstantiationYamlDslTest extends JcloudsRebindStubYamlTest {
-
-    protected Entity origApp;
+@Test
+public class JcloudsCustomizerInstantiationYamlDslTest extends AbstractJcloudsStubYamlTest {
 
     @BeforeMethod(alwaysRun=true)
     @Override
@@ -94,20 +86,10 @@ public class JcloudsCustomizerInstantiationYamlDslTest extends JcloudsRebindStub
         }
     }
     
-    @Override
-    protected JcloudsLocation newJcloudsLocation(ComputeServiceRegistry computeServiceRegistry) throws Exception {
-        ByonComputeServiceStaticRef.setInstance(computeServiceRegistry);
-
+    @Test
+    public void testCustomizers() throws Exception {
         String yaml = Joiner.on("\n").join(
-                "location:",
-                "  " + LOCATION_SPEC + ":",
-                "    imageId: " + IMAGE_ID,
-                "    jclouds.computeServiceRegistry:",
-                "      $brooklyn:object:",
-                "        type: " + ByonComputeServiceStaticRef.class.getName(),
-                "    " + SshMachineLocation.SSH_TOOL_CLASS.getName() + ": " + RecordingSshTool.class.getName(),
-                "    waitForSshable: false",
-                "    useJcloudsSshInit: false",
+                "location: " + LOCATION_CATALOG_ID,
                 "services:\n" +
                 "- type: " + MachineEntity.class.getName(),
                 "  brooklyn.config:",
@@ -122,16 +104,10 @@ public class JcloudsCustomizerInstantiationYamlDslTest extends JcloudsRebindStub
                 "          object.fields:",
                 "            enabled: $brooklyn:config(\"enabled\")");
 
-        EntitySpec<?> spec = mgmt().getTypeRegistry().createSpecFromPlan(CampTypePlanTransformer.FORMAT, yaml, RegisteredTypeLoadingContexts.spec(Application.class), EntitySpec.class);
-        origApp = mgmt().getEntityManager().createEntity(spec);
-        
-        return (JcloudsLocation) Iterables.getOnlyElement(origApp.getLocations());
-    }
+        EntitySpec<?> spec = managementContext.getTypeRegistry().createSpecFromPlan(CampTypePlanTransformer.FORMAT, yaml, RegisteredTypeLoadingContexts.spec(Application.class), EntitySpec.class);
+        Entity app = managementContext.getEntityManager().createEntity(spec);
 
-    @Override
-    protected JcloudsMachineLocation obtainMachine(JcloudsLocation jcloudsLoc, Map<?, ?> props) throws Exception {
-        final MachineEntity entity = (MachineEntity) Iterables.getOnlyElement(origApp.getChildren());
-        origApp.invoke(Startable.START, ImmutableMap.<String, Object>of()).get();
+        app.invoke(Startable.START, ImmutableMap.<String, Object>of()).get();
 
         // Assert all customize functions called
         assertEquals(RecordingLocationCustomizer.calls.size(), 4,
@@ -142,14 +118,8 @@ public class JcloudsCustomizerInstantiationYamlDslTest extends JcloudsRebindStub
         for (RecordingLocationCustomizer.CallParams call : RecordingLocationCustomizer.calls) {
             assertSame(call.instance, firstInstance);
         }
-
-        JcloudsMachineLocation machine =
-                Machines.findUniqueMachineLocation(entity.getLocations(), JcloudsMachineLocation.class).get();
-
-        return machine;
     }
 
-
     public static class RecordingLocationCustomizer extends BasicJcloudsLocationCustomizer {
 
         public static final List<CallParams> calls = Lists.newCopyOnWriteArrayList();

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java
index a29a813..e5a5e46 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsExternalConfigYamlTest.java
@@ -21,7 +21,9 @@ package org.apache.brooklyn.camp.brooklyn;
 import static org.testng.Assert.assertEquals;
 
 import java.io.StringReader;
+import java.util.Map;
 
+import org.apache.brooklyn.api.entity.Application;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.camp.brooklyn.ExternalConfigYamlTest.MyExternalConfigSupplier;
@@ -29,10 +31,10 @@ import org.apache.brooklyn.camp.brooklyn.ExternalConfigYamlTest.MyExternalConfig
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.entity.StartableApplication;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
 import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
 import org.apache.brooklyn.entity.software.base.EmptySoftwareProcess;
 import org.apache.brooklyn.location.jclouds.JcloudsLocation;
+import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.internal.ssh.SshTool;
 import org.apache.brooklyn.util.core.task.DeferredSupplier;
 import org.apache.brooklyn.util.guava.Maybe;
@@ -45,34 +47,35 @@ import com.google.common.base.Joiner;
 import com.google.common.collect.Iterables;
 
 // also see ExternalConfigYamlTest
-public class JcloudsExternalConfigYamlTest extends AbstractYamlRebindTest {
+public class JcloudsExternalConfigYamlTest extends AbstractJcloudsStubYamlTest {
 
     private static final Logger log = LoggerFactory.getLogger(JcloudsExternalConfigYamlTest.class);
 
     private static final ConfigKey<String> MY_CONFIG_KEY = ConfigKeys.newStringConfigKey("my.config.key");
-
+    
     @Override
-    protected BrooklynProperties createBrooklynProperties() {
-        BrooklynProperties props = BrooklynProperties.Factory.newDefault();
-        props.put("brooklyn.external.myprovider", MyExternalConfigSupplier.class.getName());
-        props.put("brooklyn.external.myprovider.mykey", "myval");
-        props.put("brooklyn.external.myproviderWithoutMapArg", MyExternalConfigSupplierWithoutMapArg.class.getName());
-        return props;
+    protected Map<String, ?> customBrooklynProperties() {
+        return MutableMap.<String, Object>builder()
+                .putAll(super.customBrooklynProperties())
+                .put("brooklyn.external.myprovider", MyExternalConfigSupplier.class.getName())
+                .put("brooklyn.external.myprovider.mykey", "myval")
+                .put("brooklyn.external.myproviderWithoutMapArg", MyExternalConfigSupplierWithoutMapArg.class.getName())
+                .build();
     }
 
-    @Test(groups="Live")
+    @Test
     public void testJcloudsInheritanceAndPasswordSecret() throws Exception {
         String yaml = Joiner.on("\n").join(
-                "services:",
-                "- type: "+EmptySoftwareProcess.class.getName(),
                 "location:",
-                "  jclouds:aws-ec2:",
+                "  " + LOCATION_CATALOG_ID + ":",
                 "    password: $brooklyn:external(\"myprovider\", \"mykey\")",
-                "    my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")");
+                "    my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")",
+                "services:",
+                "- type: "+EmptySoftwareProcess.class.getName());
 
-        origApp = (StartableApplication) createAndStartApplication(new StringReader(yaml));
+        Application app = (StartableApplication) createAndStartApplication(new StringReader(yaml));
 
-        Entity entity = Iterables.getOnlyElement( origApp.getChildren() );
+        Entity entity = Iterables.getOnlyElement( app.getChildren() );
         Location l = Iterables.getOnlyElement( entity.getLocations() );
         log.info("Location: "+l);
         assertEquals(l.config().get(MY_CONFIG_KEY), "myval");
@@ -88,21 +91,21 @@ public class JcloudsExternalConfigYamlTest extends AbstractYamlRebindTest {
         Assert.assertTrue(rawConfig.get() instanceof DeferredSupplier, "Expected deferred raw value; got "+rawConfig.get());
     }
 
-    @Test(groups="Live")
+    @Test
     public void testProvisioningPropertyInheritance() throws Exception {
         String yaml = Joiner.on("\n").join(
+                "location: " + LOCATION_CATALOG_ID,
                 "services:",
                 "- type: "+EmptySoftwareProcess.class.getName(),
                 "  provisioning.properties:",
                 "      password: $brooklyn:external(\"myprovider\", \"mykey\")",
                 // note that these 2 do not get transferred -- see below
                 "      simple: 42",
-                "      my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")",
-                "location: aws-ec2");
+                "      my.config.key: $brooklyn:external(\"myprovider\", \"mykey\")");
 
-        origApp = (StartableApplication) createAndStartApplication(new StringReader(yaml));
+        StartableApplication app = (StartableApplication) createAndStartApplication(new StringReader(yaml));
 
-        Entity entity = Iterables.getOnlyElement( origApp.getChildren() );
+        Entity entity = Iterables.getOnlyElement( app.getChildren() );
         Location l = Iterables.getOnlyElement( entity.getLocations() );
         log.info("Location: "+l);
         assertEquals(l.config().get(JcloudsLocation.PASSWORD), "myval");

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindStubYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindStubYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindStubYamlTest.java
deleted file mode 100644
index c6fbcd1..0000000
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindStubYamlTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * 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 com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.File;
-
-import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityMode;
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
-import org.apache.brooklyn.location.jclouds.ComputeServiceRegistry;
-import org.apache.brooklyn.location.jclouds.JcloudsRebindStubTest;
-import org.testng.annotations.AfterMethod;
-
-/**
- * Implementation notes. This relies on the test {@link JcloudsRebindStubTest#testRebind()}.
- * It changes the setup for the test in the following ways:
- * <ul>
- *   <li>Location is defined in YAML, and refers to the external config for the identity/credential.
- *   <li>When creating management context, it also creates {@link BrooklynCampPlatformLauncherNoServer}.
- *   <li>It uses {@link JcloudsRebindStubYamlTest#ByonComputeServiceStaticRef} to allow
- *       the test's {@link ComputeServiceRegistry} to be wired up via YAML.
- * </ul>
- * 
- * See {@link JcloudsRebindStubTest} for explanation why this is "Live" - it will not create VMs,
- * but does retrieve list of images etc.
- */
-public abstract class JcloudsRebindStubYamlTest extends JcloudsRebindStubTest {
-
-    protected BrooklynCampPlatformLauncherNoServer origLauncher;
-    protected BrooklynCampPlatformLauncherNoServer newLauncher;
-
-    @Override
-    @AfterMethod(alwaysRun=true)
-    public void tearDown() throws Exception {
-        try {
-            super.tearDown();
-        } finally {
-            ByonComputeServiceStaticRef.clearInstance();
-            if (origLauncher != null) origLauncher.stopServers();
-            if (newLauncher != null) newLauncher.stopServers();
-        }
-    }
-    
-    @Override
-    protected LocalManagementContext createOrigManagementContext() {
-        origLauncher = new BrooklynCampPlatformLauncherNoServer() {
-            @Override
-            protected LocalManagementContext newMgmtContext() {
-                return JcloudsRebindStubYamlTest.super.createOrigManagementContext();
-            }
-        };
-        origLauncher.launch();
-        LocalManagementContext mgmt = (LocalManagementContext) origLauncher.getBrooklynMgmt();
-        return mgmt;
-    }
-
-    @Override
-    protected LocalManagementContext createNewManagementContext(final File mementoDir, final HighAvailabilityMode haMode) {
-        newLauncher = new BrooklynCampPlatformLauncherNoServer() {
-            @Override
-            protected LocalManagementContext newMgmtContext() {
-                return JcloudsRebindStubYamlTest.super.createNewManagementContext(mementoDir, haMode);
-            }
-        };
-        newLauncher.launch();
-        return (LocalManagementContext) newLauncher.getBrooklynMgmt();
-    }
-    
-    public static class ByonComputeServiceStaticRef {
-        private static volatile ComputeServiceRegistry instance;
-
-        public ComputeServiceRegistry asComputeServiceRegistry() {
-            return checkNotNull(instance, "instance");
-        }
-        static void setInstance(ComputeServiceRegistry val) {
-            instance = val;
-        }
-        static void clearInstance() {
-            instance = null;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java
index fd3baa0..3f48acb 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithExternalConfigTest.java
@@ -18,13 +18,12 @@
  */
 package org.apache.brooklyn.camp.brooklyn;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Map;
+import static org.testng.Assert.assertEquals;
 
 import org.apache.brooklyn.api.entity.Application;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.camp.brooklyn.AbstractJcloudsStubYamlTest.ByonComputeServiceStaticRef;
 import org.apache.brooklyn.camp.brooklyn.spi.creation.CampTypePlanTransformer;
 import org.apache.brooklyn.core.config.external.InPlaceExternalConfigSupplier;
 import org.apache.brooklyn.core.entity.trait.Startable;
@@ -32,8 +31,6 @@ import org.apache.brooklyn.core.internal.BrooklynProperties;
 import org.apache.brooklyn.core.typereg.RegisteredTypeLoadingContexts;
 import org.apache.brooklyn.location.jclouds.ComputeServiceRegistry;
 import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-import org.apache.brooklyn.location.jclouds.JcloudsPropertiesFromBrooklynProperties;
-import org.apache.brooklyn.util.collections.MutableMap;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Joiner;
@@ -46,20 +43,15 @@ import com.google.common.collect.Iterables;
  *   <li>Brooklyn properties defines external config
  * </ul>
  */
-@Test(groups={"Live", "Live-sanity"})
-public class JcloudsRebindWithExternalConfigTest extends JcloudsRebindStubYamlTest {
+@Test
+public class JcloudsRebindWithExternalConfigTest extends AbstractJcloudsRebindStubYamlTest {
 
     @Override
     protected BrooklynProperties createBrooklynProperties() {
         BrooklynProperties result = super.createBrooklynProperties();
-        
-        Map<Object,Object> jcloudsProps = MutableMap.<Object,Object>copyOf(new JcloudsPropertiesFromBrooklynProperties().getJcloudsProperties(PROVIDER, null, "testname", result.asMapWithStringKeys()));
-        String identity = checkNotNull((String)jcloudsProps.get("identity"), "identity");
-        String credential = checkNotNull((String)jcloudsProps.get("credential"), "credential");
-        
         result.put("brooklyn.external.creds", InPlaceExternalConfigSupplier.class.getName());
-        result.put("brooklyn.external.creds.test-identity", identity);
-        result.put("brooklyn.external.creds.test-credential", credential);
+        result.put("brooklyn.external.creds.test-identity", "myidentity");
+        result.put("brooklyn.external.creds.test-credential", "mycredential");
         
         return result;
     }
@@ -70,15 +62,9 @@ public class JcloudsRebindWithExternalConfigTest extends JcloudsRebindStubYamlTe
         
         String yaml = Joiner.on("\n").join(
                 "location:",
-                "  "+LOCATION_SPEC+":",
+                "  "+LOCATION_CATALOG_ID+":",
                 "    identity: $brooklyn:external(\"creds\", \"test-identity\")",
                 "    credential: $brooklyn:external(\"creds\", \"test-credential\")",
-                "    imageId: "+IMAGE_ID,
-                "    jclouds.computeServiceRegistry:",
-                "      $brooklyn:object:",
-                "        type: "+ByonComputeServiceStaticRef.class.getName(),
-                "    waitForSshable: false",
-                "    useJcloudsSshInit: false",
                 "services:\n"+
                 "- type: org.apache.brooklyn.entity.stock.BasicApplication");
         
@@ -87,6 +73,10 @@ public class JcloudsRebindWithExternalConfigTest extends JcloudsRebindStubYamlTe
         final Entity app = mgmt().getEntityManager().createEntity(spec);
         app.invoke(Startable.START, ImmutableMap.<String, Object>of()).get();
 
-        return (JcloudsLocation) Iterables.getOnlyElement(app.getLocations());
+        JcloudsLocation result = (JcloudsLocation) Iterables.getOnlyElement(app.getLocations());
+        assertEquals(result.getIdentity(), "myidentity");
+        assertEquals(result.getCredential(), "mycredential");
+        
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithYamlDslTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithYamlDslTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithYamlDslTest.java
index 5864a9a..593595b 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithYamlDslTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsRebindWithYamlDslTest.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import org.apache.brooklyn.api.entity.Application;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.camp.brooklyn.AbstractJcloudsStubYamlTest.ByonComputeServiceStaticRef;
 import org.apache.brooklyn.camp.brooklyn.spi.creation.CampTypePlanTransformer;
 import org.apache.brooklyn.core.entity.trait.Startable;
 import org.apache.brooklyn.core.location.Machines;
@@ -33,8 +34,6 @@ import org.apache.brooklyn.entity.machine.MachineEntity;
 import org.apache.brooklyn.location.jclouds.ComputeServiceRegistry;
 import org.apache.brooklyn.location.jclouds.JcloudsLocation;
 import org.apache.brooklyn.location.jclouds.JcloudsMachineLocation;
-import org.apache.brooklyn.location.jclouds.JcloudsRebindStubTest;
-import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
 import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool.ExecCmd;
 import org.testng.annotations.Test;
@@ -47,9 +46,6 @@ import com.google.common.collect.Iterables;
  * This is primarily to test https://issues.apache.org/jira/browse/BROOKLYN-349.
  * It confirms that entity "provisioning.properties" get passed through to the machine.
  * 
- * As per the other {@link JcloudsRebindStubTest} tests, it will connect to SoftLayer to retrieve
- * image details (so needs real credentials), but it will then stub out the VM creation.
- * 
  * It could do with some cleanup at some point:
  * <ul>
  *   <li>There is an NPE at AddMachineMetrics$2.apply(AddMachineMetrics.java:111), despite having set
@@ -61,8 +57,8 @@ import com.google.common.collect.Iterables;
  *       Presumably we need to stub out that call as well somehow!
  * </ul>
  */
-@Test(groups={"Live", "Live-sanity"})
-public class JcloudsRebindWithYamlDslTest extends JcloudsRebindStubYamlTest {
+@Test
+public class JcloudsRebindWithYamlDslTest extends AbstractJcloudsRebindStubYamlTest {
 
     protected Entity origApp;
     
@@ -84,15 +80,7 @@ public class JcloudsRebindWithYamlDslTest extends JcloudsRebindStubYamlTest {
         mgmt().getCatalog().addItems(catalogYaml, true);
 
         String yaml = Joiner.on("\n").join(
-                "location:",
-                "  "+LOCATION_SPEC+":",
-                "    imageId: "+IMAGE_ID,
-                "    jclouds.computeServiceRegistry:",
-                "      $brooklyn:object:",
-                "        type: "+ByonComputeServiceStaticRef.class.getName(),
-                "    "+SshMachineLocation.SSH_TOOL_CLASS.getName() + ": " + RecordingSshTool.class.getName(),
-                "    waitForSshable: false",
-                "    useJcloudsSshInit: false",
+                "location: " + LOCATION_CATALOG_ID,
                 "services:\n"+
                 "- type: "+symbolicName,
                 "  brooklyn.config:",

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java
index 4e2e7cc..bf2fb8d 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsLiveTest.java
@@ -109,6 +109,10 @@ public class AbstractJcloudsLiveTest {
         }
     }
 
+    protected LocalManagementContext mgmt() {
+        return managementContext;
+    }
+    
     protected LocalManagementContext newManagementContext() {
         // loads properties, by default, but not OSGi or anything else
         return LocalManagementContextForTests.builder(true).useDefaultProperties().build();

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java
index 0fa0e94..6b6f790 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java
@@ -19,28 +19,21 @@
 package org.apache.brooklyn.location.jclouds;
 
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
 import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.AbstractNodeCreator;
+import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.BasicNodeCreator;
 import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.NodeCreator;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
 import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
 import org.apache.brooklyn.util.core.internal.winrm.RecordingWinRmTool;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.NodeMetadata.Status;
-import org.jclouds.compute.domain.NodeMetadataBuilder;
-import org.jclouds.compute.domain.Template;
-import org.jclouds.domain.LoginCredentials;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 
 import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
 /**
@@ -81,10 +74,17 @@ public abstract class AbstractJcloudsStubbedUnitTest extends AbstractJcloudsLive
 
     @Override
     protected LocalManagementContext newManagementContext() {
-        return LocalManagementContextForTests.builder(true).build();
+        return LocalManagementContextForTests.builder(true).useAdditionalProperties(customBrooklynProperties()).build();
     }
     
     /**
+     * For overriding.
+     */
+    protected Map<String, ?> customBrooklynProperties() {
+        return ImmutableMap.of();
+    }
+
+    /**
      * Expect sub-classes to call this - either in their {@link BeforeMethod} or at the very 
      * start of the test method (to allow custom config per test).
      */
@@ -113,22 +113,7 @@ public abstract class AbstractJcloudsStubbedUnitTest extends AbstractJcloudsLive
         return LOCATION_SPEC;
     }
     
-    protected NodeCreator newVanillaNodeCreator() {
-        return new AbstractNodeCreator() {
-            private final AtomicInteger counter = new AtomicInteger(1);
-            @Override
-            protected NodeMetadata newNode(String group, Template template) {
-                int suffix = counter.getAndIncrement();
-                NodeMetadata result = new NodeMetadataBuilder()
-                        .id("mynodeid"+suffix)
-                        .credentials(LoginCredentials.builder().identity("myuser").credential("mypassword").build())
-                        .loginPort(22)
-                        .status(Status.RUNNING)
-                        .publicAddresses(ImmutableList.of("173.194.32."+suffix))
-                        .privateAddresses(ImmutableList.of("172.168.10."+suffix))
-                        .build();
-                return result;
-            }
-        };
+    protected NodeCreator newNodeCreator() {
+        return new BasicNodeCreator();
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsLocationExtensionStubbedTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsLocationExtensionStubbedTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsLocationExtensionStubbedTest.java
index c192297..7c20d5b 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsLocationExtensionStubbedTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsLocationExtensionStubbedTest.java
@@ -54,7 +54,7 @@ public class JcloudsLocationExtensionStubbedTest extends AbstractJcloudsStubbedU
 
     @Test
     public void testHasExtension() throws Exception {
-        initNodeCreatorAndJcloudsLocation(newVanillaNodeCreator(), ImmutableMap.of());
+        initNodeCreatorAndJcloudsLocation(newNodeCreator(), ImmutableMap.of());
         MachineLocation machine = jcloudsLocation.obtain();
         
         HttpExecutorFactory extension = machine.getExtension(HttpExecutorFactory.class);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubUnitTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubUnitTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubUnitTest.java
new file mode 100644
index 0000000..e7bf4d8
--- /dev/null
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsRebindStubUnitTest.java
@@ -0,0 +1,212 @@
+/*
+ * 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.location.jclouds;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.internal.BrooklynProperties;
+import org.apache.brooklyn.core.mgmt.rebind.RebindTestFixtureWithApp;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.BasicNodeCreator;
+import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.NodeCreator;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
+import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
+import org.apache.brooklyn.util.core.internal.winrm.RecordingWinRmTool;
+import org.apache.brooklyn.util.exceptions.CompoundRuntimeException;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.Template;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
+
+/**
+ * Tests rebind (i.e. restarting Brooklyn server) when there are JcloudsSshMachineLocation object(s).
+ * 
+ * It is just a unit test, because it uses the StubbedComputeServiceRegistry.
+ */
+public class JcloudsRebindStubUnitTest extends RebindTestFixtureWithApp {
+
+    // TODO Duplication of JcloudsRebindStubTest, and AbstractJcloudsStubbedUnitTest
+    
+    // TODO The ByonComputeServiceRegistry extends ComputeServiceRegistryImpl, which means when it  
+    // is serialized it will try to serialize the cachedComputeServices. That will try to serialize 
+    // threads and all sorts!
+
+    private static final Logger LOG = LoggerFactory.getLogger(JcloudsRebindStubUnitTest.class);
+
+    public static final String PROVIDER = AbstractJcloudsLiveTest.AWS_EC2_PROVIDER;
+    public static final String REGION = "us-east-1";
+    public static final String LOCATION_SPEC = "jclouds:" + PROVIDER + ":" + REGION;
+    public static final String IMAGE_ID = REGION + "/bogus-image"; // matches name in JcloudsStubTemplateBuilder
+    
+    protected List<ManagementContext> mgmts;
+    protected Multimap<ManagementContext, JcloudsSshMachineLocation> machines;
+    protected BrooklynProperties brooklynProperties;
+
+    // TODO These values are hard-coded into the JcloudsStubTemplateBuilder, so best not to mess!
+    
+    protected NodeCreator nodeCreator;
+    protected ComputeServiceRegistry computeServiceRegistry;
+
+    @BeforeMethod(alwaysRun=true)
+    public void setUp() throws Exception {
+        super.setUp();
+        RecordingSshTool.clear();
+        RecordingWinRmTool.clear();
+        mgmts = Lists.newCopyOnWriteArrayList(ImmutableList.<ManagementContext>of(origManagementContext));
+        machines = Multimaps.synchronizedMultimap(ArrayListMultimap.<ManagementContext, JcloudsSshMachineLocation>create());
+    }
+
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        try {
+            List<Exception> exceptions = Lists.newArrayList();
+            for (ManagementContext mgmt : mgmts) {
+                try {
+                    if (mgmt.isRunning()) Entities.destroyAll(mgmt);
+                } catch (Exception e) {
+                    LOG.warn("Error destroying management context", e);
+                    exceptions.add(e);
+                }
+            }
+            
+            super.tearDown();
+            
+            if (exceptions.size() > 0) {
+                throw new CompoundRuntimeException("Error in tearDown of "+getClass(), exceptions);
+            }
+        } finally {
+            mgmts.clear();
+            origManagementContext = null;
+            newManagementContext = null;
+            origApp = null;
+            newApp = null;
+            RecordingSshTool.clear();
+            RecordingWinRmTool.clear();
+        }
+    }
+
+
+    @Override
+    protected BrooklynProperties createBrooklynProperties() {
+        // Don't let any defaults from brooklyn.properties (except credentials) interfere with test
+        BrooklynProperties result = super.createBrooklynProperties();
+        AbstractJcloudsLiveTest.stripBrooklynProperties(result);
+        return result;
+    }
+    
+    @Override
+    protected boolean useLiveManagementContext() {
+        return false;
+    }
+
+    @Override
+    protected TestApplication rebind() throws Exception {
+        TestApplication result = super.rebind();
+        mgmts.add(newManagementContext);
+        return result;
+    }
+
+    @Test
+    public void testRebind() throws Exception {
+        this.nodeCreator = newNodeCreator();
+        this.computeServiceRegistry = new StubbedComputeServiceRegistry(nodeCreator, false);
+
+        JcloudsLocation origJcloudsLoc = newJcloudsLocation(computeServiceRegistry);
+    
+        JcloudsSshMachineLocation origMachine = (JcloudsSshMachineLocation) obtainMachine(origJcloudsLoc, ImmutableMap.of("imageId", IMAGE_ID));
+        
+        String origHostname = origMachine.getHostname();
+        NodeMetadata origNode = origMachine.getNode();
+        Template origTemplate = origMachine.getTemplate();
+
+        rebind();
+        
+        // Check the machine is as before.
+        // Call to getOptionalNode() will cause it to try to resolve this node in Softlayer; but it won't find it.
+        JcloudsSshMachineLocation newMachine = (JcloudsSshMachineLocation) mgmt().getLocationManager().getLocation(origMachine.getId());
+        JcloudsLocation newJcloudsLoc = newMachine.getParent();
+        String newHostname = newMachine.getHostname();
+        String newNodeId = newMachine.getJcloudsId();
+        Optional<NodeMetadata> newNode = newMachine.getOptionalNode();
+        Optional<Template> newTemplate = newMachine.getOptionalTemplate();
+        
+        assertEquals(newHostname, origHostname);
+        assertEquals(origNode.getId(), newNodeId);
+        assertFalse(newNode.isPresent(), "newNode="+newNode);
+        assertFalse(newTemplate.isPresent(), "newTemplate="+newTemplate);
+        
+        assertEquals(newJcloudsLoc.getProvider(), origJcloudsLoc.getProvider());
+    }
+    
+    protected JcloudsMachineLocation obtainMachine(JcloudsLocation jcloudsLoc, Map<?,?> props) throws Exception {
+        return (JcloudsMachineLocation) jcloudsLoc.obtain(ImmutableMap.of("imageId", IMAGE_ID));
+    }
+
+    protected JcloudsLocation newJcloudsLocation(ComputeServiceRegistry computeServiceRegistry) throws Exception {
+        return newJcloudsLocation(computeServiceRegistry, ImmutableMap.of());
+    }
+    
+    protected JcloudsLocation newJcloudsLocation(ComputeServiceRegistry computeServiceRegistry, Map<?, ?> jcloudsLocationConfig) throws Exception {
+        return (JcloudsLocation) mgmt().getLocationRegistry().getLocationManaged(
+                getLocationSpec(),
+                ImmutableMap.builder()
+                        .put(JcloudsLocationConfig.COMPUTE_SERVICE_REGISTRY, computeServiceRegistry)
+                        .put(JcloudsLocationConfig.TEMPLATE_BUILDER, JcloudsStubTemplateBuilder.create())
+                        .put(JcloudsLocationConfig.ACCESS_IDENTITY, "stub-identity")
+                        .put(JcloudsLocationConfig.ACCESS_CREDENTIAL, "stub-credential")
+                        .put(SshMachineLocation.SSH_TOOL_CLASS, RecordingSshTool.class.getName())
+                        .put(WinRmMachineLocation.WINRM_TOOL_CLASS, RecordingWinRmTool.class.getName())
+                        .put(JcloudsLocation.POLL_FOR_FIRST_REACHABLE_ADDRESS_PREDICATE, Predicates.alwaysTrue())
+                        .putAll(jcloudsLocationConfig)
+                        .build());
+    }
+    
+    /**
+     * For overriding.
+     */
+    protected NodeCreator newNodeCreator() {
+        return new BasicNodeCreator();
+    }
+    
+    /**
+     * For overriding.
+     */
+    protected String getLocationSpec() {
+        return LOCATION_SPEC;
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
index 149d0f4..bea98f3 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.location.jclouds;
 import com.google.common.base.Functions;
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
+import com.google.common.base.Objects.ToStringHelper;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
@@ -99,6 +100,10 @@ public class JcloudsStubTemplateBuilder {
 
         return new EC2TemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60), sizes, Suppliers.ofInstance(jcloudsDomainLocation), optionsProvider,
                 templateBuilderProvider, getImageStrategy, imageCache) {
+            @Override
+            protected ToStringHelper string() {
+                return super.string().add("type", "Stubbed-TemplateBuilder");
+            }
         };
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
index 99cd321..9dee5ef 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
@@ -20,16 +20,21 @@ package org.apache.brooklyn.location.jclouds;
 
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.jclouds.compute.ComputeService;
 import org.jclouds.compute.RunNodesException;
 import org.jclouds.compute.domain.ComputeMetadata;
 import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadata.Status;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
 import org.jclouds.compute.domain.Template;
 import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.domain.LoginCredentials;
 
 import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -78,6 +83,23 @@ public class StubbedComputeServiceRegistry implements ComputeServiceRegistry {
         }
     }
 
+    public static class BasicNodeCreator extends AbstractNodeCreator {
+        private final AtomicInteger counter = new AtomicInteger(1);
+        @Override
+        protected NodeMetadata newNode(String group, Template template) {
+            int suffix = counter.getAndIncrement();
+            NodeMetadata result = new NodeMetadataBuilder()
+                    .id("mynodeid"+suffix)
+                    .credentials(LoginCredentials.builder().identity("myuser").credential("mypassword").build())
+                    .loginPort(22)
+                    .status(Status.RUNNING)
+                    .publicAddresses(ImmutableList.of("173.194.32."+suffix))
+                    .privateAddresses(ImmutableList.of("172.168.10."+suffix))
+                    .build();
+            return result;
+        }
+    }
+
     static class MinimalComputeService extends DelegatingComputeService {
         private final NodeCreator nodeCreator;
         

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/70fd9bdf/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/JcloudsPortForwardingStubbedTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/JcloudsPortForwardingStubbedTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/JcloudsPortForwardingStubbedTest.java
index 22cea5a..737ebcf 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/JcloudsPortForwardingStubbedTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/JcloudsPortForwardingStubbedTest.java
@@ -77,7 +77,7 @@ public class JcloudsPortForwardingStubbedTest extends AbstractJcloudsStubbedUnit
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        initNodeCreatorAndJcloudsLocation(newVanillaNodeCreator(), ImmutableMap.of());
+        initNodeCreatorAndJcloudsLocation(newNodeCreator(), ImmutableMap.of());
     }
     
     protected AbstractNodeCreator getNodeCreator() {


[6/8] brooklyn-server git commit: Rebind tests: avoid ClassCastException if multiple apps

Posted by sv...@apache.org.
Rebind tests: avoid ClassCastException if multiple apps


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

Branch: refs/heads/master
Commit: 9a240b4bf3471a7b4bce601e5493133929dda20f
Parents: 70fd9bd
Author: Aled Sage <al...@gmail.com>
Authored: Wed Oct 19 13:21:47 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Oct 20 17:27:22 2016 +0100

----------------------------------------------------------------------
 .../core/mgmt/rebind/RebindOptions.java         |  9 +++++++++
 .../mgmt/rebind/RebindTestFixtureWithApp.java   | 20 ++++++++++++++++++++
 .../core/mgmt/rebind/RebindTestUtils.java       | 14 +++++++-------
 3 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9a240b4b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java
index 618a906..eab61cf 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java
@@ -19,7 +19,9 @@
 package org.apache.brooklyn.core.mgmt.rebind;
 
 import java.io.File;
+import java.util.Collection;
 
+import org.apache.brooklyn.api.entity.Application;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityMode;
 import org.apache.brooklyn.api.mgmt.rebind.RebindExceptionHandler;
@@ -43,6 +45,7 @@ public class RebindOptions {
     public ClassLoader classLoader;
     public PersistenceObjectStore objectStore;
     public HighAvailabilityMode haMode;
+    public Function<Collection<Application>, Application> applicationChooserOnRebind;
     
     public static RebindOptions create() {
         return new RebindOptions();
@@ -60,6 +63,7 @@ public class RebindOptions {
         result.classLoader(options.classLoader);
         result.objectStore(options.objectStore);
         result.haMode(options.haMode);
+        result.applicationChooserOnRebind(options.applicationChooserOnRebind);
         return result;
     }
     public RebindOptions checkSerializable(boolean val) {
@@ -106,4 +110,9 @@ public class RebindOptions {
         this.haMode = val;
         return this;
     }
+    
+    public RebindOptions applicationChooserOnRebind(Function<Collection<Application>, Application> val) {
+        this.applicationChooserOnRebind = val;
+        return this;
+    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9a240b4b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixtureWithApp.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixtureWithApp.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixtureWithApp.java
index 2a7e443..e609a02 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixtureWithApp.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixtureWithApp.java
@@ -18,14 +18,34 @@
  */
 package org.apache.brooklyn.core.mgmt.rebind;
 
+import java.util.Collection;
+
+import org.apache.brooklyn.api.entity.Application;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.core.test.entity.TestApplication;
 import org.apache.brooklyn.core.test.entity.TestApplicationNoEnrichersImpl;
 
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
+
 public class RebindTestFixtureWithApp extends RebindTestFixture<TestApplication> {
 
     protected TestApplication createApp() {
         return origManagementContext.getEntityManager().createEntity(EntitySpec.create(TestApplication.class, TestApplicationNoEnrichersImpl.class));
     }
     
+    @Override
+    protected TestApplication rebind(RebindOptions options) throws Exception {
+        if (options.applicationChooserOnRebind == null) {
+            // Some sub-classes will have added additional apps before rebind. We must return an
+            // app of type "TestApplication"; otherwise we'll get a class-cast exception.
+            options = RebindOptions.create(options);
+            options.applicationChooserOnRebind(new Function<Collection<Application>, Application>() {
+                @Override public Application apply(Collection<Application> input) {
+                    return Iterables.find(input, Predicates.instanceOf(TestApplication.class));
+                }});
+        }
+        return super.rebind(options);
+    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9a240b4b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
index af3a5e4..2283b66 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
@@ -44,13 +44,9 @@ import org.apache.brooklyn.core.mgmt.ha.ManagementPlaneSyncRecordPersisterToObje
 import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore;
-import org.apache.brooklyn.core.mgmt.persist.BrooklynPersistenceUtils;
 import org.apache.brooklyn.core.mgmt.persist.FileBasedObjectStore;
 import org.apache.brooklyn.core.mgmt.persist.PersistMode;
 import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore;
-import org.apache.brooklyn.core.mgmt.rebind.PersistenceExceptionHandlerImpl;
-import org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl;
-import org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl;
 import org.apache.brooklyn.core.mgmt.rebind.Dumpers.Pointer;
 import org.apache.brooklyn.core.mgmt.rebind.dto.MementosGenerators;
 import org.apache.brooklyn.core.server.BrooklynServerConfig;
@@ -333,11 +329,15 @@ public class RebindTestUtils {
     
     public static Application rebind(RebindOptions options) throws Exception {
         Collection<Application> newApps = rebindAll(options);
-        if (newApps.isEmpty()) throw new IllegalStateException("Application could not be rebinded; serialization probably failed");
-        return Iterables.getFirst(newApps, null);
+        if (newApps.isEmpty()) throw new IllegalStateException("Application could not be found after rebind; serialization probably failed");
+        Function<Collection<Application>, Application> chooser = options.applicationChooserOnRebind;
+        if (chooser != null) {
+            return chooser.apply(newApps);
+        } else {
+            return Iterables.getFirst(newApps, null);
+        }
     }
 
-
     /**
      * @deprecated since 0.7.0; use {@link #rebindAll(RebindOptions)}
      */


[7/8] brooklyn-server git commit: Fix cancelling of BrooklynDslDeferredSupplier

Posted by sv...@apache.org.
Fix cancelling of BrooklynDslDeferredSupplier

DslAndRebindYamlTest was hanging - we were waiting for all tasks of that
entity to complete. However, the ValueResolver had kicked off a sub-task
which was then left running.

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

Branch: refs/heads/master
Commit: 29bcac7778793a1da9c9095ebc55af4ca9f1a364
Parents: 9a240b4
Author: Aled Sage <al...@gmail.com>
Authored: Wed Oct 19 15:36:02 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Oct 20 17:27:22 2016 +0100

----------------------------------------------------------------------
 .../camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java       | 4 ++++
 .../org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java  | 4 ++--
 2 files changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/29bcac77/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java
index 4e302b3..0225bbb 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/BrooklynDslDeferredSupplier.java
@@ -112,6 +112,10 @@ public abstract class BrooklynDslDeferredSupplier<T> implements DeferredSupplier
         try {
             result = exec.submit(task).get();
         } catch (InterruptedException | ExecutionException e) {
+            Task<?> currentTask = Tasks.current();
+            if (currentTask != null && currentTask.isCancelled()) {
+                task.cancel(true);
+            }
             throw Exceptions.propagate(e);
         }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/29bcac77/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java
index b091096..14a3daa 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DslAndRebindYamlTest.java
@@ -105,7 +105,7 @@ public class DslAndRebindYamlTest extends AbstractYamlTest {
         return log;
     }
 
-    public Application rebind(Application app) throws Exception {
+    protected Application rebind(Application app) throws Exception {
         RebindTestUtils.waitForPersisted(app);
         Application result = RebindTestUtils.rebind(mementoDir, getClass().getClassLoader());
         mgmtContexts.add(result.getManagementContext());
@@ -129,7 +129,7 @@ public class DslAndRebindYamlTest extends AbstractYamlTest {
         return entity;
     }
 
-    public static <T> T getConfigInTask(final Entity entity, final ConfigKey<T> key) {
+    protected static <T> T getConfigInTask(final Entity entity, final ConfigKey<T> key) {
         return Entities.submit(entity, Tasks.<T>builder().body(new Callable<T>() {
             @Override
             public T call() throws Exception {


[2/8] brooklyn-server git commit: LocalManagementContextForTests supports properties map

Posted by sv...@apache.org.
LocalManagementContextForTests supports properties map

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

Branch: refs/heads/master
Commit: ff021884ebd9d45bd330fe61731fc269544e2495
Parents: b1407d0
Author: Aled Sage <al...@gmail.com>
Authored: Tue Oct 18 19:13:17 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Oct 19 00:40:45 2016 +0100

----------------------------------------------------------------------
 .../entity/LocalManagementContextForTests.java    | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/ff021884/core/src/test/java/org/apache/brooklyn/core/test/entity/LocalManagementContextForTests.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/entity/LocalManagementContextForTests.java b/core/src/test/java/org/apache/brooklyn/core/test/entity/LocalManagementContextForTests.java
index 76e0698..d89ccaf 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/entity/LocalManagementContextForTests.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/entity/LocalManagementContextForTests.java
@@ -18,6 +18,8 @@
  */
 package org.apache.brooklyn.core.test.entity;
 
+import java.util.Map;
+
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.internal.BrooklynProperties;
 import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
@@ -87,6 +89,7 @@ public class LocalManagementContextForTests extends LocalManagementContext {
         boolean disableOsgi = false;
         boolean emptyCatalog = false;
         BrooklynProperties properties = null;
+        Map<String, ?> additionalProperties = null;
         
         public Builder disablePersistenceBackups() { return disablePersistenceBackups(true); }
         public Builder disableOsgi() { return disableOsgi(true); }
@@ -107,18 +110,31 @@ public class LocalManagementContextForTests extends LocalManagementContext {
             disableOsgi();
             emptyCatalog();
             properties = null;
+            additionalProperties = null;
             return this;
         }
         
+        public Builder useAdditionalProperties(Map<String, ?> additionalProperties) {
+            if (hasCustomProperties() && additionalProperties != null)
+                throw new IllegalStateException("Cannot set multiple properties");
+            this.additionalProperties = additionalProperties; 
+            return this; 
+        }
+        
         public Builder useProperties(BrooklynProperties properties) {
-            if (this.properties!=null && properties!=null)
+            if (hasCustomProperties() && properties != null)
                 throw new IllegalStateException("Cannot set multiple properties");
             this.properties = properties; 
             return this; 
         }
         
+        protected boolean hasCustomProperties() {
+            return (properties != null) || (additionalProperties != null && additionalProperties.size() > 0);
+        }
+        
         public BrooklynProperties buildProperties() {
             BrooklynProperties result = emptyIfNull(properties);
+            if (additionalProperties != null) result.putAll(additionalProperties);
             if (disablePersistenceBackups) LocalManagementContextForTests.disablePersistenceBackups(result);
             if (disableOsgi) LocalManagementContextForTests.disableOsgi(result);
             if (emptyCatalog) LocalManagementContextForTests.setEmptyCatalogAsDefault(result);


[8/8] brooklyn-server git commit: Closes #387

Posted by sv...@apache.org.
Closes #387

Convert jclouds yaml tests to unit tests


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

Branch: refs/heads/master
Commit: 0fe1e5d9c1e8d3a3a684b83b7f1b3a0853037531
Parents: 0b474bb 29bcac7
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Fri Oct 21 10:20:09 2016 +0100
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Fri Oct 21 10:20:09 2016 +0100

----------------------------------------------------------------------
 camp/camp-brooklyn/pom.xml                      |   7 +
 .../spi/dsl/BrooklynDslDeferredSupplier.java    |   4 +
 .../AbstractJcloudsRebindStubYamlTest.java      | 139 ++++++++++++
 .../brooklyn/AbstractJcloudsStubYamlTest.java   | 179 ++++++++++++++++
 .../camp/brooklyn/DslAndRebindYamlTest.java     |   4 +-
 ...aWebAppWithDslYamlRebindIntegrationTest.java |   8 +-
 ...loudsCustomizerInstantiationYamlDslTest.java |  46 +---
 .../brooklyn/JcloudsExternalConfigYamlTest.java | 124 +++++++++++
 ...loudsLocationExternalConfigYamlLiveTest.java | 121 -----------
 .../brooklyn/JcloudsRebindStubYamlTest.java     |  99 ---------
 .../JcloudsRebindWithExternalConfigTest.java    |  34 ++-
 .../brooklyn/JcloudsRebindWithYamlDslTest.java  |  20 +-
 .../core/mgmt/rebind/RebindOptions.java         |   9 +
 .../mgmt/rebind/RebindTestFixtureWithApp.java   |  20 ++
 .../core/mgmt/rebind/RebindTestUtils.java       |  14 +-
 .../entity/LocalManagementContextForTests.java  |  18 +-
 .../jclouds/AbstractJcloudsLiveTest.java        |   4 +
 .../jclouds/AbstractJcloudsStubbedUnitTest.java |  37 +---
 .../JcloudsLocationExtensionStubbedTest.java    |   2 +-
 .../jclouds/JcloudsRebindStubUnitTest.java      | 212 +++++++++++++++++++
 .../jclouds/JcloudsStubTemplateBuilder.java     |   5 +
 .../jclouds/StubbedComputeServiceRegistry.java  |  22 ++
 .../JcloudsPortForwardingStubbedTest.java       |   2 +-
 .../brooklyn/util/javalang/Reflections.java     |   8 +-
 24 files changed, 798 insertions(+), 340 deletions(-)
----------------------------------------------------------------------