Return-Path: X-Original-To: apmail-brooklyn-commits-archive@minotaur.apache.org Delivered-To: apmail-brooklyn-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1CC3A18467 for ; Mon, 23 Nov 2015 18:54:07 +0000 (UTC) Received: (qmail 81890 invoked by uid 500); 23 Nov 2015 18:54:07 -0000 Delivered-To: apmail-brooklyn-commits-archive@brooklyn.apache.org Received: (qmail 81867 invoked by uid 500); 23 Nov 2015 18:54:07 -0000 Mailing-List: contact commits-help@brooklyn.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.incubator.apache.org Delivered-To: mailing list commits@brooklyn.incubator.apache.org Received: (qmail 81858 invoked by uid 99); 23 Nov 2015 18:54:06 -0000 Received: from Unknown (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 23 Nov 2015 18:54:06 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 75850C2890 for ; Mon, 23 Nov 2015 18:54:06 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.213 X-Spam-Level: X-Spam-Status: No, score=0.213 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RP_MATCHES_RCVD=-0.588, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id s4WZUjKbMmF7 for ; Mon, 23 Nov 2015 18:53:51 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with SMTP id 18F9720697 for ; Mon, 23 Nov 2015 18:53:51 +0000 (UTC) Received: (qmail 81438 invoked by uid 99); 23 Nov 2015 18:53:51 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 23 Nov 2015 18:53:50 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id CF3D2DFFDA; Mon, 23 Nov 2015 18:53:50 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: heneveld@apache.org To: commits@brooklyn.incubator.apache.org Date: Mon, 23 Nov 2015 18:53:50 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/5] incubator-brooklyn git commit: yaml testing docs Repository: incubator-brooklyn Updated Branches: refs/heads/master 35d75537c -> 4ebe7379b yaml testing docs Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/cc25df3f Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/cc25df3f Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/cc25df3f Branch: refs/heads/master Commit: cc25df3fa92a7b4d50cae72e44afb61e50ff0cd1 Parents: ca89ed4 Author: John McCabe Authored: Fri Nov 13 16:45:30 2015 +0000 Committer: John McCabe Committed: Fri Nov 13 16:45:30 2015 +0000 ---------------------------------------------------------------------- docs/guide/yaml/index.md | 1 + .../example_yaml/paralleltestcase-entity.yaml | 2 + .../example_yaml/paralleltestcase-example.yaml | 46 +++++++++++++ ...simple-tomcat-app-effector-test-snippet.yaml | 19 ++++++ .../simple-tomcat-app-http-test-snippet.yaml | 11 +++ .../simple-tomcat-app-sensor-test.yaml | 24 +++++++ .../test/example_yaml/simple-tomcat-app.yaml | 15 ++++ .../yaml/test/example_yaml/testcase-entity.yaml | 2 + .../test/example_yaml/testeffector-entity.yaml | 7 ++ .../test/example_yaml/testhttpcall-entity.yaml | 5 ++ .../test/example_yaml/testsensor-entity.yaml | 6 ++ docs/guide/yaml/test/index.md | 24 +++++++ docs/guide/yaml/test/test-entities.md | 72 ++++++++++++++++++++ docs/guide/yaml/test/usage-examples.md | 57 ++++++++++++++++ 14 files changed, 291 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/index.md ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/index.md b/docs/guide/yaml/index.md index 55acfee..b0303cb 100644 --- a/docs/guide/yaml/index.md +++ b/docs/guide/yaml/index.md @@ -11,6 +11,7 @@ children: - custom-entities.md - winrm/ - chef/ +- test/ - { path: yaml-reference.md, title: YAML Blueprint Reference } - { link: 'https://github.com/brooklyncentral/blueprint-library', title: 'GitHub Blueprint Library' } --- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/example_yaml/paralleltestcase-entity.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/paralleltestcase-entity.yaml b/docs/guide/yaml/test/example_yaml/paralleltestcase-entity.yaml new file mode 100644 index 0000000..1dca082 --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/paralleltestcase-entity.yaml @@ -0,0 +1,2 @@ +- type: org.apache.brooklyn.test.framework.ParallelTestCase + brooklyn.children: \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/example_yaml/paralleltestcase-example.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/paralleltestcase-example.yaml b/docs/guide/yaml/test/example_yaml/paralleltestcase-example.yaml new file mode 100644 index 0000000..c7f0f5b --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/paralleltestcase-example.yaml @@ -0,0 +1,46 @@ +brooklyn.catalog: + id: parallel-test + version: 1.0 + itemType: template + iconUrl: http://tomcat.apache.org/images/tomcat.png + name: Parallel Tomcat and DB Example Test + license: Apache-2.0 + item: + brooklyn.config: + simple.confg: someValue + services: + - type: org.apache.brooklyn.test.framework.TestCase + name: Parallel Testcase + brooklyn.children: + - type: org.apache.brooklyn.test.framework.TestCase + name: Parallel Testcase + brooklyn.children: + - type: org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster + name: My Web + id: webappcluster + brooklyn.config: + wars.root: 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 + java.sysprops: + brooklyn.example.db.url: > + $brooklyn:formatString("jdbc:%s%s?user=%s&password=%s", + component("db").attributeWhenReady("datastore.url"), + "visitors", "brooklyn", "br00k11n") + - type: org.apache.brooklyn.entity.database.mysql.MySqlNode + id: db + name: My DB + brooklyn.config: + creationScriptUrl: https://bit.ly/brooklyn-visitors-creation-script + - type: org.apache.brooklyn.test.framework.TestSensor + name: Test WebApp Cluster service.isUp + targetId: webappcluster + sensor: service.isUp + timeout: 10m + assert: + equals: true + - type: org.apache.brooklyn.test.framework.TestSensor + name: Test DB service.isUp + targetId: db + 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/cc25df3f/docs/guide/yaml/test/example_yaml/simple-tomcat-app-effector-test-snippet.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/simple-tomcat-app-effector-test-snippet.yaml b/docs/guide/yaml/test/example_yaml/simple-tomcat-app-effector-test-snippet.yaml new file mode 100644 index 0000000..a9ab85d --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/simple-tomcat-app-effector-test-snippet.yaml @@ -0,0 +1,19 @@ +- type: org.apache.brooklyn.test.framework.TestEffector + name: Deploy WAR in /newcontext + targetId: tomcat + effector: deploy + timeout: + params: + url: https://tomcat.apache.org/tomcat-6.0-doc/appdev/sample/sample.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")) + timeout: 5m + assert: + status: 200 + + + + + http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/example_yaml/simple-tomcat-app-http-test-snippet.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/simple-tomcat-app-http-test-snippet.yaml b/docs/guide/yaml/test/example_yaml/simple-tomcat-app-http-test-snippet.yaml new file mode 100644 index 0000000..e967908 --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/simple-tomcat-app-http-test-snippet.yaml @@ -0,0 +1,11 @@ +- type: org.apache.brooklyn.test.framework.TestHttpCall + name: Status Code 200 + url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url") + timeout: 60s + assert: + status: 200 +- type: org.apache.brooklyn.test.framework.TestHttpCall + name: Regex match + url: $brooklyn:component("tomcat").attributeWhenReady("webapp.url") + assert: + regex: "(?s).*Br[o]{2}klyn Deployed.*" \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/example_yaml/simple-tomcat-app-sensor-test.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/simple-tomcat-app-sensor-test.yaml b/docs/guide/yaml/test/example_yaml/simple-tomcat-app-sensor-test.yaml new file mode 100644 index 0000000..3e96ac3 --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/simple-tomcat-app-sensor-test.yaml @@ -0,0 +1,24 @@ +brooklyn.catalog: + id: simple-tomcat-app-sensor-test + version: 1.0 + itemType: template + iconUrl: http://tomcat.apache.org/images/tomcat.png + name: Simple Tomcat Application Sensor Test + license: Apache-2.0 + item: + brooklyn.config: + simple.confg: someValue + services: + - type: org.apache.brooklyn.test.framework.TestCase + name: Simple Tomcat Sensor Test + brooklyn.children: + - type: simple-tomcat-app + name: Deploy Tomcat App + id: tomcat + - type: org.apache.brooklyn.test.framework.TestSensor + name: Test service.isUp + targetId: 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/cc25df3f/docs/guide/yaml/test/example_yaml/simple-tomcat-app.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/simple-tomcat-app.yaml b/docs/guide/yaml/test/example_yaml/simple-tomcat-app.yaml new file mode 100644 index 0000000..7207478 --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/simple-tomcat-app.yaml @@ -0,0 +1,15 @@ +brooklyn.catalog: + id: simple-tomcat-app + version: 1.0 + itemType: template + iconUrl: http://tomcat.apache.org/images/tomcat.png + name: Simple Tomcat Application + 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/cc25df3f/docs/guide/yaml/test/example_yaml/testcase-entity.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/testcase-entity.yaml b/docs/guide/yaml/test/example_yaml/testcase-entity.yaml new file mode 100644 index 0000000..c8a8bd8 --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/testcase-entity.yaml @@ -0,0 +1,2 @@ +- type: org.apache.brooklyn.test.framework.TestCase + brooklyn.children: \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/example_yaml/testeffector-entity.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/testeffector-entity.yaml b/docs/guide/yaml/test/example_yaml/testeffector-entity.yaml new file mode 100644 index 0000000..9ce74fa --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/testeffector-entity.yaml @@ -0,0 +1,7 @@ +- 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 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/example_yaml/testhttpcall-entity.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/testhttpcall-entity.yaml b/docs/guide/yaml/test/example_yaml/testhttpcall-entity.yaml new file mode 100644 index 0000000..39742c1 --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/testhttpcall-entity.yaml @@ -0,0 +1,5 @@ + - 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 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/example_yaml/testsensor-entity.yaml ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/example_yaml/testsensor-entity.yaml b/docs/guide/yaml/test/example_yaml/testsensor-entity.yaml new file mode 100644 index 0000000..00c3ff4 --- /dev/null +++ b/docs/guide/yaml/test/example_yaml/testsensor-entity.yaml @@ -0,0 +1,6 @@ +- 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/cc25df3f/docs/guide/yaml/test/index.md ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/index.md b/docs/guide/yaml/test/index.md new file mode 100644 index 0000000..804b055 --- /dev/null +++ b/docs/guide/yaml/test/index.md @@ -0,0 +1,24 @@ +--- +title: Testing YAML Blueprints +layout: website-normal +children: +- test-entities.md +- usage-examples.md +--- + +Brooklyn provides a selection of basic test entities which can be used to validate Blueprints via YAML. These are divided into two groups structural, which effect the order in which child entities are started, and validation, which are used to confirm the application is deployed as intended: + +Structural test entities include: + +- `TestCase` - starts child entities sequentially. +- `ParallelTestCase` - starts child entities in parallel. + +Validation test entities include: + +- `TestSensor` - perform assertion on a specified sensor. +- `TestEffector` - invoke effector on specified target entity. +- `TestHttpCall` - perform assertions on response to specified HTTP GET Request. + +The following sections provide details on each test entity along with examples of their use. + +{% include list-children.html %} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/test-entities.md ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/test-entities.md b/docs/guide/yaml/test/test-entities.md new file mode 100644 index 0000000..6ab454f --- /dev/null +++ b/docs/guide/yaml/test/test-entities.md @@ -0,0 +1,72 @@ +--- +title: Blueprint Test Entities +title_in_menu: Test Entities +layout: website-normal +--- + +{% include fields.md %} + +## Structural Test Entities + +### TestCase +The `TestCase` entity acts as a container for a list child entities which are started *sequentially*. +{% highlight yaml %} +{% readj example_yaml/testcase-entity.yaml %} +{% endhighlight %} +The ability to sequentially run entities is used to allow applications to fully deploy before attempting to start any test entities. + +If your application blueprint consists of multiple services then you will also require the `ParallelTestCase` entity. + +### ParallelTestCase +The `ParallelTestCase` entity acts as a container for a list of child entities which are started in *parallel*. +{% highlight yaml %} +{% readj example_yaml/paralleltestcase-entity.yaml %} +{% endhighlight %} +This entity is used when your application blueprint consists of multiple services that run in parallel. + + +## Validation Test Entities + +### TestSensor +The `TestSensor` entity performs an assertion on a specified sensor. +{% highlight yaml %} +{% readj example_yaml/testsensor-entity.yaml %} +{% endhighlight %} + +#### Parameters +- `target` - entity whose sensor will be tested, specified via DSL. For example, `$brooklyn:component("tomcat")`. See also the `targetId` parameter. +- `targetId` - alternative to the `target` parameter which wraps the DSL component lookup. For example, `tomcat`. +- `sensor` - sensor to evaluate. For example `service.isUp`. +- `timeout` - time to wait for assertion to return a result. +- `assert` - assertion to perform on the specified sensor, options include + - `equals` - tests that the sensor equals the supplied value. For example `true`. + - `regex` - tests that the sensor value matches the supplied [regex pattern](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html?is-external=true), for example `".*hello.*"`. + - `isNull` - tests that the sensor value is `null`. + +### TestEffector +The `TestEffector` entity invokes the specified effector on a target entity. +{% highlight yaml %} +{% readj example_yaml/testeffector-entity.yaml %} +{% endhighlight %} + +#### Parameters +- `target` - entity whose effector will be invoked, specified via DSL. For example, `$brooklyn:component("tomcat")`. See also the `targetId` parameter. +- `targetId` - alternative to the `target` parameter which wraps the DSL component lookup. For example, `tomcat`. +- `timeout` - time to wait for the effector task to complete. +- `effector` - effector to invoke, for example `deploy`. +- `params` - parameters to pass to the effector, these will depend on the entity and effector being tested. The example above shows the `url` and `targetName` parameters being passed to Tomcats `deploy` effector. + +### TestHttpCall +The `TestHttpCall` entity performs a HTTP GET on the specified URL and performs an assertion on the response. +{% highlight yaml %} +{% readj example_yaml/testhttpcall-entity.yaml %} +{% endhighlight %} + +#### Parameters +- `url` - URL to perform GET request on, for example `$brooklyn:component("tomcat").attributeWhenReady("webapp.url")``. +- `timeout` - time to wait for a HTTP response. For example `10s`, `10m`, etc +- `assertions` - perform one of the following assertions. + - `status` - response must match the specified status code. The example above shows an assertions on a `404` response. + - `bodyContains` - response body must contain the supplied string, for example `"hello world"`. + - `regex` - response body must match the supplied [regex pattern](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html?is-external=true), for example `".*hello.*"` + http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc25df3f/docs/guide/yaml/test/usage-examples.md ---------------------------------------------------------------------- diff --git a/docs/guide/yaml/test/usage-examples.md b/docs/guide/yaml/test/usage-examples.md new file mode 100644 index 0000000..38bdcb2 --- /dev/null +++ b/docs/guide/yaml/test/usage-examples.md @@ -0,0 +1,57 @@ +--- +title: Example Blueprint Tests +title_in_menu: Example Tests +layout: website-normal +--- + +{% include fields.md %} + +## Introduction +This section provides example tests carried out on the following `simple-tomcat-app` web application catalog item: + +{% highlight yaml %} +{% readj example_yaml/simple-tomcat-app.yaml %} +{% endhighlight %} + +### Sensor Test Example + +This test catalog carries out the following test actions: + +- deploys the `sample-tomcat-app` +- tests that the `service.isUp` sensor is `true` within 10 minutes of the `sample-tomcat-app` deployment completing. + +{% highlight yaml %} +{% read example_yaml/simple-tomcat-app-sensor-test.yaml %} +{% endhighlight %} + +### HTTP Call Test Example + +The following yaml snippet extends the sensor test above with a selection of HTTP Call tests: + +- application url returns a HTTP status code 200 within 60 seconds. +- response body matches the regex `(?s).*Br[o]{2}klyn Deployed.*`. Note the presence of the `(?s)` dotall flag to test a multiline response. + +{% highlight yaml %} +{% readj example_yaml/simple-tomcat-app-http-test-snippet.yaml %} +{% endhighlight %} + +### Effector Test Example + +Extending the preceeding examples yet again, the following yaml snippet invokes the Tomcat entities `deploy` effector to deploy a new war file whose endpoint is subsequently tested: + +- `deploy` effector invoked to deploy war to a `newcontext` +- `/newcontext` url returns a HTTP status code 200 within 5 minutes. + +{% highlight yaml %} +{% readj example_yaml/simple-tomcat-app-effector-test-snippet.yaml %} +{% endhighlight %} + +## Parallel Test example + +The preceeding examples had a single application entity which lends itself to running sequentially within a `TestCase` entity, if a Blueprint consists of multiple services then it is necessary to structure the test with multiple services starting under the `ParallelTestCase` entity. + +The following example tests the example multi-service application from the [Getting Started]({{ site.path.guide }}/start/blueprints.html#entitlements) section. + +{% highlight yaml %} +{% readj example_yaml/paralleltestcase-example.yaml %} +{% endhighlight %} \ No newline at end of file