You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ha...@apache.org on 2015/08/08 04:19:06 UTC

[1/6] incubator-brooklyn git commit: [BROOKLYN-162] Update package name to a.o.b in usage/test-support

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 83acab217 -> 2ed62d61b


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/org/apache/brooklyn/test/TestUtils.groovy
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/org/apache/brooklyn/test/TestUtils.groovy b/usage/test-support/src/main/java/org/apache/brooklyn/test/TestUtils.groovy
new file mode 100644
index 0000000..81d8c0c
--- /dev/null
+++ b/usage/test-support/src/main/java/org/apache/brooklyn/test/TestUtils.groovy
@@ -0,0 +1,541 @@
+/*
+ * 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.test
+
+import static org.testng.Assert.*
+import groovy.time.TimeDuration
+
+import java.util.concurrent.Callable
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.Executors
+
+import org.codehaus.groovy.runtime.InvokerInvocationException
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+
+import brooklyn.entity.Entity
+import brooklyn.event.AttributeSensor
+import brooklyn.test.Asserts;
+import brooklyn.util.text.StringFunctions;
+import brooklyn.util.time.Duration
+
+import com.google.common.base.Predicate
+import com.google.common.base.Supplier
+import com.google.common.collect.Iterables
+
+/**
+ * Helper functions for tests of Tomcat, JBoss and others.
+ * 
+ * Note that methods will migrate from here to {@link Asserts} in future releases.
+ */
+public class TestUtils {
+    private static final Logger log = LoggerFactory.getLogger(TestUtils.class)
+
+    private TestUtils() { }
+
+    /**
+     * True if two attempts to connect to the port succeed.
+     * 
+     * @deprecated since 0.5; use {@link brooklyn.util.NetworkUtils#isPortAvailable(int)}
+     */
+    @Deprecated
+    public static boolean isPortInUse(int port, long retryAfterMillis=0) {
+        try {
+            def s = new Socket("localhost", port)
+            s.close()
+            if (retryAfterMillis>0) {
+                log.debug "port {} still open, waiting 1s for it to really close", port
+                //give it 1s to close
+                Thread.sleep retryAfterMillis
+                s = new Socket("localhost", port)
+                s.close()
+            }
+            log.debug "port {} still open (conclusive)", port
+            return true
+        } catch (ConnectException e) {
+            return false
+        }
+    }
+
+    /**
+     * Connects to the given HTTP URL and asserts that the response had status code 200.
+     * @deprecated Use HttpTestUtils.getHttpStatusCode(url) == 200
+     */
+    @Deprecated
+    public static boolean urlRespondsWithStatusCode200(String url) {
+        int status = HttpTestUtils.getHttpStatusCode(url);
+        log.debug "connection to {} gives {}", url, status
+        if (status == 404)
+            throw new Exception("Connection to $url gave 404");
+        return status == 200
+    }
+    
+    /** 
+     * Connects to the given HTTP URL and asserts that the response had status code 200.
+     * @deprecated Use HttpTestUtils.getHttpStatusCode(url)
+     */
+    @Deprecated
+    public static int urlRespondsStatusCode(String url) {
+        return HttpTestUtils.getHttpStatusCode(url);
+    }
+    
+    /** 
+     * Connects to the given url and returns the connection.
+     * @deprecated Use HttpTestUtils.connectToUrl(url)
+     */
+    @Deprecated
+    public static URLConnection connectToURL(String url) {
+        return HttpTestUtils.connectToUrl(url);
+    }
+    
+    // calling groovy from java doesn't cope with generics here; stripping them from here :-(
+    //      <T> void assertEventually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate)
+    /**
+     * @deprecated since 0.5; use {@link Asserts#eventually(Map, Supplier, Predicate)}
+     */
+    @Deprecated
+    public static void assertEventually(Map flags=[:], Supplier supplier, Predicate predicate) {
+        Asserts.eventually(flags, supplier, predicate);
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#eventually(Map, Supplier, Predicate, String)}
+     */
+    @Deprecated
+    public static <T> void assertEventually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate, String errMsg) {
+        Asserts.eventually(flags, supplier, predicate, errMsg);
+    }
+
+    /**    
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(java.util.Map, Callable)}
+     */
+    @Deprecated
+    public static void assertEventually(Map flags=[:], Callable c) {
+        executeUntilSucceeds(flags, c);
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Runnable)}
+     */
+    @Deprecated
+    public static void assertEventually(Map flags=[:], Runnable c) {
+        executeUntilSucceeds(flags, c);
+    }
+
+    /**
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}
+     */
+    @Deprecated
+    public static void executeUntilSucceeds(Map flags=[:], Closure c) {
+        Asserts.succeedsEventually(flags, c);
+    }
+
+    /**
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}
+     */
+    @Deprecated
+    public static void executeUntilSucceeds(Map flags=[:], Callable c) {
+        Asserts.succeedsEventually(flags, c);
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Runnable)}
+     */
+    @Deprecated
+    public static void executeUntilSucceeds(Map flags=[:], Runnable r) {
+        if (r in Callable) 
+            executeUntilSucceedsWithFinallyBlock(flags, {return ((Callable)r).call();}, { })
+        else if (r in Closure)  // Closure check probably not necessary, just was trying to fix a server build which had a screwy problem
+            executeUntilSucceedsWithFinallyBlock(flags, {return ((Closure)r).call();}, { })
+        else
+            executeUntilSucceedsWithFinallyBlock(flags, {r.run(); return true}, { })
+    }
+
+    /**
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
+     */
+    @Deprecated
+    public static void executeUntilSucceedsElseShutdown(Map flags=[:], Entity entity, Closure c) {
+        try { 
+            executeUntilSucceedsWithFinallyBlock(flags, c) { }
+        } catch (Throwable t) {
+            entity.stop()
+            throw t
+        }
+    }
+
+    /**
+     * convenience for entities to ensure they shutdown afterwards.
+     * 
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
+     */
+    @Deprecated
+    public static void executeUntilSucceedsWithShutdown(Map flags=[:], Entity entity, Closure c) {
+        executeUntilSucceedsWithFinallyBlock(flags, c) { entity.stop() }
+    }
+
+    /**
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
+     */
+    @Deprecated
+    public static void executeUntilSucceedsWithFinallyBlock(Map flags=[:], Closure c, Closure finallyBlock={}) {
+        executeUntilSucceedsWithFinallyBlockInternal(flags, c, finallyBlock)
+    }
+    
+    /**
+     * Convenience method for cases where we need to test until something is true.
+     *
+     * The runnable will be invoked periodically until it succesfully concludes.
+     * Additionally, a finally block can be supplied.
+     * <p>
+     * The following flags are supported:
+     * <ul>
+     * <li>abortOnError (boolean, default true)
+     * <li>abortOnException - (boolean, default false)
+     * <li>useGroovyTruth - (defaults to false; any result code apart from 'false' will be treated as success including null; ignored for Runnables which aren't Callables)
+     * <li>timeout - (a Duration or an integer in millis, defaults to 30*SECONDS)
+     * <li>period - (a Duration or an integer in millis, for fixed retry time; if not set, defaults to exponentially increasing from 1 to 500ms)
+     * <li>minPeriod - (a Duration or an integer in millis; only used if period not explicitly set; the minimum period when exponentially increasing; defaults to 1ms)
+     * <li>maxPeriod - (a Duration or an integer in millis; only used if period not explicitly set; the maximum period when exponentially increasing; defaults to 500ms)
+     * <li>maxAttempts - (integer, Integer.MAX_VALUE)
+     * </ul>
+     *
+     * @param flags, accepts the flags listed above
+     * @param r
+     * @param finallyBlock
+     * 
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
+     */
+    @Deprecated
+    public static void executeUntilSucceedsWithFinallyBlock(Map flags=[:], Callable<?> c, Closure finallyBlock={}) {
+        executeUntilSucceedsWithFinallyBlockInternal(flags, c, finallyBlock);
+    }
+    
+    /**
+     * the "real" implementation, renamed to allow multiple entry points (depending whether closure cast to callable)
+     * 
+     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
+     */
+    @Deprecated
+    private static void executeUntilSucceedsWithFinallyBlockInternal(Map flags=[:], Callable<?> c, Closure finallyBlock={}) {
+//        log.trace "abortOnError = {}", flags.abortOnError
+        boolean abortOnException = flags.abortOnException ?: false
+        boolean abortOnError = flags.abortOnError ?: false
+        boolean useGroovyTruth = flags.useGroovyTruth ?: false
+        boolean logException = flags.logException ?: true
+
+        // To speed up tests, default is for the period to start small and increase...
+        Duration duration = Duration.of(flags.timeout) ?: Duration.THIRTY_SECONDS;
+        Duration fixedPeriod = Duration.of(flags.period) ?: null
+        Duration minPeriod = fixedPeriod ?: Duration.of(flags.minPeriod) ?: Duration.millis(1)
+        Duration maxPeriod = fixedPeriod ?: Duration.of(flags.maxPeriod) ?: Duration.millis(500)
+        int maxAttempts = flags.maxAttempts ?: Integer.MAX_VALUE;
+        int attempt = 0;
+        long startTime = System.currentTimeMillis();
+        try {
+            Throwable lastException = null;
+            Object result;
+            long lastAttemptTime = 0;
+            long expireTime = startTime+duration.toMilliseconds();
+            long sleepTimeBetweenAttempts = minPeriod.toMilliseconds();
+            
+            while (attempt<maxAttempts && lastAttemptTime<expireTime) {
+                try {
+                    attempt++
+                    lastAttemptTime = System.currentTimeMillis()
+                    result = c.call()
+                    log.trace "Attempt {} after {} ms: {}", attempt, System.currentTimeMillis() - startTime, result
+                    if (useGroovyTruth) {
+                        if (result) return;
+                    } else if (result != false) {
+                        if (result instanceof BooleanWithMessage) 
+                            log.warn "Test returned an instance of BooleanWithMessage but useGroovyTruth is not set! " +
+                                     "The result of this probably isn't what you intended."
+                        return;
+                    }
+                    lastException = null
+                } catch(Throwable e) {
+                    lastException = e
+                    log.trace "Attempt {} after {} ms: {}", attempt, System.currentTimeMillis() - startTime, e.message
+                    if (abortOnException) throw e
+                    if (abortOnError && e in Error) throw e
+                }
+                long sleepTime = Math.min(sleepTimeBetweenAttempts, expireTime-System.currentTimeMillis())
+                if (sleepTime > 0) Thread.sleep(sleepTime)
+                sleepTimeBetweenAttempts = Math.min(sleepTimeBetweenAttempts*2, maxPeriod.toMilliseconds())
+            }
+            
+            log.debug "TestUtils.executeUntilSucceedsWithFinallyBlockInternal exceeded max attempts or timeout - {} attempts lasting {} ms", attempt, System.currentTimeMillis()-startTime
+            if (lastException != null)
+                throw lastException
+            fail "invalid result: $result"
+        } catch (Throwable t) {
+			if (logException) log.info("failed execute-until-succeeds, "+attempt+" attempts, "+
+                (System.currentTimeMillis()-startTime)+"ms elapsed "+
+                "(rethrowing): "+t);
+			throw t
+        } finally {
+            finallyBlock.call()
+        }
+    }
+
+    /**
+     * @deprecated since 0.5; use {@link Asserts#succeedsContinually(Map, Runnable)}
+     */
+    @Deprecated
+    public static <T> void assertSucceedsContinually(Map flags=[:], Runnable job) {
+        assertSucceedsContinually(flags, Executors.callable(job));
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#succeedsContinually(Map, Callable)}
+     */
+    @Deprecated
+    public static void assertSucceedsContinually(Map flags=[:], Callable<?> job) {
+        Duration duration = Duration.of(flags.timeout) ?: Duration.ONE_SECOND
+        Duration period = Duration.of(flags.period) ?: Duration.millis(10)
+        long periodMs = period.toMilliseconds()
+        long startTime = System.currentTimeMillis()
+        long expireTime = startTime+duration.toMilliseconds()
+        
+        boolean first = true;
+        while (first || System.currentTimeMillis() <= expireTime) {
+            job.call();
+            if (periodMs > 0) sleep(periodMs);
+            first = false;
+        }
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#continually(Map, Supplier, Predicate)}
+     */
+    @Deprecated
+    // FIXME When calling from java, the generics declared in groovy messing things up!
+    public static void assertContinuallyFromJava(Map flags=[:], Supplier<?> supplier, Predicate<?> predicate) {
+        Asserts.continually(flags, supplier, predicate);
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#continually(Map, Supplier, Predicate)}
+     */
+    @Deprecated
+    public static <T> void assertContinually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate) {
+        Asserts.continually(flags, supplier, predicate, (String)null);
+    }
+
+    /**
+     * @deprecated since 0.5; use {@link Asserts#continually(Map, Supplier, Predicate, String)}
+     */
+    @Deprecated
+    public static <T> void assertContinually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate, String errMsg, long durationMs) {
+        flags.put("duration", Duration.millis(durationMs));
+        Asserts.continually(flags, supplier, predicate, errMsg);
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#continually(Map, Supplier, Predicate, String)}
+     */
+    @Deprecated
+    public static <T> void assertContinually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate, String errMsg) {
+        Asserts.continually(flags, supplier, predicate, errMsg);
+    }
+    
+    public static class BooleanWithMessage {
+        boolean value; String message;
+        public BooleanWithMessage(boolean value, String message) {
+            this.value = value; this.message = message;
+        }
+        public boolean asBoolean() {
+            return value
+        }
+        public String toString() {
+            return message
+        }
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link brooklyn.util.ResourceUtils}
+     */
+    @Deprecated
+    public static File getResource(String path, ClassLoader loader) {
+        URL resource = loader.getResource(path)
+        if (resource==null)
+            throw new IllegalArgumentException("cannot find required entity '"+path+"'");
+            
+        return new File(resource.path)
+    }
+
+    /**
+     * @deprecated since 0.5; use long and {@link TimeUnit}
+     */
+    @Deprecated
+    public static TimeDuration toTimeDuration(Object duration) {
+        return toTimeDuration(duration, null);
+    }
+            
+    /**
+     * @deprecated since 0.5; use long and {@link TimeUnit}
+     */
+    @Deprecated
+    public static TimeDuration toTimeDuration(Object duration, TimeDuration defaultVal) {
+        if (duration == null) {
+            return defaultVal;
+        } else if (duration instanceof TimeDuration) {
+            return (TimeDuration) duration
+        } else if (duration instanceof Number) {
+            return new TimeDuration(0,0,0,(int)duration)
+            // TODO would be nice to have this, but we need to sort out utils / test-utils dependency
+//        } else if (duration instanceof String) {
+//            return Time.parseTimeString((String)duration);
+        } else {
+            throw new IllegalArgumentException("Cannot convert $duration of type ${duration.class.name} to a TimeDuration")
+        }
+    }
+    
+    public static Throwable unwrapThrowable(Throwable t) {
+        if (t.getCause() == null) {
+            return t;
+        } else if (t instanceof ExecutionException) {
+            return unwrapThrowable(t.getCause())
+        } else if (t instanceof InvokerInvocationException) {
+            return unwrapThrowable(t.getCause())
+        } else {
+            return t
+        }
+    }
+
+    /**
+     * @deprecated since 0.5; use {@link EntityTestUtils#assertAttributeEqualsEventually(Entity, AttributeSensor, Object)}
+     */
+    @Deprecated
+    public static <T> void assertAttributeEventually(Entity entity, AttributeSensor<T> attribute, T expected) {
+        executeUntilSucceeds() {
+            assertEquals(entity.getAttribute(attribute), expected);
+        }
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link EntityTestUtils#assertAttributeEqualsContinually(Entity, AttributeSensor, Object)}
+     */
+    @Deprecated
+    public static <T> void assertAttributeContinually(Entity entity, AttributeSensor<T> attribute, T expected) {
+        assertSucceedsContinually() {
+            assertEquals(entity.getAttribute(attribute), expected);
+        }
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link HttpTestUtils#assertHttpStatusCodeEquals(String, int)}
+     */
+    @Deprecated
+    public static void assertUrlStatusCodeEventually(final String url, final int expected) {
+        executeUntilSucceeds() {
+            assertEquals(urlRespondsStatusCode(url), expected);
+        }
+    }
+
+    /**
+     * @deprecated since 0.5; use {@link Asserts#assertFails(Runnable)}
+     */
+    @Deprecated
+    public static void assertFails(Runnable c) {
+        assertFailsWith(c, (Predicate)null);
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#assertFailsWith(Closure)}
+     */
+    @Deprecated
+    public static void assertFailsWith(Runnable c, Closure exceptionChecker) {
+        assertFailsWith(c, exceptionChecker as Predicate);
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#assertFailsWith(Runnable, Class, Class...)}
+     */
+    @Deprecated
+    public static void assertFailsWith(Runnable c, final Class<? extends Throwable> validException, final Class<? extends Throwable> ...otherValidExceptions) {
+        assertFailsWith(c, { e -> 
+            if (validException.isInstance(e)) return true;
+            if (otherValidExceptions.find {it.isInstance(e)}) return true;
+            List expectedTypes = [validException];
+            expectedTypes.addAll(Arrays.asList(otherValidExceptions));
+            fail("Test threw exception of unexpected type "+e.getClass()+"; expecting "+expectedTypes);             
+        });
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@link Asserts#assertFailsWith(Runnable, Predicate)}
+     */
+    @Deprecated
+    public static void assertFailsWith(Runnable c, Predicate<Throwable> exceptionChecker) {
+        boolean failed = false;
+        try {
+            c.run();
+        } catch (Throwable e) {
+            failed = true;
+            if (exceptionChecker!=null) {
+                if (!exceptionChecker.apply(e)) {
+                    fail("Test threw invalid exception: "+e);
+                }
+            }
+            log.debug("Test for exception successful ("+e+")");
+        }
+        if (!failed) fail("Test code should have thrown exception but did not");
+    }
+
+    public static void assertSetsEqual(Collection c1, Collection c2) {
+        Set s = new LinkedHashSet();
+        s.addAll(c1); s.removeAll(c2);
+        if (!s.isEmpty()) fail("First argument contains additional contents: "+s);
+        s.clear(); s.addAll(c2); s.removeAll(c1);
+        if (!s.isEmpty()) fail("Second argument contains additional contents: "+s);
+    }
+    
+    /**
+     * @deprecated since 0.5; use {@code assertFalse(Iterables.isEmpty(c))}
+     */
+    @Deprecated
+    public static <T> void assertNonEmpty(Iterable<T> c) {
+        if (c.iterator().hasNext()) return;
+        fail("Expected non-empty set");
+    }
+
+    /**
+     * @deprecated since 0.5; use {@code assertEquals(Iterables.size(c), expectedSize)}
+     */
+    @Deprecated
+    public static <T> void assertSize(Iterable<T> c, int expectedSize) {
+        int actualSize = Iterables.size(c);
+        if (actualSize==expectedSize) return;
+        fail("Expected collection of size "+expectedSize+" but got size "+actualSize+": "+c);
+    }
+
+    /**
+     * @deprecated since 0.7.0; use {@link Asserts#assertThat(Object, Predicate)} with {@link StringFunctions})}
+     */
+    @Deprecated
+    public static void assertStringContainsLiteral(String string, String substring) {
+        if (string==null) fail("String is null");
+        if (substring==null) fail("Substring is null");
+        if (string.indexOf(substring)>=0) return;
+        fail("String '"+string+"' does not contain expected pattern '"+substring+"'");
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/org/apache/brooklyn/test/TrustingSslSocketFactory.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/org/apache/brooklyn/test/TrustingSslSocketFactory.java b/usage/test-support/src/main/java/org/apache/brooklyn/test/TrustingSslSocketFactory.java
new file mode 100644
index 0000000..58fb76c
--- /dev/null
+++ b/usage/test-support/src/main/java/org/apache/brooklyn/test/TrustingSslSocketFactory.java
@@ -0,0 +1,134 @@
+/*
+ * 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.test;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.URLConnection;
+import java.net.UnknownHostException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Throwables;
+
+// FIXME copied from brooklyn-core because core not visible here
+
+public class TrustingSslSocketFactory extends SSLSocketFactory {
+    
+    private static final Logger logger = LoggerFactory.getLogger(TrustingSslSocketFactory.class);
+
+    private static TrustingSslSocketFactory INSTANCE;
+    public synchronized static TrustingSslSocketFactory getInstance() {
+        if (INSTANCE==null) INSTANCE = new TrustingSslSocketFactory();
+        return INSTANCE;
+    }
+    
+    private static SSLContext sslContext; 
+    static {
+        try {
+            sslContext = SSLContext.getInstance("TLS");
+        } catch (Exception e) {
+            logger.error("Unable to set up SSLContext with TLS. Https activity will likely fail.", e);
+        }
+    }
+
+    /** configures a connection to accept all certificates, if it is for https */
+    public static <T extends URLConnection> T configure(T connection) {
+        if (connection instanceof HttpsURLConnection) {
+            ((HttpsURLConnection)connection).setSSLSocketFactory(getInstance());
+        }
+        return connection;
+    }
+    
+    /** trusts all SSL certificates */
+    public static final TrustManager TRUST_ALL = new X509TrustManager() {
+        public X509Certificate[] getAcceptedIssuers() {
+            return new X509Certificate[0];
+        }
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType)
+                throws java.security.cert.CertificateException {
+            
+        }
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType)
+                throws java.security.cert.CertificateException {
+        }
+    };
+
+    // no reason this can't be public, but no reason it should be necessary;
+    // just use getInstance to get the shared INSTANCE
+    protected TrustingSslSocketFactory() {
+        super();
+        try {
+            sslContext.init(null, new TrustManager[] { TRUST_ALL }, null);
+        } catch (Exception e) {
+            throw Throwables.propagate(e);
+        }
+    }
+
+    @Override
+    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
+        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
+    }
+
+    @Override
+    public Socket createSocket() throws IOException {
+        return sslContext.getSocketFactory().createSocket();
+    }
+
+    @Override
+    public String[] getDefaultCipherSuites() {
+        return sslContext.getSocketFactory().getDefaultCipherSuites();
+    }
+
+    @Override
+    public String[] getSupportedCipherSuites() {
+        return sslContext.getSocketFactory().getSupportedCipherSuites();
+    }
+
+    @Override
+    public Socket createSocket(String arg0, int arg1) throws IOException, UnknownHostException {
+        return sslContext.getSocketFactory().createSocket(arg0, arg1);
+    }
+
+    @Override
+    public Socket createSocket(InetAddress arg0, int arg1) throws IOException {
+        return sslContext.getSocketFactory().createSocket(arg0, arg1);
+    }
+
+    @Override
+    public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3) throws IOException, UnknownHostException {
+        return sslContext.getSocketFactory().createSocket(arg0, arg1, arg2, arg3);
+    }
+
+    @Override
+    public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3) throws IOException {
+        return sslContext.getSocketFactory().createSocket(arg0, arg1, arg2, arg3);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/org/apache/brooklyn/test/WebAppMonitor.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/org/apache/brooklyn/test/WebAppMonitor.java b/usage/test-support/src/main/java/org/apache/brooklyn/test/WebAppMonitor.java
new file mode 100644
index 0000000..daba835
--- /dev/null
+++ b/usage/test-support/src/main/java/org/apache/brooklyn/test/WebAppMonitor.java
@@ -0,0 +1,214 @@
+/*
+ * 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.test;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.slf4j.Logger;
+import org.testng.Assert;
+
+import brooklyn.test.Asserts;
+import brooklyn.util.collections.MutableMap;
+import brooklyn.util.time.Duration;
+
+/**
+ * Repeatedly polls a given URL, to check if it is always available.
+ * 
+ * @author Alex, Aled
+ */
+public class WebAppMonitor implements Runnable {
+    final AtomicBoolean shouldBeActive = new AtomicBoolean(true);
+    final AtomicBoolean isActive = new AtomicBoolean(false);
+    final AtomicInteger successes = new AtomicInteger(0);
+    final AtomicInteger failures = new AtomicInteger(0);
+    final AtomicLong lastTime = new AtomicLong(-1);
+    final AtomicReference<Object> lastStatus = new AtomicReference<Object>(null);
+    final AtomicReference<Object> lastFailure = new AtomicReference<Object>(null);
+    Logger log;
+    Object problem = null; 
+    String url;
+    long delayMillis = 500;
+    int expectedResponseCode = 200;
+    
+    public WebAppMonitor(String url) {
+        this.url = url;
+    }
+    public WebAppMonitor() {
+    }
+    public WebAppMonitor logFailures(Logger log) {
+        this.log = log;
+        return this;
+    }
+    public WebAppMonitor delayMillis(long val) {
+        this.delayMillis = val;
+        return this;
+    }
+    public WebAppMonitor expectedResponseCode(int val) {
+        this.expectedResponseCode = val;
+        return this;
+    }
+    public WebAppMonitor url(String val) {
+        this.url = val;
+        return this;
+    }
+    
+    public void run() {
+        synchronized (isActive) {
+            if (isActive.getAndSet(true))
+                throw new IllegalStateException("already running");
+        }
+        while (shouldBeActive.get()) {
+            long startTime = System.currentTimeMillis();
+            try {
+                if (preAttempt()) {
+                    int code = HttpTestUtils.getHttpStatusCode(url);
+                    lastTime.set(System.currentTimeMillis() - startTime);
+                    lastStatus.set(code);
+                    if (isResponseOkay(code)) {
+                        successes.incrementAndGet();
+                    } else {
+                        lastFailure.set(code);
+                        failures.incrementAndGet();
+                        onFailure("return code "+code);
+                    }
+                }
+            } catch (Exception e) {
+                lastTime.set(System.currentTimeMillis()-startTime);
+                lastStatus.set(e);
+                lastFailure.set(e);
+                failures.incrementAndGet();
+                onFailure(e);
+            }
+            try {
+                if (delayMillis > 0) {
+                    Thread.sleep(delayMillis);
+                }
+            } catch (InterruptedException e) {
+                onFailure(e);
+                shouldBeActive.set(false);
+            }
+        }
+        synchronized (isActive) {
+            if (!isActive.getAndSet(false))
+                throw new IllegalStateException("shouldn't be possible!");
+            isActive.notifyAll();
+        }
+    }
+    
+    public boolean isResponseOkay(Object code) {
+        return code!=null && new Integer(expectedResponseCode).equals(code);
+    }
+    
+    public void setDelayMillis(long delayMillis) {
+        this.delayMillis = delayMillis;
+    }
+    public long getDelayMillis() {
+        return delayMillis;
+    }
+    public void terminate() throws InterruptedException {
+        shouldBeActive.set(false);
+        synchronized (isActive) {
+            while (isActive.get()) isActive.wait();
+        }
+    }
+    public int getFailures() {
+        return failures.get();
+    }
+    public int getSuccesses() {
+        return successes.get();
+    }
+    public void setUrl(String url) {
+        this.url = url;
+    }
+    public String getUrl() {
+        return url;
+    }
+    public Object getProblem() {
+        return problem;
+    }
+    public int getAttempts() {
+        return getFailures()+getSuccesses();
+    }
+    public boolean getLastWasFailed() {
+        return isResponseOkay(getLastStatus());
+    }
+    public Object getLastStatus() {
+        return lastStatus.get();
+    }
+    public long getLastTime() {
+        return lastTime.get();
+    }
+    /** result code (int) or exception */
+    public Object getLastFailure() {
+        return lastFailure.get();
+    }
+    
+    public void onFailure(Object problem) {
+        if (log != null) {
+            log.warn("Detected failure in monitor accessing "+getUrl()+": "+problem);
+        }
+        this.problem = problem;
+    }
+    
+    /** return false to skip a run */
+    public boolean preAttempt() {
+        return true;
+    }
+    
+    public WebAppMonitor assertNoFailures(String message) {
+        return assertSuccessFraction(message, 1.0);
+    }
+    public WebAppMonitor assertAttemptsMade(int minAttempts, String message) {
+        if (getAttempts()<minAttempts) {
+            Assert.fail(message+" -- webapp access failures! " +
+                    "(0 attempts made; probably blocked on server)");            
+        }
+        return this;
+    }
+    public WebAppMonitor waitForAtLeastOneAttempt() {
+        return waitForAtLeastOneAttempt(Asserts.DEFAULT_TIMEOUT);
+    }
+    public WebAppMonitor waitForAtLeastOneAttempt(Duration timeout) {
+        Asserts.succeedsEventually(MutableMap.of("timeout", timeout), new Runnable() {
+            @Override public void run() {
+                Assert.assertTrue(getAttempts() >= 1);
+            }});
+        return this;
+    }
+    public WebAppMonitor assertSuccessFraction(String message, double fraction) {
+        int failures = getFailures();
+        int attempts = getAttempts();
+        if ((failures > (1-fraction) * attempts + 0.0001) || attempts <= 0) {
+            Assert.fail(message+" -- webapp access failures! " +
+                    "("+failures+" failed of "+attempts+" monitoring attempts) against "+getUrl()+"; " +
+                    "last was "+getLastStatus()+" taking "+getLastTime()+"ms" +
+                    (getLastFailure() != null ? "; last failure was "+getLastFailure() : ""));
+        }
+        return this;
+    }
+    public WebAppMonitor resetCounts() {
+        failures.set(0);
+        successes.set(0);
+        return this;
+    }
+    
+}
\ No newline at end of file


[3/6] incubator-brooklyn git commit: [BROOKLYN-162] Update package name to a.o.b in usage/test-support

Posted by ha...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java
index 11defe8..ca3ac2b 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerAwsEc2LiveTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertNotNull;
 
 import java.net.URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.testng.annotations.Test;
 
@@ -30,7 +31,6 @@ import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerNonInheritingIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerNonInheritingIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerNonInheritingIntegrationTest.java
index 911109c..cb3ffdf 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerNonInheritingIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss6ServerNonInheritingIntegrationTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertNotNull;
 
 import java.net.URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -32,7 +33,6 @@ import brooklyn.entity.java.UsesJmx;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
index 78f6153..46fdb80 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertNotNull;
 
 import java.net.URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.testng.annotations.Test;
 
@@ -30,7 +31,6 @@ import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerDockerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerDockerLiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerDockerLiveTest.java
index a15e35d..813b38d 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerDockerLiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerDockerLiveTest.java
@@ -22,9 +22,12 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.software.AbstractDockerLiveTest;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
+
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+
 import com.google.common.collect.ImmutableList;
+
 import org.testng.annotations.Test;
 
 import java.net.URL;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java
index 31647e6..a31a147 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerNonInheritingIntegrationTest.java
@@ -35,8 +35,10 @@ import brooklyn.entity.webapp.AbstractWebAppFixtureIntegrationTest;
 import brooklyn.entity.webapp.HttpsSslConfig;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
+
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerRebindingIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerRebindingIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerRebindingIntegrationTest.java
index d580a73..c855ccd 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerRebindingIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/JBoss7ServerRebindingIntegrationTest.java
@@ -25,7 +25,10 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+import org.apache.brooklyn.test.WebAppMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -37,9 +40,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.rebind.RebindOptions;
 import brooklyn.entity.rebind.RebindTestFixtureWithApp;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
-import brooklyn.test.WebAppMonitor;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.base.Predicates;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerGoogleComputeLiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerGoogleComputeLiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerGoogleComputeLiveTest.java
index d28b1b7..e5cdcf5 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerGoogleComputeLiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/Jboss7ServerGoogleComputeLiveTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertNotNull;
 
 import java.net.URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.testng.annotations.Test;
 
@@ -30,7 +31,6 @@ import brooklyn.entity.AbstractGoogleComputeLiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppEc2LiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppEc2LiveTest.java
index b2b5937..ace298f 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppEc2LiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppEc2LiveTest.java
@@ -22,12 +22,12 @@ import static brooklyn.entity.webapp.nodejs.NodeJsWebAppFixtureIntegrationTest.A
 import static brooklyn.entity.webapp.nodejs.NodeJsWebAppFixtureIntegrationTest.APP_NAME;
 import static brooklyn.entity.webapp.nodejs.NodeJsWebAppFixtureIntegrationTest.GIT_REPO_URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java
index d567448..14c3ca1 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppFixtureIntegrationTest.java
@@ -29,13 +29,15 @@ import brooklyn.location.Location;
 import brooklyn.location.basic.PortRanges;
 import brooklyn.management.ManagementContext;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.net.Urls;
 import brooklyn.util.time.Duration;
+
 import com.google.common.collect.ImmutableList;
+
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppSoftlayerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppSoftlayerLiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppSoftlayerLiveTest.java
index ae87086..4919906 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppSoftlayerLiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/nodejs/NodeJsWebAppSoftlayerLiveTest.java
@@ -22,12 +22,12 @@ import static brooklyn.entity.webapp.nodejs.NodeJsWebAppFixtureIntegrationTest.A
 import static brooklyn.entity.webapp.nodejs.NodeJsWebAppFixtureIntegrationTest.APP_NAME;
 import static brooklyn.entity.webapp.nodejs.NodeJsWebAppFixtureIntegrationTest.GIT_REPO_URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.AbstractSoftlayerLiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java
index ecb7356..b8ffa32 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java
@@ -27,7 +27,8 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.webapp.tomcat.Tomcat8Server;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
+
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java
index 7268d10..d88191b 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java
@@ -27,7 +27,8 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.webapp.tomcat.Tomcat8Server;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
+
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java
index 5282e3a..467e3c4 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerEc2LiveTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertNotNull;
 
 import java.net.URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.testng.annotations.Test;
 
@@ -30,7 +31,6 @@ import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSoftlayerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSoftlayerLiveTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSoftlayerLiveTest.java
index 13db672..ab23e7f 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSoftlayerLiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSoftlayerLiveTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertNotNull;
 
 import java.net.URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.testng.annotations.Test;
 
@@ -30,7 +31,6 @@ import brooklyn.entity.AbstractSoftlayerLiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java
index b416be5..e231432 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersSlightlySimplerYamlTest.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -35,7 +36,6 @@ import brooklyn.entity.basic.EntityInternal;
 import brooklyn.entity.group.DynamicCluster;
 import brooklyn.entity.webapp.JavaWebAppSoftwareProcess;
 import brooklyn.event.basic.Sensors;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.CollectionFunctionals;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.math.MathPredicates;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
index 007c830..a55881c 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
@@ -19,7 +19,6 @@
 package org.apache.brooklyn.camp.brooklyn;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-
 import io.brooklyn.camp.spi.Assembly;
 import io.brooklyn.camp.spi.AssemblyTemplate;
 import io.brooklyn.camp.spi.PlatformComponent;
@@ -35,6 +34,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatform;
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherNoServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -55,7 +55,6 @@ import brooklyn.management.Task;
 import brooklyn.policy.Policy;
 import brooklyn.policy.autoscaling.AutoScalerPolicy;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
index 23aa759..275aa0a 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
@@ -26,6 +26,7 @@ import java.io.Reader;
 
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherNoServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -37,7 +38,6 @@ import brooklyn.entity.Entity;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.trait.Startable;
 import brooklyn.management.ManagementContext;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.stream.Streams;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
index bde5016..5e97099 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/VanillaBashNetcatYamlTest.java
@@ -19,6 +19,7 @@
 package org.apache.brooklyn.camp.brooklyn;
 
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -34,7 +35,6 @@ import brooklyn.entity.effector.Effectors;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.management.Task;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.net.Networking;
 import brooklyn.util.text.StringPredicates;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/jsgui/src/test/java/org/apache/brooklyn/rest/jsgui/BrooklynJavascriptGuiLauncherTest.java
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/test/java/org/apache/brooklyn/rest/jsgui/BrooklynJavascriptGuiLauncherTest.java b/usage/jsgui/src/test/java/org/apache/brooklyn/rest/jsgui/BrooklynJavascriptGuiLauncherTest.java
index cd538cc..799b181 100644
--- a/usage/jsgui/src/test/java/org/apache/brooklyn/rest/jsgui/BrooklynJavascriptGuiLauncherTest.java
+++ b/usage/jsgui/src/test/java/org/apache/brooklyn/rest/jsgui/BrooklynJavascriptGuiLauncherTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.brooklyn.rest.jsgui;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.ContextHandler;
 import org.testng.annotations.AfterMethod;
@@ -28,7 +29,6 @@ import brooklyn.entity.basic.Entities;
 import brooklyn.management.ManagementContext;
 import brooklyn.rest.BrooklynRestApiLauncherTestFixture;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 /** Convenience and demo for launching programmatically. */
 public class BrooklynJavascriptGuiLauncherTest {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java b/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
index a523019..a84e1ea 100644
--- a/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
+++ b/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
@@ -21,6 +21,8 @@ package brooklyn.entity.brooklynnode;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -38,8 +40,6 @@ import brooklyn.management.ManagementContext;
 import brooklyn.management.ha.HighAvailabilityMode;
 import brooklyn.rest.filter.BrooklynPropertiesSecurityFilter;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java b/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
index 34d7b07..6899aeb 100644
--- a/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
+++ b/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
@@ -21,6 +21,8 @@ package brooklyn.entity.brooklynnode;
 import java.net.URI;
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.http.client.HttpClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,8 +40,6 @@ import brooklyn.launcher.SimpleYamlLauncherForTests;
 import brooklyn.launcher.camp.SimpleYamlLauncher;
 import brooklyn.location.Location;
 import brooklyn.management.Task;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.Jsonya;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java b/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java
index 0886390..6f7d955 100644
--- a/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java
+++ b/usage/launcher/src/test/java/brooklyn/launcher/BrooklynLauncherTest.java
@@ -32,6 +32,7 @@ import java.net.URI;
 import java.nio.charset.Charset;
 import java.util.Properties;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.testng.Assert;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
@@ -48,7 +49,6 @@ import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.ManagementContext;
 import brooklyn.management.internal.LocalManagementContext;
 import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestApplicationImpl;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/launcher/src/test/java/brooklyn/launcher/WebAppRunnerTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/brooklyn/launcher/WebAppRunnerTest.java b/usage/launcher/src/test/java/brooklyn/launcher/WebAppRunnerTest.java
index c89b399..6260bba 100644
--- a/usage/launcher/src/test/java/brooklyn/launcher/WebAppRunnerTest.java
+++ b/usage/launcher/src/test/java/brooklyn/launcher/WebAppRunnerTest.java
@@ -24,6 +24,7 @@ import static org.testng.Assert.fail;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,7 +35,6 @@ import brooklyn.config.BrooklynProperties;
 import brooklyn.entity.basic.Entities;
 import brooklyn.management.internal.LocalManagementContext;
 import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.net.Networking;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/launcher/src/test/java/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/brooklyn/launcher/blueprints/AbstractBlueprintTest.java b/usage/launcher/src/test/java/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
index 63a8bfb..d0d5de4 100644
--- a/usage/launcher/src/test/java/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
+++ b/usage/launcher/src/test/java/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
@@ -26,6 +26,7 @@ import java.io.StringReader;
 import java.util.Collection;
 
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherAbstract;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -46,7 +47,6 @@ import brooklyn.launcher.camp.BrooklynCampPlatformLauncher;
 import brooklyn.management.ManagementContext;
 import brooklyn.management.internal.LocalManagementContext;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.os.Os;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java b/usage/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java
index 17df429..c550279 100644
--- a/usage/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java
+++ b/usage/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -42,7 +43,6 @@ import brooklyn.launcher.BrooklynLauncher;
 import brooklyn.location.Location;
 import brooklyn.location.jclouds.JcloudsLocationConfig;
 import brooklyn.management.ManagementContext;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.BrooklynMavenArtifacts;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/qa/src/test/java/org/apache/brooklyn/qa/load/LoadTest.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/java/org/apache/brooklyn/qa/load/LoadTest.java b/usage/qa/src/test/java/org/apache/brooklyn/qa/load/LoadTest.java
index d6c479c..a642790 100644
--- a/usage/qa/src/test/java/org/apache/brooklyn/qa/load/LoadTest.java
+++ b/usage/qa/src/test/java/org/apache/brooklyn/qa/load/LoadTest.java
@@ -19,6 +19,8 @@
 package org.apache.brooklyn.qa.load;
 
 import org.apache.brooklyn.qa.load.SimulatedTheeTierApp;
+import org.apache.brooklyn.test.PerformanceTestUtils;
+
 import static org.testng.Assert.assertEquals;
 
 import java.io.File;
@@ -45,7 +47,6 @@ import brooklyn.location.Location;
 import brooklyn.management.ManagementContext;
 import brooklyn.management.ha.HighAvailabilityMode;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.test.PerformanceTestUtils;
 import brooklyn.util.os.Os;
 import brooklyn.util.time.Duration;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-client/src/test/java/org/apache/brooklyn/rest/client/BrooklynApiRestClientTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-client/src/test/java/org/apache/brooklyn/rest/client/BrooklynApiRestClientTest.java b/usage/rest-client/src/test/java/org/apache/brooklyn/rest/client/BrooklynApiRestClientTest.java
index c36a456..d3586af 100644
--- a/usage/rest-client/src/test/java/org/apache/brooklyn/rest/client/BrooklynApiRestClientTest.java
+++ b/usage/rest-client/src/test/java/org/apache/brooklyn/rest/client/BrooklynApiRestClientTest.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import javax.ws.rs.core.Response;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.eclipse.jetty.server.Server;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,7 +43,6 @@ import brooklyn.rest.BrooklynRestApiLauncherTest;
 import brooklyn.rest.domain.ApplicationSummary;
 import brooklyn.rest.domain.CatalogLocationSummary;
 import brooklyn.rest.security.provider.TestSecurityProvider;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.TestEntity;
 
 @Test

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-server/src/test/java/brooklyn/entity/brooklynnode/DeployBlueprintTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/entity/brooklynnode/DeployBlueprintTest.java b/usage/rest-server/src/test/java/brooklyn/entity/brooklynnode/DeployBlueprintTest.java
index 42f0785..4ee9562 100644
--- a/usage/rest-server/src/test/java/brooklyn/entity/brooklynnode/DeployBlueprintTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/entity/brooklynnode/DeployBlueprintTest.java
@@ -24,6 +24,7 @@ import java.net.URI;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.eclipse.jetty.server.Server;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,7 +38,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.event.feed.http.JsonFunctions;
 import brooklyn.management.EntityManager;
 import brooklyn.rest.BrooklynRestApiLauncherTestFixture;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.util.guava.Functionals;
 
 import com.google.common.base.Function;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java b/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java
index 0412118..1992c90 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java
@@ -24,6 +24,7 @@ import static brooklyn.rest.BrooklynRestApiLauncher.StartMode.WEB_XML;
 
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.http.HttpStatus;
 import org.eclipse.jetty.server.Server;
 import org.testng.annotations.Test;
@@ -31,7 +32,6 @@ import org.testng.annotations.Test;
 import brooklyn.rest.security.provider.AnyoneSecurityProvider;
 import brooklyn.rest.util.BrooklynRestResourceUtilsTest.SampleNoOpApplication;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 public class BrooklynRestApiLauncherTest extends BrooklynRestApiLauncherTestFixture {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java
index 8645e38..95e02ac 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java
@@ -34,6 +34,7 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -82,7 +83,6 @@ import brooklyn.rest.testing.mocks.RestMockApp;
 import brooklyn.rest.testing.mocks.RestMockAppBuilder;
 import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.util.collections.CollectionFunctionals;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.time.Duration;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityResourceTest.java
index 60932a6..c5d0c57 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityResourceTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityResourceTest.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import javax.annotation.Nullable;
 import javax.ws.rs.core.MediaType;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.type.TypeReference;
 import org.slf4j.Logger;
@@ -42,7 +43,6 @@ import brooklyn.rest.domain.EntitySpec;
 import brooklyn.rest.domain.TaskSummary;
 import brooklyn.rest.testing.BrooklynRestResourceTest;
 import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java
index e412b6b..0664a89 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java
@@ -20,6 +20,7 @@ package brooklyn.rest.resources;
 
 import java.net.URI;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.http.client.HttpClient;
 import org.eclipse.jetty.server.Server;
 import org.testng.Assert;
@@ -35,7 +36,6 @@ import brooklyn.management.ManagementContext;
 import brooklyn.rest.BrooklynRestApiLauncher;
 import brooklyn.rest.BrooklynRestApiLauncherTestFixture;
 import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.http.HttpTool;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
index 6d074c0..e6d9123 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -40,7 +41,6 @@ import brooklyn.rest.domain.ApplicationSpec;
 import brooklyn.rest.domain.EntitySpec;
 import brooklyn.rest.testing.BrooklynRestResourceTest;
 import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.stream.Streams;
 import brooklyn.util.text.StringFunctions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java
index 311afaf..9818436 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java
@@ -25,6 +25,7 @@ import java.net.URI;
 import java.util.Collections;
 import java.util.Map;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.http.HttpStatus;
 import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.HttpClient;
@@ -38,7 +39,6 @@ import brooklyn.management.internal.ManagementContextInternal;
 import brooklyn.rest.BrooklynRestApiLauncher;
 import brooklyn.rest.BrooklynRestApiLauncherTestFixture;
 import brooklyn.rest.security.provider.TestSecurityProvider;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.util.http.HttpTool;
 import brooklyn.util.http.HttpToolResponse;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java
index 061599e..83114cd 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java
@@ -27,6 +27,7 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import javax.ws.rs.core.MultivaluedMap;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterClass;
@@ -51,7 +52,6 @@ import brooklyn.management.Task;
 import brooklyn.rest.resources.ServerResourceTest.StopLatchEntity;
 import brooklyn.rest.testing.BrooklynRestResourceTest;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.exceptions.Exceptions;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/brooklyn/test/EntityTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/brooklyn/test/EntityTestUtils.java b/usage/test-support/src/main/java/brooklyn/test/EntityTestUtils.java
deleted file mode 100644
index ae7b269..0000000
--- a/usage/test-support/src/main/java/brooklyn/test/EntityTestUtils.java
+++ /dev/null
@@ -1,180 +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 brooklyn.test;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-
-import brooklyn.config.ConfigKey;
-import brooklyn.entity.Entity;
-import brooklyn.entity.Group;
-import brooklyn.entity.basic.EntityLocal;
-import brooklyn.event.AttributeSensor;
-import brooklyn.event.SensorEvent;
-import brooklyn.event.SensorEventListener;
-import brooklyn.management.SubscriptionHandle;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-public class EntityTestUtils {
-
-    // TODO would be nice to have this... perhaps moving this class, or perhaps this whole project, to core/src/test ?
-//    public static LocalManagementContext newManagementContext() { return new LocalManagementContextForTests(); }
-    
-    // TODO Delete methods from TestUtils, to just have them here (or switch so TestUtils delegates here,
-    // and deprecate methods in TestUtils until deleted).
-    
-    public static <T> void assertAttributeEquals(Entity entity, AttributeSensor<T> attribute, T expected) {
-        assertEquals(entity.getAttribute(attribute), expected, "entity="+entity+"; attribute="+attribute);
-    }
-    
-    public static <T> void assertConfigEquals(Entity entity, ConfigKey<T> configKey, T expected) {
-        assertEquals(entity.getConfig(configKey), expected, "entity="+entity+"; configKey="+configKey);
-    }
-    
-    public static <T> void assertAttributeEqualsEventually(final Entity entity, final AttributeSensor<T> attribute, final T expected) {
-        assertAttributeEqualsEventually(Maps.newLinkedHashMap(), entity, attribute, expected);
-    }
-
-    public static <T> void assertAttributeEqualsEventually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final T expected) {
-        // Not using assertAttributeEventually(predicate) so get nicer error message
-        Asserts.succeedsEventually((Map)flags, new Runnable() {
-            @Override public void run() {
-                assertAttributeEquals(entity, attribute, expected);
-            }});
-    }
-
-    public static <T> T assertAttributeEventuallyNonNull(final Entity entity, final AttributeSensor<T> attribute) {
-        return assertAttributeEventuallyNonNull(Maps.newLinkedHashMap(), entity, attribute);
-    }
-
-    public static <T> T assertAttributeEventuallyNonNull(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute) {
-        return assertAttributeEventually(flags, entity, attribute, Predicates.notNull());
-    }
-
-    public static <T> T assertAttributeEventually(final Entity entity, final AttributeSensor<T> attribute, Predicate<? super T> predicate) {
-        return assertAttributeEventually(ImmutableMap.of(), entity, attribute, predicate);
-    }
-    
-    public static <T> T assertAttributeEventually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final Predicate<? super T> predicate) {
-        final AtomicReference<T> result = new AtomicReference<T>();
-        Asserts.succeedsEventually((Map)flags, new Runnable() {
-            @Override public void run() {
-                T val = entity.getAttribute(attribute);
-                assertTrue(predicate.apply(val), "val="+val);
-                result.set(val);
-            }});
-        return result.get();
-    }
-
-    public static <T> T assertAttribute(final Entity entity, final AttributeSensor<T> attribute, final Predicate<? super T> predicate) {
-        T val = entity.getAttribute(attribute);
-        assertTrue(predicate.apply(val), "val="+val);
-        return val;
-    }
-
-    public static <T extends Entity> void assertPredicateEventuallyTrue(final T entity, final Predicate<? super T> predicate) {
-        assertPredicateEventuallyTrue(Maps.newLinkedHashMap(), entity, predicate);
-    }
-
-    public static <T extends Entity> void assertPredicateEventuallyTrue(Map<?,?> flags, final T entity, final Predicate<? super T> predicate) {
-        Asserts.succeedsEventually((Map)flags, new Runnable() {
-                @Override public void run() {
-                    assertTrue(predicate.apply(entity));
-                }});
-    }
-
-    public static <T> void assertAttributeEqualsContinually(final Entity entity, final AttributeSensor<T> attribute, final T expected) {
-        assertAttributeEqualsContinually(Maps.newLinkedHashMap(), entity, attribute, expected);
-    }
-    
-    public static <T> void assertAttributeEqualsContinually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final T expected) {
-        Asserts.succeedsContinually(flags, new Runnable() {
-                @Override public void run() {
-                    assertAttributeEquals(entity, attribute, expected);
-                }});
-    }
-
-    public static void assertGroupSizeEqualsEventually(final Group group, int expected) {
-        assertGroupSizeEqualsEventually(ImmutableMap.of(), group, expected);
-    }
-    
-    public static void assertGroupSizeEqualsEventually(Map<?,?> flags, final Group group, final int expected) {
-        Asserts.succeedsEventually((Map)flags, new Runnable() {
-            @Override public void run() {
-                Collection<Entity> members = group.getMembers();
-                assertEquals(members.size(), expected, "members="+members);
-            }});
-    }
-
-    /** checks that the entity's value for this attribute changes, by registering a subscription and checking the value */
-    public static void assertAttributeChangesEventually(final Entity entity, final AttributeSensor<?> attribute) {
-        final Object origValue = entity.getAttribute(attribute);
-        final AtomicBoolean changed = new AtomicBoolean();
-        SubscriptionHandle handle = ((EntityLocal)entity).subscribe(entity, attribute, new SensorEventListener<Object>() {
-            @Override public void onEvent(SensorEvent<Object> event) {
-                if (!Objects.equal(origValue, event.getValue())) {
-                    changed.set(true);
-                }
-            }});
-        try {
-            Asserts.succeedsEventually(new Runnable() {
-                @Override public void run() {
-                    assertTrue(changed.get(), entity+" -> "+attribute+" not changed");
-                }});
-        } finally {
-            ((EntityLocal)entity).unsubscribe(entity, handle);
-        }
-    }
-    
-    /** alternate version of {@link #assertAttributeChangesEventually(Entity, AttributeSensor)} not using subscriptions and 
-     * with simpler code, for comparison */
-    @Beta
-    public static <T> void assertAttributeChangesEventually2(final Entity entity, final AttributeSensor<T> attribute) {
-        assertAttributeEventually(entity, attribute, 
-            Predicates.not(Predicates.equalTo(entity.getAttribute(attribute))));
-    }
-
-    @Beta
-    public static <T> void assertAttributeNever(final Entity entity, final AttributeSensor<T> attribute, T... disallowed) {
-        final Set<T> reject = Sets.newHashSet(disallowed);
-        Asserts.succeedsContinually(new Runnable() {
-            @Override
-            public void run() {
-                T val = entity.getAttribute(attribute);
-                assertFalse(reject.contains(val),
-                        "Attribute " + attribute + " on " + entity + " has disallowed value " + val);
-            }
-        });
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/brooklyn/test/HttpTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/brooklyn/test/HttpTestUtils.java b/usage/test-support/src/main/java/brooklyn/test/HttpTestUtils.java
deleted file mode 100644
index 71eff35..0000000
--- a/usage/test-support/src/main/java/brooklyn/test/HttpTestUtils.java
+++ /dev/null
@@ -1,391 +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 brooklyn.test;
-
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLSession;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-
-import brooklyn.util.collections.MutableMap;
-import brooklyn.util.crypto.SslTrustUtils;
-import brooklyn.util.exceptions.Exceptions;
-import brooklyn.util.stream.Streams;
-import brooklyn.util.time.Time;
-
-import com.google.common.base.Throwables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-
-/**
- * Utility methods to aid testing HTTP.
- * 
- * @author aled
- */
-public class HttpTestUtils {
-
-    // TODO Delete methods from TestUtils, to just have them here (or switch so TestUtils delegates here,
-    // and deprecate methods in TestUtils until deleted).
-
-    private static final Logger LOG = LoggerFactory.getLogger(HttpTestUtils.class);
-
-    static final ExecutorService executor = Executors.newCachedThreadPool();
-    
-    /**
-     * Connects to the given url and returns the connection.
-     * Caller should {@code connection.getInputStream().close()} the result of this
-     * (especially if they are making heavy use of this method).
-     */
-    public static URLConnection connectToUrl(String u) throws Exception {
-        final URL url = new URL(u);
-        final AtomicReference<Exception> exception = new AtomicReference<Exception>();
-        
-        // sometimes openConnection hangs, so run in background
-        Future<URLConnection> f = executor.submit(new Callable<URLConnection>() {
-            public URLConnection call() {
-                try {
-                    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
-                        @Override public boolean verify(String s, SSLSession sslSession) {
-                            return true;
-                        }
-                    });
-                    URLConnection connection = url.openConnection();
-                    TrustingSslSocketFactory.configure(connection);
-                    connection.connect();
-    
-                    connection.getContentLength(); // Make sure the connection is made.
-                    return connection;
-                } catch (Exception e) {
-                    exception.set(e);
-                    LOG.debug("Error connecting to url "+url+" (propagating): "+e, e);
-                }
-                return null;
-            }
-        });
-        try {
-            URLConnection result = null;
-            try {
-                result = f.get(60, TimeUnit.SECONDS);
-            } catch (InterruptedException e) {
-                throw e;
-            } catch (Exception e) {
-                LOG.debug("Error connecting to url "+url+", probably timed out (rethrowing): "+e);
-                throw new IllegalStateException("Connect to URL not complete within 60 seconds, for url "+url+": "+e);
-            }
-            if (exception.get() != null) {
-                LOG.debug("Error connecting to url "+url+", thread caller of "+exception, new Throwable("source of rethrown error "+exception));
-                throw exception.get();
-            } else {
-                return result;
-            }
-        } finally {
-            f.cancel(true);
-        }
-    }
-
-    public static void assertHealthyStatusCode(int code) {
-        if (code>=200 && code<=299) return;
-        Assert.fail("Wrong status code: "+code);
-    }
-    
-    public static int getHttpStatusCode(String url) throws Exception {
-        URLConnection connection = connectToUrl(url);
-        long startTime = System.currentTimeMillis();
-        int status = ((HttpURLConnection) connection).getResponseCode();
-        
-        // read fully if possible, then close everything, trying to prevent cached threads at server
-        consumeAndCloseQuietly((HttpURLConnection) connection);
-        
-        if (LOG.isDebugEnabled())
-            LOG.debug("connection to {} ({}ms) gives {}", new Object[] { url, (System.currentTimeMillis()-startTime), status });
-        return status;
-    }
-
-    /**
-     * Asserts that gets back any "valid" response - i.e. not an exception. This could be an unauthorized,
-     * a redirect, a 404, or anything else that implies there is web-server listening on that port.
-     */
-    public static void assertUrlReachable(String url) {
-        try {
-            getHttpStatusCode(url);
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-            throw new RuntimeException("Interrupted for "+url+" (in assertion that is reachable)", e);
-        } catch (Exception e) {
-            throw new IllegalStateException("Server at "+url+" failed to respond (in assertion that is reachable): "+e, e);
-        }
-    }
-
-    public static void assertUrlUnreachable(String url) {
-        try {
-            int statusCode = getHttpStatusCode(url);
-            fail("Expected url "+url+" unreachable, but got status code "+statusCode);
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-            throw new RuntimeException("Interrupted for "+url+" (in assertion that unreachable)", e);
-        } catch (Exception e) {
-            IOException cause = Exceptions.getFirstThrowableOfType(e, IOException.class);
-            if (cause != null) {
-                // success; clean shutdown transitioning from 400 to error
-            } else {
-                Throwables.propagate(e);
-            }                        
-        }
-    }
-
-    public static void assertUrlUnreachableEventually(final String url) {
-        assertUrlUnreachableEventually(Maps.newLinkedHashMap(), url);
-    }
-    
-    public static void assertUrlUnreachableEventually(Map flags, final String url) {
-        Asserts.succeedsEventually(flags, new Runnable() {
-            public void run() {
-                assertUrlUnreachable(url);
-            }
-         });
-    }
-
-    public static void assertHttpStatusCodeEquals(String url, int... acceptableReturnCodes) {
-        List<Integer> acceptableCodes = Lists.newArrayList();
-        for (int code : acceptableReturnCodes) {
-            acceptableCodes.add((Integer)code);
-        }
-        try {
-            int actualCode = getHttpStatusCode(url);
-            assertTrue(acceptableCodes.contains(actualCode), "code="+actualCode+"; expected="+acceptableCodes+"; url="+url);
-            
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-            throw new RuntimeException("Interrupted for "+url+" (in assertion that result code is "+acceptableCodes+")", e);
-        } catch (Exception e) {
-            throw new IllegalStateException("Server at "+url+" failed to respond (in assertion that result code is "+acceptableCodes+"): "+e, e);
-        }
-    }
-
-    public static void assertHttpStatusCodeEventuallyEquals(final String url, final int expectedCode) {
-        assertHttpStatusCodeEventuallyEquals(Maps.newLinkedHashMap(),  url, expectedCode);
-    }
-
-    public static void assertHttpStatusCodeEventuallyEquals(Map flags, final String url, final int expectedCode) {
-        Asserts.succeedsEventually(flags, new Runnable() {
-            public void run() {
-                assertHttpStatusCodeEquals(url, expectedCode);
-            }
-         });
-    }
-
-    public static void assertContentContainsText(final String url, final String phrase, final String ...additionalPhrases) {
-        try {
-            String contents = getContent(url);
-            Assert.assertTrue(contents != null && contents.length() > 0);
-            for (String text: Lists.asList(phrase, additionalPhrases)) {
-                if (!contents.contains(text)) {
-                    LOG.warn("CONTENTS OF URL "+url+" MISSING TEXT: "+text+"\n"+contents);
-                    Assert.fail("URL "+url+" does not contain text: "+text);
-                }
-            }
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    public static void assertContentNotContainsText(final String url, final String phrase, final String ...additionalPhrases) {
-        try {
-            String contents = getContent(url);
-            Assert.assertTrue(contents != null);
-            for (String text: Lists.asList(phrase, additionalPhrases)) {
-                if (contents.contains(text)) {
-                    LOG.warn("CONTENTS OF URL "+url+" HAS TEXT: "+text+"\n"+contents);
-                    Assert.fail("URL "+url+" contain text: "+text);
-                }
-            }
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    public static void assertErrorContentContainsText(final String url, final String phrase, final String ...additionalPhrases) {
-        try {
-            String contents = getErrorContent(url);
-            Assert.assertTrue(contents != null && contents.length() > 0);
-            for (String text: Lists.asList(phrase, additionalPhrases)) {
-                if (!contents.contains(text)) {
-                    LOG.warn("CONTENTS OF URL "+url+" MISSING TEXT: "+text+"\n"+contents);
-                    Assert.fail("URL "+url+" does not contain text: "+text);
-                }
-            }
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-
-    public static void assertErrorContentNotContainsText(final String url, final String phrase, final String ...additionalPhrases) {
-        try {
-            String err = getErrorContent(url);
-            Assert.assertTrue(err != null);
-            for (String text: Lists.asList(phrase, additionalPhrases)) {
-                if (err.contains(text)) {
-                    LOG.warn("CONTENTS OF URL "+url+" HAS TEXT: "+text+"\n"+err);
-                    Assert.fail("URL "+url+" contain text: "+text);
-                }
-            }
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-    
-    public static void assertContentEventuallyContainsText(final String url, final String phrase, final String ...additionalPhrases) {
-        assertContentEventuallyContainsText(MutableMap.of(), url, phrase, additionalPhrases);
-    }
-    
-    public static void assertContentEventuallyContainsText(Map flags, final String url, final String phrase, final String ...additionalPhrases) {
-        Asserts.succeedsEventually(flags, new Runnable() {
-            public void run() {
-                assertContentContainsText(url, phrase, additionalPhrases);
-            }
-         });
-    }
-    
-    public static void assertContentMatches(String url, String regex) {
-        String contents = getContent(url);
-        Assert.assertNotNull(contents);
-        Assert.assertTrue(contents.matches(regex), "Contents does not match expected regex ("+regex+"): "+contents);
-    }
-
-    public static void assertContentEventuallyMatches(final String url, final String regex) {
-        Asserts.succeedsEventually(new Runnable() {
-            @Override
-            public void run() {
-                assertContentMatches(url, regex);
-            }
-        });
-    }
-    
-    public static String getErrorContent(String url) {
-        try {
-            HttpURLConnection connection = (HttpURLConnection) connectToUrl(url);
-            long startTime = System.currentTimeMillis();
-            
-            String err;
-            int status;
-            try {
-                InputStream errStream = connection.getErrorStream();
-                err = Streams.readFullyString(errStream);
-                status = connection.getResponseCode();
-            } finally {
-                closeQuietly(connection);
-            }
-            
-            if (LOG.isDebugEnabled())
-                LOG.debug("read of err {} ({}ms) complete; http code {}", new Object[] { url, Time.makeTimeStringRounded(System.currentTimeMillis()-startTime), status});
-            return err;
-
-        } catch (Exception e) {
-            throw Exceptions.propagate(e);
-        }
-    }
-    
-    public static String getContent(String url) {
-        try {
-            return Streams.readFullyString(SslTrustUtils.trustAll(new URL(url).openConnection()).getInputStream());
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    /**
-     * Schedules (with the given executor) a poller that repeatedly accesses the given url, to confirm it always gives
-     * back the expected status code.
-     * 
-     * Expected usage is to query the future, such as:
-     * 
-     * <pre>
-     * {@code
-     * Future<?> future = assertAsyncHttpStatusCodeContinuallyEquals(executor, url, 200);
-     * // do other stuff...
-     * if (future.isDone()) future.get(); // get exception if it's failed
-     * }
-     * </pre>
-     * 
-     * For stopping it, you can either do future.cancel(true), or you can just do executor.shutdownNow().
-     * 
-     * TODO Look at difference between this and WebAppMonitor, to decide if this should be kept.
-     */
-    public static ListenableFuture<?> assertAsyncHttpStatusCodeContinuallyEquals(ListeningExecutorService executor, final String url, final int expectedStatusCode) {
-        return executor.submit(new Runnable() {
-            @Override public void run() {
-                // TODO Need to drop logging; remove sleep when that's done.
-                while (!Thread.currentThread().isInterrupted()) {
-                    assertHttpStatusCodeEquals(url, expectedStatusCode);
-                    try {
-                        Thread.sleep(1000);
-                    } catch (InterruptedException e) {
-                        return; // graceful return
-                    }
-                }
-            }
-        });
-    }
-    
-    /**
-     * Consumes the input stream entirely and then cleanly closes the connection.
-     * Ignores all exceptions completely, not even logging them!
-     * 
-     * Consuming the stream fully is useful for preventing idle TCP connections. 
-     * See {@linkplain http://docs.oracle.com/javase/8/docs/technotes/guides/net/http-keepalive.html}.
-     */
-    public static void consumeAndCloseQuietly(HttpURLConnection connection) {
-        try { Streams.readFully(connection.getInputStream()); } catch (Exception e) {}
-        closeQuietly(connection);
-    }
-    
-    /**
-     * Closes all streams of the connection, and disconnects it. Ignores all exceptions completely,
-     * not even logging them!
-     */
-    public static void closeQuietly(HttpURLConnection connection) {
-        try { connection.disconnect(); } catch (Exception e) {}
-        try { connection.getInputStream().close(); } catch (Exception e) {}
-        try { connection.getOutputStream().close(); } catch (Exception e) {}
-        try { connection.getErrorStream().close(); } catch (Exception e) {}
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/brooklyn/test/NetworkingTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/brooklyn/test/NetworkingTestUtils.java b/usage/test-support/src/main/java/brooklyn/test/NetworkingTestUtils.java
deleted file mode 100644
index c55b4d3..0000000
--- a/usage/test-support/src/main/java/brooklyn/test/NetworkingTestUtils.java
+++ /dev/null
@@ -1,68 +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 brooklyn.test;
-
-import static org.testng.Assert.assertTrue;
-
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.util.exceptions.Exceptions;
-import brooklyn.util.net.Networking;
-import brooklyn.util.time.Duration;
-
-import com.google.common.collect.ImmutableMap;
-
-public class NetworkingTestUtils {
-
-    private static final Logger LOG = LoggerFactory.getLogger(NetworkingTestUtils.class);
-
-    public static void assertPortsAvailableEventually(final Map<String, Integer> ports) {
-        // If we get into a TCP TIMED-WAIT state, it could take 4 minutes for the port to come available.
-        // Could that be causing our integration tests to fail sometimes when run in the suite?!
-        // Let's wait for the required ports in setup, rather than running+failing the test.
-        assertPortsAvailableEventually(ports, Duration.minutes(4));
-    }
-    
-    public static void assertPortsAvailableEventually(final Map<String, Integer> ports, final Duration timeout) {
-        Asserts.succeedsEventually(ImmutableMap.of("timeout", Duration.minutes(4)), new Runnable() {
-            private boolean logged = false;
-            public void run() {
-                try {
-                    assertPortsAvailable(ports);
-                } catch (Throwable t) {
-                    if (!logged) {
-                        LOG.warn("Port(s) not available; waiting for up to "+timeout+" ("+Exceptions.getFirstInteresting(t)+")");
-                        logged = true;
-                    }
-                    throw Exceptions.propagate(t);
-                }
-            }});
-        LOG.debug("Ports are available: "+ports);
-    }
-    
-    public static void assertPortsAvailable(final Map<String, Integer> ports) {
-        for (Map.Entry<String, Integer> entry : ports.entrySet()) {
-            String errmsg = "port "+entry.getValue()+" not available for "+entry.getKey();
-            assertTrue(Networking.isPortAvailable(entry.getValue()), errmsg);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/brooklyn/test/PerformanceTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/brooklyn/test/PerformanceTestUtils.java b/usage/test-support/src/main/java/brooklyn/test/PerformanceTestUtils.java
deleted file mode 100644
index 0bf4ba0..0000000
--- a/usage/test-support/src/main/java/brooklyn/test/PerformanceTestUtils.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 brooklyn.test;
-
-import java.lang.management.ManagementFactory;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.util.time.Duration;
-import brooklyn.util.time.Time;
-
-import com.google.common.base.Stopwatch;
-
-public class PerformanceTestUtils {
-
-    private static final Logger LOG = LoggerFactory.getLogger(PerformanceTestUtils.class);
-
-    private static boolean hasLoggedProcessCpuTimeUnavailable;
-    
-    public static long getProcessCpuTime() {
-        try {
-            MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
-            ObjectName osMBeanName = ObjectName.getInstance(ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME);
-            return (Long) mbeanServer.getAttribute(osMBeanName, "ProcessCpuTime");
-        } catch (Exception e) {
-            if (!hasLoggedProcessCpuTimeUnavailable) {
-                hasLoggedProcessCpuTimeUnavailable = true;
-                LOG.warn("ProcessCPuTime not available in local JVM MXBean "+ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME+" (only available in sun JVM?)");
-            }
-            return -1;
-        }
-    }
-
-    /**
-     * Creates a background thread that will log.info the CPU fraction usage repeatedly, sampling at the given period.
-     * Callers <em>must</em> cancel the returned future, e.g. {@code future.cancel(true)}, otherwise it will keep
-     * logging until the JVM exits.
-     */
-    public static Future<?> sampleProcessCpuTime(final Duration period, final String loggingContext) {
-        final ExecutorService executor = Executors.newSingleThreadExecutor(new ThreadFactory() {
-                @Override public Thread newThread(Runnable r) {
-                    Thread thread = new Thread(r, "brooklyn-sampleProcessCpuTime-"+loggingContext);
-                    thread.setDaemon(true); // let the JVM exit
-                    return thread;
-                }});
-        Future<?> future = executor.submit(new Runnable() {
-                @Override public void run() {
-                    try {
-                        long prevCpuTime = getProcessCpuTime();
-                        if (prevCpuTime == -1) {
-                            LOG.warn("ProcessCPuTime not available; cannot sample; aborting");
-                            return;
-                        }
-                        while (true) {
-                            Stopwatch stopwatch = Stopwatch.createStarted();
-                            Thread.sleep(period.toMilliseconds());
-                            long currentCpuTime = getProcessCpuTime();
-                            
-                            long elapsedTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
-                            double fractionCpu = (elapsedTime > 0) ? ((double)currentCpuTime-prevCpuTime) / TimeUnit.MILLISECONDS.toNanos(elapsedTime) : -1;
-                            prevCpuTime = currentCpuTime;
-                            
-                            LOG.info("CPU fraction over last {} was {} ({})", new Object[] {
-                                    Time.makeTimeStringRounded(elapsedTime), fractionCpu, loggingContext});
-                        }
-                    } catch (InterruptedException e) {
-                        return; // graceful termination
-                    } finally {
-                        executor.shutdownNow();
-                    }
-                }});
-        return future;
-    }
-}


[2/6] incubator-brooklyn git commit: [BROOKLYN-162] Update package name to a.o.b in usage/test-support

Posted by ha...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/brooklyn/test/TestUtils.groovy
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/brooklyn/test/TestUtils.groovy b/usage/test-support/src/main/java/brooklyn/test/TestUtils.groovy
deleted file mode 100644
index 78fefeb..0000000
--- a/usage/test-support/src/main/java/brooklyn/test/TestUtils.groovy
+++ /dev/null
@@ -1,540 +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 brooklyn.test
-
-import static org.testng.Assert.*
-import groovy.time.TimeDuration
-
-import java.util.concurrent.Callable
-import java.util.concurrent.ExecutionException
-import java.util.concurrent.Executors
-
-import org.codehaus.groovy.runtime.InvokerInvocationException
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-
-import brooklyn.entity.Entity
-import brooklyn.event.AttributeSensor
-import brooklyn.util.text.StringFunctions;
-import brooklyn.util.time.Duration
-
-import com.google.common.base.Predicate
-import com.google.common.base.Supplier
-import com.google.common.collect.Iterables
-
-/**
- * Helper functions for tests of Tomcat, JBoss and others.
- * 
- * Note that methods will migrate from here to {@link Asserts} in future releases.
- */
-public class TestUtils {
-    private static final Logger log = LoggerFactory.getLogger(TestUtils.class)
-
-    private TestUtils() { }
-
-    /**
-     * True if two attempts to connect to the port succeed.
-     * 
-     * @deprecated since 0.5; use {@link brooklyn.util.NetworkUtils#isPortAvailable(int)}
-     */
-    @Deprecated
-    public static boolean isPortInUse(int port, long retryAfterMillis=0) {
-        try {
-            def s = new Socket("localhost", port)
-            s.close()
-            if (retryAfterMillis>0) {
-                log.debug "port {} still open, waiting 1s for it to really close", port
-                //give it 1s to close
-                Thread.sleep retryAfterMillis
-                s = new Socket("localhost", port)
-                s.close()
-            }
-            log.debug "port {} still open (conclusive)", port
-            return true
-        } catch (ConnectException e) {
-            return false
-        }
-    }
-
-    /**
-     * Connects to the given HTTP URL and asserts that the response had status code 200.
-     * @deprecated Use HttpTestUtils.getHttpStatusCode(url) == 200
-     */
-    @Deprecated
-    public static boolean urlRespondsWithStatusCode200(String url) {
-        int status = HttpTestUtils.getHttpStatusCode(url);
-        log.debug "connection to {} gives {}", url, status
-        if (status == 404)
-            throw new Exception("Connection to $url gave 404");
-        return status == 200
-    }
-    
-    /** 
-     * Connects to the given HTTP URL and asserts that the response had status code 200.
-     * @deprecated Use HttpTestUtils.getHttpStatusCode(url)
-     */
-    @Deprecated
-    public static int urlRespondsStatusCode(String url) {
-        return HttpTestUtils.getHttpStatusCode(url);
-    }
-    
-    /** 
-     * Connects to the given url and returns the connection.
-     * @deprecated Use HttpTestUtils.connectToUrl(url)
-     */
-    @Deprecated
-    public static URLConnection connectToURL(String url) {
-        return HttpTestUtils.connectToUrl(url);
-    }
-    
-    // calling groovy from java doesn't cope with generics here; stripping them from here :-(
-    //      <T> void assertEventually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate)
-    /**
-     * @deprecated since 0.5; use {@link Asserts#eventually(Map, Supplier, Predicate)}
-     */
-    @Deprecated
-    public static void assertEventually(Map flags=[:], Supplier supplier, Predicate predicate) {
-        Asserts.eventually(flags, supplier, predicate);
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#eventually(Map, Supplier, Predicate, String)}
-     */
-    @Deprecated
-    public static <T> void assertEventually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate, String errMsg) {
-        Asserts.eventually(flags, supplier, predicate, errMsg);
-    }
-
-    /**    
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(java.util.Map, Callable)}
-     */
-    @Deprecated
-    public static void assertEventually(Map flags=[:], Callable c) {
-        executeUntilSucceeds(flags, c);
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Runnable)}
-     */
-    @Deprecated
-    public static void assertEventually(Map flags=[:], Runnable c) {
-        executeUntilSucceeds(flags, c);
-    }
-
-    /**
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}
-     */
-    @Deprecated
-    public static void executeUntilSucceeds(Map flags=[:], Closure c) {
-        Asserts.succeedsEventually(flags, c);
-    }
-
-    /**
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}
-     */
-    @Deprecated
-    public static void executeUntilSucceeds(Map flags=[:], Callable c) {
-        Asserts.succeedsEventually(flags, c);
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Runnable)}
-     */
-    @Deprecated
-    public static void executeUntilSucceeds(Map flags=[:], Runnable r) {
-        if (r in Callable) 
-            executeUntilSucceedsWithFinallyBlock(flags, {return ((Callable)r).call();}, { })
-        else if (r in Closure)  // Closure check probably not necessary, just was trying to fix a server build which had a screwy problem
-            executeUntilSucceedsWithFinallyBlock(flags, {return ((Closure)r).call();}, { })
-        else
-            executeUntilSucceedsWithFinallyBlock(flags, {r.run(); return true}, { })
-    }
-
-    /**
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
-     */
-    @Deprecated
-    public static void executeUntilSucceedsElseShutdown(Map flags=[:], Entity entity, Closure c) {
-        try { 
-            executeUntilSucceedsWithFinallyBlock(flags, c) { }
-        } catch (Throwable t) {
-            entity.stop()
-            throw t
-        }
-    }
-
-    /**
-     * convenience for entities to ensure they shutdown afterwards.
-     * 
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
-     */
-    @Deprecated
-    public static void executeUntilSucceedsWithShutdown(Map flags=[:], Entity entity, Closure c) {
-        executeUntilSucceedsWithFinallyBlock(flags, c) { entity.stop() }
-    }
-
-    /**
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
-     */
-    @Deprecated
-    public static void executeUntilSucceedsWithFinallyBlock(Map flags=[:], Closure c, Closure finallyBlock={}) {
-        executeUntilSucceedsWithFinallyBlockInternal(flags, c, finallyBlock)
-    }
-    
-    /**
-     * Convenience method for cases where we need to test until something is true.
-     *
-     * The runnable will be invoked periodically until it succesfully concludes.
-     * Additionally, a finally block can be supplied.
-     * <p>
-     * The following flags are supported:
-     * <ul>
-     * <li>abortOnError (boolean, default true)
-     * <li>abortOnException - (boolean, default false)
-     * <li>useGroovyTruth - (defaults to false; any result code apart from 'false' will be treated as success including null; ignored for Runnables which aren't Callables)
-     * <li>timeout - (a Duration or an integer in millis, defaults to 30*SECONDS)
-     * <li>period - (a Duration or an integer in millis, for fixed retry time; if not set, defaults to exponentially increasing from 1 to 500ms)
-     * <li>minPeriod - (a Duration or an integer in millis; only used if period not explicitly set; the minimum period when exponentially increasing; defaults to 1ms)
-     * <li>maxPeriod - (a Duration or an integer in millis; only used if period not explicitly set; the maximum period when exponentially increasing; defaults to 500ms)
-     * <li>maxAttempts - (integer, Integer.MAX_VALUE)
-     * </ul>
-     *
-     * @param flags, accepts the flags listed above
-     * @param r
-     * @param finallyBlock
-     * 
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
-     */
-    @Deprecated
-    public static void executeUntilSucceedsWithFinallyBlock(Map flags=[:], Callable<?> c, Closure finallyBlock={}) {
-        executeUntilSucceedsWithFinallyBlockInternal(flags, c, finallyBlock);
-    }
-    
-    /**
-     * the "real" implementation, renamed to allow multiple entry points (depending whether closure cast to callable)
-     * 
-     * @deprecated since 0.5; use {@link Asserts#succeedsEventually(Map, Callable)}, and tear-down with {@link AfterMethod}.
-     */
-    @Deprecated
-    private static void executeUntilSucceedsWithFinallyBlockInternal(Map flags=[:], Callable<?> c, Closure finallyBlock={}) {
-//        log.trace "abortOnError = {}", flags.abortOnError
-        boolean abortOnException = flags.abortOnException ?: false
-        boolean abortOnError = flags.abortOnError ?: false
-        boolean useGroovyTruth = flags.useGroovyTruth ?: false
-        boolean logException = flags.logException ?: true
-
-        // To speed up tests, default is for the period to start small and increase...
-        Duration duration = Duration.of(flags.timeout) ?: Duration.THIRTY_SECONDS;
-        Duration fixedPeriod = Duration.of(flags.period) ?: null
-        Duration minPeriod = fixedPeriod ?: Duration.of(flags.minPeriod) ?: Duration.millis(1)
-        Duration maxPeriod = fixedPeriod ?: Duration.of(flags.maxPeriod) ?: Duration.millis(500)
-        int maxAttempts = flags.maxAttempts ?: Integer.MAX_VALUE;
-        int attempt = 0;
-        long startTime = System.currentTimeMillis();
-        try {
-            Throwable lastException = null;
-            Object result;
-            long lastAttemptTime = 0;
-            long expireTime = startTime+duration.toMilliseconds();
-            long sleepTimeBetweenAttempts = minPeriod.toMilliseconds();
-            
-            while (attempt<maxAttempts && lastAttemptTime<expireTime) {
-                try {
-                    attempt++
-                    lastAttemptTime = System.currentTimeMillis()
-                    result = c.call()
-                    log.trace "Attempt {} after {} ms: {}", attempt, System.currentTimeMillis() - startTime, result
-                    if (useGroovyTruth) {
-                        if (result) return;
-                    } else if (result != false) {
-                        if (result instanceof BooleanWithMessage) 
-                            log.warn "Test returned an instance of BooleanWithMessage but useGroovyTruth is not set! " +
-                                     "The result of this probably isn't what you intended."
-                        return;
-                    }
-                    lastException = null
-                } catch(Throwable e) {
-                    lastException = e
-                    log.trace "Attempt {} after {} ms: {}", attempt, System.currentTimeMillis() - startTime, e.message
-                    if (abortOnException) throw e
-                    if (abortOnError && e in Error) throw e
-                }
-                long sleepTime = Math.min(sleepTimeBetweenAttempts, expireTime-System.currentTimeMillis())
-                if (sleepTime > 0) Thread.sleep(sleepTime)
-                sleepTimeBetweenAttempts = Math.min(sleepTimeBetweenAttempts*2, maxPeriod.toMilliseconds())
-            }
-            
-            log.debug "TestUtils.executeUntilSucceedsWithFinallyBlockInternal exceeded max attempts or timeout - {} attempts lasting {} ms", attempt, System.currentTimeMillis()-startTime
-            if (lastException != null)
-                throw lastException
-            fail "invalid result: $result"
-        } catch (Throwable t) {
-			if (logException) log.info("failed execute-until-succeeds, "+attempt+" attempts, "+
-                (System.currentTimeMillis()-startTime)+"ms elapsed "+
-                "(rethrowing): "+t);
-			throw t
-        } finally {
-            finallyBlock.call()
-        }
-    }
-
-    /**
-     * @deprecated since 0.5; use {@link Asserts#succeedsContinually(Map, Runnable)}
-     */
-    @Deprecated
-    public static <T> void assertSucceedsContinually(Map flags=[:], Runnable job) {
-        assertSucceedsContinually(flags, Executors.callable(job));
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#succeedsContinually(Map, Callable)}
-     */
-    @Deprecated
-    public static void assertSucceedsContinually(Map flags=[:], Callable<?> job) {
-        Duration duration = Duration.of(flags.timeout) ?: Duration.ONE_SECOND
-        Duration period = Duration.of(flags.period) ?: Duration.millis(10)
-        long periodMs = period.toMilliseconds()
-        long startTime = System.currentTimeMillis()
-        long expireTime = startTime+duration.toMilliseconds()
-        
-        boolean first = true;
-        while (first || System.currentTimeMillis() <= expireTime) {
-            job.call();
-            if (periodMs > 0) sleep(periodMs);
-            first = false;
-        }
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#continually(Map, Supplier, Predicate)}
-     */
-    @Deprecated
-    // FIXME When calling from java, the generics declared in groovy messing things up!
-    public static void assertContinuallyFromJava(Map flags=[:], Supplier<?> supplier, Predicate<?> predicate) {
-        Asserts.continually(flags, supplier, predicate);
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#continually(Map, Supplier, Predicate)}
-     */
-    @Deprecated
-    public static <T> void assertContinually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate) {
-        Asserts.continually(flags, supplier, predicate, (String)null);
-    }
-
-    /**
-     * @deprecated since 0.5; use {@link Asserts#continually(Map, Supplier, Predicate, String)}
-     */
-    @Deprecated
-    public static <T> void assertContinually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate, String errMsg, long durationMs) {
-        flags.put("duration", Duration.millis(durationMs));
-        Asserts.continually(flags, supplier, predicate, errMsg);
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#continually(Map, Supplier, Predicate, String)}
-     */
-    @Deprecated
-    public static <T> void assertContinually(Map flags=[:], Supplier<? extends T> supplier, Predicate<T> predicate, String errMsg) {
-        Asserts.continually(flags, supplier, predicate, errMsg);
-    }
-    
-    public static class BooleanWithMessage {
-        boolean value; String message;
-        public BooleanWithMessage(boolean value, String message) {
-            this.value = value; this.message = message;
-        }
-        public boolean asBoolean() {
-            return value
-        }
-        public String toString() {
-            return message
-        }
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link brooklyn.util.ResourceUtils}
-     */
-    @Deprecated
-    public static File getResource(String path, ClassLoader loader) {
-        URL resource = loader.getResource(path)
-        if (resource==null)
-            throw new IllegalArgumentException("cannot find required entity '"+path+"'");
-            
-        return new File(resource.path)
-    }
-
-    /**
-     * @deprecated since 0.5; use long and {@link TimeUnit}
-     */
-    @Deprecated
-    public static TimeDuration toTimeDuration(Object duration) {
-        return toTimeDuration(duration, null);
-    }
-            
-    /**
-     * @deprecated since 0.5; use long and {@link TimeUnit}
-     */
-    @Deprecated
-    public static TimeDuration toTimeDuration(Object duration, TimeDuration defaultVal) {
-        if (duration == null) {
-            return defaultVal;
-        } else if (duration instanceof TimeDuration) {
-            return (TimeDuration) duration
-        } else if (duration instanceof Number) {
-            return new TimeDuration(0,0,0,(int)duration)
-            // TODO would be nice to have this, but we need to sort out utils / test-utils dependency
-//        } else if (duration instanceof String) {
-//            return Time.parseTimeString((String)duration);
-        } else {
-            throw new IllegalArgumentException("Cannot convert $duration of type ${duration.class.name} to a TimeDuration")
-        }
-    }
-    
-    public static Throwable unwrapThrowable(Throwable t) {
-        if (t.getCause() == null) {
-            return t;
-        } else if (t instanceof ExecutionException) {
-            return unwrapThrowable(t.getCause())
-        } else if (t instanceof InvokerInvocationException) {
-            return unwrapThrowable(t.getCause())
-        } else {
-            return t
-        }
-    }
-
-    /**
-     * @deprecated since 0.5; use {@link EntityTestUtils#assertAttributeEqualsEventually(Entity, AttributeSensor, Object)}
-     */
-    @Deprecated
-    public static <T> void assertAttributeEventually(Entity entity, AttributeSensor<T> attribute, T expected) {
-        executeUntilSucceeds() {
-            assertEquals(entity.getAttribute(attribute), expected);
-        }
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link EntityTestUtils#assertAttributeEqualsContinually(Entity, AttributeSensor, Object)}
-     */
-    @Deprecated
-    public static <T> void assertAttributeContinually(Entity entity, AttributeSensor<T> attribute, T expected) {
-        assertSucceedsContinually() {
-            assertEquals(entity.getAttribute(attribute), expected);
-        }
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link HttpTestUtils#assertHttpStatusCodeEquals(String, int)}
-     */
-    @Deprecated
-    public static void assertUrlStatusCodeEventually(final String url, final int expected) {
-        executeUntilSucceeds() {
-            assertEquals(urlRespondsStatusCode(url), expected);
-        }
-    }
-
-    /**
-     * @deprecated since 0.5; use {@link Asserts#assertFails(Runnable)}
-     */
-    @Deprecated
-    public static void assertFails(Runnable c) {
-        assertFailsWith(c, (Predicate)null);
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#assertFailsWith(Closure)}
-     */
-    @Deprecated
-    public static void assertFailsWith(Runnable c, Closure exceptionChecker) {
-        assertFailsWith(c, exceptionChecker as Predicate);
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#assertFailsWith(Runnable, Class, Class...)}
-     */
-    @Deprecated
-    public static void assertFailsWith(Runnable c, final Class<? extends Throwable> validException, final Class<? extends Throwable> ...otherValidExceptions) {
-        assertFailsWith(c, { e -> 
-            if (validException.isInstance(e)) return true;
-            if (otherValidExceptions.find {it.isInstance(e)}) return true;
-            List expectedTypes = [validException];
-            expectedTypes.addAll(Arrays.asList(otherValidExceptions));
-            fail("Test threw exception of unexpected type "+e.getClass()+"; expecting "+expectedTypes);             
-        });
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@link Asserts#assertFailsWith(Runnable, Predicate)}
-     */
-    @Deprecated
-    public static void assertFailsWith(Runnable c, Predicate<Throwable> exceptionChecker) {
-        boolean failed = false;
-        try {
-            c.run();
-        } catch (Throwable e) {
-            failed = true;
-            if (exceptionChecker!=null) {
-                if (!exceptionChecker.apply(e)) {
-                    fail("Test threw invalid exception: "+e);
-                }
-            }
-            log.debug("Test for exception successful ("+e+")");
-        }
-        if (!failed) fail("Test code should have thrown exception but did not");
-    }
-
-    public static void assertSetsEqual(Collection c1, Collection c2) {
-        Set s = new LinkedHashSet();
-        s.addAll(c1); s.removeAll(c2);
-        if (!s.isEmpty()) fail("First argument contains additional contents: "+s);
-        s.clear(); s.addAll(c2); s.removeAll(c1);
-        if (!s.isEmpty()) fail("Second argument contains additional contents: "+s);
-    }
-    
-    /**
-     * @deprecated since 0.5; use {@code assertFalse(Iterables.isEmpty(c))}
-     */
-    @Deprecated
-    public static <T> void assertNonEmpty(Iterable<T> c) {
-        if (c.iterator().hasNext()) return;
-        fail("Expected non-empty set");
-    }
-
-    /**
-     * @deprecated since 0.5; use {@code assertEquals(Iterables.size(c), expectedSize)}
-     */
-    @Deprecated
-    public static <T> void assertSize(Iterable<T> c, int expectedSize) {
-        int actualSize = Iterables.size(c);
-        if (actualSize==expectedSize) return;
-        fail("Expected collection of size "+expectedSize+" but got size "+actualSize+": "+c);
-    }
-
-    /**
-     * @deprecated since 0.7.0; use {@link Asserts#assertThat(Object, Predicate)} with {@link StringFunctions})}
-     */
-    @Deprecated
-    public static void assertStringContainsLiteral(String string, String substring) {
-        if (string==null) fail("String is null");
-        if (substring==null) fail("Substring is null");
-        if (string.indexOf(substring)>=0) return;
-        fail("String '"+string+"' does not contain expected pattern '"+substring+"'");
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/brooklyn/test/TrustingSslSocketFactory.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/brooklyn/test/TrustingSslSocketFactory.java b/usage/test-support/src/main/java/brooklyn/test/TrustingSslSocketFactory.java
deleted file mode 100644
index 3cbd94a..0000000
--- a/usage/test-support/src/main/java/brooklyn/test/TrustingSslSocketFactory.java
+++ /dev/null
@@ -1,134 +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 brooklyn.test;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.URLConnection;
-import java.net.UnknownHostException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Throwables;
-
-// FIXME copied from brooklyn-core because core not visible here
-
-public class TrustingSslSocketFactory extends SSLSocketFactory {
-    
-    private static final Logger logger = LoggerFactory.getLogger(TrustingSslSocketFactory.class);
-
-    private static TrustingSslSocketFactory INSTANCE;
-    public synchronized static TrustingSslSocketFactory getInstance() {
-        if (INSTANCE==null) INSTANCE = new TrustingSslSocketFactory();
-        return INSTANCE;
-    }
-    
-    private static SSLContext sslContext; 
-    static {
-        try {
-            sslContext = SSLContext.getInstance("TLS");
-        } catch (Exception e) {
-            logger.error("Unable to set up SSLContext with TLS. Https activity will likely fail.", e);
-        }
-    }
-
-    /** configures a connection to accept all certificates, if it is for https */
-    public static <T extends URLConnection> T configure(T connection) {
-        if (connection instanceof HttpsURLConnection) {
-            ((HttpsURLConnection)connection).setSSLSocketFactory(getInstance());
-        }
-        return connection;
-    }
-    
-    /** trusts all SSL certificates */
-    public static final TrustManager TRUST_ALL = new X509TrustManager() {
-        public X509Certificate[] getAcceptedIssuers() {
-            return new X509Certificate[0];
-        }
-        @Override
-        public void checkClientTrusted(X509Certificate[] chain, String authType)
-                throws java.security.cert.CertificateException {
-            
-        }
-        @Override
-        public void checkServerTrusted(X509Certificate[] chain, String authType)
-                throws java.security.cert.CertificateException {
-        }
-    };
-
-    // no reason this can't be public, but no reason it should be necessary;
-    // just use getInstance to get the shared INSTANCE
-    protected TrustingSslSocketFactory() {
-        super();
-        try {
-            sslContext.init(null, new TrustManager[] { TRUST_ALL }, null);
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    @Override
-    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
-        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
-    }
-
-    @Override
-    public Socket createSocket() throws IOException {
-        return sslContext.getSocketFactory().createSocket();
-    }
-
-    @Override
-    public String[] getDefaultCipherSuites() {
-        return sslContext.getSocketFactory().getDefaultCipherSuites();
-    }
-
-    @Override
-    public String[] getSupportedCipherSuites() {
-        return sslContext.getSocketFactory().getSupportedCipherSuites();
-    }
-
-    @Override
-    public Socket createSocket(String arg0, int arg1) throws IOException, UnknownHostException {
-        return sslContext.getSocketFactory().createSocket(arg0, arg1);
-    }
-
-    @Override
-    public Socket createSocket(InetAddress arg0, int arg1) throws IOException {
-        return sslContext.getSocketFactory().createSocket(arg0, arg1);
-    }
-
-    @Override
-    public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3) throws IOException, UnknownHostException {
-        return sslContext.getSocketFactory().createSocket(arg0, arg1, arg2, arg3);
-    }
-
-    @Override
-    public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3) throws IOException {
-        return sslContext.getSocketFactory().createSocket(arg0, arg1, arg2, arg3);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/brooklyn/test/WebAppMonitor.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/brooklyn/test/WebAppMonitor.java b/usage/test-support/src/main/java/brooklyn/test/WebAppMonitor.java
deleted file mode 100644
index 2d0a457..0000000
--- a/usage/test-support/src/main/java/brooklyn/test/WebAppMonitor.java
+++ /dev/null
@@ -1,213 +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 brooklyn.test;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.slf4j.Logger;
-import org.testng.Assert;
-
-import brooklyn.util.collections.MutableMap;
-import brooklyn.util.time.Duration;
-
-/**
- * Repeatedly polls a given URL, to check if it is always available.
- * 
- * @author Alex, Aled
- */
-public class WebAppMonitor implements Runnable {
-    final AtomicBoolean shouldBeActive = new AtomicBoolean(true);
-    final AtomicBoolean isActive = new AtomicBoolean(false);
-    final AtomicInteger successes = new AtomicInteger(0);
-    final AtomicInteger failures = new AtomicInteger(0);
-    final AtomicLong lastTime = new AtomicLong(-1);
-    final AtomicReference<Object> lastStatus = new AtomicReference<Object>(null);
-    final AtomicReference<Object> lastFailure = new AtomicReference<Object>(null);
-    Logger log;
-    Object problem = null; 
-    String url;
-    long delayMillis = 500;
-    int expectedResponseCode = 200;
-    
-    public WebAppMonitor(String url) {
-        this.url = url;
-    }
-    public WebAppMonitor() {
-    }
-    public WebAppMonitor logFailures(Logger log) {
-        this.log = log;
-        return this;
-    }
-    public WebAppMonitor delayMillis(long val) {
-        this.delayMillis = val;
-        return this;
-    }
-    public WebAppMonitor expectedResponseCode(int val) {
-        this.expectedResponseCode = val;
-        return this;
-    }
-    public WebAppMonitor url(String val) {
-        this.url = val;
-        return this;
-    }
-    
-    public void run() {
-        synchronized (isActive) {
-            if (isActive.getAndSet(true))
-                throw new IllegalStateException("already running");
-        }
-        while (shouldBeActive.get()) {
-            long startTime = System.currentTimeMillis();
-            try {
-                if (preAttempt()) {
-                    int code = HttpTestUtils.getHttpStatusCode(url);
-                    lastTime.set(System.currentTimeMillis() - startTime);
-                    lastStatus.set(code);
-                    if (isResponseOkay(code)) {
-                        successes.incrementAndGet();
-                    } else {
-                        lastFailure.set(code);
-                        failures.incrementAndGet();
-                        onFailure("return code "+code);
-                    }
-                }
-            } catch (Exception e) {
-                lastTime.set(System.currentTimeMillis()-startTime);
-                lastStatus.set(e);
-                lastFailure.set(e);
-                failures.incrementAndGet();
-                onFailure(e);
-            }
-            try {
-                if (delayMillis > 0) {
-                    Thread.sleep(delayMillis);
-                }
-            } catch (InterruptedException e) {
-                onFailure(e);
-                shouldBeActive.set(false);
-            }
-        }
-        synchronized (isActive) {
-            if (!isActive.getAndSet(false))
-                throw new IllegalStateException("shouldn't be possible!");
-            isActive.notifyAll();
-        }
-    }
-    
-    public boolean isResponseOkay(Object code) {
-        return code!=null && new Integer(expectedResponseCode).equals(code);
-    }
-    
-    public void setDelayMillis(long delayMillis) {
-        this.delayMillis = delayMillis;
-    }
-    public long getDelayMillis() {
-        return delayMillis;
-    }
-    public void terminate() throws InterruptedException {
-        shouldBeActive.set(false);
-        synchronized (isActive) {
-            while (isActive.get()) isActive.wait();
-        }
-    }
-    public int getFailures() {
-        return failures.get();
-    }
-    public int getSuccesses() {
-        return successes.get();
-    }
-    public void setUrl(String url) {
-        this.url = url;
-    }
-    public String getUrl() {
-        return url;
-    }
-    public Object getProblem() {
-        return problem;
-    }
-    public int getAttempts() {
-        return getFailures()+getSuccesses();
-    }
-    public boolean getLastWasFailed() {
-        return isResponseOkay(getLastStatus());
-    }
-    public Object getLastStatus() {
-        return lastStatus.get();
-    }
-    public long getLastTime() {
-        return lastTime.get();
-    }
-    /** result code (int) or exception */
-    public Object getLastFailure() {
-        return lastFailure.get();
-    }
-    
-    public void onFailure(Object problem) {
-        if (log != null) {
-            log.warn("Detected failure in monitor accessing "+getUrl()+": "+problem);
-        }
-        this.problem = problem;
-    }
-    
-    /** return false to skip a run */
-    public boolean preAttempt() {
-        return true;
-    }
-    
-    public WebAppMonitor assertNoFailures(String message) {
-        return assertSuccessFraction(message, 1.0);
-    }
-    public WebAppMonitor assertAttemptsMade(int minAttempts, String message) {
-        if (getAttempts()<minAttempts) {
-            Assert.fail(message+" -- webapp access failures! " +
-                    "(0 attempts made; probably blocked on server)");            
-        }
-        return this;
-    }
-    public WebAppMonitor waitForAtLeastOneAttempt() {
-        return waitForAtLeastOneAttempt(Asserts.DEFAULT_TIMEOUT);
-    }
-    public WebAppMonitor waitForAtLeastOneAttempt(Duration timeout) {
-        Asserts.succeedsEventually(MutableMap.of("timeout", timeout), new Runnable() {
-            @Override public void run() {
-                Assert.assertTrue(getAttempts() >= 1);
-            }});
-        return this;
-    }
-    public WebAppMonitor assertSuccessFraction(String message, double fraction) {
-        int failures = getFailures();
-        int attempts = getAttempts();
-        if ((failures > (1-fraction) * attempts + 0.0001) || attempts <= 0) {
-            Assert.fail(message+" -- webapp access failures! " +
-                    "("+failures+" failed of "+attempts+" monitoring attempts) against "+getUrl()+"; " +
-                    "last was "+getLastStatus()+" taking "+getLastTime()+"ms" +
-                    (getLastFailure() != null ? "; last failure was "+getLastFailure() : ""));
-        }
-        return this;
-    }
-    public WebAppMonitor resetCounts() {
-        failures.set(0);
-        successes.set(0);
-        return this;
-    }
-    
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java b/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java
new file mode 100644
index 0000000..3bceb78
--- /dev/null
+++ b/usage/test-support/src/main/java/org/apache/brooklyn/test/EntityTestUtils.java
@@ -0,0 +1,181 @@
+/*
+ * 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.test;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
+import brooklyn.config.ConfigKey;
+import brooklyn.entity.Entity;
+import brooklyn.entity.Group;
+import brooklyn.entity.basic.EntityLocal;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.SensorEvent;
+import brooklyn.event.SensorEventListener;
+import brooklyn.management.SubscriptionHandle;
+import brooklyn.test.Asserts;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+public class EntityTestUtils {
+
+    // TODO would be nice to have this... perhaps moving this class, or perhaps this whole project, to core/src/test ?
+//    public static LocalManagementContext newManagementContext() { return new LocalManagementContextForTests(); }
+    
+    // TODO Delete methods from TestUtils, to just have them here (or switch so TestUtils delegates here,
+    // and deprecate methods in TestUtils until deleted).
+    
+    public static <T> void assertAttributeEquals(Entity entity, AttributeSensor<T> attribute, T expected) {
+        assertEquals(entity.getAttribute(attribute), expected, "entity="+entity+"; attribute="+attribute);
+    }
+    
+    public static <T> void assertConfigEquals(Entity entity, ConfigKey<T> configKey, T expected) {
+        assertEquals(entity.getConfig(configKey), expected, "entity="+entity+"; configKey="+configKey);
+    }
+    
+    public static <T> void assertAttributeEqualsEventually(final Entity entity, final AttributeSensor<T> attribute, final T expected) {
+        assertAttributeEqualsEventually(Maps.newLinkedHashMap(), entity, attribute, expected);
+    }
+
+    public static <T> void assertAttributeEqualsEventually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final T expected) {
+        // Not using assertAttributeEventually(predicate) so get nicer error message
+        Asserts.succeedsEventually((Map)flags, new Runnable() {
+            @Override public void run() {
+                assertAttributeEquals(entity, attribute, expected);
+            }});
+    }
+
+    public static <T> T assertAttributeEventuallyNonNull(final Entity entity, final AttributeSensor<T> attribute) {
+        return assertAttributeEventuallyNonNull(Maps.newLinkedHashMap(), entity, attribute);
+    }
+
+    public static <T> T assertAttributeEventuallyNonNull(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute) {
+        return assertAttributeEventually(flags, entity, attribute, Predicates.notNull());
+    }
+
+    public static <T> T assertAttributeEventually(final Entity entity, final AttributeSensor<T> attribute, Predicate<? super T> predicate) {
+        return assertAttributeEventually(ImmutableMap.of(), entity, attribute, predicate);
+    }
+    
+    public static <T> T assertAttributeEventually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final Predicate<? super T> predicate) {
+        final AtomicReference<T> result = new AtomicReference<T>();
+        Asserts.succeedsEventually((Map)flags, new Runnable() {
+            @Override public void run() {
+                T val = entity.getAttribute(attribute);
+                assertTrue(predicate.apply(val), "val="+val);
+                result.set(val);
+            }});
+        return result.get();
+    }
+
+    public static <T> T assertAttribute(final Entity entity, final AttributeSensor<T> attribute, final Predicate<? super T> predicate) {
+        T val = entity.getAttribute(attribute);
+        assertTrue(predicate.apply(val), "val="+val);
+        return val;
+    }
+
+    public static <T extends Entity> void assertPredicateEventuallyTrue(final T entity, final Predicate<? super T> predicate) {
+        assertPredicateEventuallyTrue(Maps.newLinkedHashMap(), entity, predicate);
+    }
+
+    public static <T extends Entity> void assertPredicateEventuallyTrue(Map<?,?> flags, final T entity, final Predicate<? super T> predicate) {
+        Asserts.succeedsEventually((Map)flags, new Runnable() {
+                @Override public void run() {
+                    assertTrue(predicate.apply(entity));
+                }});
+    }
+
+    public static <T> void assertAttributeEqualsContinually(final Entity entity, final AttributeSensor<T> attribute, final T expected) {
+        assertAttributeEqualsContinually(Maps.newLinkedHashMap(), entity, attribute, expected);
+    }
+    
+    public static <T> void assertAttributeEqualsContinually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final T expected) {
+        Asserts.succeedsContinually(flags, new Runnable() {
+                @Override public void run() {
+                    assertAttributeEquals(entity, attribute, expected);
+                }});
+    }
+
+    public static void assertGroupSizeEqualsEventually(final Group group, int expected) {
+        assertGroupSizeEqualsEventually(ImmutableMap.of(), group, expected);
+    }
+    
+    public static void assertGroupSizeEqualsEventually(Map<?,?> flags, final Group group, final int expected) {
+        Asserts.succeedsEventually((Map)flags, new Runnable() {
+            @Override public void run() {
+                Collection<Entity> members = group.getMembers();
+                assertEquals(members.size(), expected, "members="+members);
+            }});
+    }
+
+    /** checks that the entity's value for this attribute changes, by registering a subscription and checking the value */
+    public static void assertAttributeChangesEventually(final Entity entity, final AttributeSensor<?> attribute) {
+        final Object origValue = entity.getAttribute(attribute);
+        final AtomicBoolean changed = new AtomicBoolean();
+        SubscriptionHandle handle = ((EntityLocal)entity).subscribe(entity, attribute, new SensorEventListener<Object>() {
+            @Override public void onEvent(SensorEvent<Object> event) {
+                if (!Objects.equal(origValue, event.getValue())) {
+                    changed.set(true);
+                }
+            }});
+        try {
+            Asserts.succeedsEventually(new Runnable() {
+                @Override public void run() {
+                    assertTrue(changed.get(), entity+" -> "+attribute+" not changed");
+                }});
+        } finally {
+            ((EntityLocal)entity).unsubscribe(entity, handle);
+        }
+    }
+    
+    /** alternate version of {@link #assertAttributeChangesEventually(Entity, AttributeSensor)} not using subscriptions and 
+     * with simpler code, for comparison */
+    @Beta
+    public static <T> void assertAttributeChangesEventually2(final Entity entity, final AttributeSensor<T> attribute) {
+        assertAttributeEventually(entity, attribute, 
+            Predicates.not(Predicates.equalTo(entity.getAttribute(attribute))));
+    }
+
+    @Beta
+    public static <T> void assertAttributeNever(final Entity entity, final AttributeSensor<T> attribute, T... disallowed) {
+        final Set<T> reject = Sets.newHashSet(disallowed);
+        Asserts.succeedsContinually(new Runnable() {
+            @Override
+            public void run() {
+                T val = entity.getAttribute(attribute);
+                assertFalse(reject.contains(val),
+                        "Attribute " + attribute + " on " + entity + " has disallowed value " + val);
+            }
+        });
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/org/apache/brooklyn/test/HttpTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/org/apache/brooklyn/test/HttpTestUtils.java b/usage/test-support/src/main/java/org/apache/brooklyn/test/HttpTestUtils.java
new file mode 100644
index 0000000..455bc7e
--- /dev/null
+++ b/usage/test-support/src/main/java/org/apache/brooklyn/test/HttpTestUtils.java
@@ -0,0 +1,392 @@
+/*
+ * 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.test;
+
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSession;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+
+import brooklyn.test.Asserts;
+import brooklyn.util.collections.MutableMap;
+import brooklyn.util.crypto.SslTrustUtils;
+import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.stream.Streams;
+import brooklyn.util.time.Time;
+
+import com.google.common.base.Throwables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+
+/**
+ * Utility methods to aid testing HTTP.
+ * 
+ * @author aled
+ */
+public class HttpTestUtils {
+
+    // TODO Delete methods from TestUtils, to just have them here (or switch so TestUtils delegates here,
+    // and deprecate methods in TestUtils until deleted).
+
+    private static final Logger LOG = LoggerFactory.getLogger(HttpTestUtils.class);
+
+    static final ExecutorService executor = Executors.newCachedThreadPool();
+    
+    /**
+     * Connects to the given url and returns the connection.
+     * Caller should {@code connection.getInputStream().close()} the result of this
+     * (especially if they are making heavy use of this method).
+     */
+    public static URLConnection connectToUrl(String u) throws Exception {
+        final URL url = new URL(u);
+        final AtomicReference<Exception> exception = new AtomicReference<Exception>();
+        
+        // sometimes openConnection hangs, so run in background
+        Future<URLConnection> f = executor.submit(new Callable<URLConnection>() {
+            public URLConnection call() {
+                try {
+                    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+                        @Override public boolean verify(String s, SSLSession sslSession) {
+                            return true;
+                        }
+                    });
+                    URLConnection connection = url.openConnection();
+                    TrustingSslSocketFactory.configure(connection);
+                    connection.connect();
+    
+                    connection.getContentLength(); // Make sure the connection is made.
+                    return connection;
+                } catch (Exception e) {
+                    exception.set(e);
+                    LOG.debug("Error connecting to url "+url+" (propagating): "+e, e);
+                }
+                return null;
+            }
+        });
+        try {
+            URLConnection result = null;
+            try {
+                result = f.get(60, TimeUnit.SECONDS);
+            } catch (InterruptedException e) {
+                throw e;
+            } catch (Exception e) {
+                LOG.debug("Error connecting to url "+url+", probably timed out (rethrowing): "+e);
+                throw new IllegalStateException("Connect to URL not complete within 60 seconds, for url "+url+": "+e);
+            }
+            if (exception.get() != null) {
+                LOG.debug("Error connecting to url "+url+", thread caller of "+exception, new Throwable("source of rethrown error "+exception));
+                throw exception.get();
+            } else {
+                return result;
+            }
+        } finally {
+            f.cancel(true);
+        }
+    }
+
+    public static void assertHealthyStatusCode(int code) {
+        if (code>=200 && code<=299) return;
+        Assert.fail("Wrong status code: "+code);
+    }
+    
+    public static int getHttpStatusCode(String url) throws Exception {
+        URLConnection connection = connectToUrl(url);
+        long startTime = System.currentTimeMillis();
+        int status = ((HttpURLConnection) connection).getResponseCode();
+        
+        // read fully if possible, then close everything, trying to prevent cached threads at server
+        consumeAndCloseQuietly((HttpURLConnection) connection);
+        
+        if (LOG.isDebugEnabled())
+            LOG.debug("connection to {} ({}ms) gives {}", new Object[] { url, (System.currentTimeMillis()-startTime), status });
+        return status;
+    }
+
+    /**
+     * Asserts that gets back any "valid" response - i.e. not an exception. This could be an unauthorized,
+     * a redirect, a 404, or anything else that implies there is web-server listening on that port.
+     */
+    public static void assertUrlReachable(String url) {
+        try {
+            getHttpStatusCode(url);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new RuntimeException("Interrupted for "+url+" (in assertion that is reachable)", e);
+        } catch (Exception e) {
+            throw new IllegalStateException("Server at "+url+" failed to respond (in assertion that is reachable): "+e, e);
+        }
+    }
+
+    public static void assertUrlUnreachable(String url) {
+        try {
+            int statusCode = getHttpStatusCode(url);
+            fail("Expected url "+url+" unreachable, but got status code "+statusCode);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new RuntimeException("Interrupted for "+url+" (in assertion that unreachable)", e);
+        } catch (Exception e) {
+            IOException cause = Exceptions.getFirstThrowableOfType(e, IOException.class);
+            if (cause != null) {
+                // success; clean shutdown transitioning from 400 to error
+            } else {
+                Throwables.propagate(e);
+            }                        
+        }
+    }
+
+    public static void assertUrlUnreachableEventually(final String url) {
+        assertUrlUnreachableEventually(Maps.newLinkedHashMap(), url);
+    }
+    
+    public static void assertUrlUnreachableEventually(Map flags, final String url) {
+        Asserts.succeedsEventually(flags, new Runnable() {
+            public void run() {
+                assertUrlUnreachable(url);
+            }
+         });
+    }
+
+    public static void assertHttpStatusCodeEquals(String url, int... acceptableReturnCodes) {
+        List<Integer> acceptableCodes = Lists.newArrayList();
+        for (int code : acceptableReturnCodes) {
+            acceptableCodes.add((Integer)code);
+        }
+        try {
+            int actualCode = getHttpStatusCode(url);
+            assertTrue(acceptableCodes.contains(actualCode), "code="+actualCode+"; expected="+acceptableCodes+"; url="+url);
+            
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new RuntimeException("Interrupted for "+url+" (in assertion that result code is "+acceptableCodes+")", e);
+        } catch (Exception e) {
+            throw new IllegalStateException("Server at "+url+" failed to respond (in assertion that result code is "+acceptableCodes+"): "+e, e);
+        }
+    }
+
+    public static void assertHttpStatusCodeEventuallyEquals(final String url, final int expectedCode) {
+        assertHttpStatusCodeEventuallyEquals(Maps.newLinkedHashMap(),  url, expectedCode);
+    }
+
+    public static void assertHttpStatusCodeEventuallyEquals(Map flags, final String url, final int expectedCode) {
+        Asserts.succeedsEventually(flags, new Runnable() {
+            public void run() {
+                assertHttpStatusCodeEquals(url, expectedCode);
+            }
+         });
+    }
+
+    public static void assertContentContainsText(final String url, final String phrase, final String ...additionalPhrases) {
+        try {
+            String contents = getContent(url);
+            Assert.assertTrue(contents != null && contents.length() > 0);
+            for (String text: Lists.asList(phrase, additionalPhrases)) {
+                if (!contents.contains(text)) {
+                    LOG.warn("CONTENTS OF URL "+url+" MISSING TEXT: "+text+"\n"+contents);
+                    Assert.fail("URL "+url+" does not contain text: "+text);
+                }
+            }
+        } catch (Exception e) {
+            throw Throwables.propagate(e);
+        }
+    }
+
+    public static void assertContentNotContainsText(final String url, final String phrase, final String ...additionalPhrases) {
+        try {
+            String contents = getContent(url);
+            Assert.assertTrue(contents != null);
+            for (String text: Lists.asList(phrase, additionalPhrases)) {
+                if (contents.contains(text)) {
+                    LOG.warn("CONTENTS OF URL "+url+" HAS TEXT: "+text+"\n"+contents);
+                    Assert.fail("URL "+url+" contain text: "+text);
+                }
+            }
+        } catch (Exception e) {
+            throw Throwables.propagate(e);
+        }
+    }
+
+    public static void assertErrorContentContainsText(final String url, final String phrase, final String ...additionalPhrases) {
+        try {
+            String contents = getErrorContent(url);
+            Assert.assertTrue(contents != null && contents.length() > 0);
+            for (String text: Lists.asList(phrase, additionalPhrases)) {
+                if (!contents.contains(text)) {
+                    LOG.warn("CONTENTS OF URL "+url+" MISSING TEXT: "+text+"\n"+contents);
+                    Assert.fail("URL "+url+" does not contain text: "+text);
+                }
+            }
+        } catch (Exception e) {
+            throw Throwables.propagate(e);
+        }
+    }
+
+
+    public static void assertErrorContentNotContainsText(final String url, final String phrase, final String ...additionalPhrases) {
+        try {
+            String err = getErrorContent(url);
+            Assert.assertTrue(err != null);
+            for (String text: Lists.asList(phrase, additionalPhrases)) {
+                if (err.contains(text)) {
+                    LOG.warn("CONTENTS OF URL "+url+" HAS TEXT: "+text+"\n"+err);
+                    Assert.fail("URL "+url+" contain text: "+text);
+                }
+            }
+        } catch (Exception e) {
+            throw Throwables.propagate(e);
+        }
+    }
+    
+    public static void assertContentEventuallyContainsText(final String url, final String phrase, final String ...additionalPhrases) {
+        assertContentEventuallyContainsText(MutableMap.of(), url, phrase, additionalPhrases);
+    }
+    
+    public static void assertContentEventuallyContainsText(Map flags, final String url, final String phrase, final String ...additionalPhrases) {
+        Asserts.succeedsEventually(flags, new Runnable() {
+            public void run() {
+                assertContentContainsText(url, phrase, additionalPhrases);
+            }
+         });
+    }
+    
+    public static void assertContentMatches(String url, String regex) {
+        String contents = getContent(url);
+        Assert.assertNotNull(contents);
+        Assert.assertTrue(contents.matches(regex), "Contents does not match expected regex ("+regex+"): "+contents);
+    }
+
+    public static void assertContentEventuallyMatches(final String url, final String regex) {
+        Asserts.succeedsEventually(new Runnable() {
+            @Override
+            public void run() {
+                assertContentMatches(url, regex);
+            }
+        });
+    }
+    
+    public static String getErrorContent(String url) {
+        try {
+            HttpURLConnection connection = (HttpURLConnection) connectToUrl(url);
+            long startTime = System.currentTimeMillis();
+            
+            String err;
+            int status;
+            try {
+                InputStream errStream = connection.getErrorStream();
+                err = Streams.readFullyString(errStream);
+                status = connection.getResponseCode();
+            } finally {
+                closeQuietly(connection);
+            }
+            
+            if (LOG.isDebugEnabled())
+                LOG.debug("read of err {} ({}ms) complete; http code {}", new Object[] { url, Time.makeTimeStringRounded(System.currentTimeMillis()-startTime), status});
+            return err;
+
+        } catch (Exception e) {
+            throw Exceptions.propagate(e);
+        }
+    }
+    
+    public static String getContent(String url) {
+        try {
+            return Streams.readFullyString(SslTrustUtils.trustAll(new URL(url).openConnection()).getInputStream());
+        } catch (Exception e) {
+            throw Throwables.propagate(e);
+        }
+    }
+
+    /**
+     * Schedules (with the given executor) a poller that repeatedly accesses the given url, to confirm it always gives
+     * back the expected status code.
+     * 
+     * Expected usage is to query the future, such as:
+     * 
+     * <pre>
+     * {@code
+     * Future<?> future = assertAsyncHttpStatusCodeContinuallyEquals(executor, url, 200);
+     * // do other stuff...
+     * if (future.isDone()) future.get(); // get exception if it's failed
+     * }
+     * </pre>
+     * 
+     * For stopping it, you can either do future.cancel(true), or you can just do executor.shutdownNow().
+     * 
+     * TODO Look at difference between this and WebAppMonitor, to decide if this should be kept.
+     */
+    public static ListenableFuture<?> assertAsyncHttpStatusCodeContinuallyEquals(ListeningExecutorService executor, final String url, final int expectedStatusCode) {
+        return executor.submit(new Runnable() {
+            @Override public void run() {
+                // TODO Need to drop logging; remove sleep when that's done.
+                while (!Thread.currentThread().isInterrupted()) {
+                    assertHttpStatusCodeEquals(url, expectedStatusCode);
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        return; // graceful return
+                    }
+                }
+            }
+        });
+    }
+    
+    /**
+     * Consumes the input stream entirely and then cleanly closes the connection.
+     * Ignores all exceptions completely, not even logging them!
+     * 
+     * Consuming the stream fully is useful for preventing idle TCP connections. 
+     * See {@linkplain http://docs.oracle.com/javase/8/docs/technotes/guides/net/http-keepalive.html}.
+     */
+    public static void consumeAndCloseQuietly(HttpURLConnection connection) {
+        try { Streams.readFully(connection.getInputStream()); } catch (Exception e) {}
+        closeQuietly(connection);
+    }
+    
+    /**
+     * Closes all streams of the connection, and disconnects it. Ignores all exceptions completely,
+     * not even logging them!
+     */
+    public static void closeQuietly(HttpURLConnection connection) {
+        try { connection.disconnect(); } catch (Exception e) {}
+        try { connection.getInputStream().close(); } catch (Exception e) {}
+        try { connection.getOutputStream().close(); } catch (Exception e) {}
+        try { connection.getErrorStream().close(); } catch (Exception e) {}
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/org/apache/brooklyn/test/NetworkingTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/org/apache/brooklyn/test/NetworkingTestUtils.java b/usage/test-support/src/main/java/org/apache/brooklyn/test/NetworkingTestUtils.java
new file mode 100644
index 0000000..9811776
--- /dev/null
+++ b/usage/test-support/src/main/java/org/apache/brooklyn/test/NetworkingTestUtils.java
@@ -0,0 +1,69 @@
+/*
+ * 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.test;
+
+import static org.testng.Assert.assertTrue;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.test.Asserts;
+import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.net.Networking;
+import brooklyn.util.time.Duration;
+
+import com.google.common.collect.ImmutableMap;
+
+public class NetworkingTestUtils {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NetworkingTestUtils.class);
+
+    public static void assertPortsAvailableEventually(final Map<String, Integer> ports) {
+        // If we get into a TCP TIMED-WAIT state, it could take 4 minutes for the port to come available.
+        // Could that be causing our integration tests to fail sometimes when run in the suite?!
+        // Let's wait for the required ports in setup, rather than running+failing the test.
+        assertPortsAvailableEventually(ports, Duration.minutes(4));
+    }
+    
+    public static void assertPortsAvailableEventually(final Map<String, Integer> ports, final Duration timeout) {
+        Asserts.succeedsEventually(ImmutableMap.of("timeout", Duration.minutes(4)), new Runnable() {
+            private boolean logged = false;
+            public void run() {
+                try {
+                    assertPortsAvailable(ports);
+                } catch (Throwable t) {
+                    if (!logged) {
+                        LOG.warn("Port(s) not available; waiting for up to "+timeout+" ("+Exceptions.getFirstInteresting(t)+")");
+                        logged = true;
+                    }
+                    throw Exceptions.propagate(t);
+                }
+            }});
+        LOG.debug("Ports are available: "+ports);
+    }
+    
+    public static void assertPortsAvailable(final Map<String, Integer> ports) {
+        for (Map.Entry<String, Integer> entry : ports.entrySet()) {
+            String errmsg = "port "+entry.getValue()+" not available for "+entry.getKey();
+            assertTrue(Networking.isPortAvailable(entry.getValue()), errmsg);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/usage/test-support/src/main/java/org/apache/brooklyn/test/PerformanceTestUtils.java
----------------------------------------------------------------------
diff --git a/usage/test-support/src/main/java/org/apache/brooklyn/test/PerformanceTestUtils.java b/usage/test-support/src/main/java/org/apache/brooklyn/test/PerformanceTestUtils.java
new file mode 100644
index 0000000..2b765cd
--- /dev/null
+++ b/usage/test-support/src/main/java/org/apache/brooklyn/test/PerformanceTestUtils.java
@@ -0,0 +1,99 @@
+/*
+ * 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.test;
+
+import java.lang.management.ManagementFactory;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.util.time.Duration;
+import brooklyn.util.time.Time;
+
+import com.google.common.base.Stopwatch;
+
+public class PerformanceTestUtils {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PerformanceTestUtils.class);
+
+    private static boolean hasLoggedProcessCpuTimeUnavailable;
+    
+    public static long getProcessCpuTime() {
+        try {
+            MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
+            ObjectName osMBeanName = ObjectName.getInstance(ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME);
+            return (Long) mbeanServer.getAttribute(osMBeanName, "ProcessCpuTime");
+        } catch (Exception e) {
+            if (!hasLoggedProcessCpuTimeUnavailable) {
+                hasLoggedProcessCpuTimeUnavailable = true;
+                LOG.warn("ProcessCPuTime not available in local JVM MXBean "+ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME+" (only available in sun JVM?)");
+            }
+            return -1;
+        }
+    }
+
+    /**
+     * Creates a background thread that will log.info the CPU fraction usage repeatedly, sampling at the given period.
+     * Callers <em>must</em> cancel the returned future, e.g. {@code future.cancel(true)}, otherwise it will keep
+     * logging until the JVM exits.
+     */
+    public static Future<?> sampleProcessCpuTime(final Duration period, final String loggingContext) {
+        final ExecutorService executor = Executors.newSingleThreadExecutor(new ThreadFactory() {
+                @Override public Thread newThread(Runnable r) {
+                    Thread thread = new Thread(r, "brooklyn-sampleProcessCpuTime-"+loggingContext);
+                    thread.setDaemon(true); // let the JVM exit
+                    return thread;
+                }});
+        Future<?> future = executor.submit(new Runnable() {
+                @Override public void run() {
+                    try {
+                        long prevCpuTime = getProcessCpuTime();
+                        if (prevCpuTime == -1) {
+                            LOG.warn("ProcessCPuTime not available; cannot sample; aborting");
+                            return;
+                        }
+                        while (true) {
+                            Stopwatch stopwatch = Stopwatch.createStarted();
+                            Thread.sleep(period.toMilliseconds());
+                            long currentCpuTime = getProcessCpuTime();
+                            
+                            long elapsedTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
+                            double fractionCpu = (elapsedTime > 0) ? ((double)currentCpuTime-prevCpuTime) / TimeUnit.MILLISECONDS.toNanos(elapsedTime) : -1;
+                            prevCpuTime = currentCpuTime;
+                            
+                            LOG.info("CPU fraction over last {} was {} ({})", new Object[] {
+                                    Time.makeTimeStringRounded(elapsedTime), fractionCpu, loggingContext});
+                        }
+                    } catch (InterruptedException e) {
+                        return; // graceful termination
+                    } finally {
+                        executor.shutdownNow();
+                    }
+                }});
+        return future;
+    }
+}


[4/6] incubator-brooklyn git commit: [BROOKLYN-162] Update package name to a.o.b in usage/test-support

Posted by ha...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java
index c6487e5..83be0e5 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/kafka/KafkaIntegrationTest.java
@@ -24,6 +24,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -37,7 +38,6 @@ import brooklyn.location.Location;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.time.Duration;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidEc2LiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidEc2LiveTest.java
index 2f81169..45a3c60 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidEc2LiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidEc2LiveTest.java
@@ -18,12 +18,12 @@
  */
 package brooklyn.entity.messaging.qpid;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.java
index ddce412..87a0460 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/qpid/QpidIntegrationTest.java
@@ -33,6 +33,8 @@ import javax.jms.Queue;
 import javax.jms.Session;
 import javax.jms.TextMessage;
 
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.qpid.client.AMQConnectionFactory;
 import org.apache.qpid.configuration.ClientProperties;
 import org.slf4j.Logger;
@@ -49,8 +51,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitEc2LiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitEc2LiveTest.java
index 4f37448..9929288 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitEc2LiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitEc2LiveTest.java
@@ -20,6 +20,7 @@ package brooklyn.entity.messaging.rabbit;
 
 import static org.testng.Assert.assertEquals;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.SkipException;
@@ -30,7 +31,6 @@ import brooklyn.entity.messaging.MessageBroker;
 import brooklyn.entity.messaging.amqp.AmqpExchange;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.java
index 0d5c2d4..a54b89d 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/rabbit/RabbitIntegrationTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertFalse;
 
 import java.io.IOException;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -37,7 +38,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.base.Charsets;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormAbstractCloudLiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormAbstractCloudLiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormAbstractCloudLiveTest.java
index e8cbcd6..9c2d67f 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormAbstractCloudLiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormAbstractCloudLiveTest.java
@@ -28,6 +28,7 @@ import static brooklyn.event.basic.DependentConfiguration.attributeWhenReady;
 import java.io.File;
 import java.util.Map;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -51,7 +52,6 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.entity.zookeeper.ZooKeeperEnsemble;
 import brooklyn.location.Location;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.file.ArchiveBuilder;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormEc2LiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormEc2LiveTest.java
index b3bc9d5..7b55069 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormEc2LiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/storm/StormEc2LiveTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.messaging.storm;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.AbstractEc2LiveTest;
@@ -26,7 +27,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.entity.zookeeper.ZooKeeperNode;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEc2LiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEc2LiveTest.java
index 70ab6f9..a8d21d1 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEc2LiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEc2LiveTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.messaging.zookeeper;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.AbstractEc2LiveTest;
@@ -26,7 +27,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.entity.zookeeper.ZooKeeperNode;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEnsembleLiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEnsembleLiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEnsembleLiveTest.java
index 080ea11..a612140 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEnsembleLiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/zookeeper/ZooKeeperEnsembleLiveTest.java
@@ -27,11 +27,13 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.entity.zookeeper.ZooKeeperEnsemble;
 import brooklyn.entity.zookeeper.ZooKeeperNode;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
+
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;
 import com.google.common.util.concurrent.Uninterruptibles;
+
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/monitoring/src/test/java/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/monitoring/src/test/java/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java b/software/monitoring/src/test/java/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java
index 94406a7..a8f03bb 100644
--- a/software/monitoring/src/test/java/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java
+++ b/software/monitoring/src/test/java/brooklyn/entity/monitoring/monit/MonitIntegrationTest.java
@@ -28,6 +28,7 @@ import java.nio.charset.Charset;
 import java.util.Map;
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -44,7 +45,6 @@ import brooklyn.event.basic.DependentConfiguration;
 import brooklyn.location.MachineDetails;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
index 8aaf9f5..66d3be0 100644
--- a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
+++ b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerIntegrationTest.java
@@ -20,6 +20,7 @@ package brooklyn.entity.network.bind;
 
 import static org.testng.Assert.assertEquals;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -46,7 +47,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.rebind.RebindOptions;
 import brooklyn.entity.rebind.RebindTestFixture;
 import brooklyn.policy.EnricherSpec;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 public class BindDnsServerIntegrationTest extends RebindTestFixture<TestApplication> {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
index 86725fe..2dfc177 100644
--- a/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
+++ b/software/network/src/test/java/brooklyn/entity/network/bind/BindDnsServerLiveTest.java
@@ -18,7 +18,7 @@
  */
 package brooklyn.entity.network.bind;
 
-import static brooklyn.test.EntityTestUtils.assertAttributeEqualsEventually;
+import static org.apache.brooklyn.test.EntityTestUtils.assertAttributeEqualsEventually;
 import static org.testng.Assert.assertEquals;
 
 import org.slf4j.Logger;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java
index ddd6243..e2507cd 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterIntegrationTest.java
@@ -27,6 +27,7 @@ import java.math.BigInteger;
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraDatacenter;
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraNode;
 import org.apache.brooklyn.entity.nosql.cassandra.TokenGenerators.PosNeg63TokenGenerator;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -39,7 +40,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java
index d29bc1a..aa1d7e1 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterLiveTest.java
@@ -32,6 +32,7 @@ import java.util.Set;
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraDatacenter;
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraNode;
 import org.apache.brooklyn.entity.nosql.cassandra.AstyanaxSupport.AstyanaxSample;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -47,7 +48,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.text.Identifiers;
 import brooklyn.util.time.Duration;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterRebindIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterRebindIntegrationTest.java
index 4c2a248..5c45153 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterRebindIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterRebindIntegrationTest.java
@@ -25,6 +25,7 @@ import java.util.Set;
 
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraDatacenter;
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -37,7 +38,6 @@ import brooklyn.entity.rebind.RebindOptions;
 import brooklyn.entity.rebind.RebindTestFixtureWithApp;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterTest.java
index 3a1d202..dee3834 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraDatacenterTest.java
@@ -26,6 +26,7 @@ import java.util.Set;
 
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraDatacenter;
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -41,7 +42,6 @@ import brooklyn.entity.basic.EntityInternal;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.javalang.JavaClassNames;
 import brooklyn.util.text.TemplateProcessor;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricTest.java
index cbf55ed..56afd0b 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraFabricTest.java
@@ -25,6 +25,7 @@ import java.util.Set;
 
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraDatacenter;
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraFabric;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -45,7 +46,6 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.time.Duration;
 
 import com.google.common.base.Predicate;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeEc2LiveTest.java
index 495843f..ee9677e 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeEc2LiveTest.java
@@ -20,13 +20,13 @@ package org.apache.brooklyn.entity.nosql.cassandra;
 
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraNode;
 import org.apache.brooklyn.entity.nosql.cassandra.AstyanaxSupport.AstyanaxSample;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeIntegrationTest.java
index b5a657f..617a0a5 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeIntegrationTest.java
@@ -27,6 +27,8 @@ import java.util.Map;
 
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraNode;
 import org.apache.brooklyn.entity.nosql.cassandra.AstyanaxSupport.AstyanaxSample;
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.NetworkingTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -38,8 +40,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.NetworkingTestUtils;
 import brooklyn.util.math.MathPredicates;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeLiveTest.java
index c098d13..7a9b989 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/cassandra/CassandraNodeLiveTest.java
@@ -22,13 +22,13 @@ import java.util.Map;
 
 import org.apache.brooklyn.entity.nosql.cassandra.CassandraNode;
 import org.apache.brooklyn.entity.nosql.cassandra.AstyanaxSupport.AstyanaxSample;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.text.Strings;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayEc2LiveTest.java
index 89297be..988d151 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchbase/CouchbaseSyncGatewayEc2LiveTest.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import org.apache.brooklyn.entity.nosql.couchbase.CouchbaseCluster;
 import org.apache.brooklyn.entity.nosql.couchbase.CouchbaseNode;
 import org.apache.brooklyn.entity.nosql.couchbase.CouchbaseSyncGateway;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.AbstractEc2LiveTest;
@@ -31,7 +32,6 @@ import brooklyn.entity.group.DynamicCluster;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java
index 0fd7796..65e452d 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBClusterLiveTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals;
 
 import org.apache.brooklyn.entity.nosql.couchdb.CouchDBCluster;
 import org.apache.brooklyn.entity.nosql.couchdb.CouchDBNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -31,7 +32,6 @@ import brooklyn.entity.basic.Entities;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeEc2LiveTest.java
index 1838354..7c6a539 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeEc2LiveTest.java
@@ -19,6 +19,7 @@
 package org.apache.brooklyn.entity.nosql.couchdb;
 
 import org.apache.brooklyn.entity.nosql.couchdb.CouchDBNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -26,7 +27,6 @@ import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeIntegrationTest.java
index 0f8cbd2..5992b82 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeIntegrationTest.java
@@ -19,11 +19,11 @@
 package org.apache.brooklyn.entity.nosql.couchdb;
 
 import org.apache.brooklyn.entity.nosql.couchdb.CouchDBNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeLiveTest.java
index 05ce053..aa2f7d1 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeLiveTest.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.entity.nosql.couchdb;
 import java.util.Map;
 
 import org.apache.brooklyn.entity.nosql.couchdb.CouchDBNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.DataProvider;
@@ -28,7 +29,6 @@ import org.testng.annotations.Test;
 
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.text.Strings;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java
index 9f794a1..3bd27d2 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchClusterIntegrationTest.java
@@ -26,6 +26,7 @@ import java.net.URISyntaxException;
 
 import org.apache.brooklyn.entity.nosql.elasticsearch.ElasticSearchCluster;
 import org.apache.brooklyn.entity.nosql.elasticsearch.ElasticSearchNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.http.client.methods.HttpGet;
 import org.bouncycastle.util.Strings;
 import org.slf4j.Logger;
@@ -42,7 +43,6 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.event.feed.http.HttpValueFunctions;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.http.HttpTool;
 import brooklyn.util.http.HttpToolResponse;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeIntegrationTest.java
index c0c140d..9c5bda1 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/elasticsearch/ElasticSearchNodeIntegrationTest.java
@@ -24,6 +24,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 
 import org.apache.brooklyn.entity.nosql.elasticsearch.ElasticSearchNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.http.client.methods.HttpGet;
 import org.bouncycastle.util.Strings;
 import org.testng.annotations.AfterMethod;
@@ -38,7 +39,6 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.event.feed.http.HttpValueFunctions;
 import brooklyn.location.Location;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.http.HttpTool;
 import brooklyn.util.http.HttpToolResponse;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBEc2LiveTest.java
index 413f0c9..7949a88 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBEc2LiveTest.java
@@ -21,9 +21,10 @@ package org.apache.brooklyn.entity.nosql.mongodb;
 import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
+
 import com.google.common.collect.ImmutableList;
 import com.mongodb.DBObject;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -31,6 +32,7 @@ import org.testng.annotations.Test;
 import static org.testng.Assert.assertEquals;
 
 import org.apache.brooklyn.entity.nosql.mongodb.MongoDBServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 
 public class MongoDBEc2LiveTest extends AbstractEc2LiveTest {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBIntegrationTest.java
index eb9c362..28c82c4 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBIntegrationTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 
 import org.apache.brooklyn.entity.nosql.mongodb.MongoDBServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -31,7 +32,6 @@ import brooklyn.entity.basic.Entities;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBRebindIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBRebindIntegrationTest.java
index b7c7739..e8f59e2 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBRebindIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBRebindIntegrationTest.java
@@ -19,13 +19,13 @@
 package org.apache.brooklyn.entity.nosql.mongodb;
 
 import org.apache.brooklyn.entity.nosql.mongodb.MongoDBServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.rebind.RebindTestFixtureWithApp;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBSoftLayerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBSoftLayerLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBSoftLayerLiveTest.java
index de6e597..dd6c42f 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBSoftLayerLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/MongoDBSoftLayerLiveTest.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.entity.nosql.mongodb;
 import static org.testng.Assert.assertEquals;
 
 import org.apache.brooklyn.entity.nosql.mongodb.MongoDBServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -31,7 +32,6 @@ import com.mongodb.DBObject;
 import brooklyn.entity.AbstractSoftlayerLiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 public class MongoDBSoftLayerLiveTest extends AbstractSoftlayerLiveTest {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBConfigServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBConfigServerIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBConfigServerIntegrationTest.java
index fb748e4..f915e19 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBConfigServerIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBConfigServerIntegrationTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertFalse;
 import org.apache.brooklyn.entity.nosql.mongodb.MongoDBServer;
 import org.apache.brooklyn.entity.nosql.mongodb.MongoDBTestHelper;
 import org.apache.brooklyn.entity.nosql.mongodb.sharding.MongoDBConfigServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -33,7 +34,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentIntegrationTest.java
index e4947d3..b8211b4 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/mongodb/sharding/MongoDBShardedDeploymentIntegrationTest.java
@@ -28,6 +28,7 @@ import org.apache.brooklyn.entity.nosql.mongodb.sharding.MongoDBRouter;
 import org.apache.brooklyn.entity.nosql.mongodb.sharding.MongoDBRouterCluster;
 import org.apache.brooklyn.entity.nosql.mongodb.sharding.MongoDBShardCluster;
 import org.apache.brooklyn.entity.nosql.mongodb.sharding.MongoDBShardedDeployment;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -37,7 +38,6 @@ import brooklyn.entity.Entity;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterIntegrationTest.java
index 6331662..aabd2a2 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisClusterIntegrationTest.java
@@ -27,6 +27,7 @@ import java.util.concurrent.Callable;
 import org.apache.brooklyn.entity.nosql.redis.RedisCluster;
 import org.apache.brooklyn.entity.nosql.redis.RedisSlave;
 import org.apache.brooklyn.entity.nosql.redis.RedisStore;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -39,7 +40,6 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
index 3d0b421..2a42333 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.entity.nosql.redis;
 import javax.annotation.Nullable;
 
 import org.apache.brooklyn.entity.nosql.redis.RedisStore;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -28,7 +29,6 @@ import org.testng.annotations.Test;
 import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
index 8af953f..6cca4c9 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.entity.nosql.redis;
 import javax.annotation.Nullable;
 
 import org.apache.brooklyn.entity.nosql.redis.RedisStore;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -30,7 +31,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.location.basic.PortRanges;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.time.Duration;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterEc2LiveTest.java
index 883299f..a8ade53 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakClusterEc2LiveTest.java
@@ -20,6 +20,7 @@ package org.apache.brooklyn.entity.nosql.riak;
 
 import org.apache.brooklyn.entity.nosql.riak.RiakCluster;
 import org.apache.brooklyn.entity.nosql.riak.RiakNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -28,7 +29,6 @@ import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeEc2LiveTest.java
index 1d69103..051d583 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeEc2LiveTest.java
@@ -19,6 +19,7 @@
 package org.apache.brooklyn.entity.nosql.riak;
 
 import org.apache.brooklyn.entity.nosql.riak.RiakNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -28,7 +29,6 @@ import com.google.common.collect.ImmutableList;
 import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 public class RiakNodeEc2LiveTest extends AbstractEc2LiveTest {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeGoogleComputeLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeGoogleComputeLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeGoogleComputeLiveTest.java
index a5877c4..492a14c 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeGoogleComputeLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeGoogleComputeLiveTest.java
@@ -20,6 +20,7 @@ package org.apache.brooklyn.entity.nosql.riak;
 
 import org.apache.brooklyn.entity.nosql.riak.RiakCluster;
 import org.apache.brooklyn.entity.nosql.riak.RiakNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -28,7 +29,6 @@ import com.google.common.collect.Iterables;
 import brooklyn.entity.AbstractGoogleComputeLiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 public class RiakNodeGoogleComputeLiveTest extends AbstractGoogleComputeLiveTest {
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeIntegrationTest.java
index 50c946f..9722154 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeIntegrationTest.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.entity.nosql.riak;
 import static org.testng.Assert.assertFalse;
 
 import org.apache.brooklyn.entity.nosql.riak.RiakNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -31,7 +32,6 @@ import brooklyn.entity.basic.Entities;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 public class RiakNodeIntegrationTest {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSoftlayerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSoftlayerLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSoftlayerLiveTest.java
index 069a920..adc23f0 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSoftlayerLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/riak/RiakNodeSoftlayerLiveTest.java
@@ -19,6 +19,7 @@
 package org.apache.brooklyn.entity.nosql.riak;
 
 import org.apache.brooklyn.entity.nosql.riak.RiakNode;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.BeforeMethod;
 
 import com.google.common.collect.ImmutableList;
@@ -26,7 +27,6 @@ import com.google.common.collect.ImmutableList;
 import brooklyn.entity.AbstractSoftlayerLiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 public class RiakNodeSoftlayerLiveTest extends AbstractSoftlayerLiveTest {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerEc2LiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerEc2LiveTest.java
index ef2f166..8b7b6a2 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerEc2LiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerEc2LiveTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
 import org.apache.brooklyn.entity.nosql.solr.SolrServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.solr.common.SolrDocument;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,7 +31,6 @@ import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerIntegrationTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerIntegrationTest.java
index 23ca974..0edf9a9 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerIntegrationTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerIntegrationTest.java
@@ -22,13 +22,13 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
 import org.apache.brooklyn.entity.nosql.solr.SolrServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.solr.common.SolrDocument;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerLiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerLiveTest.java b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerLiveTest.java
index d9fc27f..80faddb 100644
--- a/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerLiveTest.java
+++ b/software/nosql/src/test/java/org/apache/brooklyn/entity/nosql/solr/SolrServerLiveTest.java
@@ -24,6 +24,7 @@ import static org.testng.Assert.assertTrue;
 import java.util.Map;
 
 import org.apache.brooklyn.entity.nosql.solr.SolrServer;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.solr.common.SolrDocument;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,7 +33,6 @@ import org.testng.annotations.Test;
 
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.text.Strings;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java
index e0f332a..9c2bd89 100644
--- a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java
+++ b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerEc2LiveTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.osgi.karaf;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -25,7 +26,6 @@ import org.testng.annotations.Test;
 import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.text.Identifiers;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.java
----------------------------------------------------------------------
diff --git a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.java b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.java
index c6c76ba..eb5c561 100644
--- a/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.java
+++ b/software/osgi/src/test/java/brooklyn/entity/osgi/karaf/KarafContainerTest.java
@@ -24,6 +24,7 @@ import static org.testng.Assert.assertNull;
 import java.net.URL;
 import java.util.Map;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
@@ -37,7 +38,6 @@ import brooklyn.entity.software.SshEffectorTasks;
 import brooklyn.location.NoMachinesAvailableException;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.text.Identifiers;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
index 0984071..417dec1 100644
--- a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -56,7 +57,6 @@ import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.location.geo.HostGeoInfo;
 import brooklyn.management.ManagementContext;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.CollectionFunctionals;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
index bf76568..1fed57c 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxClusterIntegrationTest.java
@@ -24,6 +24,8 @@ import static org.testng.Assert.assertTrue;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -44,8 +46,6 @@ import brooklyn.location.Location;
 import brooklyn.location.basic.PortRanges;
 import brooklyn.management.EntityManager;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.util.collections.MutableMap;
 
 import com.google.common.base.Predicates;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxEc2LiveTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxEc2LiveTest.java
index 0cd493b..017415b 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxEc2LiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxEc2LiveTest.java
@@ -18,6 +18,8 @@
  */
 package brooklyn.entity.proxy.nginx;
 
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -27,8 +29,6 @@ import brooklyn.entity.basic.SoftwareProcess;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.webapp.WebAppService;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
index d7d9f41..faed95c 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -45,7 +46,6 @@ import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
 import brooklyn.location.Location;
 import brooklyn.location.basic.PortRanges;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.util.exceptions.Exceptions;
 
 import com.google.common.base.Preconditions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java
index 80eaa2d..1cf0920 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.java
@@ -18,16 +18,18 @@
  */
 package brooklyn.entity.proxy.nginx;
 
-import static brooklyn.test.EntityTestUtils.assertAttributeEqualsEventually;
-import static brooklyn.test.HttpTestUtils.assertHttpStatusCodeEquals;
-import static brooklyn.test.HttpTestUtils.assertHttpStatusCodeEventuallyEquals;
+import static org.apache.brooklyn.test.EntityTestUtils.assertAttributeEqualsEventually;
+import static org.apache.brooklyn.test.HttpTestUtils.assertHttpStatusCodeEquals;
+import static org.apache.brooklyn.test.HttpTestUtils.assertHttpStatusCodeEventuallyEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotEquals;
 import static org.testng.Assert.assertTrue;
 
 import java.util.Map;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+import org.apache.brooklyn.test.WebAppMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -44,8 +46,6 @@ import brooklyn.entity.webapp.WebAppService;
 import brooklyn.entity.webapp.jboss.JBoss7Server;
 import brooklyn.location.Location;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
-import brooklyn.test.WebAppMonitor;
 import brooklyn.util.time.Duration;
 import brooklyn.util.time.Time;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
index dcbf35e..0d15299 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindIntegrationTest.java
@@ -18,9 +18,9 @@
  */
 package brooklyn.entity.proxy.nginx;
 
-import static brooklyn.test.EntityTestUtils.assertAttributeEqualsEventually;
-import static brooklyn.test.HttpTestUtils.assertHttpStatusCodeEquals;
-import static brooklyn.test.HttpTestUtils.assertHttpStatusCodeEventuallyEquals;
+import static org.apache.brooklyn.test.EntityTestUtils.assertAttributeEqualsEventually;
+import static org.apache.brooklyn.test.HttpTestUtils.assertHttpStatusCodeEquals;
+import static org.apache.brooklyn.test.HttpTestUtils.assertHttpStatusCodeEventuallyEquals;
 import static org.testng.Assert.assertEquals;
 
 import java.util.List;
@@ -29,8 +29,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
-
+import org.apache.brooklyn.test.WebAppMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -52,8 +53,6 @@ import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.ManagementContext;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.WebAppMonitor;
 
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java
index 3f4fc78..af3718e 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java
@@ -26,7 +26,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+import org.apache.brooklyn.test.WebAppMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -51,8 +53,6 @@ import brooklyn.location.basic.SshMachineLocationReuseIntegrationTest.RecordingS
 import brooklyn.management.Task;
 import brooklyn.management.ha.HighAvailabilityMode;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.WebAppMonitor;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.internal.ssh.SshTool;
 import brooklyn.util.net.Networking;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java
index f705466..db4af61 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxUrlMappingIntegrationTest.java
@@ -30,8 +30,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -54,7 +54,6 @@ import brooklyn.entity.webapp.tomcat.Tomcat8ServerImpl;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.EntityManager;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java
index 7a78777..12d157d 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxWebClusterEc2LiveTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertNotNull;
 
 import java.net.URL;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,7 +43,6 @@ import brooklyn.location.MachineLocation;
 import brooklyn.location.basic.Machines;
 import brooklyn.management.ManagementContext;
 import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
index 9e6e2a8..d409dae 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/AbstractWebAppFixtureIntegrationTest.java
@@ -18,7 +18,7 @@
  */
 package brooklyn.entity.webapp;
 
-import static brooklyn.test.HttpTestUtils.connectToUrl;
+import static org.apache.brooklyn.test.HttpTestUtils.connectToUrl;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
@@ -38,6 +38,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import brooklyn.entity.basic.SoftwareProcessDriver;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterClass;
@@ -64,9 +65,11 @@ import brooklyn.management.ManagementContext;
 import brooklyn.management.SubscriptionContext;
 import brooklyn.management.SubscriptionHandle;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
+
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java
index 7f9a18f..4d847fc 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterIntegrationTest.java
@@ -24,9 +24,10 @@ import static org.testng.Assert.assertNotNull;
 import java.util.List;
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.apache.brooklyn.entity.basic.RecordingSensorEventListener;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -43,8 +44,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.webapp.tomcat.TomcatServer;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.TestJavaWebAppEntity;
 import brooklyn.util.collections.CollectionFunctionals;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
index 7a361f2..e98d094 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/ControlledDynamicWebAppClusterTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals;
 
 import java.util.List;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,7 +40,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.webapp.jboss.JBoss7Server;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestJavaWebAppEntity;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.java
index 6db67ea..df5a582 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppClusterTest.java
@@ -20,6 +20,7 @@ package brooklyn.entity.webapp;
 
 import static org.testng.Assert.assertEquals;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -31,7 +32,6 @@ import brooklyn.entity.basic.EntityLocal;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.basic.SimulatedLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestJavaWebAppEntity;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
index 5a805cc..b47bfdd 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/DynamicWebAppFabricTest.java
@@ -20,6 +20,7 @@ package brooklyn.entity.webapp;
 
 import java.util.List;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -34,7 +35,6 @@ import brooklyn.entity.basic.EntityLocal;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Changeable;
 import brooklyn.location.basic.SimulatedLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestJavaWebAppEntity;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/ElasticJavaWebAppServiceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/ElasticJavaWebAppServiceIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/ElasticJavaWebAppServiceIntegrationTest.java
index 1c2e7aa..69711c5 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/ElasticJavaWebAppServiceIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/ElasticJavaWebAppServiceIntegrationTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.webapp;
 
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
 import org.testng.Assert;
 import org.testng.annotations.AfterMethod;
@@ -26,7 +27,6 @@ import org.testng.annotations.Test;
 
 import brooklyn.entity.basic.Entities;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
index 7e41d75..434d2b4 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/TomcatAutoScalerPolicyTest.java
@@ -18,7 +18,7 @@
  */
 package brooklyn.entity.webapp;
 
-import static brooklyn.test.HttpTestUtils.connectToUrl;
+import static org.apache.brooklyn.test.HttpTestUtils.connectToUrl;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppConcurrentDeployTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppConcurrentDeployTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppConcurrentDeployTest.java
index 18b074e..0a06c3c 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppConcurrentDeployTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppConcurrentDeployTest.java
@@ -39,8 +39,10 @@ import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.Task;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
+
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.http.HttpTool;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppLiveIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppLiveIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppLiveIntegrationTest.groovy
index 6fee150..a3e7cd2 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppLiveIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/WebAppLiveIntegrationTest.groovy
@@ -20,7 +20,7 @@ package brooklyn.entity.webapp
 
 import static brooklyn.entity.basic.ConfigKeys.*
 import static brooklyn.entity.webapp.jboss.JBoss6Server.*
-import static brooklyn.test.TestUtils.*
+import static org.apache.brooklyn.test.TestUtils.*
 import static java.util.concurrent.TimeUnit.*
 import static org.testng.Assert.*
 
@@ -46,7 +46,7 @@ import brooklyn.entity.webapp.tomcat.TomcatServer
 import brooklyn.entity.webapp.tomcat.TomcatServerImpl
 import brooklyn.location.Location
 import brooklyn.location.basic.BasicLocationRegistry
-import brooklyn.test.TestUtils
+import org.apache.brooklyn.test.TestUtils
 import brooklyn.test.entity.TestApplicationImpl
 import brooklyn.util.internal.TimeExtras
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/ControlledDynamicWebAppClusterRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/ControlledDynamicWebAppClusterRebindIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/ControlledDynamicWebAppClusterRebindIntegrationTest.java
index ed1580f..fb19a7e 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/ControlledDynamicWebAppClusterRebindIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/ControlledDynamicWebAppClusterRebindIntegrationTest.java
@@ -18,9 +18,9 @@
  */
 package brooklyn.entity.webapp.jboss;
 
-import static brooklyn.test.EntityTestUtils.assertAttributeEqualsEventually;
-import static brooklyn.test.HttpTestUtils.assertHttpStatusCodeEquals;
-import static brooklyn.test.HttpTestUtils.assertHttpStatusCodeEventuallyEquals;
+import static org.apache.brooklyn.test.EntityTestUtils.assertAttributeEqualsEventually;
+import static org.apache.brooklyn.test.HttpTestUtils.assertHttpStatusCodeEquals;
+import static org.apache.brooklyn.test.HttpTestUtils.assertHttpStatusCodeEventuallyEquals;
 import static org.testng.Assert.assertEquals;
 
 import java.io.File;
@@ -30,6 +30,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+import org.apache.brooklyn.test.WebAppMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -46,7 +47,6 @@ import brooklyn.entity.rebind.RebindTestUtils;
 import brooklyn.entity.webapp.ControlledDynamicWebAppCluster;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.test.WebAppMonitor;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.internal.TimeExtras;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java
index 9634d24..25c17a6 100644
--- a/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/webapp/jboss/DynamicWebAppClusterRebindIntegrationTest.java
@@ -18,9 +18,9 @@
  */
 package brooklyn.entity.webapp.jboss;
 
-import static brooklyn.test.HttpTestUtils.assertHttpStatusCodeEquals;
-import static brooklyn.test.HttpTestUtils.assertHttpStatusCodeEventuallyEquals;
-import static brooklyn.test.HttpTestUtils.assertUrlUnreachableEventually;
+import static org.apache.brooklyn.test.HttpTestUtils.assertHttpStatusCodeEquals;
+import static org.apache.brooklyn.test.HttpTestUtils.assertHttpStatusCodeEventuallyEquals;
+import static org.apache.brooklyn.test.HttpTestUtils.assertUrlUnreachableEventually;
 import static org.testng.Assert.assertEquals;
 
 import java.io.File;
@@ -31,6 +31,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 import org.apache.brooklyn.test.TestResourceUnavailableException;
+import org.apache.brooklyn.test.WebAppMonitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -45,7 +46,6 @@ import brooklyn.entity.rebind.RebindTestUtils;
 import brooklyn.entity.webapp.DynamicWebAppCluster;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.test.WebAppMonitor;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;
 



[6/6] incubator-brooklyn git commit: This closes #803

Posted by ha...@apache.org.
This closes #803


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

Branch: refs/heads/master
Commit: 2ed62d61bac4b704842064ad2d6956e2a9fecf4f
Parents: 83acab2 9e04407
Author: Hadrian Zbarcea <ha...@apache.org>
Authored: Fri Aug 7 21:32:39 2015 -0400
Committer: Hadrian Zbarcea <ha...@apache.org>
Committed: Fri Aug 7 21:32:39 2015 -0400

----------------------------------------------------------------------
 ...stomAggregatingEnricherDeprecatedTest.groovy |   2 +-
 .../enricher/CustomAggregatingEnricherTest.java |   2 +-
 .../java/brooklyn/enricher/EnrichersTest.java   |   4 +-
 ...SensorPropagatingEnricherDeprecatedTest.java |   2 +-
 .../enricher/SensorPropagatingEnricherTest.java |   2 +-
 .../TransformingEnricherDeprecatedTest.groovy   |   2 +-
 .../enricher/TransformingEnricherTest.java      |   2 +-
 .../entity/EntityPreManagementTest.java         |   2 +-
 .../brooklyn/entity/basic/DataEntityTest.java   |   2 +-
 .../basic/DependentConfigurationTest.java       |   2 +-
 .../entity/basic/PolicyRegistrationTest.java    |   2 +-
 .../entity/basic/ServiceStateLogicTest.java     |   2 +-
 .../entity/effector/EffectorBasicTest.java      |   2 +-
 .../entity/group/DynamicClusterTest.java        |   4 +-
 .../entity/group/DynamicFabricTest.java         |   2 +-
 .../entity/group/GroupPickUpEntitiesTest.java   |   2 +-
 .../entity/rebind/RebindEnricherTest.java       |   2 +-
 .../entity/rebind/RebindEntityTest.java         |   4 +-
 .../brooklyn/entity/rebind/RebindFeedTest.java  |   2 +-
 .../entity/rebind/RebindFeedWithHaTest.java     |   2 +-
 .../event/feed/function/FunctionFeedTest.java   |   2 +-
 .../feed/http/HttpFeedIntegrationTest.java      |   2 +-
 .../feed/shell/ShellFeedIntegrationTest.java    |   2 +-
 .../event/feed/ssh/SshFeedIntegrationTest.java  |   2 +-
 .../WindowsPerformanceCounterFeedLiveTest.java  |   2 +-
 .../WindowsPerformanceCounterFeedTest.java      |   2 +-
 .../SshMachineLocationPerformanceTest.java      |   2 +-
 .../brooklyn/management/ha/HotStandbyTest.java  |   2 +-
 .../EntityPersistencePerformanceTest.java       |   2 +-
 ...lusterDatabaseExampleAppIntegrationTest.java |   7 +-
 .../os/AdvertiseWinrmLoginPolicyTest.java       |   2 +-
 .../policy/os/CreateUserPolicyLiveTest.java     |   2 +-
 .../policy/os/CreateUserPolicyTest.java         |   2 +-
 .../enricher/HttpLatencyDetectorTest.java       |   2 +-
 .../brooklyn/enricher/RebindEnricherTest.java   |   2 +-
 .../autoscaling/AutoScalerPolicyRebindTest.java |   2 +-
 .../policy/ha/ServiceFailureDetectorTest.java   |   2 +-
 .../brooklyn/policy/ha/ServiceReplacerTest.java |   2 +-
 ...ctSoftwareProcessRestartIntegrationTest.java |   2 +-
 .../basic/SoftwareProcessEntityRebindTest.java  |   2 +-
 .../entity/basic/SoftwareProcessEntityTest.java |   2 +-
 ...ftwareProcessAndChildrenIntegrationTest.java |   2 +-
 .../basic/lifecycle/ScriptHelperTest.java       |   2 +-
 .../BrooklynClusterIntegrationTest.java         |   2 +-
 .../BrooklynNodeIntegrationTest.java            |   4 +-
 .../brooklynnode/SelectMasterEffectorTest.java  |   2 +-
 .../brooklyn/entity/java/EntityPollingTest.java |   2 +-
 .../entity/java/VanillaJavaAppRebindTest.java   |   2 +-
 .../entity/machine/MachineEntityRebindTest.java |   2 +-
 .../entity/pool/AbstractServerPoolTest.java     |   2 +-
 .../brooklyn/entity/pool/ServerPoolTest.java    |   2 +-
 .../entity/software/StaticSensorTest.java       |   2 +-
 .../software/http/HttpRequestSensorTest.java    |   2 +-
 .../mysql/AbstractToyMySqlEntityTest.java       |   2 +-
 .../software/ssh/SshCommandIntegrationTest.java |   2 +-
 .../brooklyn/event/feed/jmx/JmxFeedTest.java    |   4 +-
 .../brooklyn/event/feed/jmx/JmxHelperTest.java  |   2 +-
 .../event/feed/jmx/RebindJmxFeedTest.java       |   2 +-
 .../basic/MachineDetailsEc2LiveTest.java        |   2 +-
 .../MachineDetailsGoogleComputeLiveTest.java    |   2 +-
 .../crate/CrateNodeIntegrationTest.java         |   2 +-
 .../PostgreSqlRebindIntegrationTest.java        |   2 +-
 .../messaging/activemq/ActiveMQEc2LiveTest.java |   2 +-
 .../activemq/ActiveMQGoogleComputeLiveTest.java |   4 +-
 .../activemq/ActiveMQIntegrationTest.java       |   2 +-
 .../messaging/kafka/KafkaIntegrationTest.java   |   2 +-
 .../entity/messaging/qpid/QpidEc2LiveTest.java  |   2 +-
 .../messaging/qpid/QpidIntegrationTest.java     |   4 +-
 .../messaging/rabbit/RabbitEc2LiveTest.java     |   2 +-
 .../messaging/rabbit/RabbitIntegrationTest.java |   2 +-
 .../storm/StormAbstractCloudLiveTest.java       |   2 +-
 .../messaging/storm/StormEc2LiveTest.java       |   2 +-
 .../zookeeper/ZooKeeperEc2LiveTest.java         |   2 +-
 .../zookeeper/ZooKeeperEnsembleLiveTest.java    |   4 +-
 .../monitoring/monit/MonitIntegrationTest.java  |   2 +-
 .../bind/BindDnsServerIntegrationTest.java      |   2 +-
 .../network/bind/BindDnsServerLiveTest.java     |   2 +-
 .../CassandraDatacenterIntegrationTest.java     |   2 +-
 .../cassandra/CassandraDatacenterLiveTest.java  |   2 +-
 ...assandraDatacenterRebindIntegrationTest.java |   2 +-
 .../cassandra/CassandraDatacenterTest.java      |   2 +-
 .../nosql/cassandra/CassandraFabricTest.java    |   2 +-
 .../cassandra/CassandraNodeEc2LiveTest.java     |   2 +-
 .../cassandra/CassandraNodeIntegrationTest.java |   4 +-
 .../nosql/cassandra/CassandraNodeLiveTest.java  |   2 +-
 .../CouchbaseSyncGatewayEc2LiveTest.java        |   2 +-
 .../nosql/couchdb/CouchDBClusterLiveTest.java   |   2 +-
 .../nosql/couchdb/CouchDBNodeEc2LiveTest.java   |   2 +-
 .../couchdb/CouchDBNodeIntegrationTest.java     |   2 +-
 .../nosql/couchdb/CouchDBNodeLiveTest.java      |   2 +-
 .../ElasticSearchClusterIntegrationTest.java    |   2 +-
 .../ElasticSearchNodeIntegrationTest.java       |   2 +-
 .../nosql/mongodb/MongoDBEc2LiveTest.java       |   4 +-
 .../nosql/mongodb/MongoDBIntegrationTest.java   |   2 +-
 .../mongodb/MongoDBRebindIntegrationTest.java   |   2 +-
 .../nosql/mongodb/MongoDBSoftLayerLiveTest.java |   2 +-
 .../MongoDBConfigServerIntegrationTest.java     |   2 +-
 ...MongoDBShardedDeploymentIntegrationTest.java |   2 +-
 .../redis/RedisClusterIntegrationTest.java      |   2 +-
 .../entity/nosql/redis/RedisEc2LiveTest.java    |   2 +-
 .../nosql/redis/RedisIntegrationTest.java       |   2 +-
 .../nosql/riak/RiakClusterEc2LiveTest.java      |   2 +-
 .../entity/nosql/riak/RiakNodeEc2LiveTest.java  |   2 +-
 .../riak/RiakNodeGoogleComputeLiveTest.java     |   2 +-
 .../nosql/riak/RiakNodeIntegrationTest.java     |   2 +-
 .../nosql/riak/RiakNodeSoftlayerLiveTest.java   |   2 +-
 .../nosql/solr/SolrServerEc2LiveTest.java       |   2 +-
 .../nosql/solr/SolrServerIntegrationTest.java   |   2 +-
 .../entity/nosql/solr/SolrServerLiveTest.java   |   2 +-
 .../osgi/karaf/KarafContainerEc2LiveTest.java   |   2 +-
 .../entity/osgi/karaf/KarafContainerTest.java   |   2 +-
 .../entity/dns/AbstractGeoDnsServiceTest.java   |   2 +-
 .../nginx/NginxClusterIntegrationTest.java      |   4 +-
 .../entity/proxy/nginx/NginxEc2LiveTest.java    |   4 +-
 .../nginx/NginxHttpsSslIntegrationTest.java     |   2 +-
 .../proxy/nginx/NginxIntegrationTest.java       |  10 +-
 .../proxy/nginx/NginxRebindIntegrationTest.java |  11 +-
 .../nginx/NginxRebindWithHaIntegrationTest.java |   4 +-
 .../nginx/NginxUrlMappingIntegrationTest.java   |   3 +-
 .../proxy/nginx/NginxWebClusterEc2LiveTest.java |   2 +-
 .../AbstractWebAppFixtureIntegrationTest.java   |   9 +-
 ...lledDynamicWebAppClusterIntegrationTest.java |   5 +-
 .../ControlledDynamicWebAppClusterTest.java     |   2 +-
 .../entity/webapp/DynamicWebAppClusterTest.java |   2 +-
 .../entity/webapp/DynamicWebAppFabricTest.java  |   2 +-
 ...ElasticJavaWebAppServiceIntegrationTest.java |   2 +-
 .../webapp/TomcatAutoScalerPolicyTest.java      |   2 +-
 .../webapp/WebAppConcurrentDeployTest.java      |   4 +-
 .../webapp/WebAppLiveIntegrationTest.groovy     |   4 +-
 ...namicWebAppClusterRebindIntegrationTest.java |   8 +-
 ...namicWebAppClusterRebindIntegrationTest.java |   8 +-
 .../jboss/JBoss6ServerAwsEc2LiveTest.java       |   2 +-
 ...Boss6ServerNonInheritingIntegrationTest.java |   2 +-
 .../jboss/JBoss7ServerAwsEc2LiveTest.java       |   2 +-
 .../jboss/JBoss7ServerDockerLiveTest.java       |   5 +-
 ...Boss7ServerNonInheritingIntegrationTest.java |   4 +-
 .../JBoss7ServerRebindingIntegrationTest.java   |   6 +-
 .../Jboss7ServerGoogleComputeLiveTest.java      |   2 +-
 .../webapp/nodejs/NodeJsWebAppEc2LiveTest.java  |   2 +-
 .../NodeJsWebAppFixtureIntegrationTest.java     |   6 +-
 .../nodejs/NodeJsWebAppSoftlayerLiveTest.java   |   2 +-
 .../webapp/tomcat/Tomcat8ServerEc2LiveTest.java |   3 +-
 .../tomcat/Tomcat8ServerSoftlayerLiveTest.java  |   3 +-
 .../webapp/tomcat/TomcatServerEc2LiveTest.java  |   2 +-
 .../tomcat/TomcatServerSoftlayerLiveTest.java   |   2 +-
 .../EnrichersSlightlySimplerYamlTest.java       |   2 +-
 .../brooklyn/JavaWebAppsIntegrationTest.java    |   3 +-
 .../brooklyn/ReloadBrooklynPropertiesTest.java  |   2 +-
 .../brooklyn/VanillaBashNetcatYamlTest.java     |   2 +-
 .../BrooklynJavascriptGuiLauncherTest.java      |   2 +-
 .../BrooklynEntityMirrorIntegrationTest.java    |   4 +-
 .../brooklynnode/BrooklynNodeRestTest.java      |   4 +-
 .../brooklyn/launcher/BrooklynLauncherTest.java |   2 +-
 .../brooklyn/launcher/WebAppRunnerTest.java     |   2 +-
 .../blueprints/AbstractBlueprintTest.java       |   2 +-
 .../SoftlayerObtainPrivateLiveTest.java         |   2 +-
 .../org/apache/brooklyn/qa/load/LoadTest.java   |   3 +-
 .../rest/client/BrooklynApiRestClientTest.java  |   2 +-
 .../brooklynnode/DeployBlueprintTest.java       |   2 +-
 .../rest/BrooklynRestApiLauncherTest.java       |   2 +-
 .../rest/resources/ApplicationResourceTest.java |   2 +-
 .../rest/resources/EntityResourceTest.java      |   2 +-
 .../SensorResourceIntegrationTest.java          |   2 +-
 .../rest/resources/SensorResourceTest.java      |   2 +-
 .../ServerResourceIntegrationTest.java          |   2 +-
 .../rest/resources/ServerShutdownTest.java      |   2 +-
 .../java/brooklyn/test/EntityTestUtils.java     | 180 ------
 .../main/java/brooklyn/test/HttpTestUtils.java  | 391 --------------
 .../java/brooklyn/test/NetworkingTestUtils.java |  68 ---
 .../brooklyn/test/PerformanceTestUtils.java     |  99 ----
 .../main/java/brooklyn/test/TestUtils.groovy    | 540 ------------------
 .../brooklyn/test/TrustingSslSocketFactory.java | 134 -----
 .../main/java/brooklyn/test/WebAppMonitor.java  | 213 --------
 .../apache/brooklyn/test/EntityTestUtils.java   | 181 +++++++
 .../org/apache/brooklyn/test/HttpTestUtils.java | 392 ++++++++++++++
 .../brooklyn/test/NetworkingTestUtils.java      |  69 +++
 .../brooklyn/test/PerformanceTestUtils.java     |  99 ++++
 .../org/apache/brooklyn/test/TestUtils.groovy   | 541 +++++++++++++++++++
 .../brooklyn/test/TrustingSslSocketFactory.java | 134 +++++
 .../org/apache/brooklyn/test/WebAppMonitor.java | 214 ++++++++
 180 files changed, 1855 insertions(+), 1828 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ed62d61/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
----------------------------------------------------------------------
diff --cc usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
index f42c574,0000000..d66dc53
mode 100644,000000..100644
--- a/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
+++ b/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
@@@ -1,180 -1,0 +1,180 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one
 + * or more contributor license agreements.  See the NOTICE file
 + * distributed with this work for additional information
 + * regarding copyright ownership.  The ASF licenses this file
 + * to you under the Apache License, Version 2.0 (the
 + * "License"); you may not use this file except in compliance
 + * with the License.  You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing,
 + * software distributed under the License is distributed on an
 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + * KIND, either express or implied.  See the License for the
 + * specific language governing permissions and limitations
 + * under the License.
 + */
 +package org.apache.brooklyn.entity.brooklynnode;
 +
 +import static org.testng.Assert.assertFalse;
 +import static org.testng.Assert.assertTrue;
 +
++import org.apache.brooklyn.test.EntityTestUtils;
++import org.apache.brooklyn.test.HttpTestUtils;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +import org.testng.Assert;
 +import org.testng.annotations.AfterMethod;
 +import org.testng.annotations.BeforeMethod;
 +import org.testng.annotations.Test;
 +
 +import brooklyn.entity.Entity;
 +import brooklyn.entity.basic.ApplicationBuilder;
 +import brooklyn.entity.basic.Entities;
 +import brooklyn.entity.basic.EntityInternal;
 +import brooklyn.entity.brooklynnode.BrooklynEntityMirror;
 +import brooklyn.entity.proxying.EntitySpec;
 +import org.apache.brooklyn.launcher.BrooklynWebServer;
 +import brooklyn.management.ManagementContext;
 +import brooklyn.management.ha.HighAvailabilityMode;
 +import brooklyn.rest.filter.BrooklynPropertiesSecurityFilter;
 +import brooklyn.test.Asserts;
- import brooklyn.test.EntityTestUtils;
- import brooklyn.test.HttpTestUtils;
 +import brooklyn.test.entity.LocalManagementContextForTests;
 +import brooklyn.test.entity.TestApplication;
 +import brooklyn.util.exceptions.Exceptions;
 +import brooklyn.util.time.Duration;
 +
 +/**
 + * Test for EntityMirror, launching an in-memory server and ensuring we can mirror.
 + * Here so that we can access the REST server.
 + * <p>
 + * May require <code>-Dbrooklyn.localhost.address=127.0.0.1</code> so that the console which binds to localhost is addressible.
 + * (That and the time it takes to run are the only reasons this is Integration.)
 + */
 +@Test
 +public class BrooklynEntityMirrorIntegrationTest {
 +
 +    private static final Logger log = LoggerFactory.getLogger(BrooklynEntityMirrorIntegrationTest.class);
 +    
 +    private BrooklynWebServer server;
 +    private TestApplication serverApp;
 +    private ManagementContext serverMgmt;
 +    
 +    private TestApplication localApp;
 +    private ManagementContext localMgmt;
 +
 +    @BeforeMethod(alwaysRun=true)
 +    public void setUp() throws Exception {
 +        localApp = TestApplication.Factory.newManagedInstanceForTests();
 +        localMgmt = localApp.getManagementContext();
 +    }
 +
 +    @AfterMethod(alwaysRun=true)
 +    public void tearDown() throws Exception {
 +        if (serverMgmt!=null) Entities.destroyAll(serverMgmt);
 +        if (server!=null) server.stop();
 +        if (localMgmt!=null) Entities.destroyAll(localMgmt);
 +        
 +        serverMgmt = null;
 +    }
 +
 +    
 +    protected void setUpServer() {
 +        setUpServer(new LocalManagementContextForTests(), false);
 +    }
 +    protected void setUpServer(ManagementContext mgmt, boolean useSecurityFilter) {
 +        try {
 +            if (serverMgmt!=null) throw new IllegalStateException("server already set up");
 +            
 +            serverMgmt = mgmt;
 +            server = new BrooklynWebServer(mgmt);
 +            if (useSecurityFilter) server.setSecurityFilter(BrooklynPropertiesSecurityFilter.class);
 +            server.start();
 +            
 +            serverMgmt.getHighAvailabilityManager().disabled();
 +            serverApp = ApplicationBuilder.newManagedApp(TestApplication.class, serverMgmt);
 +            
 +            ((LocalManagementContextForTests)serverMgmt).noteStartupComplete();
 +        } catch (Exception e) {
 +            throw Exceptions.propagate(e);
 +        }
 +    }
 +
 +    protected String getBaseUri() {
 +        return server.getRootUrl();
 +    }
 +    
 +    @Test(groups="Integration")
 +    public void testServiceMirroring() throws Exception {
 +        setUpServer();
 +        
 +        String catalogItemId = "test-catalog-item:1.0";
 +        String catalogItemIdGA = "test-catalog-item:1.0-GA";
 +        serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "austria");
 +        serverApp.setCatalogItemId(catalogItemId);
 +
 +        String serviceId = serverApp.getId();
 +        Entity mirror = localApp.addChild(EntitySpec.create(BrooklynEntityMirror.class)
 +            .configure(BrooklynEntityMirror.POLL_PERIOD, Duration.millis(100))
 +            .configure(BrooklynEntityMirror.MIRRORED_ENTITY_ID, serviceId)
 +            .configure(BrooklynEntityMirror.MIRRORED_ENTITY_URL, 
 +                getBaseUri()+"/v1/applications/"+serviceId+"/entities/"+serviceId)
 +        );
 +
 +        EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "austria");
 +        EntityTestUtils.assertAttributeEqualsEventually(mirror, BrooklynEntityMirror.MIRROR_CATALOG_ITEM_ID, catalogItemId);
 +        assertTrue(mirror.getAttribute(BrooklynEntityMirror.MIRROR_SUMMARY) != null, "entity summary is null");
 +        log.info("Sensors mirrored are: "+((EntityInternal)mirror).getAllAttributes());
 +        
 +        serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "bermuda");
 +        serverApp.setCatalogItemId(catalogItemIdGA);
 +        EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "bermuda");
 +        EntityTestUtils.assertAttributeEqualsEventually(mirror, BrooklynEntityMirror.MIRROR_CATALOG_ITEM_ID, catalogItemIdGA);
 +
 +        serverApp.stop();
 +        assertUnmanagedEventually(mirror);
 +    }
 +
 +    @Test(groups="Integration")
 +    public void testServiceMirroringHttps() throws Exception {
 +        LocalManagementContextForTests mgmtHttps = new LocalManagementContextForTests();
 +        mgmtHttps.getBrooklynProperties().put("brooklyn.webconsole.security.https.required", true);
 +        mgmtHttps.getBrooklynProperties().put("brooklyn.webconsole.security.users", "admin");
 +        mgmtHttps.getBrooklynProperties().put("brooklyn.webconsole.security.user.admin.password", "P5ssW0rd");
 +
 +        setUpServer(mgmtHttps, true);
 +        Assert.assertTrue(getBaseUri().startsWith("https:"), "URL is not https: "+getBaseUri());
 +        // check auth is required
 +        HttpTestUtils.assertHttpStatusCodeEquals(getBaseUri(), 401);
 +        
 +        serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "austria");
 +
 +        String serviceId = serverApp.getId();
 +        Entity mirror = localApp.addChild(EntitySpec.create(BrooklynEntityMirror.class)
 +            .configure(BrooklynEntityMirror.POLL_PERIOD, Duration.millis(100))
 +            .configure(BrooklynEntityMirror.MANAGEMENT_USER, "admin")
 +            .configure(BrooklynEntityMirror.MANAGEMENT_PASSWORD, "P5ssW0rd")
 +            .configure(BrooklynEntityMirror.MIRRORED_ENTITY_ID, serviceId)
 +            .configure(BrooklynEntityMirror.MIRRORED_ENTITY_URL, 
 +                getBaseUri()+"/v1/applications/"+serviceId+"/entities/"+serviceId)
 +        );
 +
 +        EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "austria");
 +        log.info("Sensors mirrored are: "+((EntityInternal)mirror).getAllAttributes());
 +        
 +        serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "bermuda");
 +        EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "bermuda");
 +
 +        serverApp.stop();
 +        assertUnmanagedEventually(mirror);
 +    }
 +
 +    private static void assertUnmanagedEventually(final Entity entity) {
 +        Asserts.succeedsEventually(new Runnable() {
 +            @Override public void run() {
 +                assertFalse(Entities.isManaged(entity));
 +            }});
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ed62d61/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
----------------------------------------------------------------------
diff --cc usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
index 4a630de,0000000..8ffd465
mode 100644,000000..100644
--- a/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
+++ b/usage/launcher/src/test/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeRestTest.java
@@@ -1,149 -1,0 +1,149 @@@
 +/*
 + * 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.entity.brooklynnode;
 +
 +import java.net.URI;
 +import java.util.concurrent.Callable;
 +
++import org.apache.brooklyn.test.EntityTestUtils;
++import org.apache.brooklyn.test.HttpTestUtils;
 +import org.apache.http.client.HttpClient;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +import org.testng.Assert;
 +import org.testng.annotations.Test;
 +
 +import brooklyn.entity.Application;
 +import brooklyn.entity.basic.ApplicationBuilder;
 +import brooklyn.entity.basic.Attributes;
 +import brooklyn.entity.basic.Entities;
 +import brooklyn.entity.basic.EntityInternal;
 +import brooklyn.entity.brooklynnode.BrooklynEntityMirror;
 +import brooklyn.entity.brooklynnode.BrooklynNode;
 +import brooklyn.entity.brooklynnode.SameBrooklynNodeImpl;
 +import brooklyn.entity.proxying.EntitySpec;
 +import brooklyn.event.basic.BasicConfigKey;
 +import org.apache.brooklyn.launcher.SimpleYamlLauncherForTests;
 +import org.apache.brooklyn.launcher.camp.SimpleYamlLauncher;
 +import brooklyn.location.Location;
 +import brooklyn.management.Task;
- import brooklyn.test.EntityTestUtils;
- import brooklyn.test.HttpTestUtils;
 +import brooklyn.test.entity.TestApplication;
 +import brooklyn.test.entity.TestEntity;
 +import brooklyn.util.collections.Jsonya;
 +import brooklyn.util.collections.MutableMap;
 +import brooklyn.util.collections.MutableSet;
 +import brooklyn.util.config.ConfigBag;
 +import brooklyn.util.http.HttpTool;
 +import brooklyn.util.http.HttpToolResponse;
 +import brooklyn.util.net.Urls;
 +import brooklyn.util.repeat.Repeater;
 +import brooklyn.util.time.Duration;
 +
 +import com.google.common.collect.Iterables;
 +
 +/** REST-accessible extension of {@link BrooklynNodeTest} */
 +public class BrooklynNodeRestTest {
 +
 +    private static final Logger log = LoggerFactory.getLogger(BrooklynNodeRestTest.class);
 +    
 +    // takes a while when run on its own, because initializing war and making some requests;
 +    // but there are no waits (beyond 10ms), the delay is all classloading;
 +    // and this tests a lot of things, REST API, Brooklyn Node, yaml deployment,
 +    // so feels worth it to have as a unit test
 +    // FIXME[BROOKLYN-43]: Test fails if security is configured in brooklyn.properties.
 +    @Test(groups = "WIP")
 +    public void testBrooklynNodeRestDeployAndMirror() {
 +        final SimpleYamlLauncher l = new SimpleYamlLauncherForTests();
 +        try {
 +            TestApplication app = ApplicationBuilder.newManagedApp(TestApplication.class, l.getManagementContext());
 +
 +            BrooklynNode bn = app.createAndManageChild(EntitySpec.create(BrooklynNode.class, SameBrooklynNodeImpl.class));
 +            bn.start(MutableSet.<Location>of());
 +            
 +            URI uri = bn.getAttribute(BrooklynNode.WEB_CONSOLE_URI);
 +            Assert.assertNotNull(uri);
 +            EntityTestUtils.assertAttributeEqualsEventually(bn, Attributes.SERVICE_UP, true);
 +            log.info("Created BrooklynNode: "+bn);
 +
 +            // deploy
 +            Task<?> t = bn.invoke(BrooklynNode.DEPLOY_BLUEPRINT, ConfigBag.newInstance()
 +                .configure(BrooklynNode.DeployBlueprintEffector.BLUEPRINT_TYPE, TestApplication.class.getName())
 +                .configure(BrooklynNode.DeployBlueprintEffector.BLUEPRINT_CONFIG, MutableMap.<String,Object>of("x", 1, "y", "Y"))
 +                .getAllConfig());
 +            log.info("Deployment result: "+t.getUnchecked());
 +            
 +            MutableSet<Application> apps = MutableSet.copyOf( l.getManagementContext().getApplications() );
 +            Assert.assertEquals(apps.size(), 2);
 +            apps.remove(app);
 +            
 +            Application newApp = Iterables.getOnlyElement(apps);
 +            Entities.dumpInfo(newApp);
 +            
 +            Assert.assertEquals(newApp.getConfig(new BasicConfigKey<Integer>(Integer.class, "x")), (Integer)1);
 +            
 +            // check mirror
 +            String newAppId = newApp.getId();
 +            BrooklynEntityMirror mirror = app.createAndManageChild(EntitySpec.create(BrooklynEntityMirror.class)
 +                .configure(BrooklynEntityMirror.MIRRORED_ENTITY_URL, 
 +                    Urls.mergePaths(uri.toString(), "/v1/applications/"+newAppId+"/entities/"+newAppId))
 +                .configure(BrooklynEntityMirror.MIRRORED_ENTITY_ID, newAppId)
 +                .configure(BrooklynEntityMirror.POLL_PERIOD, Duration.millis(10)));
 +            
 +            Entities.dumpInfo(mirror);
 +            
 +            EntityTestUtils.assertAttributeEqualsEventually(mirror, Attributes.SERVICE_UP, true);
 +            
 +            ((EntityInternal)newApp).setAttribute(TestEntity.NAME, "foo");
 +            EntityTestUtils.assertAttributeEqualsEventually(mirror, TestEntity.NAME, "foo");
 +            log.info("Mirror successfully validated");
 +            
 +            // also try deploying by invoking deploy through json
 +            // (catch issues when effector params are map)
 +            HttpClient client = HttpTool.httpClientBuilder().build();
 +            HttpToolResponse result = HttpTool.httpPost(client, URI.create(Urls.mergePaths(uri.toString(), "/v1/applications/"+app.getId()+"/entities/"+bn.getId()
 +                    +"/effectors/deployBlueprint")), 
 +                MutableMap.of(com.google.common.net.HttpHeaders.CONTENT_TYPE, "application/json"), 
 +                Jsonya.newInstance()
 +                    .put("blueprintType", TestApplication.class.getName())
 +                    .put("blueprintConfig", MutableMap.of(TestEntity.CONF_NAME.getName(), "foo"))
 +                .toString().getBytes());
 +            log.info("Deploy effector invoked, result: "+result);
 +            HttpTestUtils.assertHealthyStatusCode( result.getResponseCode() );
 +            
 +            Repeater.create().every(Duration.millis(10)).until(new Callable<Boolean>() {
 +                @Override
 +                public Boolean call() throws Exception {
 +                    return l.getManagementContext().getApplications().size() == 3;
 +                }
 +            }).limitTimeTo(Duration.TEN_SECONDS).runRequiringTrue();
 +            
 +            apps = MutableSet.copyOf( l.getManagementContext().getApplications() );
 +            apps.removeAll( MutableSet.of(app, newApp) );
 +            Application newApp2 = Iterables.getOnlyElement(apps);
 +            Entities.dumpInfo(newApp2);
 +            
 +            EntityTestUtils.assertAttributeEqualsEventually(newApp2, Attributes.SERVICE_UP, true);
 +            Assert.assertEquals(newApp2.getConfig(TestEntity.CONF_NAME), "foo");
 +            
 +        } finally {
 +            l.destroyAll();
 +        }
 +        log.info("DONE");
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ed62d61/usage/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java
----------------------------------------------------------------------
diff --cc usage/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java
index df295d8,0000000..63ba561
mode 100644,000000..100644
--- a/usage/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java
+++ b/usage/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java
@@@ -1,368 -1,0 +1,368 @@@
 +/*
 + * 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.launcher;
 +
 +import org.apache.brooklyn.launcher.BrooklynLauncher;
 +import static org.testng.Assert.assertEquals;
 +import static org.testng.Assert.assertNotNull;
 +import static org.testng.Assert.assertNull;
 +import static org.testng.Assert.assertSame;
 +import static org.testng.Assert.assertTrue;
 +
 +import java.io.File;
 +import java.io.IOException;
 +import java.io.StringWriter;
 +import java.io.Writer;
 +import java.net.URI;
 +import java.nio.charset.Charset;
 +import java.util.Properties;
 +
++import org.apache.brooklyn.test.HttpTestUtils;
 +import org.testng.Assert;
 +import org.testng.annotations.AfterMethod;
 +import org.testng.annotations.Test;
 +
 +import brooklyn.catalog.internal.CatalogInitialization;
 +import brooklyn.config.BrooklynProperties;
 +import brooklyn.config.BrooklynServerConfig;
 +import brooklyn.entity.Application;
 +import brooklyn.entity.basic.ApplicationBuilder;
 +import brooklyn.entity.proxying.EntitySpec;
 +import brooklyn.entity.rebind.RebindTestUtils;
 +import brooklyn.location.Location;
 +import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 +import brooklyn.management.ManagementContext;
 +import brooklyn.management.internal.LocalManagementContext;
 +import brooklyn.management.internal.ManagementContextInternal;
- import brooklyn.test.HttpTestUtils;
 +import brooklyn.test.entity.LocalManagementContextForTests;
 +import brooklyn.test.entity.TestApplication;
 +import brooklyn.test.entity.TestApplicationImpl;
 +import brooklyn.test.entity.TestEntity;
 +import brooklyn.util.exceptions.FatalRuntimeException;
 +import brooklyn.util.io.FileUtil;
 +import brooklyn.util.net.Urls;
 +import brooklyn.util.os.Os;
 +import brooklyn.util.text.StringFunctions;
 +import brooklyn.util.text.Strings;
 +
 +import com.google.api.client.util.Preconditions;
 +import com.google.common.base.Charsets;
 +import com.google.common.base.Function;
 +import com.google.common.base.Predicates;
 +import com.google.common.collect.ImmutableList;
 +import com.google.common.collect.Iterables;
 +import com.google.common.collect.Maps;
 +import com.google.common.io.Files;
 +
 +public class BrooklynLauncherTest {
 +    
 +    private BrooklynLauncher launcher;
 +    private File persistenceDir;
 +    
 +    @AfterMethod(alwaysRun=true)
 +    public void tearDown() throws Exception {
 +        if (launcher != null) launcher.terminate();
 +        if (persistenceDir != null) RebindTestUtils.deleteMementoDir(persistenceDir);
 +        launcher = null;
 +    }
 +    
 +    // Integration because takes a few seconds to start web-console
 +    @Test(groups="Integration")
 +    public void testStartsWebServerOnExpectectedPort() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .webconsolePort("10000+")
 +                .start();
 +        
 +        String webServerUrlStr = launcher.getServerDetails().getWebServerUrl();
 +        URI webServerUri = new URI(webServerUrlStr);
 +        
 +        assertEquals(launcher.getApplications(), ImmutableList.of());
 +        assertTrue(webServerUri.getPort() >= 10000 && webServerUri.getPort() < 10100, "port="+webServerUri.getPort()+"; uri="+webServerUri);
 +        HttpTestUtils.assertUrlReachable(webServerUrlStr);
 +    }
 +    
 +    // Integration because takes a few seconds to start web-console
 +    @Test(groups="Integration")
 +    public void testWebServerTempDirRespectsDataDirConfig() throws Exception {
 +        String dataDirName = ".brooklyn-foo"+Strings.makeRandomId(4);
 +        String dataDir = "~/"+dataDirName;
 +
 +        launcher = newLauncherForTests(true)
 +                .brooklynProperties(BrooklynServerConfig.MGMT_BASE_DIR, dataDir)
 +                .start();
 +        
 +        ManagementContext managementContext = launcher.getServerDetails().getManagementContext();
 +        String expectedTempDir = Os.mergePaths(Os.home(), dataDirName, "planes", managementContext.getManagementPlaneId(), managementContext.getManagementNodeId(), "jetty");
 +        
 +        File webappTempDir = launcher.getServerDetails().getWebServer().getWebappTempDir();
 +        assertEquals(webappTempDir.getAbsolutePath(), expectedTempDir);
 +    }
 +    
 +    @Test
 +    public void testCanDisableWebServerStartup() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .webconsole(false)
 +                .start();
 +        
 +        assertNull(launcher.getServerDetails().getWebServer());
 +        assertNull(launcher.getServerDetails().getWebServerUrl());
 +        Assert.assertTrue( ((ManagementContextInternal)launcher.getServerDetails().getManagementContext()).errors().isEmpty() );
 +    }
 +    
 +    @Test
 +    public void testStartsAppInstance() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .webconsole(false)
 +                .application(new TestApplicationImpl())
 +                .start();
 +        
 +        assertOnlyApp(launcher, TestApplication.class);
 +    }
 +    
 +    @Test
 +    public void testStartsAppFromSpec() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .webconsole(false)
 +                .application(EntitySpec.create(TestApplication.class))
 +                .start();
 +        
 +        assertOnlyApp(launcher, TestApplication.class);
 +    }
 +    
 +    @Test
 +    public void testStartsAppFromBuilder() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .webconsole(false)
 +                .application(new ApplicationBuilder(EntitySpec.create(TestApplication.class)) {
 +                        @Override protected void doBuild() {
 +                        }})
 +                .start();
 +        
 +        assertOnlyApp(launcher, TestApplication.class);
 +    }
 +
 +    @Test
 +    public void testStartsAppFromYAML() throws Exception {
 +        String yaml = "name: example-app\n" +
 +                "services:\n" +
 +                "- serviceType: brooklyn.test.entity.TestEntity\n" +
 +                "  name: test-app";
 +        launcher = newLauncherForTests(true)
 +                .webconsole(false)
 +                .application(yaml)
 +                .start();
 +
 +        assertEquals(launcher.getApplications().size(), 1, "apps="+launcher.getApplications());
 +        Application app = Iterables.getOnlyElement(launcher.getApplications());
 +        assertEquals(app.getChildren().size(), 1, "children=" + app.getChildren());
 +        assertTrue(Iterables.getOnlyElement(app.getChildren()) instanceof TestEntity);
 +    }
 +    
 +    @Test  // may take 2s initializing location if running this test case alone, but noise if running suite 
 +    public void testStartsAppInSuppliedLocations() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .webconsole(false)
 +                .location("localhost")
 +                .application(new ApplicationBuilder(EntitySpec.create(TestApplication.class)) {
 +                        @Override protected void doBuild() {
 +                        }})
 +                .start();
 +        
 +        Application app = Iterables.find(launcher.getApplications(), Predicates.instanceOf(TestApplication.class));
 +        assertOnlyLocation(app, LocalhostMachineProvisioningLocation.class);
 +    }
 +    
 +    @Test
 +    public void testUsesSuppliedManagementContext() throws Exception {
 +        LocalManagementContext myManagementContext = LocalManagementContextForTests.newInstance();
 +        launcher = newLauncherForTests(false)
 +                .webconsole(false)
 +                .managementContext(myManagementContext)
 +                .start();
 +        
 +        assertSame(launcher.getServerDetails().getManagementContext(), myManagementContext);
 +    }
 +    
 +    @Test
 +    public void testUsesSuppliedBrooklynProperties() throws Exception {
 +        BrooklynProperties props = LocalManagementContextForTests.builder(true).buildProperties();
 +        props.put("mykey", "myval");
 +        launcher = newLauncherForTests(false)
 +                .webconsole(false)
 +                .brooklynProperties(props)
 +                .start();
 +        
 +        assertEquals(launcher.getServerDetails().getManagementContext().getConfig().getFirst("mykey"), "myval");
 +    }
 +
 +    @Test
 +    public void testUsesSupplementaryBrooklynProperties() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .webconsole(false)
 +                .brooklynProperties("mykey", "myval")
 +                .start();
 +        
 +        assertEquals(launcher.getServerDetails().getManagementContext().getConfig().getFirst("mykey"), "myval");
 +    }
 +    
 +    @Test
 +    public void testReloadBrooklynPropertiesRestoresProgrammaticProperties() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .webconsole(false)
 +                .brooklynProperties("mykey", "myval")
 +                .start();
 +        LocalManagementContext managementContext = (LocalManagementContext)launcher.getServerDetails().getManagementContext();
 +        assertEquals(managementContext.getConfig().getFirst("mykey"), "myval");
 +        managementContext.getBrooklynProperties().put("mykey", "newval");
 +        assertEquals(managementContext.getConfig().getFirst("mykey"), "newval");
 +        managementContext.reloadBrooklynProperties();
 +        assertEquals(managementContext.getConfig().getFirst("mykey"), "myval");
 +    }
 +    
 +    @Test
 +    public void testReloadBrooklynPropertiesFromFile() throws Exception {
 +        File globalPropertiesFile = File.createTempFile("local-brooklyn-properties-test", ".properties");
 +        FileUtil.setFilePermissionsTo600(globalPropertiesFile);
 +        try {
 +            String property = "mykey=myval";
 +            Files.append(getMinimalLauncherPropertiesString()+property, globalPropertiesFile, Charsets.UTF_8);
 +            launcher = newLauncherForTests(false)
 +                    .webconsole(false)
 +                    .globalBrooklynPropertiesFile(globalPropertiesFile.getAbsolutePath())
 +                    .start();
 +            LocalManagementContext managementContext = (LocalManagementContext)launcher.getServerDetails().getManagementContext();
 +            assertEquals(managementContext.getConfig().getFirst("mykey"), "myval");
 +            property = "mykey=newval";
 +            Files.write(getMinimalLauncherPropertiesString()+property, globalPropertiesFile, Charsets.UTF_8);
 +            managementContext.reloadBrooklynProperties();
 +            assertEquals(managementContext.getConfig().getFirst("mykey"), "newval");
 +        } finally {
 +            globalPropertiesFile.delete();
 +        }
 +    }
 +
 +    @Test(groups="Integration")
 +    public void testChecksGlobalBrooklynPropertiesPermissionsX00() throws Exception {
 +        File propsFile = File.createTempFile("testChecksGlobalBrooklynPropertiesPermissionsX00", ".properties");
 +        propsFile.setReadable(true, false);
 +        try {
 +            launcher = newLauncherForTests(false)
 +                    .webconsole(false)
 +                    .globalBrooklynPropertiesFile(propsFile.getAbsolutePath())
 +                    .start();
 +
 +            Assert.fail("Should have thrown");
 +        } catch (FatalRuntimeException e) {
 +            if (!e.toString().contains("Invalid permissions for file")) throw e;
 +        } finally {
 +            propsFile.delete();
 +        }
 +    }
 +
 +    @Test(groups="Integration")
 +    public void testChecksLocalBrooklynPropertiesPermissionsX00() throws Exception {
 +        File propsFile = File.createTempFile("testChecksLocalBrooklynPropertiesPermissionsX00", ".properties");
 +        propsFile.setReadable(true, false);
 +        try {
 +            launcher = newLauncherForTests(false)
 +                    .webconsole(false)
 +                    .localBrooklynPropertiesFile(propsFile.getAbsolutePath())
 +                    .start();
 +            
 +            Assert.fail("Should have thrown");
 +        } catch (FatalRuntimeException e) {
 +            if (!e.toString().contains("Invalid permissions for file")) throw e;
 +        } finally {
 +            propsFile.delete();
 +        }
 +    }
 +
 +    @Test(groups="Integration")
 +    public void testStartsWithBrooklynPropertiesPermissionsX00() throws Exception {
 +        File globalPropsFile = File.createTempFile("testChecksLocalBrooklynPropertiesPermissionsX00_global", ".properties");
 +        Files.write(getMinimalLauncherPropertiesString()+"key_in_global=1", globalPropsFile, Charset.defaultCharset());
 +        File localPropsFile = File.createTempFile("testChecksLocalBrooklynPropertiesPermissionsX00_local", ".properties");
 +        Files.write("key_in_local=2", localPropsFile, Charset.defaultCharset());
 +        FileUtil.setFilePermissionsTo600(globalPropsFile);
 +        FileUtil.setFilePermissionsTo600(localPropsFile);
 +        try {
 +            launcher = newLauncherForTests(false)
 +                    .webconsole(false)
 +                    .localBrooklynPropertiesFile(localPropsFile.getAbsolutePath())
 +                    .globalBrooklynPropertiesFile(globalPropsFile.getAbsolutePath())
 +                    .start();
 +            assertEquals(launcher.getServerDetails().getManagementContext().getConfig().getFirst("key_in_global"), "1");
 +            assertEquals(launcher.getServerDetails().getManagementContext().getConfig().getFirst("key_in_local"), "2");
 +        } finally {
 +            globalPropsFile.delete();
 +            localPropsFile.delete();
 +        }
 +    }
 +    
 +    @Test  // takes a bit of time because starts webapp, but also tests rest api so useful
 +    public void testErrorsCaughtByApiAndRestApiWorks() throws Exception {
 +        launcher = newLauncherForTests(true)
 +                .catalogInitialization(new CatalogInitialization(null, false, null, false).addPopulationCallback(new Function<CatalogInitialization, Void>() {
 +                    @Override
 +                    public Void apply(CatalogInitialization input) {
 +                        throw new RuntimeException("deliberate-exception-for-testing");
 +                    }
 +                }))
 +                .start();
 +        // such an error should be thrown, then caught in this calling thread
 +        ManagementContext mgmt = launcher.getServerDetails().getManagementContext();
 +        Assert.assertFalse( ((ManagementContextInternal)mgmt).errors().isEmpty() );
 +        Assert.assertTrue( ((ManagementContextInternal)mgmt).errors().get(0).toString().contains("deliberate"), ""+((ManagementContextInternal)mgmt).errors() );
 +        HttpTestUtils.assertContentMatches(
 +            Urls.mergePaths(launcher.getServerDetails().getWebServerUrl(), "v1/server/up"), 
 +            "true");
 +        HttpTestUtils.assertContentMatches(
 +            Urls.mergePaths(launcher.getServerDetails().getWebServerUrl(), "v1/server/healthy"), 
 +            "false");
 +        // TODO test errors api?
 +    }
 +
 +    private BrooklynLauncher newLauncherForTests(boolean minimal) {
 +        Preconditions.checkArgument(launcher==null, "can only be used if no launcher yet");
 +        BrooklynLauncher launcher = BrooklynLauncher.newInstance();
 +        if (minimal)
 +            launcher.brooklynProperties(LocalManagementContextForTests.builder(true).buildProperties());
 +        return launcher;
 +    }
 +
 +    private String getMinimalLauncherPropertiesString() throws IOException {
 +        BrooklynProperties p1 = LocalManagementContextForTests.builder(true).buildProperties();
 +        Properties p = new Properties();
 +        p.putAll(Maps.transformValues(p1.asMapWithStringKeys(), StringFunctions.toStringFunction()));
 +        Writer w = new StringWriter();
 +        p.store(w, "test");
 +        w.close();
 +        return w.toString()+"\n";
 +    }
 +
 +    private void assertOnlyApp(BrooklynLauncher launcher, Class<? extends Application> expectedType) {
 +        assertEquals(launcher.getApplications().size(), 1, "apps="+launcher.getApplications());
 +        assertNotNull(Iterables.find(launcher.getApplications(), Predicates.instanceOf(TestApplication.class), null), "apps="+launcher.getApplications());
 +    }
 +    
 +    private void assertOnlyLocation(Application app, Class<? extends Location> expectedType) {
 +        assertEquals(app.getLocations().size(), 1, "locs="+app.getLocations());
 +        assertNotNull(Iterables.find(app.getLocations(), Predicates.instanceOf(LocalhostMachineProvisioningLocation.class), null), "locs="+app.getLocations());
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ed62d61/usage/launcher/src/test/java/org/apache/brooklyn/launcher/WebAppRunnerTest.java
----------------------------------------------------------------------
diff --cc usage/launcher/src/test/java/org/apache/brooklyn/launcher/WebAppRunnerTest.java
index 3aa6334,0000000..f347600
mode 100644,000000..100644
--- a/usage/launcher/src/test/java/org/apache/brooklyn/launcher/WebAppRunnerTest.java
+++ b/usage/launcher/src/test/java/org/apache/brooklyn/launcher/WebAppRunnerTest.java
@@@ -1,171 -1,0 +1,171 @@@
 +/*
 + * 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.launcher;
 +
 +import org.apache.brooklyn.launcher.BrooklynWebServer;
 +import org.apache.brooklyn.launcher.BrooklynLauncher;
 +import org.apache.brooklyn.launcher.BrooklynServerDetails;
 +import static org.testng.Assert.assertNotNull;
 +import static org.testng.Assert.fail;
 +
 +import java.util.List;
 +import java.util.Map;
 +
++import org.apache.brooklyn.test.HttpTestUtils;
 +import org.apache.brooklyn.test.TestResourceUnavailableException;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +import org.testng.annotations.AfterMethod;
 +import org.testng.annotations.Test;
 +
 +import brooklyn.config.BrooklynProperties;
 +import brooklyn.entity.basic.Entities;
 +import brooklyn.management.internal.LocalManagementContext;
 +import brooklyn.management.internal.ManagementContextInternal;
- import brooklyn.test.HttpTestUtils;
 +import brooklyn.util.collections.MutableMap;
 +import brooklyn.util.net.Networking;
 +
 +import com.google.common.collect.Lists;
 +
 +
 +/**
 + * These tests require the brooklyn.war to work. (Should be placed by maven build.)
 + */
 +public class WebAppRunnerTest {
 +
 +    public static final Logger log = LoggerFactory.getLogger(WebAppRunnerTest.class);
 +            
 +    List<LocalManagementContext> managementContexts = Lists.newCopyOnWriteArrayList();
 +    
 +    @AfterMethod(alwaysRun=true)
 +    public void tearDown() throws Exception {
 +        for (LocalManagementContext managementContext : managementContexts) {
 +            Entities.destroyAll(managementContext);
 +        }
 +        managementContexts.clear();
 +    }
 +    
 +    LocalManagementContext newManagementContext(BrooklynProperties brooklynProperties) {
 +        LocalManagementContext result = new LocalManagementContext(brooklynProperties);
 +        managementContexts.add(result);
 +        return result;
 +    }
 +    
 +    @SuppressWarnings({ "unchecked", "rawtypes" })
 +    BrooklynWebServer createWebServer(Map properties) {
 +        Map bigProps = MutableMap.copyOf(properties);
 +        Map attributes = MutableMap.copyOf( (Map) bigProps.get("attributes") );
 +        bigProps.put("attributes", attributes);
 +
 +        BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
 +        brooklynProperties.putAll(bigProps);
 +        brooklynProperties.put("brooklyn.webconsole.security.provider","brooklyn.rest.security.provider.AnyoneSecurityProvider");
 +        brooklynProperties.put("brooklyn.webconsole.security.https.required","false");
 +        return new BrooklynWebServer(bigProps, newManagementContext(brooklynProperties));
 +    }
 +    
 +    @Test
 +    public void testStartWar1() throws Exception {
 +        if (!Networking.isPortAvailable(8090))
 +            fail("Another process is using port 8090 which is required for this test.");
 +        BrooklynWebServer server = createWebServer(MutableMap.of("port", 8090));
 +        assertNotNull(server);
 +        
 +        try {
 +            server.start();
 +            assertBrooklynEventuallyAt("http://localhost:8090/");
 +        } finally {
 +            server.stop();
 +        }
 +    }
 +
 +    public static void assertBrooklynEventuallyAt(String url) {
 +        HttpTestUtils.assertContentEventuallyContainsText(url, "Brooklyn Web Console");
 +    }
 +
 +    @Test
 +    public void testStartSecondaryWar() throws Exception {
 +        TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/hello-world.war");
 +
 +        if (!Networking.isPortAvailable(8090))
 +            fail("Another process is using port 8090 which is required for this test.");
 +        BrooklynWebServer server = createWebServer(
 +            MutableMap.of("port", 8090, "war", "brooklyn.war", "wars", MutableMap.of("hello", "hello-world.war")) );
 +        assertNotNull(server);
 +        
 +        try {
 +            server.start();
 +
 +            assertBrooklynEventuallyAt("http://localhost:8090/");
 +            HttpTestUtils.assertContentEventuallyContainsText("http://localhost:8090/hello",
 +                "This is the home page for a sample application");
 +
 +        } finally {
 +            server.stop();
 +        }
 +    }
 +
 +    @Test
 +    public void testStartSecondaryWarAfter() throws Exception {
 +        TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/hello-world.war");
 +
 +        if (!Networking.isPortAvailable(8090))
 +            fail("Another process is using port 8090 which is required for this test.");
 +        BrooklynWebServer server = createWebServer(MutableMap.of("port", 8090, "war", "brooklyn.war"));
 +        assertNotNull(server);
 +        
 +        try {
 +            server.start();
 +            server.deploy("/hello", "hello-world.war");
 +
 +            assertBrooklynEventuallyAt("http://localhost:8090/");
 +            HttpTestUtils.assertContentEventuallyContainsText("http://localhost:8090/hello",
 +                "This is the home page for a sample application");
 +
 +        } finally {
 +            server.stop();
 +        }
 +    }
 +
 +    @Test
 +    public void testStartWithLauncher() throws Exception {
 +        TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/hello-world.war");
 +
 +        BrooklynLauncher launcher = BrooklynLauncher.newInstance()
 +                .brooklynProperties(BrooklynProperties.Factory.newEmpty())
 +                .brooklynProperties("brooklyn.webconsole.security.provider","brooklyn.rest.security.provider.AnyoneSecurityProvider")
 +                .webapp("/hello", "hello-world.war")
 +                .start();
 +        BrooklynServerDetails details = launcher.getServerDetails();
 +        
 +        try {
 +            details.getWebServer().deploy("/hello2", "hello-world.war");
 +
 +            assertBrooklynEventuallyAt(details.getWebServerUrl());
 +            HttpTestUtils.assertContentEventuallyContainsText(details.getWebServerUrl()+"hello", "This is the home page for a sample application");
 +            HttpTestUtils.assertContentEventuallyContainsText(details.getWebServerUrl()+"hello2", "This is the home page for a sample application");
 +            HttpTestUtils.assertHttpStatusCodeEventuallyEquals(details.getWebServerUrl()+"hello0", 404);
 +
 +        } finally {
 +            details.getWebServer().stop();
 +            ((ManagementContextInternal)details.getManagementContext()).terminate();
 +        }
 +    }
 +    
 +}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ed62d61/usage/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
----------------------------------------------------------------------
diff --cc usage/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
index ab73cbf,0000000..3f39f91
mode 100644,000000..100644
--- a/usage/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
+++ b/usage/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
@@@ -1,202 -1,0 +1,202 @@@
 +/*
 + * 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.launcher.blueprints;
 +
 +import static org.testng.Assert.assertNotEquals;
 +
 +import java.io.File;
 +import java.io.Reader;
 +import java.io.StringReader;
 +import java.util.Collection;
 +
 +import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherAbstract;
++import org.apache.brooklyn.test.EntityTestUtils;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +import org.testng.annotations.AfterMethod;
 +import org.testng.annotations.BeforeMethod;
 +
 +import brooklyn.entity.Application;
 +import brooklyn.entity.Entity;
 +import brooklyn.entity.basic.Attributes;
 +import brooklyn.entity.basic.Entities;
 +import brooklyn.entity.basic.Lifecycle;
 +import brooklyn.entity.basic.SoftwareProcess;
 +import brooklyn.entity.rebind.RebindOptions;
 +import brooklyn.entity.rebind.RebindTestUtils;
 +import brooklyn.entity.rebind.persister.FileBasedObjectStore;
 +import org.apache.brooklyn.launcher.BrooklynLauncher;
 +import org.apache.brooklyn.launcher.SimpleYamlLauncherForTests;
 +import org.apache.brooklyn.launcher.camp.BrooklynCampPlatformLauncher;
 +import brooklyn.management.ManagementContext;
 +import brooklyn.management.internal.LocalManagementContext;
 +import brooklyn.test.Asserts;
- import brooklyn.test.EntityTestUtils;
 +import brooklyn.util.ResourceUtils;
 +import brooklyn.util.os.Os;
 +
 +public abstract class AbstractBlueprintTest {
 +
 +    private static final Logger LOG = LoggerFactory.getLogger(AbstractBlueprintTest.class);
 +    
 +    protected File mementoDir;
 +    protected ClassLoader classLoader = AbstractBlueprintTest.class.getClassLoader();
 +    
 +    protected ManagementContext mgmt;
 +    protected SimpleYamlLauncherForTests launcher;
 +    protected BrooklynLauncher viewer;
 +
 +    @BeforeMethod(alwaysRun=true)
 +    public void setUp() throws Exception {
 +        mementoDir = Os.newTempDir(getClass());
 +        mgmt = createOrigManagementContext();
 +        LOG.info("Test "+getClass()+" persisting to "+mementoDir);
 +
 +        launcher = new SimpleYamlLauncherForTests() {
 +            @Override
 +            protected BrooklynCampPlatformLauncherAbstract newPlatformLauncher() {
 +                return new BrooklynCampPlatformLauncher() {
 +                    protected ManagementContext newManagementContext() {
 +                        return AbstractBlueprintTest.this.mgmt;
 +                    }
 +                };
 +            }
 +        };
 +        viewer = BrooklynLauncher.newInstance()
 +                .managementContext(mgmt)
 +                .start();
 +    }
 +
 +    @AfterMethod(alwaysRun=true)
 +    public void tearDown() throws Exception {
 +        try {
 +            if (mgmt != null) {
 +                for (Application app: mgmt.getApplications()) {
 +                    LOG.debug("destroying app "+app+" (managed? "+Entities.isManaged(app)+"; mgmt is "+mgmt+")");
 +                    try {
 +                        Entities.destroy(app);
 +                        LOG.debug("destroyed app "+app+"; mgmt now "+mgmt);
 +                    } catch (Exception e) {
 +                        LOG.error("problems destroying app "+app, e);
 +                    }
 +                }
 +            }
 +            if (launcher != null) launcher.destroyAll();
 +            if (viewer != null) viewer.terminate();
 +            if (mgmt != null) Entities.destroyAll(mgmt);
 +            if (mementoDir != null) FileBasedObjectStore.deleteCompletely(mementoDir);
 +        } catch (Throwable t) {
 +            LOG.error("Caught exception in tearDown method", t);
 +        } finally {
 +            mgmt = null;
 +            launcher = null;
 +        }
 +    }
 +
 +    protected void runTest(String yamlFile) throws Exception {
 +        final Application app = launcher.launchAppYaml(yamlFile);
 +        
 +        assertNoFires(app);
 +        
 +        Application newApp = rebind();
 +        assertNoFires(newApp);
 +    }
 +    
 +    protected void runTest(Reader yaml) throws Exception {
 +        final Application app = launcher.launchAppYaml(yaml);
 +        
 +        assertNoFires(app);
 +        
 +        Application newApp = rebind();
 +        assertNoFires(newApp);
 +    }
 +    
 +    protected void assertNoFires(final Entity app) {
 +        EntityTestUtils.assertAttributeEqualsEventually(app, Attributes.SERVICE_UP, true);
 +        EntityTestUtils.assertAttributeEqualsEventually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
 +        
 +        Asserts.succeedsEventually(new Runnable() {
 +            public void run() {
 +                for (Entity entity : Entities.descendants(app)) {
 +                    assertNotEquals(entity.getAttribute(Attributes.SERVICE_STATE_ACTUAL), Lifecycle.ON_FIRE);
 +                    assertNotEquals(entity.getAttribute(Attributes.SERVICE_UP), false);
 +                    
 +                    if (entity instanceof SoftwareProcess) {
 +                        EntityTestUtils.assertAttributeEquals(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
 +                        EntityTestUtils.assertAttributeEquals(entity, Attributes.SERVICE_UP, Boolean.TRUE);
 +                    }
 +                }
 +            }});
 +    }
 +
 +    protected Reader loadYaml(String url, String location) {
 +        String yaml = 
 +                "location: "+location+"\n"+
 +                new ResourceUtils(this).getResourceAsString(url);
 +        return new StringReader(yaml);
 +    }
 +    
 +    
 +    //////////////////////////////////////////////////////////////////
 +    // FOR REBIND                                                   //
 +    // See brooklyn.entity.rebind.RebindTestFixture in core's tests //
 +    //////////////////////////////////////////////////////////////////
 +
 +    /** rebinds, and sets newApp */
 +    protected Application rebind() throws Exception {
 +        return rebind(RebindOptions.create());
 +    }
 +
 +    protected Application rebind(RebindOptions options) throws Exception {
 +        ManagementContext origMgmt = mgmt;
 +        ManagementContext newMgmt = createNewManagementContext();
 +        Collection<Application> origApps = origMgmt.getApplications();
 +        
 +        options = RebindOptions.create(options);
 +        if (options.classLoader == null) options.classLoader(classLoader);
 +        if (options.mementoDir == null) options.mementoDir(mementoDir);
 +        if (options.origManagementContext == null) options.origManagementContext(origMgmt);
 +        if (options.newManagementContext == null) options.newManagementContext(newMgmt);
 +        
 +        for (Application origApp : origApps) {
 +            RebindTestUtils.waitForPersisted(origApp);
 +        }
 +        
 +        mgmt = options.newManagementContext;
 +        Application newApp = RebindTestUtils.rebind(options);
 +        return newApp;
 +    }
 +    
 +    /** @return A started management context */
 +    protected LocalManagementContext createOrigManagementContext() {
 +        return RebindTestUtils.managementContextBuilder(mementoDir, classLoader)
 +                .persistPeriodMillis(1)
 +                .forLive(true)
 +                .emptyCatalog(true)
 +                .buildStarted();
 +    }
 +
 +    /** @return An unstarted management context */
 +    protected LocalManagementContext createNewManagementContext() {
 +        return RebindTestUtils.managementContextBuilder(mementoDir, classLoader)
 +                .persistPeriodMillis(1)
 +                .forLive(true)
 +                .emptyCatalog(true)
 +                .buildUnstarted();
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ed62d61/usage/qa/src/test/java/org/apache/brooklyn/qa/brooklynnode/SoftlayerObtainPrivateLiveTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ed62d61/usage/qa/src/test/java/org/apache/brooklyn/qa/load/LoadTest.java
----------------------------------------------------------------------


[5/6] incubator-brooklyn git commit: [BROOKLYN-162] Update package name to a.o.b in usage/test-support

Posted by ha...@apache.org.
[BROOKLYN-162] Update package name to a.o.b in usage/test-support


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

Branch: refs/heads/master
Commit: 9e04407d1d3618deb720d915817da8745e9247fb
Parents: fc42b17
Author: Hadrian Zbarcea <ha...@apache.org>
Authored: Thu Aug 6 19:34:12 2015 -0400
Committer: Hadrian Zbarcea <ha...@apache.org>
Committed: Thu Aug 6 19:34:12 2015 -0400

----------------------------------------------------------------------
 ...stomAggregatingEnricherDeprecatedTest.groovy |   2 +-
 .../enricher/CustomAggregatingEnricherTest.java |   2 +-
 .../java/brooklyn/enricher/EnrichersTest.java   |   4 +-
 ...SensorPropagatingEnricherDeprecatedTest.java |   2 +-
 .../enricher/SensorPropagatingEnricherTest.java |   2 +-
 .../TransformingEnricherDeprecatedTest.groovy   |   2 +-
 .../enricher/TransformingEnricherTest.java      |   2 +-
 .../entity/EntityPreManagementTest.java         |   2 +-
 .../brooklyn/entity/basic/DataEntityTest.java   |   2 +-
 .../basic/DependentConfigurationTest.java       |   2 +-
 .../entity/basic/PolicyRegistrationTest.java    |   2 +-
 .../entity/basic/ServiceStateLogicTest.java     |   2 +-
 .../entity/effector/EffectorBasicTest.java      |   2 +-
 .../entity/group/DynamicClusterTest.java        |   4 +-
 .../entity/group/DynamicFabricTest.java         |   2 +-
 .../entity/group/GroupPickUpEntitiesTest.java   |   2 +-
 .../entity/rebind/RebindEnricherTest.java       |   2 +-
 .../entity/rebind/RebindEntityTest.java         |   4 +-
 .../brooklyn/entity/rebind/RebindFeedTest.java  |   2 +-
 .../entity/rebind/RebindFeedWithHaTest.java     |   2 +-
 .../event/feed/function/FunctionFeedTest.java   |   2 +-
 .../feed/http/HttpFeedIntegrationTest.java      |   2 +-
 .../feed/shell/ShellFeedIntegrationTest.java    |   2 +-
 .../event/feed/ssh/SshFeedIntegrationTest.java  |   2 +-
 .../WindowsPerformanceCounterFeedLiveTest.java  |   2 +-
 .../WindowsPerformanceCounterFeedTest.java      |   2 +-
 .../SshMachineLocationPerformanceTest.java      |   2 +-
 .../brooklyn/management/ha/HotStandbyTest.java  |   2 +-
 .../EntityPersistencePerformanceTest.java       |   2 +-
 ...lusterDatabaseExampleAppIntegrationTest.java |   7 +-
 .../os/AdvertiseWinrmLoginPolicyTest.java       |   2 +-
 .../policy/os/CreateUserPolicyLiveTest.java     |   2 +-
 .../policy/os/CreateUserPolicyTest.java         |   2 +-
 .../enricher/HttpLatencyDetectorTest.java       |   2 +-
 .../brooklyn/enricher/RebindEnricherTest.java   |   2 +-
 .../autoscaling/AutoScalerPolicyRebindTest.java |   2 +-
 .../policy/ha/ServiceFailureDetectorTest.java   |   2 +-
 .../brooklyn/policy/ha/ServiceReplacerTest.java |   2 +-
 ...ctSoftwareProcessRestartIntegrationTest.java |   2 +-
 .../basic/SoftwareProcessEntityRebindTest.java  |   2 +-
 .../entity/basic/SoftwareProcessEntityTest.java |   2 +-
 ...ftwareProcessAndChildrenIntegrationTest.java |   2 +-
 .../basic/lifecycle/ScriptHelperTest.java       |   2 +-
 .../BrooklynClusterIntegrationTest.java         |   2 +-
 .../BrooklynNodeIntegrationTest.java            |   4 +-
 .../brooklynnode/SelectMasterEffectorTest.java  |   2 +-
 .../brooklyn/entity/java/EntityPollingTest.java |   2 +-
 .../entity/java/VanillaJavaAppRebindTest.java   |   2 +-
 .../entity/machine/MachineEntityRebindTest.java |   2 +-
 .../entity/pool/AbstractServerPoolTest.java     |   2 +-
 .../brooklyn/entity/pool/ServerPoolTest.java    |   2 +-
 .../entity/software/StaticSensorTest.java       |   2 +-
 .../software/http/HttpRequestSensorTest.java    |   2 +-
 .../mysql/AbstractToyMySqlEntityTest.java       |   2 +-
 .../software/ssh/SshCommandIntegrationTest.java |   2 +-
 .../brooklyn/event/feed/jmx/JmxFeedTest.java    |   4 +-
 .../brooklyn/event/feed/jmx/JmxHelperTest.java  |   2 +-
 .../event/feed/jmx/RebindJmxFeedTest.java       |   2 +-
 .../basic/MachineDetailsEc2LiveTest.java        |   2 +-
 .../MachineDetailsGoogleComputeLiveTest.java    |   2 +-
 .../crate/CrateNodeIntegrationTest.java         |   2 +-
 .../PostgreSqlRebindIntegrationTest.java        |   2 +-
 .../messaging/activemq/ActiveMQEc2LiveTest.java |   2 +-
 .../activemq/ActiveMQGoogleComputeLiveTest.java |   4 +-
 .../activemq/ActiveMQIntegrationTest.java       |   2 +-
 .../messaging/kafka/KafkaIntegrationTest.java   |   2 +-
 .../entity/messaging/qpid/QpidEc2LiveTest.java  |   2 +-
 .../messaging/qpid/QpidIntegrationTest.java     |   4 +-
 .../messaging/rabbit/RabbitEc2LiveTest.java     |   2 +-
 .../messaging/rabbit/RabbitIntegrationTest.java |   2 +-
 .../storm/StormAbstractCloudLiveTest.java       |   2 +-
 .../messaging/storm/StormEc2LiveTest.java       |   2 +-
 .../zookeeper/ZooKeeperEc2LiveTest.java         |   2 +-
 .../zookeeper/ZooKeeperEnsembleLiveTest.java    |   4 +-
 .../monitoring/monit/MonitIntegrationTest.java  |   2 +-
 .../bind/BindDnsServerIntegrationTest.java      |   2 +-
 .../network/bind/BindDnsServerLiveTest.java     |   2 +-
 .../CassandraDatacenterIntegrationTest.java     |   2 +-
 .../cassandra/CassandraDatacenterLiveTest.java  |   2 +-
 ...assandraDatacenterRebindIntegrationTest.java |   2 +-
 .../cassandra/CassandraDatacenterTest.java      |   2 +-
 .../nosql/cassandra/CassandraFabricTest.java    |   2 +-
 .../cassandra/CassandraNodeEc2LiveTest.java     |   2 +-
 .../cassandra/CassandraNodeIntegrationTest.java |   4 +-
 .../nosql/cassandra/CassandraNodeLiveTest.java  |   2 +-
 .../CouchbaseSyncGatewayEc2LiveTest.java        |   2 +-
 .../nosql/couchdb/CouchDBClusterLiveTest.java   |   2 +-
 .../nosql/couchdb/CouchDBNodeEc2LiveTest.java   |   2 +-
 .../couchdb/CouchDBNodeIntegrationTest.java     |   2 +-
 .../nosql/couchdb/CouchDBNodeLiveTest.java      |   2 +-
 .../ElasticSearchClusterIntegrationTest.java    |   2 +-
 .../ElasticSearchNodeIntegrationTest.java       |   2 +-
 .../nosql/mongodb/MongoDBEc2LiveTest.java       |   4 +-
 .../nosql/mongodb/MongoDBIntegrationTest.java   |   2 +-
 .../mongodb/MongoDBRebindIntegrationTest.java   |   2 +-
 .../nosql/mongodb/MongoDBSoftLayerLiveTest.java |   2 +-
 .../MongoDBConfigServerIntegrationTest.java     |   2 +-
 ...MongoDBShardedDeploymentIntegrationTest.java |   2 +-
 .../redis/RedisClusterIntegrationTest.java      |   2 +-
 .../entity/nosql/redis/RedisEc2LiveTest.java    |   2 +-
 .../nosql/redis/RedisIntegrationTest.java       |   2 +-
 .../nosql/riak/RiakClusterEc2LiveTest.java      |   2 +-
 .../entity/nosql/riak/RiakNodeEc2LiveTest.java  |   2 +-
 .../riak/RiakNodeGoogleComputeLiveTest.java     |   2 +-
 .../nosql/riak/RiakNodeIntegrationTest.java     |   2 +-
 .../nosql/riak/RiakNodeSoftlayerLiveTest.java   |   2 +-
 .../nosql/solr/SolrServerEc2LiveTest.java       |   2 +-
 .../nosql/solr/SolrServerIntegrationTest.java   |   2 +-
 .../entity/nosql/solr/SolrServerLiveTest.java   |   2 +-
 .../osgi/karaf/KarafContainerEc2LiveTest.java   |   2 +-
 .../entity/osgi/karaf/KarafContainerTest.java   |   2 +-
 .../entity/dns/AbstractGeoDnsServiceTest.java   |   2 +-
 .../nginx/NginxClusterIntegrationTest.java      |   4 +-
 .../entity/proxy/nginx/NginxEc2LiveTest.java    |   4 +-
 .../nginx/NginxHttpsSslIntegrationTest.java     |   2 +-
 .../proxy/nginx/NginxIntegrationTest.java       |  10 +-
 .../proxy/nginx/NginxRebindIntegrationTest.java |  11 +-
 .../nginx/NginxRebindWithHaIntegrationTest.java |   4 +-
 .../nginx/NginxUrlMappingIntegrationTest.java   |   3 +-
 .../proxy/nginx/NginxWebClusterEc2LiveTest.java |   2 +-
 .../AbstractWebAppFixtureIntegrationTest.java   |   9 +-
 ...lledDynamicWebAppClusterIntegrationTest.java |   5 +-
 .../ControlledDynamicWebAppClusterTest.java     |   2 +-
 .../entity/webapp/DynamicWebAppClusterTest.java |   2 +-
 .../entity/webapp/DynamicWebAppFabricTest.java  |   2 +-
 ...ElasticJavaWebAppServiceIntegrationTest.java |   2 +-
 .../webapp/TomcatAutoScalerPolicyTest.java      |   2 +-
 .../webapp/WebAppConcurrentDeployTest.java      |   4 +-
 .../webapp/WebAppLiveIntegrationTest.groovy     |   4 +-
 ...namicWebAppClusterRebindIntegrationTest.java |   8 +-
 ...namicWebAppClusterRebindIntegrationTest.java |   8 +-
 .../jboss/JBoss6ServerAwsEc2LiveTest.java       |   2 +-
 ...Boss6ServerNonInheritingIntegrationTest.java |   2 +-
 .../jboss/JBoss7ServerAwsEc2LiveTest.java       |   2 +-
 .../jboss/JBoss7ServerDockerLiveTest.java       |   5 +-
 ...Boss7ServerNonInheritingIntegrationTest.java |   4 +-
 .../JBoss7ServerRebindingIntegrationTest.java   |   6 +-
 .../Jboss7ServerGoogleComputeLiveTest.java      |   2 +-
 .../webapp/nodejs/NodeJsWebAppEc2LiveTest.java  |   2 +-
 .../NodeJsWebAppFixtureIntegrationTest.java     |   6 +-
 .../nodejs/NodeJsWebAppSoftlayerLiveTest.java   |   2 +-
 .../webapp/tomcat/Tomcat8ServerEc2LiveTest.java |   3 +-
 .../tomcat/Tomcat8ServerSoftlayerLiveTest.java  |   3 +-
 .../webapp/tomcat/TomcatServerEc2LiveTest.java  |   2 +-
 .../tomcat/TomcatServerSoftlayerLiveTest.java   |   2 +-
 .../EnrichersSlightlySimplerYamlTest.java       |   2 +-
 .../brooklyn/JavaWebAppsIntegrationTest.java    |   3 +-
 .../brooklyn/ReloadBrooklynPropertiesTest.java  |   2 +-
 .../brooklyn/VanillaBashNetcatYamlTest.java     |   2 +-
 .../BrooklynJavascriptGuiLauncherTest.java      |   2 +-
 .../BrooklynEntityMirrorIntegrationTest.java    |   4 +-
 .../brooklynnode/BrooklynNodeRestTest.java      |   4 +-
 .../brooklyn/launcher/BrooklynLauncherTest.java |   2 +-
 .../brooklyn/launcher/WebAppRunnerTest.java     |   2 +-
 .../blueprints/AbstractBlueprintTest.java       |   2 +-
 .../SoftlayerObtainPrivateLiveTest.java         |   2 +-
 .../org/apache/brooklyn/qa/load/LoadTest.java   |   3 +-
 .../rest/client/BrooklynApiRestClientTest.java  |   2 +-
 .../brooklynnode/DeployBlueprintTest.java       |   2 +-
 .../rest/BrooklynRestApiLauncherTest.java       |   2 +-
 .../rest/resources/ApplicationResourceTest.java |   2 +-
 .../rest/resources/EntityResourceTest.java      |   2 +-
 .../SensorResourceIntegrationTest.java          |   2 +-
 .../rest/resources/SensorResourceTest.java      |   2 +-
 .../ServerResourceIntegrationTest.java          |   2 +-
 .../rest/resources/ServerShutdownTest.java      |   2 +-
 .../java/brooklyn/test/EntityTestUtils.java     | 180 ------
 .../main/java/brooklyn/test/HttpTestUtils.java  | 391 --------------
 .../java/brooklyn/test/NetworkingTestUtils.java |  68 ---
 .../brooklyn/test/PerformanceTestUtils.java     |  99 ----
 .../main/java/brooklyn/test/TestUtils.groovy    | 540 ------------------
 .../brooklyn/test/TrustingSslSocketFactory.java | 134 -----
 .../main/java/brooklyn/test/WebAppMonitor.java  | 213 --------
 .../apache/brooklyn/test/EntityTestUtils.java   | 181 +++++++
 .../org/apache/brooklyn/test/HttpTestUtils.java | 392 ++++++++++++++
 .../brooklyn/test/NetworkingTestUtils.java      |  69 +++
 .../brooklyn/test/PerformanceTestUtils.java     |  99 ++++
 .../org/apache/brooklyn/test/TestUtils.groovy   | 541 +++++++++++++++++++
 .../brooklyn/test/TrustingSslSocketFactory.java | 134 +++++
 .../org/apache/brooklyn/test/WebAppMonitor.java | 214 ++++++++
 180 files changed, 1855 insertions(+), 1828 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherDeprecatedTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherDeprecatedTest.groovy b/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherDeprecatedTest.groovy
index adba709..234db70 100644
--- a/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherDeprecatedTest.groovy
+++ b/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherDeprecatedTest.groovy
@@ -33,7 +33,7 @@ import brooklyn.entity.proxying.EntitySpec
 import brooklyn.event.AttributeSensor
 import brooklyn.event.basic.BasicAttributeSensor
 import brooklyn.location.basic.SimulatedLocation
-import brooklyn.test.TestUtils
+import org.apache.brooklyn.test.TestUtils
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication
 import brooklyn.test.entity.TestEntity

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherTest.java b/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherTest.java
index 70d0c10..280f11b 100644
--- a/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherTest.java
+++ b/core/src/test/java/brooklyn/enricher/CustomAggregatingEnricherTest.java
@@ -20,6 +20,7 @@ package brooklyn.enricher;
 
 import java.util.Collection;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -34,7 +35,6 @@ import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.BasicAttributeSensor;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.SimulatedLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/enricher/EnrichersTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/EnrichersTest.java b/core/src/test/java/brooklyn/enricher/EnrichersTest.java
index b20f722..dbf544f 100644
--- a/core/src/test/java/brooklyn/enricher/EnrichersTest.java
+++ b/core/src/test/java/brooklyn/enricher/EnrichersTest.java
@@ -30,14 +30,16 @@ import brooklyn.entity.BrooklynAppUnitTestSupport;
 import brooklyn.entity.basic.BasicGroup;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.EntityAdjuncts;
+
 import org.apache.brooklyn.entity.basic.RecordingSensorEventListener;
+import org.apache.brooklyn.test.EntityTestUtils;
+
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.SensorEvent;
 import brooklyn.event.basic.Sensors;
 import brooklyn.policy.Enricher;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.CollectionFunctionals;
 import brooklyn.util.collections.MutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherDeprecatedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherDeprecatedTest.java b/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherDeprecatedTest.java
index 4941273..ff8a80c 100644
--- a/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherDeprecatedTest.java
+++ b/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherDeprecatedTest.java
@@ -20,6 +20,7 @@ package brooklyn.enricher;
 
 import java.util.concurrent.atomic.AtomicReference;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -31,7 +32,6 @@ import brooklyn.event.SensorEvent;
 import brooklyn.event.SensorEventListener;
 import brooklyn.event.basic.Sensors;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.javalang.AtomicReferences;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherTest.java b/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherTest.java
index 38c72c6..5bca552 100644
--- a/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherTest.java
+++ b/core/src/test/java/brooklyn/enricher/SensorPropagatingEnricherTest.java
@@ -20,6 +20,7 @@ package brooklyn.enricher;
 
 import java.util.concurrent.atomic.AtomicReference;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -33,7 +34,6 @@ import brooklyn.event.basic.BasicNotificationSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.policy.EnricherSpec;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/enricher/TransformingEnricherDeprecatedTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/TransformingEnricherDeprecatedTest.groovy b/core/src/test/java/brooklyn/enricher/TransformingEnricherDeprecatedTest.groovy
index f880232..3a9b0ce 100644
--- a/core/src/test/java/brooklyn/enricher/TransformingEnricherDeprecatedTest.groovy
+++ b/core/src/test/java/brooklyn/enricher/TransformingEnricherDeprecatedTest.groovy
@@ -34,7 +34,7 @@ import brooklyn.entity.proxying.EntitySpec
 import brooklyn.event.AttributeSensor
 import brooklyn.event.basic.BasicAttributeSensor
 import brooklyn.location.basic.SimulatedLocation
-import brooklyn.test.TestUtils
+import org.apache.brooklyn.test.TestUtils
 import brooklyn.test.entity.TestApplication
 import brooklyn.test.entity.TestEntity
 import brooklyn.util.collections.MutableMap

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/enricher/TransformingEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/TransformingEnricherTest.java b/core/src/test/java/brooklyn/enricher/TransformingEnricherTest.java
index 1f14da9..adf7c0d 100644
--- a/core/src/test/java/brooklyn/enricher/TransformingEnricherTest.java
+++ b/core/src/test/java/brooklyn/enricher/TransformingEnricherTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.enricher;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -28,7 +29,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.BasicAttributeSensor;
 import brooklyn.location.basic.SimulatedLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.math.MathFunctions;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/EntityPreManagementTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/EntityPreManagementTest.java b/core/src/test/java/brooklyn/entity/EntityPreManagementTest.java
index 8e5d466..9bbad13 100644
--- a/core/src/test/java/brooklyn/entity/EntityPreManagementTest.java
+++ b/core/src/test/java/brooklyn/entity/EntityPreManagementTest.java
@@ -21,6 +21,7 @@ package brooklyn.entity;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.brooklyn.test.TestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -38,7 +39,6 @@ import brooklyn.event.SensorEventListener;
 import brooklyn.management.EntityManager;
 import brooklyn.management.ManagementContext;
 import brooklyn.policy.basic.AbstractPolicy;
-import brooklyn.test.TestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/basic/DataEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/DataEntityTest.java b/core/src/test/java/brooklyn/entity/basic/DataEntityTest.java
index 008b1df..ff009fe 100644
--- a/core/src/test/java/brooklyn/entity/basic/DataEntityTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/DataEntityTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.util.concurrent.atomic.AtomicReference;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -34,7 +35,6 @@ import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.SimulatedLocation;
 import brooklyn.management.ManagementContext;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/basic/DependentConfigurationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/DependentConfigurationTest.java b/core/src/test/java/brooklyn/entity/basic/DependentConfigurationTest.java
index 709ed8d..bc1d712 100644
--- a/core/src/test/java/brooklyn/entity/basic/DependentConfigurationTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/DependentConfigurationTest.java
@@ -29,6 +29,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -40,7 +41,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.event.basic.DependentConfiguration;
 import brooklyn.management.Task;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/basic/PolicyRegistrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/PolicyRegistrationTest.java b/core/src/test/java/brooklyn/entity/basic/PolicyRegistrationTest.java
index 168f72c..279c2c7 100644
--- a/core/src/test/java/brooklyn/entity/basic/PolicyRegistrationTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/PolicyRegistrationTest.java
@@ -25,6 +25,7 @@ import static org.testng.Assert.fail;
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.brooklyn.test.TestUtils;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -36,7 +37,6 @@ import brooklyn.policy.EnricherSpec;
 import brooklyn.policy.Policy;
 import brooklyn.policy.PolicySpec;
 import brooklyn.policy.basic.AbstractPolicy;
-import brooklyn.test.TestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.test.entity.TestEntityNoEnrichersImpl;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java b/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java
index ae1e1a0..256cd99 100644
--- a/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.basic;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -33,7 +34,6 @@ import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.Location;
 import brooklyn.policy.Enricher;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.test.entity.TestEntityImpl.TestEntityWithoutEnrichers;
 import brooklyn.util.collections.QuorumCheck.QuorumChecks;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/effector/EffectorBasicTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/effector/EffectorBasicTest.java b/core/src/test/java/brooklyn/entity/effector/EffectorBasicTest.java
index 66618f8..58f0bb5 100644
--- a/core/src/test/java/brooklyn/entity/effector/EffectorBasicTest.java
+++ b/core/src/test/java/brooklyn/entity/effector/EffectorBasicTest.java
@@ -21,6 +21,7 @@ package brooklyn.entity.effector;
 import java.util.List;
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.TestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -37,7 +38,6 @@ import brooklyn.location.basic.SimulatedLocation;
 import brooklyn.management.HasTaskChildren;
 import brooklyn.management.Task;
 import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.test.TestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java b/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
index b8a1839..a7b0bec 100644
--- a/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
+++ b/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
@@ -51,7 +51,10 @@ import brooklyn.entity.basic.BrooklynTaskTags;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.EntityFactory;
 import brooklyn.entity.basic.Lifecycle;
+
 import org.apache.brooklyn.entity.basic.RecordingSensorEventListener;
+import org.apache.brooklyn.test.EntityTestUtils;
+
 import brooklyn.entity.basic.ServiceStateLogic;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Changeable;
@@ -61,7 +64,6 @@ import brooklyn.location.Location;
 import brooklyn.location.basic.SimulatedLocation;
 import brooklyn.management.Task;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.test.entity.TestEntityImpl;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/group/DynamicFabricTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/DynamicFabricTest.java b/core/src/test/java/brooklyn/entity/group/DynamicFabricTest.java
index 40131ab..a52b84f 100644
--- a/core/src/test/java/brooklyn/entity/group/DynamicFabricTest.java
+++ b/core/src/test/java/brooklyn/entity/group/DynamicFabricTest.java
@@ -31,6 +31,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.brooklyn.test.TestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -50,7 +51,6 @@ import brooklyn.location.basic.PortRanges;
 import brooklyn.location.basic.SimulatedLocation;
 import brooklyn.management.Task;
 import brooklyn.test.Asserts;
-import brooklyn.test.TestUtils;
 import brooklyn.test.entity.BlockingEntity;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/group/GroupPickUpEntitiesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/GroupPickUpEntitiesTest.java b/core/src/test/java/brooklyn/entity/group/GroupPickUpEntitiesTest.java
index afdb528..b1a51a0 100644
--- a/core/src/test/java/brooklyn/entity/group/GroupPickUpEntitiesTest.java
+++ b/core/src/test/java/brooklyn/entity/group/GroupPickUpEntitiesTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.group;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -36,7 +37,6 @@ import brooklyn.event.SensorEventListener;
 import brooklyn.policy.PolicySpec;
 import brooklyn.policy.basic.AbstractPolicy;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.javalang.Boxing;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java
index f2fc6da..cf30366 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java
@@ -26,6 +26,7 @@ import static org.testng.Assert.assertTrue;
 import java.util.Collection;
 import java.util.Map;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -48,7 +49,6 @@ import brooklyn.location.basic.SimulatedLocation;
 import brooklyn.policy.Enricher;
 import brooklyn.policy.EnricherSpec;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.test.entity.TestEntityImpl;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/rebind/RebindEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindEntityTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindEntityTest.java
index 9b1e05d..280d06f 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindEntityTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindEntityTest.java
@@ -18,8 +18,8 @@
  */
 package brooklyn.entity.rebind;
 
-import static brooklyn.test.EntityTestUtils.assertAttributeEquals;
-import static brooklyn.test.EntityTestUtils.assertConfigEquals;
+import static org.apache.brooklyn.test.EntityTestUtils.assertAttributeEquals;
+import static org.apache.brooklyn.test.EntityTestUtils.assertConfigEquals;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/rebind/RebindFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindFeedTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindFeedTest.java
index 4f5acd1..9459e89 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindFeedTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindFeedTest.java
@@ -24,6 +24,7 @@ import java.net.URL;
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -51,7 +52,6 @@ import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.management.internal.BrooklynGarbageCollector;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.test.entity.TestEntityImpl.TestEntityWithoutEnrichers;
 import brooklyn.util.collections.MutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/entity/rebind/RebindFeedWithHaTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindFeedWithHaTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindFeedWithHaTest.java
index 2c9c69b..25ea808 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindFeedWithHaTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindFeedWithHaTest.java
@@ -25,6 +25,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -38,7 +39,6 @@ import brooklyn.event.AttributeSensor;
 import brooklyn.management.Task;
 import brooklyn.management.ha.HighAvailabilityMode;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.http.BetterMockWebServer;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/event/feed/function/FunctionFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/event/feed/function/FunctionFeedTest.java b/core/src/test/java/brooklyn/event/feed/function/FunctionFeedTest.java
index 468239b..7e98acd 100644
--- a/core/src/test/java/brooklyn/event/feed/function/FunctionFeedTest.java
+++ b/core/src/test/java/brooklyn/event/feed/function/FunctionFeedTest.java
@@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.annotation.Nullable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -49,7 +50,6 @@ import brooklyn.event.basic.Sensors;
 import brooklyn.location.Location;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 
 import com.google.common.base.Function;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/event/feed/http/HttpFeedIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/event/feed/http/HttpFeedIntegrationTest.java b/core/src/test/java/brooklyn/event/feed/http/HttpFeedIntegrationTest.java
index 2675837..6252e77 100644
--- a/core/src/test/java/brooklyn/event/feed/http/HttpFeedIntegrationTest.java
+++ b/core/src/test/java/brooklyn/event/feed/http/HttpFeedIntegrationTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.net.URI;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -36,7 +37,6 @@ import brooklyn.location.Location;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.location.basic.PortRanges;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.HttpService;
 import brooklyn.test.entity.TestEntity;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/event/feed/shell/ShellFeedIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/event/feed/shell/ShellFeedIntegrationTest.java b/core/src/test/java/brooklyn/event/feed/shell/ShellFeedIntegrationTest.java
index 4d2ed42..03ffa59 100644
--- a/core/src/test/java/brooklyn/event/feed/shell/ShellFeedIntegrationTest.java
+++ b/core/src/test/java/brooklyn/event/feed/shell/ShellFeedIntegrationTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertTrue;
 import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -42,7 +43,6 @@ import brooklyn.event.feed.ssh.SshPollValue;
 import brooklyn.event.feed.ssh.SshValueFunctions;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.stream.Streams;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/event/feed/ssh/SshFeedIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/event/feed/ssh/SshFeedIntegrationTest.java b/core/src/test/java/brooklyn/event/feed/ssh/SshFeedIntegrationTest.java
index 16bab62..fc9207e 100644
--- a/core/src/test/java/brooklyn/event/feed/ssh/SshFeedIntegrationTest.java
+++ b/core/src/test/java/brooklyn/event/feed/ssh/SshFeedIntegrationTest.java
@@ -21,6 +21,7 @@ package brooklyn.event.feed.ssh;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -40,7 +41,6 @@ import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedLiveTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedLiveTest.java b/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedLiveTest.java
index 9a9210f..2d313f8 100644
--- a/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedLiveTest.java
+++ b/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedLiveTest.java
@@ -20,6 +20,7 @@ package brooklyn.event.feed.windows;
 
 import java.util.Map;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -31,7 +32,6 @@ import brooklyn.event.basic.Sensors;
 import brooklyn.location.Location;
 import brooklyn.location.MachineLocation;
 import brooklyn.location.MachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedTest.java b/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedTest.java
index f4ba43b..7a38659 100644
--- a/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedTest.java
+++ b/core/src/test/java/brooklyn/event/feed/windows/WindowsPerformanceCounterFeedTest.java
@@ -26,6 +26,7 @@ import static org.testng.Assert.assertTrue;
 import java.util.Collection;
 import java.util.Iterator;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -39,7 +40,6 @@ import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.Location;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.text.Strings;
 import io.cloudsoft.winrm4j.winrm.WinRmToolResponse;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/location/basic/SshMachineLocationPerformanceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/SshMachineLocationPerformanceTest.java b/core/src/test/java/brooklyn/location/basic/SshMachineLocationPerformanceTest.java
index 0143e66..5f265ee 100644
--- a/core/src/test/java/brooklyn/location/basic/SshMachineLocationPerformanceTest.java
+++ b/core/src/test/java/brooklyn/location/basic/SshMachineLocationPerformanceTest.java
@@ -25,13 +25,13 @@ import java.util.Map;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.PerformanceTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import brooklyn.test.PerformanceTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.internal.ssh.SshTool;
 import brooklyn.util.net.Networking;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java b/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java
index f33f716..2259db4 100644
--- a/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java
+++ b/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -56,7 +57,6 @@ import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation.LocalhostMachine;
 import brooklyn.management.internal.AbstractManagementContext;
 import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/core/src/test/java/brooklyn/qa/performance/EntityPersistencePerformanceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/qa/performance/EntityPersistencePerformanceTest.java b/core/src/test/java/brooklyn/qa/performance/EntityPersistencePerformanceTest.java
index 3baeb60..1d54bc8 100644
--- a/core/src/test/java/brooklyn/qa/performance/EntityPersistencePerformanceTest.java
+++ b/core/src/test/java/brooklyn/qa/performance/EntityPersistencePerformanceTest.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.PerformanceTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.proxying.EntitySpec;
@@ -30,7 +31,6 @@ import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.SimulatedLocation;
 import brooklyn.policy.Policy;
 import brooklyn.policy.PolicySpec;
-import brooklyn.test.PerformanceTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.test.policy.TestPolicy;
 import brooklyn.util.repeat.Repeater;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java b/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
index f032d95..726d36e 100644
--- a/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
+++ b/examples/simple-web-cluster/src/test/java/org/apache/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
@@ -19,6 +19,10 @@
 package org.apache.brooklyn.demo;
 
 import org.apache.brooklyn.demo.WebClusterDatabaseExampleApp;
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
+import org.apache.brooklyn.test.WebAppMonitor;
+
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -55,9 +59,6 @@ import brooklyn.location.Location;
 import brooklyn.policy.Enricher;
 import brooklyn.policy.autoscaling.AutoScalerPolicy;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
-import brooklyn.test.WebAppMonitor;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.time.Duration;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/locations/jclouds/src/test/java/brooklyn/policy/os/AdvertiseWinrmLoginPolicyTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/policy/os/AdvertiseWinrmLoginPolicyTest.java b/locations/jclouds/src/test/java/brooklyn/policy/os/AdvertiseWinrmLoginPolicyTest.java
index 2bc43c7..93e5c11 100644
--- a/locations/jclouds/src/test/java/brooklyn/policy/os/AdvertiseWinrmLoginPolicyTest.java
+++ b/locations/jclouds/src/test/java/brooklyn/policy/os/AdvertiseWinrmLoginPolicyTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.policy.os;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.BrooklynAppUnitTestSupport;
@@ -25,7 +26,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.WinRmMachineLocation;
 import brooklyn.policy.PolicySpec;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyLiveTest.java b/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyLiveTest.java
index 2913096..eaa8b2f 100644
--- a/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyLiveTest.java
+++ b/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyLiveTest.java
@@ -24,6 +24,7 @@ import static org.testng.Assert.assertTrue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -37,7 +38,6 @@ import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.policy.PolicySpec;
 import brooklyn.policy.os.CreateUserPolicy;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.internal.ssh.SshTool;
 import brooklyn.util.text.Identifiers;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyTest.java b/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyTest.java
index 855d994..833214e 100644
--- a/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyTest.java
+++ b/locations/jclouds/src/test/java/brooklyn/policy/os/CreateUserPolicyTest.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -38,7 +39,6 @@ import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.policy.PolicySpec;
 import brooklyn.policy.os.CreateUserPolicy;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.internal.ssh.SshTool;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/policy/src/test/java/brooklyn/enricher/HttpLatencyDetectorTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/brooklyn/enricher/HttpLatencyDetectorTest.java b/policy/src/test/java/brooklyn/enricher/HttpLatencyDetectorTest.java
index b8504ad..b62cf48 100644
--- a/policy/src/test/java/brooklyn/enricher/HttpLatencyDetectorTest.java
+++ b/policy/src/test/java/brooklyn/enricher/HttpLatencyDetectorTest.java
@@ -21,6 +21,7 @@ package brooklyn.enricher;
 import java.net.URL;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -34,7 +35,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/policy/src/test/java/brooklyn/enricher/RebindEnricherTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/brooklyn/enricher/RebindEnricherTest.java b/policy/src/test/java/brooklyn/enricher/RebindEnricherTest.java
index dc08e19..762a9fd 100644
--- a/policy/src/test/java/brooklyn/enricher/RebindEnricherTest.java
+++ b/policy/src/test/java/brooklyn/enricher/RebindEnricherTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertNotNull;
 import java.net.URL;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
 
@@ -31,7 +32,6 @@ import brooklyn.entity.rebind.RebindTestFixtureWithApp;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.http.BetterMockWebServer;
 import brooklyn.util.time.Duration;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java b/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
index 7191030..ba7d249 100644
--- a/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
+++ b/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
@@ -23,6 +23,7 @@ import static org.testng.Assert.assertEquals;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -35,7 +36,6 @@ import brooklyn.event.basic.BasicNotificationSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.SimulatedLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.time.Duration;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/policy/src/test/java/brooklyn/policy/ha/ServiceFailureDetectorTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/brooklyn/policy/ha/ServiceFailureDetectorTest.java b/policy/src/test/java/brooklyn/policy/ha/ServiceFailureDetectorTest.java
index 7250e8e..f8c80bc 100644
--- a/policy/src/test/java/brooklyn/policy/ha/ServiceFailureDetectorTest.java
+++ b/policy/src/test/java/brooklyn/policy/ha/ServiceFailureDetectorTest.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -46,7 +47,6 @@ import brooklyn.management.ManagementContext;
 import brooklyn.policy.EnricherSpec;
 import brooklyn.policy.ha.HASensors.FailureDescriptor;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/policy/src/test/java/brooklyn/policy/ha/ServiceReplacerTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/brooklyn/policy/ha/ServiceReplacerTest.java b/policy/src/test/java/brooklyn/policy/ha/ServiceReplacerTest.java
index 8d2fb86..b1bd375 100644
--- a/policy/src/test/java/brooklyn/policy/ha/ServiceReplacerTest.java
+++ b/policy/src/test/java/brooklyn/policy/ha/ServiceReplacerTest.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -54,7 +55,6 @@ import brooklyn.management.ManagementContext;
 import brooklyn.policy.PolicySpec;
 import brooklyn.policy.ha.HASensors.FailureDescriptor;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/basic/AbstractSoftwareProcessRestartIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/basic/AbstractSoftwareProcessRestartIntegrationTest.java b/software/base/src/test/java/brooklyn/entity/basic/AbstractSoftwareProcessRestartIntegrationTest.java
index d70ed76..79f3eca 100644
--- a/software/base/src/test/java/brooklyn/entity/basic/AbstractSoftwareProcessRestartIntegrationTest.java
+++ b/software/base/src/test/java/brooklyn/entity/basic/AbstractSoftwareProcessRestartIntegrationTest.java
@@ -20,6 +20,7 @@ package brooklyn.entity.basic;
 
 import java.util.Map;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -30,7 +31,6 @@ import brooklyn.entity.basic.SoftwareProcess.RestartSoftwareParameters;
 import brooklyn.entity.basic.SoftwareProcess.StopSoftwareParameters;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.CollectionFunctionals;
 
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityRebindTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityRebindTest.java b/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityRebindTest.java
index 6911790..6fe4183 100644
--- a/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityRebindTest.java
+++ b/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityRebindTest.java
@@ -28,6 +28,7 @@ import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -43,7 +44,6 @@ import brooklyn.location.NoMachinesAvailableException;
 import brooklyn.location.basic.AbstractLocation;
 import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.management.ManagementContext;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.flags.SetFromFlag;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.java b/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.java
index 4d2e7fd..0693d7e 100644
--- a/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.java
+++ b/software/base/src/test/java/brooklyn/entity/basic/SoftwareProcessEntityTest.java
@@ -30,6 +30,7 @@ import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.jclouds.util.Throwables2;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -68,7 +69,6 @@ import brooklyn.management.EntityManager;
 import brooklyn.management.Task;
 import brooklyn.management.TaskAdaptable;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.config.ConfigBag;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/basic/VanillaSoftwareProcessAndChildrenIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/basic/VanillaSoftwareProcessAndChildrenIntegrationTest.java b/software/base/src/test/java/brooklyn/entity/basic/VanillaSoftwareProcessAndChildrenIntegrationTest.java
index ae2ae62..2ad2ef7 100644
--- a/software/base/src/test/java/brooklyn/entity/basic/VanillaSoftwareProcessAndChildrenIntegrationTest.java
+++ b/software/base/src/test/java/brooklyn/entity/basic/VanillaSoftwareProcessAndChildrenIntegrationTest.java
@@ -21,6 +21,7 @@ package brooklyn.entity.basic;
 import java.util.Collections;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -31,7 +32,6 @@ import org.testng.annotations.Test;
 import brooklyn.entity.basic.SoftwareProcess.ChildStartableMode;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.javalang.JavaClassNames;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/basic/lifecycle/ScriptHelperTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/basic/lifecycle/ScriptHelperTest.java b/software/base/src/test/java/brooklyn/entity/basic/lifecycle/ScriptHelperTest.java
index 971e22c..9e52e15 100644
--- a/software/base/src/test/java/brooklyn/entity/basic/lifecycle/ScriptHelperTest.java
+++ b/software/base/src/test/java/brooklyn/entity/basic/lifecycle/ScriptHelperTest.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -42,7 +43,6 @@ import brooklyn.event.feed.function.FunctionPollConfig;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.FixedListMachineProvisioningLocation;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.time.Duration;
 
 import com.google.common.base.Functions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynClusterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynClusterIntegrationTest.java b/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynClusterIntegrationTest.java
index d623a38..fcbd753 100644
--- a/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynClusterIntegrationTest.java
+++ b/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynClusterIntegrationTest.java
@@ -21,6 +21,7 @@ package brooklyn.entity.brooklynnode;
 import java.io.File;
 import java.util.List;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -32,7 +33,6 @@ import brooklyn.entity.Entity;
 import brooklyn.entity.brooklynnode.BrooklynNode.ExistingFileBehaviour;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.javalang.JavaClassNames;
 import brooklyn.util.net.Networking;
 import brooklyn.util.os.Os;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java b/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java
index 182c24a..04b375a 100644
--- a/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java
+++ b/software/base/src/test/java/brooklyn/entity/brooklynnode/BrooklynNodeIntegrationTest.java
@@ -31,6 +31,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
+import org.apache.brooklyn.test.EntityTestUtils;
+import org.apache.brooklyn.test.HttpTestUtils;
 import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.HttpClient;
 import org.slf4j.Logger;
@@ -62,8 +64,6 @@ import brooklyn.location.basic.Locations;
 import brooklyn.location.basic.PortRanges;
 import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.HttpTestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.config.ConfigBag;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java b/software/base/src/test/java/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java
index 84b763d..cd3c18d 100644
--- a/software/base/src/test/java/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java
+++ b/software/base/src/test/java/brooklyn/entity/brooklynnode/SelectMasterEffectorTest.java
@@ -27,6 +27,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.Callable;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.apache.http.client.methods.HttpPost;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,7 +50,6 @@ import brooklyn.event.feed.AttributePollHandler;
 import brooklyn.event.feed.DelegatingPollHandler;
 import brooklyn.event.feed.Poller;
 import brooklyn.management.ha.ManagementNodeState;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.time.Duration;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.java b/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.java
index 4b6f1fb..333df4d 100644
--- a/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.java
+++ b/software/base/src/test/java/brooklyn/entity/java/EntityPollingTest.java
@@ -21,6 +21,7 @@ package brooklyn.entity.java;
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -36,7 +37,6 @@ import brooklyn.event.feed.jmx.JmxAttributePollConfig;
 import brooklyn.event.feed.jmx.JmxFeed;
 import brooklyn.location.MachineLocation;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.JmxService;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/java/VanillaJavaAppRebindTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/java/VanillaJavaAppRebindTest.java b/software/base/src/test/java/brooklyn/entity/java/VanillaJavaAppRebindTest.java
index 4600cd7..dbe4047 100644
--- a/software/base/src/test/java/brooklyn/entity/java/VanillaJavaAppRebindTest.java
+++ b/software/base/src/test/java/brooklyn/entity/java/VanillaJavaAppRebindTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -38,7 +39,6 @@ import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/machine/MachineEntityRebindTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/machine/MachineEntityRebindTest.java b/software/base/src/test/java/brooklyn/entity/machine/MachineEntityRebindTest.java
index 1153ff9..0312b42 100644
--- a/software/base/src/test/java/brooklyn/entity/machine/MachineEntityRebindTest.java
+++ b/software/base/src/test/java/brooklyn/entity/machine/MachineEntityRebindTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.machine;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -28,7 +29,6 @@ import brooklyn.entity.basic.EmptySoftwareProcess;
 import brooklyn.entity.basic.Lifecycle;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.rebind.RebindTestFixtureWithApp;
-import brooklyn.test.EntityTestUtils;
 
 public class MachineEntityRebindTest extends RebindTestFixtureWithApp {
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/pool/AbstractServerPoolTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/pool/AbstractServerPoolTest.java b/software/base/src/test/java/brooklyn/entity/pool/AbstractServerPoolTest.java
index 5575e87..16e6aa0 100644
--- a/software/base/src/test/java/brooklyn/entity/pool/AbstractServerPoolTest.java
+++ b/software/base/src/test/java/brooklyn/entity/pool/AbstractServerPoolTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.fail;
 
 import java.util.List;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 
@@ -36,7 +37,6 @@ import brooklyn.location.LocationSpec;
 import brooklyn.location.NoMachinesAvailableException;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.management.ManagementContext;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.LocalManagementContextForTests;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/pool/ServerPoolTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/pool/ServerPoolTest.java b/software/base/src/test/java/brooklyn/entity/pool/ServerPoolTest.java
index 962400f..7a64dff 100644
--- a/software/base/src/test/java/brooklyn/entity/pool/ServerPoolTest.java
+++ b/software/base/src/test/java/brooklyn/entity/pool/ServerPoolTest.java
@@ -25,6 +25,7 @@ import static org.testng.Assert.assertTrue;
 import java.util.Collection;
 import java.util.Iterator;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -34,7 +35,6 @@ import brooklyn.entity.basic.Attributes;
 import brooklyn.entity.basic.Lifecycle;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation.LocalhostMachine;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.base.Joiner;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/software/StaticSensorTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/software/StaticSensorTest.java b/software/base/src/test/java/brooklyn/entity/software/StaticSensorTest.java
index 4b9a641..2af8a07 100644
--- a/software/base/src/test/java/brooklyn/entity/software/StaticSensorTest.java
+++ b/software/base/src/test/java/brooklyn/entity/software/StaticSensorTest.java
@@ -18,13 +18,13 @@
  */
 package brooklyn.entity.software;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.BrooklynAppUnitTestSupport;
 import brooklyn.entity.basic.BasicEntity;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.event.basic.Sensors;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.config.ConfigBag;
 
 import com.google.common.collect.ImmutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/software/http/HttpRequestSensorTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/software/http/HttpRequestSensorTest.java b/software/base/src/test/java/brooklyn/entity/software/http/HttpRequestSensorTest.java
index de60fb1..ba11077 100644
--- a/software/base/src/test/java/brooklyn/entity/software/http/HttpRequestSensorTest.java
+++ b/software/base/src/test/java/brooklyn/entity/software/http/HttpRequestSensorTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.software.http;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -29,7 +30,6 @@ import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.TestHttpRequestHandler;
 import brooklyn.test.TestHttpServer;
 import brooklyn.test.entity.TestApplication;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/software/mysql/AbstractToyMySqlEntityTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/software/mysql/AbstractToyMySqlEntityTest.java b/software/base/src/test/java/brooklyn/entity/software/mysql/AbstractToyMySqlEntityTest.java
index 43f1f16..d884abc 100644
--- a/software/base/src/test/java/brooklyn/entity/software/mysql/AbstractToyMySqlEntityTest.java
+++ b/software/base/src/test/java/brooklyn/entity/software/mysql/AbstractToyMySqlEntityTest.java
@@ -18,6 +18,7 @@
  */
 package brooklyn.entity.software.mysql;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -33,7 +34,6 @@ import brooklyn.location.LocationSpec;
 import brooklyn.location.MachineProvisioningLocation;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.task.system.ProcessTaskWrapper;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/entity/software/ssh/SshCommandIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/entity/software/ssh/SshCommandIntegrationTest.java b/software/base/src/test/java/brooklyn/entity/software/ssh/SshCommandIntegrationTest.java
index c3358f2..caff43a 100644
--- a/software/base/src/test/java/brooklyn/entity/software/ssh/SshCommandIntegrationTest.java
+++ b/software/base/src/test/java/brooklyn/entity/software/ssh/SshCommandIntegrationTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.Assert;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
@@ -37,7 +38,6 @@ import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.Location;
 import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/event/feed/jmx/JmxFeedTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/event/feed/jmx/JmxFeedTest.java b/software/base/src/test/java/brooklyn/event/feed/jmx/JmxFeedTest.java
index 9b8c916..663aba9 100644
--- a/software/base/src/test/java/brooklyn/event/feed/jmx/JmxFeedTest.java
+++ b/software/base/src/test/java/brooklyn/event/feed/jmx/JmxFeedTest.java
@@ -18,7 +18,7 @@
  */
 package brooklyn.event.feed.jmx;
 
-import static brooklyn.test.TestUtils.executeUntilSucceeds;
+import static org.apache.brooklyn.test.TestUtils.executeUntilSucceeds;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
@@ -41,6 +41,7 @@ import javax.management.openmbean.SimpleType;
 import javax.management.openmbean.TabularDataSupport;
 import javax.management.openmbean.TabularType;
 
+import org.apache.brooklyn.test.TestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -70,7 +71,6 @@ import brooklyn.location.basic.SimulatedLocation;
 import brooklyn.test.Asserts;
 import brooklyn.test.GeneralisedDynamicMBean;
 import brooklyn.test.JmxService;
-import brooklyn.test.TestUtils;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.test.entity.TestApplicationImpl;
 import brooklyn.test.entity.TestEntity;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/event/feed/jmx/JmxHelperTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/event/feed/jmx/JmxHelperTest.java b/software/base/src/test/java/brooklyn/event/feed/jmx/JmxHelperTest.java
index 5985f98..fda9f15 100644
--- a/software/base/src/test/java/brooklyn/event/feed/jmx/JmxHelperTest.java
+++ b/software/base/src/test/java/brooklyn/event/feed/jmx/JmxHelperTest.java
@@ -33,6 +33,7 @@ import javax.management.NotificationListener;
 import javax.management.ObjectName;
 import javax.management.StandardEmitterMBean;
 
+import org.apache.brooklyn.test.TestUtils;
 import org.jclouds.util.Throwables2;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,7 +44,6 @@ import org.testng.collections.Lists;
 
 import brooklyn.test.GeneralisedDynamicMBean;
 import brooklyn.test.JmxService;
-import brooklyn.test.TestUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/event/feed/jmx/RebindJmxFeedTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/event/feed/jmx/RebindJmxFeedTest.java b/software/base/src/test/java/brooklyn/event/feed/jmx/RebindJmxFeedTest.java
index 4e82e74..2234e99 100644
--- a/software/base/src/test/java/brooklyn/event/feed/jmx/RebindJmxFeedTest.java
+++ b/software/base/src/test/java/brooklyn/event/feed/jmx/RebindJmxFeedTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals;
 
 import java.util.Collection;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -42,7 +43,6 @@ import brooklyn.event.feed.ConfigToAttributes;
 import brooklyn.location.Location;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.location.basic.PortRanges;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.GeneralisedDynamicMBean;
 import brooklyn.test.JmxService;
 import brooklyn.test.entity.TestEntity;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/location/basic/MachineDetailsEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/location/basic/MachineDetailsEc2LiveTest.java b/software/base/src/test/java/brooklyn/location/basic/MachineDetailsEc2LiveTest.java
index 06f7634..47694b0 100644
--- a/software/base/src/test/java/brooklyn/location/basic/MachineDetailsEc2LiveTest.java
+++ b/software/base/src/test/java/brooklyn/location/basic/MachineDetailsEc2LiveTest.java
@@ -21,6 +21,7 @@ package brooklyn.location.basic;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,7 +35,6 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.location.MachineDetails;
 import brooklyn.location.OsDetails;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 
 // This test really belongs in brooklyn-location but depends on AbstractEc2LiveTest in brooklyn-software-base

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/base/src/test/java/brooklyn/location/basic/MachineDetailsGoogleComputeLiveTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/brooklyn/location/basic/MachineDetailsGoogleComputeLiveTest.java b/software/base/src/test/java/brooklyn/location/basic/MachineDetailsGoogleComputeLiveTest.java
index ae52709..f0fa949 100644
--- a/software/base/src/test/java/brooklyn/location/basic/MachineDetailsGoogleComputeLiveTest.java
+++ b/software/base/src/test/java/brooklyn/location/basic/MachineDetailsGoogleComputeLiveTest.java
@@ -21,6 +21,7 @@ package brooklyn.location.basic;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,7 +35,6 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
 import brooklyn.location.MachineDetails;
 import brooklyn.location.OsDetails;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.util.collections.MutableMap;
 
 // This test really belongs in brooklyn-location but depends on AbstractGoogleComputeLiveTest in brooklyn-software-base

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/database/src/test/java/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java
index 839fd3f..a8f7be3 100644
--- a/software/database/src/test/java/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java
+++ b/software/database/src/test/java/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java
@@ -20,6 +20,7 @@ package brooklyn.entity.database.crate;
 
 import static org.testng.Assert.assertFalse;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -31,7 +32,6 @@ import brooklyn.entity.basic.Entities;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 public class CrateNodeIntegrationTest {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java
index b58e685..d74cb15 100644
--- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java
+++ b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java
@@ -18,13 +18,13 @@
  */
 package brooklyn.entity.database.postgresql;
 
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.rebind.RebindTestFixtureWithApp;
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQEc2LiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQEc2LiveTest.java
index 69bc238..5d1c0fa 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQEc2LiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQEc2LiveTest.java
@@ -28,13 +28,13 @@ import javax.jms.Session;
 import javax.jms.TextMessage;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import brooklyn.entity.AbstractEc2LiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 
 import com.google.common.collect.ImmutableList;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQGoogleComputeLiveTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQGoogleComputeLiveTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQGoogleComputeLiveTest.java
index 2813026..eebde2f 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQGoogleComputeLiveTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQGoogleComputeLiveTest.java
@@ -22,9 +22,11 @@ import brooklyn.entity.AbstractGoogleComputeLiveTest;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
+
 import com.google.common.collect.ImmutableList;
+
 import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.testng.annotations.Test;
 
 import javax.jms.Connection;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e04407d/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.java b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.java
index 2434fda..dd0837b 100644
--- a/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.java
+++ b/software/messaging/src/test/java/brooklyn/entity/messaging/activemq/ActiveMQIntegrationTest.java
@@ -31,6 +31,7 @@ import javax.jms.Session;
 import javax.jms.TextMessage;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.brooklyn.test.EntityTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -45,7 +46,6 @@ import brooklyn.entity.java.UsesJmx.JmxAgentModes;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.Startable;
 import brooklyn.location.Location;
-import brooklyn.test.EntityTestUtils;
 import brooklyn.test.entity.TestApplication;
 
 import com.google.common.collect.ImmutableList;