You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/11/11 18:21:33 UTC

[06/21] incubator-brooklyn git commit: Moved sandbox/brooklyn-sandbox-test-framework to usage/test-framework

Moved sandbox/brooklyn-sandbox-test-framework to usage/test-framework


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

Branch: refs/heads/master
Commit: 813bba029e92081ab319a20b65fc9facb25e2d93
Parents: 4d2129a
Author: Mark McKenna <m4...@gmail.com>
Authored: Mon Nov 9 21:10:58 2015 +0000
Committer: Mark McKenna <m4...@gmail.com>
Committed: Mon Nov 9 21:10:58 2015 +0000

----------------------------------------------------------------------
 pom.xml                                         |   1 +
 .../brooklyn-sandbox-test-framework/README.md   | 109 --------
 .../etc/exampl-catalog.bom                      |  15 --
 .../etc/example-catalog-test.bom                |  22 --
 .../etc/nginx-test-examples.yml                 |  98 -------
 .../etc/testhttpcall-examples.yml               | 124 ---------
 .../etc/tomcat-test-examples.yml                |  45 ----
 sandbox/brooklyn-sandbox-test-framework/pom.xml |  75 ------
 .../brooklyn/test/framework/AbstractTest.java   |  50 ----
 .../brooklyn/test/framework/BaseTest.java       |  34 ---
 .../test/framework/ParallelTestCase.java        |  13 -
 .../test/framework/ParallelTestCaseImpl.java    | 130 ---------
 .../brooklyn/test/framework/TestCase.java       |  12 -
 .../brooklyn/test/framework/TestCaseImpl.java   |  61 -----
 .../brooklyn/test/framework/TestEffector.java   |  33 ---
 .../test/framework/TestEffectorImpl.java        |  91 -------
 .../brooklyn/test/framework/TestHttpCall.java   |  33 ---
 .../test/framework/TestHttpCallImpl.java        | 107 --------
 .../brooklyn/test/framework/TestSensor.java     |  27 --
 .../brooklyn/test/framework/TestSensorImpl.java | 144 ----------
 .../test/framework/TestEffectorTest.java        | 106 --------
 .../brooklyn/test/framework/TestEntity.java     |  55 ----
 .../brooklyn/test/framework/TestEntityImpl.java |  39 ---
 .../brooklyn/test/framework/TestSensorTest.java | 270 -------------------
 usage/test-framework/README.md                  | 109 ++++++++
 usage/test-framework/etc/exampl-catalog.bom     |  15 ++
 .../test-framework/etc/example-catalog-test.bom |  22 ++
 .../test-framework/etc/nginx-test-examples.yml  |  98 +++++++
 .../etc/testhttpcall-examples.yml               | 124 +++++++++
 .../test-framework/etc/tomcat-test-examples.yml |  45 ++++
 usage/test-framework/pom.xml                    |  75 ++++++
 .../brooklyn/test/framework/AbstractTest.java   |  50 ++++
 .../brooklyn/test/framework/BaseTest.java       |  34 +++
 .../test/framework/ParallelTestCase.java        |  13 +
 .../test/framework/ParallelTestCaseImpl.java    | 130 +++++++++
 .../brooklyn/test/framework/TestCase.java       |  12 +
 .../brooklyn/test/framework/TestCaseImpl.java   |  61 +++++
 .../brooklyn/test/framework/TestEffector.java   |  33 +++
 .../test/framework/TestEffectorImpl.java        |  91 +++++++
 .../brooklyn/test/framework/TestHttpCall.java   |  33 +++
 .../test/framework/TestHttpCallImpl.java        | 107 ++++++++
 .../brooklyn/test/framework/TestSensor.java     |  27 ++
 .../brooklyn/test/framework/TestSensorImpl.java | 144 ++++++++++
 .../test/framework/TestEffectorTest.java        | 106 ++++++++
 .../brooklyn/test/framework/TestEntity.java     |  55 ++++
 .../brooklyn/test/framework/TestEntityImpl.java |  39 +++
 .../brooklyn/test/framework/TestSensorTest.java | 270 +++++++++++++++++++
 47 files changed, 1694 insertions(+), 1693 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a414b6a..94101c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -237,6 +237,7 @@
         <module>usage/rest-api</module>
         <module>usage/rest-client</module>
         <module>usage/rest-server</module>
+        <module>usage/test-framework</module>
         <module>usage/test-support</module>
 
         <module>utils/common</module>

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/README.md
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/README.md b/sandbox/brooklyn-sandbox-test-framework/README.md
deleted file mode 100644
index a4ca928..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/README.md
+++ /dev/null
@@ -1,109 +0,0 @@
-# Entities
-
-## TestCase
-A logical grouping for tests eg Restart tests
-```
-type: org.apache.brooklyn.test.framework.TestCase
-  name: Stop Test
-  brooklyn.children:
-  - ***
-  - ***
-```
-
-## TestSensor
-Entity that tests a sensor value on another entity eg service.isUp == TRUE
-
-#### Configuration
-| Key | Description | Required |
-| --- | ----------- | -------- |
-| target | The target entity to test | yes (no if *targetId* is supplied) |
-| targetId | The id of the target entity to test | yes (no if *target* is supplied) |
-| assert | Assertions to be evaluated | yes |
-| timeout | The duration to wait on a result | no |
-
-##### Assertions
-| Key | Description |
-| --- | ----------- |
-| equal | Sensor value equals  |
-| regex | Sensor value matches regex |
-| isNull | Sensor value has not been set |
-
-```
-type: org.apache.brooklyn.test.framework.TestSensor
-target: $brooklyn:component("nginx1")
-sensor: service.isUp
-equals: true
-timeout: 5m
-```
-
-## TestEffector
-Entity that invokes an effector on another entity eg restart
-
-#### Configuration
-| Key | Description | Required |
-| --- | ----------- | -------- |
-| target | The target entity to effect | yes (no if *targetId* is supplied) |
-| targetId | The id of the target entity to effect | yes (no if *target* is supplied) |
-| effector | The name of the effector to invoke | yes |
-| params | Parameters to pass to the effector | no |
-| timeout | The duration to wait on a response from an effector | no |
-
-#### Sensors
-| Key | Description |
-| --- | ----------- |
-| result | The result of invoking the effector (null if no result) |
-
-```
-type: org.apache.brooklyn.test.framework.TestEffector
-name: Deploy WAR
-target: $brooklyn:component("tomcat")
-effector: deploy
-params:
-  url: https://tomcat.apache.org/tomcat-6.0-doc/appdev/sample/sample.war
-  targetName: sample1
-```
-
-## TestHtmlCall
-Entity that makes a HTTP Request and tests the response
-
-#### Configuration
-| Key | Description | Required |
-| --- | ----------- | -------- |
-| url | The URL to test | yes |
-| assert | Assertions to be evaluated | yes |
-| timeout | The duration to wait for assertion result | no |
-
-##### Assertions
-| Key | Description |
-| --- | ----------- |
-| string | HTTP body contains text |
-| regex | HTTP body matches regex |
-| status | HTTP status code equals |
-
-```
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: Status Code 200
-    url: $brooklyn:component("tomcat").attributeWhenReady("main.uri")
-    timeout: 1m
-    assert:
-      status: 200
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: String match
-    url: $brooklyn:component("tomcat").attributeWhenReady("main.uri")
-    timeout: 1m
-    assert:
-      string: Sample Brooklyn Deployed
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: Status Code 404
-    url: $brooklyn:formatString("%s/invalidpath/", component("tomcat").attributeWhenReady("webapp.url"))
-    assert:
-      status: 404
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: Regex match
-    url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url")
-    # the regex assert uses java.lang.String under the hood so if the url is expected to returns
-    # a multi-line response you should use the embedded dotall flag expression `(?s)` in your regex.
-    # See: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
-    assert:
-      regex: "(?s).*illustrate(\\s)*how(\\s)*web(\\s)*applications.*"
-```

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/etc/exampl-catalog.bom
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/etc/exampl-catalog.bom b/sandbox/brooklyn-sandbox-test-framework/etc/exampl-catalog.bom
deleted file mode 100644
index ab7e54b..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/etc/exampl-catalog.bom
+++ /dev/null
@@ -1,15 +0,0 @@
-brooklyn.catalog:
-  id: simple-tomcat
-  version: 1.0
-  itemType: template
-  iconUrl: http://tomcat.apache.org/images/tomcat.png
-  name: Simple Tomcat
-  license: Apache-2.0
-  item:
-    brooklyn.config:
-      simple.confg: someValue
-    services:
-    - type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
-      id: tomcat
-      name: Tomcat
-      war: https://tomcat.apache.org/tomcat-6.0-doc/appdev/sample/sample.war
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/etc/example-catalog-test.bom
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/etc/example-catalog-test.bom b/sandbox/brooklyn-sandbox-test-framework/etc/example-catalog-test.bom
deleted file mode 100644
index 0605f9d..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/etc/example-catalog-test.bom
+++ /dev/null
@@ -1,22 +0,0 @@
-brooklyn.catalog:
-  id: simple-tomcat-test
-  version: 1.0
-  itemType: template
-  iconUrl: http://tomcat.apache.org/images/tomcat.png
-  name: Simple Tomcat Test
-  license: Apache-2.0
-  item:
-    brooklyn.config:
-      simple.confg: someValue
-    services:
-    - type: org.apache.brooklyn.test.framework.TestCase
-      name: Simple Tomcat Tests
-      brooklyn.children:
-      - type: simple-tomcat
-        id: tomcat
-      - type: org.apache.brooklyn.test.framework.TestSensor
-        target: $brooklyn:component("tomcat")
-        sensor: service.isUp
-        timeout: 10m
-        assert:
-          equals: true
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/etc/nginx-test-examples.yml
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/etc/nginx-test-examples.yml b/sandbox/brooklyn-sandbox-test-framework/etc/nginx-test-examples.yml
deleted file mode 100644
index f1711ea..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/etc/nginx-test-examples.yml
+++ /dev/null
@@ -1,98 +0,0 @@
----
-# 1. Start an nginx
-# 2. Test it is running
-# 3. Stop it
-# 4. Test it stopped
-# Note there are two alternative forms to look up target - either just provide the 'targetId' to do an implicit DSL lookup,
-# or look it up with explicit DSL and provide it as 'target'.
-name: NGINX Test
-location: localhost
-services:
-- type: org.apache.brooklyn.test.framework.TestCase
-  name: Stop Test
-  brooklyn.children:
-  - type: org.apache.brooklyn.entity.proxy.nginx.NginxController
-    id: nginx1
-  - type: org.apache.brooklyn.test.framework.TestSensor
-    target: $brooklyn:component("nginx1")
-    sensor: service.isUp
-    equals: true
-    timeout: 5m
-  - type: org.apache.brooklyn.test.framework.TestEffector
-    target: $brooklyn:component("nginx1")
-    effector: stop
-  - type: org.apache.brooklyn.test.framework.TestSensor
-    target: $brooklyn:component("nginx1")
-    sensor: service.isUp
-    assert:
-      equals: false
-...
-
----
-name: NGINX Test
-location: localhost
-services:
-- type: org.apache.brooklyn.test.framework.TestCase
-  name: Stop Test
-  targetId: nginx1
-  brooklyn.children:
-  - type: org.apache.brooklyn.entity.proxy.nginx.NginxController
-    id: nginx1
-  - type: org.apache.brooklyn.test.framework.TestSensor
-    sensor: service.isUp
-    equals: true
-    timeout: 5m
-  - type: org.apache.brooklyn.test.framework.TestEffector
-    effector: stop
-  - type: org.apache.brooklyn.test.framework.TestSensor
-    sensor: service.isUp
-    equals: false
-
-
-
----
-name: NGINX Test
-location: localhost
-services:
-- type: org.apache.brooklyn.test.framework.TestCase
-  name: Stop Test
-  brooklyn.children:
-  - type: org.apache.brooklyn.entity.proxy.nginx.NginxController
-    id: nginx1
-  - type: org.apache.brooklyn.test.framework.TestSensor
-    target: $brooklyn:component("nginx1")
-    sensor: service.isUp
-    timeout: 5m
-    assert:
-      equals: true
-  - type: org.apache.brooklyn.test.framework.TestEffector
-    target: $brooklyn:component("nginx1")
-    effector: stop
-  - type: org.apache.brooklyn.test.framework.TestSensor
-    target: $brooklyn:component("nginx1")
-    sensor: service.isUp
-    assert:
-      equals: false
-      regex: .*
-...
-
----
-name: NGINX Test
-location: localhost
-services:
-- type: org.apache.brooklyn.entity.proxy.nginx.NginxController
-  id: nginx1
-- type: org.apache.brooklyn.test.framework.TestSensor
-  target: $brooklyn:component("nginx1")
-  sensor: service.isUp
-  timeout: 5m
-  assert:
-    equals: true
-- type: org.apache.brooklyn.test.framework.TestSensor
-  name: Test Regex
-  target: $brooklyn:component("nginx1")
-  sensor: service.isUp
-  timeout: 5m
-  assert:
-    regex: .*
-...
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/etc/testhttpcall-examples.yml
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/etc/testhttpcall-examples.yml b/sandbox/brooklyn-sandbox-test-framework/etc/testhttpcall-examples.yml
deleted file mode 100644
index a418fd8..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/etc/testhttpcall-examples.yml
+++ /dev/null
@@ -1,124 +0,0 @@
----
-name: Basic HTTP Call Tests
-location: localhost
-services:
-- type: org.apache.brooklyn.test.framework.TestCase
-  brooklyn.children:
-  - type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
-    id: tomcat
-    brooklyn.config:
-      war: "http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.6.0/brooklyn-example-hello-world-sql-webapp-0.6.0.war"
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: Status Code 200
-    url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url")
-    assert:
-      status: 200
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: Status Code 404
-    url: $brooklyn:formatString("%s/invalidpath/", component("tomcat").attributeWhenReady("webapp.url"))
-    timeout: 10s
-    assert:
-      status: 404
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: String match
-    url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url")
-    assert:
-      string: Sample Brooklyn Deployed
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: Regex match
-    url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url")
-    # the regex assert uses java.lang.String under the hood so if the url is expected to returns
-    # a multi-line response you should use the embedded dotall flag expression `(?s)` in your regex.
-    # See: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
-    assert:
-      regex: "(?s).*illustrate(\\s)*how(\\s)*web(\\s)*applications.*"
-...
-
----
-name: HTTP Call Test with Effector
-location: localhost
-services:
-- type: org.apache.brooklyn.test.framework.TestCase
-  brooklyn.children:
-  - type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
-    id: tomcat
-    brooklyn.config:
-      war: "http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.6.0/brooklyn-example-hello-world-sql-webapp-0.6.0.war"
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: / Status Code 200
-    url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url")
-    assert:
-      status: 200
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: /newcontext Status Code 404
-    url: $brooklyn:formatString("%s/newcontext/", component("tomcat").attributeWhenReady("webapp.url"))
-    assert:
-      status: 404
-  - type: org.apache.brooklyn.test.framework.TestEffector
-    name: Deploy WAR in /newcontext
-    target: $brooklyn:component("tomcat")
-    effector: deploy
-    params:
-      url: http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.6.0/brooklyn-example-hello-world-sql-webapp-0.6.0.war
-      targetName: newcontext
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: /newcontext Status Code 200
-    url: $brooklyn:formatString("%s/newcontext/", component("tomcat").attributeWhenReady("webapp.url"))
-    # Give Tomcat time to make the newly deployed War accessible
-    timeout: 10s
-    assert:
-      status: 200
-...
-
----
-name: HTTP Call Test with Eventual String and Regex Matches
-location: localhost
-services:
-- type: org.apache.brooklyn.test.framework.TestCase
-  brooklyn.children:
-  - type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
-    id: tomcat
-    brooklyn.config:
-      war: "http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.6.0/brooklyn-example-hello-world-sql-webapp-0.6.0.war"
-  - type: org.apache.brooklyn.test.framework.TestEffector
-    name: Deploy WAR in /newcontext
-    target: $brooklyn:component("tomcat")
-    effector: deploy
-    params:
-      url: http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.6.0/brooklyn-example-hello-world-sql-webapp-0.6.0.war
-      targetName: newcontext
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: Regex match
-    url: $brooklyn:formatString("%s/newcontext/", component("tomcat").attributeWhenReady("webapp.url"))
-    timeout: 10s
-    assert:
-      regex: "(?s).*illustrate(\\s)*how(\\s)*web(\\s)*applications.*"
-  - type: org.apache.brooklyn.test.framework.TestEffector
-    name: Deploy WAR in /newcontext2
-    target: $brooklyn:component("tomcat")
-    effector: deploy
-    params:
-      url: http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.6.0/brooklyn-example-hello-world-sql-webapp-0.6.0.war
-      targetName: newcontext2
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: String match
-    url: $brooklyn:formatString("%s/newcontext2/", component("tomcat").attributeWhenReady("webapp.url"))
-    timeout: 10s
-    assert:
-      string: Sample Brooklyn Deployed
-    assert:
-      status: 404
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: String match
-    url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url")
-    assert:
-      string: Sample Brooklyn Deployed
-  - type: org.apache.brooklyn.test.framework.TestHttpCall
-    name: Regex match
-    url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url")
-    # the regex assert uses java.lang.String under the hood so if the url is expected to returns
-    # a multi-line response you should use the embedded dotall flag expression `(?s)` in your regex.
-    # See: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
-    assert:
-      regex: "(?s).*illustrate(\\s)*how(\\s)*web(\\s)*applications.*"
-...
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/etc/tomcat-test-examples.yml
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/etc/tomcat-test-examples.yml b/sandbox/brooklyn-sandbox-test-framework/etc/tomcat-test-examples.yml
deleted file mode 100644
index 37d7f4d..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/etc/tomcat-test-examples.yml
+++ /dev/null
@@ -1,45 +0,0 @@
----
-name: Tomcat Multi-War Test
-location: localhost
-services:
-- type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
-  id: tomcat
-  name: Tomcat
-  brooklyn.config:
-    wars.by.context:
-      hello1: "http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.6.0/brooklyn-example-hello-world-sql-webapp-0.6.0.war"
-      hello2: "http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.6.0/brooklyn-example-hello-world-sql-webapp-0.6.0.war"
-    start.timeout: 10m
-- type: org.apache.brooklyn.test.framework.TestSensor
-  target: $brooklyn:component("tomcat")
-  sensor: service.isUp
-  assert:
-    equals: true
-  timeout: 10m
-...
-
----
-name: Tomcat Tests
-location: BYON 1
-services:
-  - type: org.apache.brooklyn.test.framework.TestCase
-    name: Effector - Deploy Test
-    brooklyn.children:
-    - type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
-      id: tomcat
-      name: Tomcat
-      war: https://tomcat.apache.org/tomcat-6.0-doc/appdev/sample/sample.war
-    - type: org.apache.brooklyn.test.framework.TestEffector
-      name: Deploy Another WAR
-      target: $brooklyn:component("tomcat")
-      effector: deploy
-      params:
-        url: https://tomcat.apache.org/tomcat-6.0-doc/appdev/sample/sample.war
-        targetName: sample1
-#    - type: org.apache.brooklyn.test.framework.TestSensor
-#      target: $brooklyn:component("tomcat")
-#      sensor: webapp.deployedWars
-#      assert:
-#        regex: .*sample1.*
-#      timeout: 1m
-...
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/pom.xml b/sandbox/brooklyn-sandbox-test-framework/pom.xml
deleted file mode 100644
index ba9430f..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/pom.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>brooklyn</artifactId>
-        <groupId>org.apache.brooklyn</groupId>
-        <version>0.9.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>brooklyn-sandbox-test-framework</artifactId>
-    <name>Brooklyn Test Framework</name>
-
-    <properties>
-        <assertj.version>3.2.0</assertj.version>
-    </properties>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.apache.brooklyn</groupId>
-            <artifactId>brooklyn-core</artifactId>
-            <version>${brooklyn.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.brooklyn</groupId>
-            <artifactId>brooklyn-camp</artifactId>
-            <version>${brooklyn.version}</version>
-        </dependency>
-
-        <!--TEST SCOPE :: START-->
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>${testng.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.brooklyn</groupId>
-            <artifactId>brooklyn-test-support</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.brooklyn</groupId>
-            <artifactId>brooklyn-core</artifactId>
-            <version>${brooklyn.version}</version>
-            <scope>test</scope>
-            <classifier>tests</classifier>
-        </dependency>
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <version>${assertj.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <!--TEST SCOPE :: END-->
-        
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.3</version>
-                <configuration>
-                    <source>${java.version}</source>
-                    <target>${java.version}</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/AbstractTest.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/AbstractTest.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/AbstractTest.java
deleted file mode 100644
index 2194286..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/AbstractTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.mgmt.Task;
-import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent;
-import org.apache.brooklyn.core.entity.AbstractEntity;
-import org.apache.brooklyn.util.core.task.Tasks;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.concurrent.ExecutionException;
-
-/**
- * Abstract base class for tests, providing common target lookup.
- */
-public abstract class AbstractTest extends AbstractEntity implements BaseTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AbstractTest.class);
-
-    /**
-     * Find the target entity using "target" config key, if entity provided directly in config, or by doing an implicit
-     * lookup using DSL ($brooklyn:component("myNginX")), if id of entity provided as "targetId" config key.
-     *
-     * @return The target entity.
-     *
-     * @throws @RuntimeException if no target can be determined.
-     */
-    public Entity resolveTarget() {
-        Entity entity = getConfig(TARGET_ENTITY);
-        if (null == entity) {
-            entity = getTargetById();
-        }
-        return entity;
-    }
-
-    private Entity getTargetById() {
-        String targetId = getConfig(TARGET_ID);
-        final Task<Entity> targetLookup = new DslComponent(targetId).newTask();
-        Entity entity = null;
-        try {
-            entity = Tasks.resolveValue(targetLookup, Entity.class, getExecutionContext(), "Finding entity " + targetId);
-            LOG.debug("Found target by id {}", targetId);
-        } catch (final ExecutionException | InterruptedException e) {
-            LOG.error("Error finding target {}", targetId);
-            Exceptions.propagate(e);
-        }
-        return entity;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/BaseTest.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/BaseTest.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/BaseTest.java
deleted file mode 100644
index b0f347d..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/BaseTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.util.core.flags.SetFromFlag;
-
-/**
- *  A base interface for all tests.
- */
-public interface BaseTest extends Entity, Startable {
-
-    /**
-     * The target entity to test (optional, use either this or targetId).
-     */
-    @SetFromFlag(nullable = false)
-    ConfigKey<Entity> TARGET_ENTITY = ConfigKeys.newConfigKey(Entity.class, "target", "Entity under test");
-
-    /**
-     * Id of the target entity to test (optional, use either this or target).
-     */
-    @SetFromFlag(nullable = false)
-    ConfigKey<String> TARGET_ID = ConfigKeys.newStringConfigKey("targetId", "Id of the entity under test");
-
-    /**
-     * Get the target of the test.
-     *
-     * @return The target.
-     *
-     * @throws IllegalArgumentException if the target cannot be found.
-     */
-    Entity resolveTarget();
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/ParallelTestCase.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/ParallelTestCase.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/ParallelTestCase.java
deleted file mode 100644
index b5dc1ea..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/ParallelTestCase.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.ImplementedBy;
-import org.apache.brooklyn.core.entity.trait.Startable;
-
-/**
- * 
- * @author Chris Burke
- */
-@ImplementedBy(value = ParallelTestCaseImpl.class)
-public interface ParallelTestCase extends Entity, Startable {
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/ParallelTestCaseImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/ParallelTestCaseImpl.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/ParallelTestCaseImpl.java
deleted file mode 100644
index 67e972a..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/ParallelTestCaseImpl.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import java.util.Collection;
-import java.util.concurrent.ExecutionException;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.mgmt.Task;
-import org.apache.brooklyn.api.mgmt.TaskAdaptable;
-import org.apache.brooklyn.core.entity.AbstractEntity;
-import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.trait.StartableMethods;
-import org.apache.brooklyn.util.core.task.DynamicTasks;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This implementation will start all child entities in parallel.
- * 
- * @author Chris Burke
- */
-public class ParallelTestCaseImpl extends AbstractEntity implements ParallelTestCase {
-
-    private static final Logger logger = LoggerFactory.getLogger(ParallelTestCaseImpl.class);
-
-    /**
-     * {@inheritDoc}
-     */
-    public void start(Collection<? extends Location> locations) {
-        // Let everyone know we're starting up (so that the GUI shows the correct icon).
-        sensors().set(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STARTING);
-        try {
-            // Get an unsubmitted task for starting all the children of this entity in parallel,
-            // at the same location as this entity.
-            final TaskAdaptable<?> taskAdaptable = StartableMethods.startingChildren(this);
-            logger.trace("{}, TaskAdaptable: {}", this, taskAdaptable);
-
-            // Submit the task to the ExecutionManager so that they actually get started
-            // and then wait until all the parallel child entities have completed.
-            submitTaskAndWait(taskAdaptable);
-
-            // Let everyone know we've started up successfully (changes the icon in the GUI).
-            logger.debug("Tasks successfully run. Update state of {} to RUNNING.", this);
-            setServiceState(true, Lifecycle.RUNNING);
-        } catch (Throwable t) {
-            logger.debug("Tasks NOT successfully run. Update state of {} to ON_FIRE.", this);
-            setServiceState(false, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(t);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void stop() {
-        // Let everyone know we're stopping (so that the GUI shows the correct icon).
-        sensors().set(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPING);
-
-        // Get an unsubmitted task for stopping all the children of this entity in parallel.
-        final TaskAdaptable<?> taskAdaptable = StartableMethods.stoppingChildren(this);
-        logger.trace("{}, TaskAdaptable: {}", this, taskAdaptable);
-        try {
-            // Submit the task to the ExecutionManager so that they actually get stopped
-            // and then wait until all the parallel entities have completed.
-            submitTaskAndWait(taskAdaptable);
-            // Let everyone know we've stopped successfully (changes the icon in the GUI).
-            logger.debug("Tasks successfully run. Update state of {} to STOPPED.", this);
-            setServiceState(false, Lifecycle.STOPPED);
-        } catch (Throwable t) {
-            logger.debug("Tasks NOT successfully run. Update state of {} to ON_FIRE.", this);
-            setServiceState(false, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(t);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void restart() {
-        // Let everyone know we're restarting (so that the GUI shows the correct icon).
-        setServiceState(false, Lifecycle.STARTING);
-
-        // Get an unsubmitted task for restarting all the children of this entity in parallel.
-        final TaskAdaptable<?> taskAdaptable = StartableMethods.restartingChildren(this);
-        logger.trace("{}, TaskAdaptable: {}", this, taskAdaptable);
-
-        try {
-            // Submit the task to the ExecutionManager so that they actually get stopped
-            // and then wait until all the parallel entities have completed.
-            submitTaskAndWait(taskAdaptable);
-
-            // Let everyone know we've started up successfully (changes the icon in the GUI).
-            logger.debug("Tasks successfully run. Update state of {} to RUNNING.", this);
-            setServiceState(true, Lifecycle.RUNNING);
-        } catch (Throwable t) {
-            logger.debug("Tasks NOT successfully run. Update state of {} to ON_FIRE.", this);
-            setServiceState(false, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(t);
-        }
-    }
-
-    /**
-     * Submits the task to the ExecutionManager and then waits until the task has completed.
-     * 
-     * @param taskAdaptable the TaskAdaptable to submit for execution.
-     * @throws ExecutionException if the task threw an exception
-     * @throws InterruptedException if the current thread was interrupted while waiting
-     */
-    private void submitTaskAndWait(final TaskAdaptable<?> taskAdaptable)
-            throws InterruptedException, ExecutionException {
-        logger.debug("{}, Submitting taskAdaptable: {}", this, taskAdaptable);
-        // Submit the task to the ExecutionManager.
-        final Task<?> task = DynamicTasks.submit(taskAdaptable, this);
-
-        // Block until the task has completed.
-        logger.debug("{}, Blocking until task complete.", this);
-        task.blockUntilEnded();
-        logger.debug("{}, Task complete.", this);
-
-        // Get the result of the task. We don't really care about the
-        // actual result but this will throw an exception if the task failed.
-        task.get();
-    }
-
-    private void setServiceState(final boolean serviceUpState, final Lifecycle serviceStateActual) {
-        sensors().set(SERVICE_UP, serviceUpState);
-        sensors().set(Attributes.SERVICE_STATE_ACTUAL, serviceStateActual);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestCase.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestCase.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestCase.java
deleted file mode 100644
index 6d2ae11..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestCase.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import org.apache.brooklyn.api.entity.ImplementedBy;
-
-/**
- * Entity that logically groups other test entities
- *
- * @author m4rkmckenna
- */
-@ImplementedBy(value = TestCaseImpl.class)
-public interface TestCase extends BaseTest {
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestCaseImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestCaseImpl.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestCaseImpl.java
deleted file mode 100644
index 1b443fb..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestCaseImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.common.collect.Lists;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-
-import java.util.Collection;
-
-/**
- * {@inheritDoc}
- */
-public class TestCaseImpl extends AbstractTest implements TestCase {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void start(Collection<? extends Location> locations) {
-        ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);
-        try {
-            for (final Entity childEntity : getChildren()) {
-                if (childEntity instanceof Startable) ((Startable) childEntity).start(locations);
-            }
-            sensors().set(SERVICE_UP, true);
-            ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
-        } catch (Throwable t) {
-            sensors().set(SERVICE_UP, false);
-            ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(t);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void stop() {
-        ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
-        sensors().set(SERVICE_UP, false);
-        try {
-            for (Entity child : getChildren()) {
-                if (child instanceof Startable) ((Startable) child).stop();
-            }
-            ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPED);
-        } catch (Exception e) {
-            ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(e);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void restart() {
-        final Collection<Location> locations = Lists.newArrayList(getLocations());
-        stop();
-        start(locations);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffector.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffector.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffector.java
deleted file mode 100644
index e9ec832..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffector.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.reflect.TypeToken;
-import org.apache.brooklyn.api.entity.ImplementedBy;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
-import org.apache.brooklyn.util.core.flags.SetFromFlag;
-import org.apache.brooklyn.util.time.Duration;
-
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Entity that invokes an effector on another entity
- *
- * @author m4rkmckenna
- */
-@ImplementedBy(value = TestEffectorImpl.class)
-public interface TestEffector extends BaseTest {
-
-    @SetFromFlag(nullable = false)
-    ConfigKey<String> EFFECTOR_NAME = ConfigKeys.newConfigKey(String.class, "effector", "The name of the effector to invoke");
-
-    ConfigKey<Map<String, ?>> EFFECTOR_PARAMS = ConfigKeys.newConfigKey(new TypeToken<Map<String, ?>>() {
-    }, "params", "The parameters to pass to the effector", ImmutableMap.<String, Object>of());
-
-    ConfigKey<Duration> TIMEOUT = ConfigKeys.newConfigKey(Duration.class, "timeout", "Time to wait on sensor result", new Duration(5L, TimeUnit.SECONDS));
-
-    AttributeSensorAndConfigKey<Object, Object> EFFECTOR_RESULT = ConfigKeys.newSensorAndConfigKey(Object.class, "result", "The result of invoking the effector");
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java
deleted file mode 100644
index 442797e..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.common.collect.Lists;
-import org.apache.brooklyn.api.effector.Effector;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.mgmt.Task;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.core.mgmt.internal.EffectorUtils;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.guava.Maybe;
-import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collection;
-import java.util.Map;
-
-/**
- *
- */
-public class TestEffectorImpl extends AbstractTest implements TestEffector {
-    private static final Logger LOG = LoggerFactory.getLogger(TestEffectorImpl.class);
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public void start(Collection<? extends Location> locations) {
-        ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);
-        final Entity targetEntity = resolveTarget();
-        final String effectorName = getConfig(EFFECTOR_NAME);
-        final Map<String, ?> effectorParams = getConfig(EFFECTOR_PARAMS);
-        final Duration timeout = getConfig(TIMEOUT);
-        try {
-            Maybe<Effector<?>> effector = EffectorUtils.findEffectorDeclared(targetEntity, effectorName);
-            if (effector.isAbsentOrNull()) {
-                throw new AssertionError(String.format("No effector with name [%s]", effectorName));
-            }
-            final Task<?> effectorResult;
-            if (effectorParams == null || effectorParams.isEmpty()) {
-                effectorResult = Entities.invokeEffector(this, targetEntity, effector.get());
-            } else {
-                effectorResult = Entities.invokeEffector(this, targetEntity, effector.get(), effectorParams);
-            }
-
-            //Add result of effector to sensor
-            sensors().set(EFFECTOR_RESULT, effectorResult.get(timeout));
-
-            //Start Children
-            for (Entity childEntity : getChildren()) {
-                if (childEntity instanceof Startable) ((Startable) childEntity).start(locations);
-            }
-            sensors().set(SERVICE_UP, true);
-            ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
-        } catch (Throwable t) {
-            sensors().set(SERVICE_UP, false);
-            ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(t);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void stop() {
-        ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
-        sensors().set(SERVICE_UP, false);
-        try {
-            for (Entity child : getChildren()) {
-                if (child instanceof Startable) ((Startable) child).stop();
-            }
-            ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPED);
-        } catch (Exception e) {
-            ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(e);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void restart() {
-        final Collection<Location> locations = Lists.newArrayList(getLocations());
-        stop();
-        start(locations);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCall.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCall.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCall.java
deleted file mode 100644
index 5dfa1c8..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCall.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.common.collect.Maps;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.ImplementedBy;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.util.core.flags.SetFromFlag;
-import org.apache.brooklyn.util.time.Duration;
-
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Entity that makes a HTTP Request and tests the respose
- *
- * @author johnmccabe
- */
-@ImplementedBy(value = TestHttpCallImpl.class)
-public interface TestHttpCall extends Entity, Startable {
-
-    @SetFromFlag(nullable = false)
-    ConfigKey<String> TARGET_URL = ConfigKeys.newStringConfigKey("url", "URL to test");
-
-    @SetFromFlag(nullable = false)
-    ConfigKey<Map> ASSERTIONS = ConfigKeys.newConfigKey(Map.class, "assert",
-            "Assertions to be evaluated", Maps.newLinkedHashMap());
-
-    ConfigKey<Duration> TIMEOUT = ConfigKeys.newConfigKey(Duration.class, "timeout",
-            "The duration to wait for assertion result", new Duration(1L, TimeUnit.SECONDS));
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java
deleted file mode 100644
index 7413066..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.api.client.util.Objects;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.core.entity.AbstractEntity;
-import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
-import org.apache.brooklyn.util.core.flags.TypeCoercions;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collection;
-import java.util.Map;
-
-import static org.apache.brooklyn.util.http.HttpAsserts.assertContentEventuallyContainsText;
-import static org.apache.brooklyn.util.http.HttpAsserts.assertContentEventuallyMatches;
-import static org.apache.brooklyn.util.http.HttpAsserts.assertHttpStatusCodeEventuallyEquals;
-
-/**
- * {@inheritDoc}
- */
-public class TestHttpCallImpl extends AbstractEntity implements TestHttpCall {
-
-    private static final Logger LOG = LoggerFactory.getLogger(TestHttpCallImpl.class);
-
-    /**
-     * {@inheritDoc}
-     */
-    public void start(Collection<? extends Location> locations) {
-        ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);
-        final String url = getConfig(TARGET_URL);
-        final Map assertions = getConfig(ASSERTIONS);
-        final Duration timeout = getConfig(TIMEOUT);
-        try {
-            checkAssertions(url.toString(), ImmutableMap.of("timeout", timeout), assertions);
-            sensors().set(SERVICE_UP, true);
-            ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
-        } catch (Throwable t) {
-            LOG.info("Url [{}] test failed", url);
-            sensors().set(SERVICE_UP, false);
-            ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(t);
-        }
-    }
-
-    /**
-     * Tests HTTP Request reponse matches assertions
-     * <p>
-     * Supported keys in the <code>assertions</code> {@link Map} include:
-     * <ul>
-     * <li>string - simple string match
-     * <li>regex - uses {@link java.lang.String#matches(String)}, if the url returns a multi-line response you should
-     * use the embedded dotall flag expression <code>(?s)</code> in your regex.
-     * <li>status - HTTP status code
-     * </ul>
-     * Wraps the {@link org.apache.brooklyn.util.http.HttpAsserts} immediate assertion methods.
-     * <p>
-     * See the test/resources directory for examples.
-     *
-     * @param url        The target URL to be tested
-     * @param flags      Passed to {@link org.apache.brooklyn.util.http.HttpAsserts#assertContentEventuallyContainsText(Map, String, String, String...)},
-     *                   {@link org.apache.brooklyn.util.http.HttpAsserts#assertContentEventuallyMatches(Map, String, String)},
-     *                   {@link org.apache.brooklyn.util.http.HttpAsserts#assertHttpStatusCodeEventuallyEquals(Map, String, int)}
-     *
-     * @param assertions The map of assertions
-     */
-    private void checkAssertions(final String url, final Map<String,?> flags, final Map<?, ?> assertions) {
-
-        for (final Map.Entry<?, ?> entry : assertions.entrySet()) {
-            if (Objects.equal(entry.getKey(), "regex")) {
-                LOG.info("Testing if url [{}] matches regex [{}]",
-                        new Object[]{url, entry.getValue()});
-                assertContentEventuallyMatches( flags, url, TypeCoercions.coerce(entry.getValue(), String.class));
-            } else if (Objects.equal(entry.getKey(), "string")) {
-                LOG.debug("Testing if url [{}] contains string [{}]",
-                        new Object[]{url, entry.getValue()});
-                assertContentEventuallyContainsText(flags, url, TypeCoercions.coerce(entry.getValue(), String.class));
-            } else if (Objects.equal(entry.getKey(), "status")) {
-                LOG.debug("Testing if url [{}] returns status code [{}]",
-                        new Object[]{url, entry.getValue()});
-                assertHttpStatusCodeEventuallyEquals(flags, url, TypeCoercions.coerce(entry.getValue(), Integer.class));
-            }
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void stop() {
-        ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
-        sensors().set(SERVICE_UP, false);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void restart() {
-        final Collection<Location> locations = Lists.newArrayList(getLocations());
-        stop();
-        start(locations);
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java
deleted file mode 100644
index c6303eb..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.common.collect.Maps;
-import org.apache.brooklyn.api.entity.ImplementedBy;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.util.core.flags.SetFromFlag;
-import org.apache.brooklyn.util.time.Duration;
-
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Entity that tests a sensor value on another entity
- *
- * @author m4rkmckenna
- */
-@ImplementedBy(value = TestSensorImpl.class)
-public interface TestSensor extends BaseTest {
-
-    @SetFromFlag(nullable = false)
-    ConfigKey<String> SENSOR_NAME = ConfigKeys.newConfigKey(String.class, "sensor", "Sensor to evaluate");
-
-    ConfigKey<Map> ASSERTIONS = ConfigKeys.newConfigKey(Map.class, "assert", "Assertions to be evaluated", Maps.newLinkedHashMap());
-
-    ConfigKey<Duration> TIMEOUT = ConfigKeys.newConfigKey(Duration.class, "timeout", "Time to wait on sensor result", new Duration(1L, TimeUnit.SECONDS));
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java b/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java
deleted file mode 100644
index 94151c6..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.api.client.util.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.sensor.AttributeSensor;
-import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.core.sensor.Sensors;
-import org.apache.brooklyn.util.core.flags.TypeCoercions;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import static org.apache.brooklyn.core.entity.EntityAsserts.assertAttributeEventually;
-
-/**
- * {@inheritDoc}
- */
-public class TestSensorImpl extends AbstractTest implements TestSensor {
-
-    private static final Logger LOG = LoggerFactory.getLogger(TestSensorImpl.class);
-
-    /**
-     * {@inheritDoc}
-     */
-    public void start(Collection<? extends Location> locations) {
-        ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);
-        final Entity target = resolveTarget();
-        final String sensor = getConfig(SENSOR_NAME);
-        final Duration timeout = getConfig(TIMEOUT);
-        final Map assertions = getConfig(ASSERTIONS);
-        try {
-            checkAssertions(target, Sensors.newSensor(Object.class, sensor), ImmutableMap.of("timeout", timeout),
-                    assertions);
-            sensors().set(SERVICE_UP, true);
-            ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
-        } catch (Throwable t) {
-            LOG.info("Sensor [{}] test failed", sensor);
-            sensors().set(SERVICE_UP, false);
-            ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(t);
-        }
-    }
-
-    /**
-     * Tests sensor values match assertions
-     *
-     * @param target     The {@link Entity} that has the sensor under test
-     * @param sensor     The sensor to test
-     * @param flags      Passed to {@link org.apache.brooklyn.core.entity.EntityAsserts#assertAttributeEventually(Map, Entity, AttributeSensor, Predicate)}
-     * @param assertions The map of assertions
-     */
-    private void checkAssertions(final Entity target, final AttributeSensor<Object> sensor, final Map<?, ?> flags, final Map<?, ?> assertions) {
-        for (final Map.Entry<?, ?> entry : assertions.entrySet()) {
-            if (Objects.equal(entry.getKey(), "equals")) {
-                assertAttributeEventually(flags, target, sensor, isEqualTo(entry.getValue()));
-            } else if (Objects.equal(entry.getKey(), "regex")) {
-                assertAttributeEventually(flags, target, sensor, regexMatches(entry.getValue()));
-            } else if (Objects.equal(entry.getKey(), "isNull")) {
-                assertAttributeEventually(flags, target, sensor, isNull(entry.getValue()));
-            }
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void stop() {
-        ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPING);
-        sensors().set(SERVICE_UP, false);
-        try {
-            for (Entity child : getChildren()) {
-                if (child instanceof Startable) ((Startable) child).stop();
-            }
-            ServiceStateLogic.setExpectedState(this, Lifecycle.STOPPED);
-        } catch (Exception e) {
-            ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
-            throw Exceptions.propagate(e);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void restart() {
-        final Collection<Location> locations = Lists.newArrayList(getLocations());
-        stop();
-        start(locations);
-    }
-
-    /**
-     * Predicate to check the equality of object
-     *
-     * @param value
-     * @return The created {@link Predicate}
-     */
-    private Predicate<Object> isEqualTo(final Object value) {
-        return new Predicate<Object>() {
-            public boolean apply(final Object input) {
-                return (input != null) && Objects.equal(TypeCoercions.coerce(value, input.getClass()), input);
-            }
-        };
-    }
-
-    /**
-     * Predicate to check if a sensor matches a regex pattern
-     *
-     * @param patternValue
-     * @return
-     */
-    private Predicate<Object> regexMatches(final Object patternValue) {
-        final Pattern pattern = Pattern.compile(TypeCoercions.coerce(patternValue, String.class));
-        return new Predicate<Object>() {
-            public boolean apply(final Object input) {
-                return (input != null) && pattern.matcher(input.toString()).matches();
-            }
-        };
-    }
-
-    /**
-     * Predicate to check if a sensor value is null
-     *
-     * @param isNullValue
-     * @return
-     */
-    private Predicate<Object> isNull(final Object isNullValue) {
-        return new Predicate<Object>() {
-            public boolean apply(final Object input) {
-                return (input == null) == TypeCoercions.coerce(isNullValue, Boolean.class);
-            }
-        };
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEffectorTest.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEffectorTest.java b/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEffectorTest.java
deleted file mode 100644
index b43c76b..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEffectorTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.test.entity.TestApplication;
-import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.util.UUID;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * @author m4rkmckenna on 27/10/2015.
- */
-public class TestEffectorTest {
-
-    private TestApplication app;
-    private ManagementContext managementContext;
-    private LocalhostMachineProvisioningLocation loc;
-    private String testId;
-
-    @BeforeMethod
-    public void setup() {
-        testId = UUID.randomUUID().toString();
-        app = TestApplication.Factory.newManagedInstanceForTests();
-        managementContext = app.getManagementContext();
-
-        loc = managementContext.getLocationManager().createLocation(LocationSpec.create(LocalhostMachineProvisioningLocation.class)
-                .configure("name", testId));
-
-    }
-
-
-    @AfterMethod(alwaysRun = true)
-    public void tearDown() throws Exception {
-        if (app != null) Entities.destroyAll(app.getManagementContext());
-    }
-
-
-    @Test
-    public void testSimpleEffector() {
-        final TestCase testCase = app.createAndManageChild(EntitySpec.create(TestCase.class));
-        final TestEntity testEntity = testCase.addChild(EntitySpec.create(TestEntity.class));
-
-
-        final TestEffector testEffector = testCase.addChild(EntitySpec.create(TestEffector.class)
-                .configure(TestEffector.TARGET_ENTITY, testEntity)
-                .configure(TestEffector.EFFECTOR_NAME, "simpleEffector"));
-
-        app.start(ImmutableList.of(app.newSimulatedLocation()));
-
-        assertThat(testEntity.sensors().get(TestEntity.SIMPLE_EFFECTOR_INVOKED)).isNotNull();
-        assertThat(testEntity.sensors().get(TestEntity.SIMPLE_EFFECTOR_INVOKED)).isTrue();
-
-        assertThat(testEffector.sensors().get(TestEffector.EFFECTOR_RESULT)).isNull();
-    }
-
-    @Test
-    public void testComplexffector() {
-        final TestCase testCase = app.createAndManageChild(EntitySpec.create(TestCase.class));
-        final TestEntity testEntity = testCase.addChild(EntitySpec.create(TestEntity.class));
-
-        final long expectedLongValue = System.currentTimeMillis();
-        final boolean expectedBooleanValue = expectedLongValue % 2 == 0;
-
-        final TestEffector testEffector = testCase.addChild(EntitySpec.create(TestEffector.class)
-                .configure(TestEffector.TARGET_ENTITY, testEntity)
-                .configure(TestEffector.EFFECTOR_NAME, "complexEffector")
-                .configure(TestEffector.EFFECTOR_PARAMS, ImmutableMap.of(
-                        "stringValue", testId,
-                        "booleanValue", expectedBooleanValue,
-                        "longValue", expectedLongValue)));
-
-        app.start(ImmutableList.of(app.newSimulatedLocation()));
-
-        assertThat(testEntity.sensors().get(TestEntity.SIMPLE_EFFECTOR_INVOKED)).isNull();
-        assertThat(testEntity.sensors().get(TestEntity.COMPLEX_EFFECTOR_INVOKED)).isNotNull();
-        assertThat(testEntity.sensors().get(TestEntity.COMPLEX_EFFECTOR_INVOKED)).isTrue();
-
-        assertThat(testEntity.sensors().get(TestEntity.COMPLEX_EFFECTOR_STRING)).isNotNull();
-        assertThat(testEntity.sensors().get(TestEntity.COMPLEX_EFFECTOR_STRING)).isEqualTo(testId);
-
-        assertThat(testEntity.sensors().get(TestEntity.COMPLEX_EFFECTOR_BOOLEAN)).isNotNull();
-        assertThat(testEntity.sensors().get(TestEntity.COMPLEX_EFFECTOR_BOOLEAN)).isEqualTo(expectedBooleanValue);
-
-        assertThat(testEntity.sensors().get(TestEntity.COMPLEX_EFFECTOR_LONG)).isNotNull();
-        assertThat(testEntity.sensors().get(TestEntity.COMPLEX_EFFECTOR_LONG)).isEqualTo(expectedLongValue);
-
-        assertThat(testEffector.sensors().get(TestEffector.EFFECTOR_RESULT)).isNotNull();
-        assertThat(testEffector.sensors().get(TestEffector.EFFECTOR_RESULT)).isInstanceOf(TestEntity.TestPojo.class);
-
-        final TestEntity.TestPojo effectorResult = (TestEntity.TestPojo) testEffector.sensors().get(TestEffector.EFFECTOR_RESULT);
-        assertThat(effectorResult.getBooleanValue()).isEqualTo(expectedBooleanValue);
-        assertThat(effectorResult.getStringValue()).isEqualTo(testId);
-        assertThat(effectorResult.getLongValue()).isEqualTo(expectedLongValue);
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEntity.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEntity.java b/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEntity.java
deleted file mode 100644
index 933b227..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEntity.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.ImplementedBy;
-import org.apache.brooklyn.core.annotation.Effector;
-import org.apache.brooklyn.core.annotation.EffectorParam;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
-
-/**
- * @author m4rkmckenna on 27/10/2015.
- */
-
-@ImplementedBy(TestEntityImpl.class)
-public interface TestEntity extends Entity, Startable {
-
-    AttributeSensorAndConfigKey<Boolean, Boolean> SIMPLE_EFFECTOR_INVOKED = ConfigKeys.newSensorAndConfigKey(Boolean.class, "simple-effector-invoked", "");
-    AttributeSensorAndConfigKey<Boolean, Boolean> COMPLEX_EFFECTOR_INVOKED = ConfigKeys.newSensorAndConfigKey(Boolean.class, "complex-effector-invoked", "");
-    AttributeSensorAndConfigKey<String, String> COMPLEX_EFFECTOR_STRING = ConfigKeys.newSensorAndConfigKey(String.class, "complex-effector-string", "");
-    AttributeSensorAndConfigKey<Boolean, Boolean> COMPLEX_EFFECTOR_BOOLEAN = ConfigKeys.newSensorAndConfigKey(Boolean.class, "complex-effector-boolean", "");
-    AttributeSensorAndConfigKey<Long, Long> COMPLEX_EFFECTOR_LONG = ConfigKeys.newSensorAndConfigKey(Long.class, "complex-effector-long", "");
-
-    @Effector
-    void simpleEffector();
-
-    @Effector
-    TestPojo complexEffector(@EffectorParam(name = "stringValue") final String stringValue,
-                             @EffectorParam(name = "booleanValue") final Boolean booleanValue,
-                             @EffectorParam(name = "longValue") final Long longValue);
-
-    class TestPojo {
-        private final String stringValue;
-        private final Boolean booleanValue;
-        private final Long longValue;
-
-        public TestPojo(final String stringValue, final Boolean booleanValue, final Long longValue) {
-            this.stringValue = stringValue;
-            this.booleanValue = booleanValue;
-            this.longValue = longValue;
-        }
-
-        public String getStringValue() {
-            return stringValue;
-        }
-
-        public Boolean getBooleanValue() {
-            return booleanValue;
-        }
-
-        public Long getLongValue() {
-            return longValue;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEntityImpl.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEntityImpl.java b/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEntityImpl.java
deleted file mode 100644
index b3386f2..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestEntityImpl.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.core.annotation.EffectorParam;
-import org.apache.brooklyn.core.entity.AbstractEntity;
-
-import java.util.Collection;
-
-/**
- * @author m4rkmckenna on 27/10/2015.
- */
-public class TestEntityImpl extends AbstractEntity implements TestEntity {
-    @Override
-    public void start(final Collection<? extends Location> locations) {
-    }
-
-    @Override
-    public void stop() {
-
-    }
-
-    @Override
-    public void restart() {
-    }
-
-    @Override
-    public void simpleEffector() {
-        sensors().set(SIMPLE_EFFECTOR_INVOKED, Boolean.TRUE);
-    }
-
-    @Override
-    public TestPojo complexEffector(@EffectorParam(name = "stringValue") final String stringValue, @EffectorParam(name = "booleanValue") final Boolean booleanValue, @EffectorParam(name = "longValue") final Long longValue) {
-        sensors().set(COMPLEX_EFFECTOR_INVOKED, Boolean.TRUE);
-        sensors().set(COMPLEX_EFFECTOR_STRING, stringValue);
-        sensors().set(COMPLEX_EFFECTOR_BOOLEAN, booleanValue);
-        sensors().set(COMPLEX_EFFECTOR_LONG, longValue);
-        return new TestPojo(stringValue, booleanValue, longValue);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java
----------------------------------------------------------------------
diff --git a/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java b/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java
deleted file mode 100644
index 0b653eb..0000000
--- a/sandbox/brooklyn-sandbox-test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java
+++ /dev/null
@@ -1,270 +0,0 @@
-package org.apache.brooklyn.test.framework;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
-import org.apache.brooklyn.core.test.entity.TestApplication;
-import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.exceptions.PropagatedRuntimeException;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.util.UUID;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * @author m4rkmckenna on 27/10/2015.
- */
-public class TestSensorTest {
-
-    private static final AttributeSensorAndConfigKey<Boolean, Boolean> BOOLEAN_SENSOR = ConfigKeys.newSensorAndConfigKey(Boolean.class, "boolean-sensor", "Boolean Sensor");
-    private static final AttributeSensorAndConfigKey<String, String> STRING_SENSOR = ConfigKeys.newSensorAndConfigKey(String.class, "string-sensor", "String Sensor");
-    private static final AttributeSensorAndConfigKey<Object, Object> OBJECT_SENSOR = ConfigKeys.newSensorAndConfigKey(Object.class, "object-sensor", "Object Sensor");
-
-    private TestApplication app;
-    private ManagementContext managementContext;
-    private LocalhostMachineProvisioningLocation loc;
-    private String testId;
-
-    @BeforeMethod
-    public void setup() {
-        testId = UUID.randomUUID().toString();
-        app = TestApplication.Factory.newManagedInstanceForTests();
-        managementContext = app.getManagementContext();
-        loc = managementContext.getLocationManager().createLocation(LocationSpec.create(LocalhostMachineProvisioningLocation.class)
-                .configure("name", testId));
-    }
-
-    @AfterMethod(alwaysRun = true)
-    public void tearDown() throws Exception {
-        if (app != null) Entities.destroyAll(app.getManagementContext());
-    }
-
-    @Test
-    public void testAssertEqual() {
-        //Add Sensor Test for BOOLEAN sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, BOOLEAN_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("equals", true)));
-        //Add Sensor Test for STRING sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, STRING_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("equals", testId)));
-
-        //Set BOOLEAN Sensor to true
-        app.sensors().set(BOOLEAN_SENSOR, Boolean.TRUE);
-        //Set STRING sensor to random string
-        app.sensors().set(STRING_SENSOR, testId);
-
-
-        app.start(ImmutableList.of(loc));
-
-    }
-
-    @Test
-    public void testAssertEqualFailure() {
-        boolean booleanAssertFailed = false;
-
-        //Add Sensor Test for BOOLEAN sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, BOOLEAN_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("equals", true)));
-
-        //Set BOOLEAN Sensor to false
-        app.sensors().set(BOOLEAN_SENSOR, Boolean.FALSE);
-
-        try {
-            app.start(ImmutableList.of(loc));
-        } catch (final PropagatedRuntimeException pre) {
-            final AssertionError assertionError = Exceptions.getFirstThrowableOfType(pre, AssertionError.class);
-            assertThat(assertionError).isNotNull();
-            booleanAssertFailed = true;
-        } finally {
-            assertThat(booleanAssertFailed).isTrue();
-        }
-    }
-
-    @Test
-    public void testAssertEqualOnNullSenor() {
-        boolean booleanAssertFailed = false;
-
-        //Add Sensor Test for BOOLEAN sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, BOOLEAN_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("equals", false)));
-
-        try {
-            app.start(ImmutableList.of(loc));
-        } catch (final PropagatedRuntimeException pre) {
-            final AssertionError assertionError = Exceptions.getFirstThrowableOfType(pre, AssertionError.class);
-            assertThat(assertionError).isNotNull().as("An assertion error should have been thrown");
-            booleanAssertFailed = true;
-        } finally {
-            assertThat(booleanAssertFailed).isTrue().as("Equals assert should have failed as the sensor is NULL");
-        }
-    }
-
-    @Test
-    public void testAssertNull() {
-        //Add Sensor Test for BOOLEAN sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, BOOLEAN_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("isNull", true)));
-        //Add Sensor Test for STRING sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, STRING_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("isNull", false)));
-
-        //Set STRING sensor to random string
-        app.sensors().set(STRING_SENSOR, testId);
-
-        app.start(ImmutableList.of(loc));
-
-    }
-
-
-    @Test
-    public void testAssertNullFail() {
-        boolean sensorTestFail = false;
-        //Add Sensor Test for STRING sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, STRING_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("isNull", true)));
-
-        //Set STRING sensor to random string
-        app.sensors().set(STRING_SENSOR, testId);
-
-
-        try {
-            app.start(ImmutableList.of(loc));
-        } catch (final PropagatedRuntimeException pre) {
-            final AssertionError assertionError = Exceptions.getFirstThrowableOfType(pre, AssertionError.class);
-            assertThat(assertionError).isNotNull().as("An assertion error should have been thrown");
-            sensorTestFail = true;
-        } finally {
-            assertThat(sensorTestFail).isTrue().as("isNull assert should have failed as the sensor has been set");
-        }
-
-    }
-
-    @Test
-    public void testAssertRegex() {
-        final long time = System.currentTimeMillis();
-        final String sensorValue = String.format("%s%s%s", UUID.randomUUID().toString(), time, UUID.randomUUID().toString());
-
-        //Add Sensor Test for STRING sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, STRING_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("regex", String.format(".*%s.*", time))));
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, BOOLEAN_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("regex", "true")));
-
-        //Set STRING sensor
-        app.sensors().set(STRING_SENSOR, sensorValue);
-        app.sensors().set(BOOLEAN_SENSOR, true);
-
-
-        app.start(ImmutableList.of(loc));
-    }
-
-    @Test
-    public void testAssertRegexFail() {
-        boolean sensorTestFail = false;
-        final String sensorValue = String.format("%s%s%s", UUID.randomUUID().toString(), System.currentTimeMillis(), UUID.randomUUID().toString());
-
-        //Add Sensor Test for STRING sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, STRING_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("regex", String.format(".*%s.*", UUID.randomUUID().toString()))));
-
-        //Set STRING sensor
-        app.sensors().set(STRING_SENSOR, sensorValue);
-
-
-        try {
-            app.start(ImmutableList.of(loc));
-        } catch (final PropagatedRuntimeException pre) {
-            final AssertionError assertionError = Exceptions.getFirstThrowableOfType(pre, AssertionError.class);
-            assertThat(assertionError).isNotNull().as("An assertion error should have been thrown");
-            sensorTestFail = true;
-        } finally {
-            assertThat(sensorTestFail).isTrue().as("regex assert should have failed");
-        }
-    }
-
-    @Test
-    public void testAssertRegexOnNullSensor() {
-        boolean sensorTestFail = false;
-        final String sensorValue = String.format("%s%s%s", UUID.randomUUID().toString(), System.currentTimeMillis(), UUID.randomUUID().toString());
-
-        //Add Sensor Test for STRING sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, STRING_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("regex", String.format(".*%s.*", UUID.randomUUID().toString()))));
-
-        try {
-            app.start(ImmutableList.of(loc));
-        } catch (final PropagatedRuntimeException pre) {
-            final AssertionError assertionError = Exceptions.getFirstThrowableOfType(pre, AssertionError.class);
-            assertThat(assertionError).isNotNull().as("An assertion error should have been thrown");
-            sensorTestFail = true;
-        } finally {
-            assertThat(sensorTestFail).isTrue().as("regex assert should have failed");
-        }
-    }
-
-
-    @Test
-    public void testAssertRegexOnNonStringSensor() {
-        //Add Sensor Test for OBJECT sensor
-        app.createAndManageChild(EntitySpec.create(TestSensor.class)
-                .configure(TestSensor.TARGET_ENTITY, app)
-                .configure(TestSensor.SENSOR_NAME, OBJECT_SENSOR.getName())
-                .configure(TestSensor.ASSERTIONS, ImmutableMap.of("regex", ".*TestObject.*id=.*")));
-
-        app.sensors().set(OBJECT_SENSOR, new TestObject());
-
-        app.start(ImmutableList.of(loc));
-
-    }
-
-
-    class TestObject {
-        private final String id;
-
-        public TestObject() {
-            id = UUID.randomUUID().toString();
-        }
-
-        public String getId() {
-            return id;
-        }
-
-        @Override
-        public String toString() {
-            return ToStringBuilder.reflectionToString(this);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/813bba02/usage/test-framework/README.md
----------------------------------------------------------------------
diff --git a/usage/test-framework/README.md b/usage/test-framework/README.md
new file mode 100644
index 0000000..a4ca928
--- /dev/null
+++ b/usage/test-framework/README.md
@@ -0,0 +1,109 @@
+# Entities
+
+## TestCase
+A logical grouping for tests eg Restart tests
+```
+type: org.apache.brooklyn.test.framework.TestCase
+  name: Stop Test
+  brooklyn.children:
+  - ***
+  - ***
+```
+
+## TestSensor
+Entity that tests a sensor value on another entity eg service.isUp == TRUE
+
+#### Configuration
+| Key | Description | Required |
+| --- | ----------- | -------- |
+| target | The target entity to test | yes (no if *targetId* is supplied) |
+| targetId | The id of the target entity to test | yes (no if *target* is supplied) |
+| assert | Assertions to be evaluated | yes |
+| timeout | The duration to wait on a result | no |
+
+##### Assertions
+| Key | Description |
+| --- | ----------- |
+| equal | Sensor value equals  |
+| regex | Sensor value matches regex |
+| isNull | Sensor value has not been set |
+
+```
+type: org.apache.brooklyn.test.framework.TestSensor
+target: $brooklyn:component("nginx1")
+sensor: service.isUp
+equals: true
+timeout: 5m
+```
+
+## TestEffector
+Entity that invokes an effector on another entity eg restart
+
+#### Configuration
+| Key | Description | Required |
+| --- | ----------- | -------- |
+| target | The target entity to effect | yes (no if *targetId* is supplied) |
+| targetId | The id of the target entity to effect | yes (no if *target* is supplied) |
+| effector | The name of the effector to invoke | yes |
+| params | Parameters to pass to the effector | no |
+| timeout | The duration to wait on a response from an effector | no |
+
+#### Sensors
+| Key | Description |
+| --- | ----------- |
+| result | The result of invoking the effector (null if no result) |
+
+```
+type: org.apache.brooklyn.test.framework.TestEffector
+name: Deploy WAR
+target: $brooklyn:component("tomcat")
+effector: deploy
+params:
+  url: https://tomcat.apache.org/tomcat-6.0-doc/appdev/sample/sample.war
+  targetName: sample1
+```
+
+## TestHtmlCall
+Entity that makes a HTTP Request and tests the response
+
+#### Configuration
+| Key | Description | Required |
+| --- | ----------- | -------- |
+| url | The URL to test | yes |
+| assert | Assertions to be evaluated | yes |
+| timeout | The duration to wait for assertion result | no |
+
+##### Assertions
+| Key | Description |
+| --- | ----------- |
+| string | HTTP body contains text |
+| regex | HTTP body matches regex |
+| status | HTTP status code equals |
+
+```
+  - type: org.apache.brooklyn.test.framework.TestHttpCall
+    name: Status Code 200
+    url: $brooklyn:component("tomcat").attributeWhenReady("main.uri")
+    timeout: 1m
+    assert:
+      status: 200
+  - type: org.apache.brooklyn.test.framework.TestHttpCall
+    name: String match
+    url: $brooklyn:component("tomcat").attributeWhenReady("main.uri")
+    timeout: 1m
+    assert:
+      string: Sample Brooklyn Deployed
+  - type: org.apache.brooklyn.test.framework.TestHttpCall
+    name: Status Code 404
+    url: $brooklyn:formatString("%s/invalidpath/", component("tomcat").attributeWhenReady("webapp.url"))
+    assert:
+      status: 404
+  - type: org.apache.brooklyn.test.framework.TestHttpCall
+    name: Regex match
+    url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url")
+    # the regex assert uses java.lang.String under the hood so if the url is expected to returns
+    # a multi-line response you should use the embedded dotall flag expression `(?s)` in your regex.
+    # See: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
+    assert:
+      regex: "(?s).*illustrate(\\s)*how(\\s)*web(\\s)*applications.*"
+```