You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by m4...@apache.org on 2017/07/05 13:44:18 UTC

[1/2] brooklyn-server git commit: Added endpoint test boms

Repository: brooklyn-server
Updated Branches:
  refs/heads/master eb9795c13 -> 3dd0bbc38


Added endpoint test boms


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

Branch: refs/heads/master
Commit: b78bb26faa99af5cd5e8630aebecd6bef63d535d
Parents: eb9795c
Author: graeme.miller <gr...@cloudsoftcorp.com>
Authored: Wed Jul 5 11:27:26 2017 +0100
Committer: graeme.miller <gr...@cloudsoftcorp.com>
Committed: Wed Jul 5 11:42:25 2017 +0100

----------------------------------------------------------------------
 .../resources/generic-application.tests.bom     | 467 +++++++++++++++++++
 .../src/test/resources/generic.tests.bom        |  60 +++
 2 files changed, 527 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b78bb26f/locations/container/src/test/resources/generic-application.tests.bom
----------------------------------------------------------------------
diff --git a/locations/container/src/test/resources/generic-application.tests.bom b/locations/container/src/test/resources/generic-application.tests.bom
new file mode 100644
index 0000000..0294cc6
--- /dev/null
+++ b/locations/container/src/test/resources/generic-application.tests.bom
@@ -0,0 +1,467 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+###
+ # Application blueprints and tests for testing deployment to Swarm or k8s endpoints, and hybrid
+ # deployments that span VMs and containers.
+ #
+ # It deploys a multi-node blueprint, consisting of:
+ #  - a cluster of Tomcat nodes (size 1)
+ #  - nginx
+ #  - database
+ #
+ # It asserts that:
+ #  - app comes up
+ #  - via nginx, we can connect to the web-app
+ #  - via nginx (and the web-app), we can write to the database and read from database
+ #
+ # The different variants of the test will:
+ #  - everything running in cluster;
+ #    See "multi-node-app-cluster".
+ #  - hybrid: comms from VM into the containers (nginx on a VM);
+ #    See "multi-node-app-cloud-to-cluster".
+ #  - hybrid: comms from the containers out to the VM (database on a VM);
+ #    See "multi-node-app-cluster-to-cloud".
+ #
+ # Tests assume that there is a pre-existing location defined with the name "testing-cluster",
+ # which is a swarm or k8s endpoint.
+ #
+ # It assumes that the tests are run against a location in which VMs can be provisioned
+ # (which is then overridden where "testing-cluster" should instead be used). For example,
+ # "multi-node-app-cloud-to-cluster" deploys nginx to the location passed in; and
+ # deploys the tomcat-webapp-cluster to "testing-cluster".
+ ##
+
+brooklyn.catalog:
+  version: "0.12.0-SNAPSHOT" # BROOKLYN_VERSION
+  iconUrl: https://raw.githubusercontent.com/docker-library/docs/471fa6e4cb58062ccbf91afc111980f9c7004981/swarm/logo.png
+
+  items:
+  - "https://raw.githubusercontent.com/brooklyncentral/common-catalog-utils/master/common-tests/src/main/resources/commontests/common.tests.bom"
+  - id: tomcat-webapp-cluster
+    name: "Tomcat Webapp Cluster"
+    description: |
+      Cluster of Tomcat servers
+    itemType: entity
+    item:
+      type: org.apache.brooklyn.entity.group.DynamicCluster
+      id: cluster
+      name: "Webapp Cluster"
+      brooklyn.config:
+        initialSize: 1
+        memberSpec:
+          $brooklyn:entitySpec:
+            type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
+            id: tomcat
+            name: "Tomcat Server"
+            brooklyn.config:
+              wars.root:
+                "http://search.maven.org/remotecontent?filepath=org/apache/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.9.0/brooklyn-example-hello-world-sql-webapp-0.9.0.war"
+              java.sysprops:
+                brooklyn.example.db.url:
+                  $brooklyn:formatString:
+                    - "jdbc:%s%s?user=%s&password=%s"
+                    - $brooklyn:config("db.url")
+                    - "visitors"
+                    - "brooklyn"
+                    - "br00k11n"
+            brooklyn.enrichers:
+              - type: org.apache.brooklyn.core.network.OnPublicNetworkEnricher
+                brooklyn.config:
+                  sensors:
+                    - http.port
+      brooklyn.enrichers:
+        - type: org.apache.brooklyn.enricher.stock.Aggregator
+          brooklyn.config:
+            enricher.sourceSensor: $brooklyn:sensor("webapp.reqs.perSec.windowed")
+            enricher.targetSensor: $brooklyn:sensor("webapp.reqs.perSec.perNode")
+            enricher.aggregating.fromMembers: true
+            transformation: average
+
+  - id: nginx-load-balancer
+    name: "Nginx Load Balancer"
+    description: |
+      Nginx load balancer
+    itemType: entity
+    item:
+      type: org.apache.brooklyn.entity.proxy.nginx.NginxController
+      id: nginx
+      name: "Load Balancer (nginx)"
+      brooklyn.config:
+        loadbalancer.serverpool: $brooklyn:sibling("cluster")
+        nginx.sticky: false
+      brooklyn.enrichers:
+        - type: org.apache.brooklyn.core.network.OnPublicNetworkEnricher
+          brooklyn.config:
+            sensors:
+              - main.uri
+
+  - id: mysql-database
+    name: "MySQL Database"
+    description: |
+      MySQL database
+    itemType: entity
+    item:
+      type: org.apache.brooklyn.entity.database.mysql.MySqlNode
+      id: db
+      name: "Database (MySQL)"
+      brooklyn.config:
+        provisioning.properties:
+          osFamily: centos
+          osVersionRegex: 7
+        datastore.creation.script.url:
+          "https://raw.githubusercontent.com/apache/brooklyn-library/0.11.x/examples/simple-web-cluster/src/main/resources/visitors-creation-script.sql"
+      brooklyn.enrichers:
+        - type: org.apache.brooklyn.core.network.OnSubnetNetworkEnricher
+          brooklyn.config:
+            sensors:
+              - datastore.url
+
+  - id: multi-node-app-cluster
+    name: "Multi-node Application"
+    description: |
+      A multi-node Brooklyn app, consisting of a cluster of Tomcat servers,
+      a MySQL database and an Nginx load balancer, deployed to a cluster location.
+    itemType: entity
+    item:
+      type: org.apache.brooklyn.entity.stock.BasicApplication
+      brooklyn.children:
+        - type: tomcat-webapp-cluster
+          id: cluster
+          location: testing-cluster
+        - type: nginx-load-balancer
+          id: nginx
+          location: testing-cluster
+        - type: mysql-database
+          id: db
+          location: testing-cluster
+
+  - id: multi-node-app-cloud-to-cluster
+    name: "Multi-node Hybrid Application"
+    description: |
+      A hybrid multi-node Brooklyn app, consisting of a cluster of Tomcat servers,
+      a MySQL database and an Nginx load balancer, with the load balancer deployed
+      to a cloud location and the other entities deployed to a cluster location.
+    itemType: entity
+    item:
+      type: org.apache.brooklyn.entity.stock.BasicApplication
+      brooklyn.children:
+        - type: tomcat-webapp-cluster
+          id: cluster
+          location: testing-cluster
+        - type: nginx-load-balancer
+          id: nginx
+        - type: mysql-database
+          id: db
+          location: testing-cluster
+
+  - id: multi-node-app-cluster-to-cloud
+    name: "Multi-node Hybrid Application"
+    description: |
+      A multi-node Brooklyn app, consisting of a cluster of Tomcat servers,
+      a MySQL database and an Nginx load balancer, with the database deployed
+      to a cloud location and the other entities deployed to a cluster location
+    itemType: entity
+    item:
+      type: org.apache.brooklyn.entity.stock.BasicApplication
+      brooklyn.children:
+        - type: tomcat-webapp-cluster
+          id: cluster
+          location: testing-cluster
+        - type: nginx-load-balancer
+          id: nginx
+          location: testing-cluster
+        - type: mysql-database
+          id: db
+
+  - id: test-multi-node-app
+    name: Test multi-node app deployment
+    description: |
+      Test that we can provision a multi-node Brooklyn app
+    itemType: entity
+    item:
+      type: test-case
+      name: "Sensor Tests"
+      brooklyn.children:
+        - type: assert-up
+        - type: assert-running
+        - type: test-http-status-200
+          url: $brooklyn:config("nginx.url")
+          timeout: 60s
+        - type: test-http-status-200
+          name: "Check Write to web-app message board"
+          url:
+            $brooklyn:formatString:
+              - "%s/db.jsp?name=myname&message=mymessage"
+              - $brooklyn:config("nginx.url")
+        - type: test-http-body
+          name: "Check Read from web-app message board"
+          url:
+            $brooklyn:formatString:
+              - "%s/db.jsp"
+              - $brooklyn:config("nginx.url")
+          assert:
+            - contains: "myname"
+            - contains: "mymessage"
+
+  - id: deploy-multi-node-app-cluster
+    name: "Multi Node Cluster App"
+    description: |
+      Deploy a multi-node app to a cluster location
+    item:
+      type: test-case
+      id: test-scope
+      name: "Cluster Deploy Tests"
+      brooklyn.children:
+        - type: multi-node-app-cluster
+          id: cluster-only-app
+          brooklyn.config:
+            db.url: $brooklyn:ancestor("test-scope").descendant("db").attributeWhenReady("datastore.url.mapped.subnet")
+            member.sensor.hostname: $brooklyn:sensor("host.subnet.address")
+        - type:  test-multi-node-app
+          brooklyn.config:
+            timeout: 30m
+            targetId: cluster-only-app
+            nginx.url: $brooklyn:ancestor("test-scope").descendant("nginx").attributeWhenReady("main.uri.mapped.public")
+
+  - id: deploy-multi-node-app-cloud-to-cluster
+    name: "Multi Node Cloud to Cluster App"
+    description: |
+      Deploy a multi-node app to Cloud and cluster locations, with communication
+      from the Cloud entity (Nginx) to the cluster entities.
+    item:
+      type: test-case
+      id: test-scope
+      name: "Cloud to Cluster Deploy Tests"
+      brooklyn.children:
+        - type: multi-node-app-cloud-to-cluster
+          id: cloud-to-cluster-app
+          brooklyn.config:
+            db.url: $brooklyn:ancestor("test-scope").descendant("db").attributeWhenReady("datastore.url.mapped.subnet")
+            member.sensor.hostandport: $brooklyn:sensor("http.endpoint.mapped.public")
+            proxy.domainName: $brooklyn:ancestor("test-scope").descendant("nginx").attributeWhenReady("host.address")
+        - type:  test-multi-node-app
+          brooklyn.config:
+            timeout: 30m
+            targetId: cloud-to-cluster-app
+            nginx.url: $brooklyn:ancestor("test-scope").descendant("nginx").attributeWhenReady("main.uri")
+
+  - id: deploy-multi-node-app-cluster-to-cloud
+    name: "Multi Node Cluster to Cloud App"
+    description: |
+      Deploy a multi-node app to Cloud and Cluster locations, with communication
+      from the Cluster entities to the Cloud entity (MySQL).
+    item:
+      type: test-case
+      id: test-scope
+      name: "Cluster to Cloud Deploy Tests"
+      brooklyn.children:
+        - type: multi-node-app-cluster-to-cloud
+          id: cluster-to-cloud-app
+          brooklyn.config:
+            db.url: $brooklyn:ancestor("test-scope").descendant("db").attributeWhenReady("datastore.url")
+            member.sensor.hostname: $brooklyn:sensor("host.subnet.address")
+        - type:  test-multi-node-app
+          brooklyn.config:
+            timeout: 30m
+            targetId: cluster-to-cloud-app
+            nginx.url: $brooklyn:ancestor("test-scope").descendant("nginx").attributeWhenReady("main.uri.mapped.public")
+
+  ###
+  # Deploy a single-node blueprint, and confirm SSH works.
+  ##
+  - id: deploy-app-to-cluster-single-node
+    name: "Single Node App to Cluster endpoint"
+    description: |
+      Test that we can provision a simple Brooklyn SoftwareProcess to a Cluster endpoint
+    item:
+      type: test-case
+      name: "Single Node App Deploy Tests"
+      brooklyn.children:
+        - type: org.apache.brooklyn.entity.software.base.EmptySoftwareProcess
+          location: testing-cluster
+          id: empty
+          brooklyn.config:
+            onbox.base.dir.skipResolution: true
+            sshMonitoring.enabled: false
+        - type: test-case
+          name: "Empty Container Tests"
+          brooklyn.config:
+            timeout: 15m
+            targetId: empty
+          brooklyn.children:
+            - type: test-case
+              name: "Sensor Tests"
+              brooklyn.children:
+                # Is up and can deploy
+                - type: assert-up
+                - type: assert-running
+                # Can ssh
+                - type: test-ssh
+                  command: |
+                    echo "hello-world"
+                  assertStatus:
+                    equals: 0
+                  assertOut:
+                    contains: "hello-world"
+
+  ##
+  # A Riak cluster example.
+  #
+  # Requires a (docker swarm or k8s cluster) location pre-configured with cloudsoft/ubuntu:14.04 for the Riak application to deploy to.
+  ##
+  - id: riak-cluster-to-cluster-multi-node
+    name: "Riak Cluster"
+    description: |
+      Riak cluster with load-balanced chatroom webapp
+    iconUrl: classpath://riak-icon.png
+    itemType: entity
+    item:
+      type: org.apache.brooklyn.entity.stock.BasicApplication
+      id: riak-app
+      name: "Riak App"
+      brooklyn.children:
+        - type: org.apache.brooklyn.entity.nosql.riak.RiakCluster
+          id: riak-cluster
+          name: "Riak Cluster"
+          brooklyn.config:
+            provisioning.properties:
+              # cloudsoft/ubuntu:14.04
+              osFamily: ubuntu
+              osVersionRegex: 14.04
+            initialSize: 3
+            install.version: 2.1.4
+            riak.networking.optimize: false
+            riak.networking.internal: false
+        - type: org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster
+          id: web-cluster
+          name: "Web Cluster"
+          brooklyn.config:
+            initialSize: 2
+            dynamiccluster.memberspec:
+              $brooklyn:entitySpec:
+                type: org.apache.brooklyn.entity.webapp.tomcat.Tomcat8Server
+                brooklyn.config:
+                  wars.root:
+                    "https://s3-eu-west-1.amazonaws.com/brooklyn-clocker/brooklyn-example-hello-world-sql-webapp.war"
+                  java.sysprops:
+                    brooklyn.example.riak.nodes:
+                      $brooklyn:entity("riak-cluster").attributeWhenReady("riak.cluster.nodeList")
+            controlleddynamicwebappcluster.controllerSpec:
+              $brooklyn:entitySpec:
+                type: org.apache.brooklyn.entity.proxy.nginx.NginxController
+                id: load-balancer
+                brooklyn.enrichers:
+                  - type: org.apache.brooklyn.core.network.OnPublicNetworkEnricher
+                    brooklyn.config:
+                      sensors:
+                        - main.uri
+          brooklyn.enrichers:
+            # publish the mapped URL at the cluster
+            - type: org.apache.brooklyn.enricher.stock.Propagator
+              brooklyn.config:
+                uniqueTag: url-propagator
+                enricher.producer: $brooklyn:entity("load-balancer")
+                enricher.propagating.inclusions:
+                  - main.uri.mapped.public
+      brooklyn.enrichers:
+        # publish the cluster URL (the mapped public one) as the main.uri of the top-level app
+        - type: org.apache.brooklyn.enricher.stock.Propagator
+          brooklyn.config:
+            uniqueTag: main-uri-publisher
+            enricher.producer: $brooklyn:entity("web-cluster")
+            enricher.propagating.inclusions:
+              - main.uri.mapped.public
+
+  - id: deploy-riak-cluster-to-cluster-multi-node
+    name: "Multi Node Riak Cluster to Cluster"
+    description: |
+      Deploy Riak cluster with load-balanced chatroom webapp to Cluster location
+    item:
+      type: test-case
+      name: "Multi Node App Deploy Tests"
+      brooklyn.children:
+        - type: riak-cluster-to-cluster-multi-node
+          id: riak-app
+          location: testing-cluster
+        - type: test-case
+          brooklyn.config:
+            timeout: 30m
+            targetId: riak-app
+          brooklyn.children:
+            - type: test-case
+              name: "Sensor Tests"
+              brooklyn.children:
+                - type: assert-up
+                - type: assert-running
+                - type: test-http-status-200
+                  url: $brooklyn:entity("riak-app").attributeWhenReady("main.uri.mapped.public")
+                  timeout: 60s
+                - type: test-http-status-200
+                  name: "Check Write to web-app message board"
+                  url:
+                    $brooklyn:formatString:
+                      - "%s/riak.jsp?name=myname&message=mymessage"
+                      - $brooklyn:entity("riak-app").attributeWhenReady("main.uri.mapped.public")
+                  timeout: 60s
+                - type: test-http-body
+                  name: "Check Read from web-app message board"
+                  url:
+                    $brooklyn:formatString:
+                      - "%s/riak.jsp"
+                      - $brooklyn:entity("riak-app").attributeWhenReady("main.uri.mapped.public")
+                  timeout: 60s
+                  assert:
+                    - contains: "myname"
+                    - contains: "mymessage"
+
+  - id: deploy-single-container-type
+    name: "Deploy Container Type"
+    description: |
+      Deploys an httpd container using the container type
+    itemType: entity
+    item:
+      type: test-case
+      name: "Deploy Container Type Tests"
+      brooklyn.children:
+        - type: org.apache.brooklyn.container.entity.docker.DockerContainer
+          location: testing-cluster
+          id: httpd
+          name: "httpd"
+          brooklyn.config:
+            docker.container.disableSsh: true
+            docker.container.imageName: "httpd"
+            docker.container.inboundPorts:
+              - "70"
+              - "80"
+              - "90-99"
+        - type: test-case
+          brooklyn.config:
+            timeout: 30m
+            targetId: httpd
+          brooklyn.children:
+            - type: test-case
+              name: "Sensor Tests"
+              brooklyn.children:
+                - type: assert-up
+                - type: assert-running
+                - type: test-http-status-200
+                  url:
+                    $brooklyn:formatString:
+                      - "http://%s"
+                      - $brooklyn:entity("httpd").attributeWhenReady("docker.port.80.mapped.public")
+                  timeout: 30s
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b78bb26f/locations/container/src/test/resources/generic.tests.bom
----------------------------------------------------------------------
diff --git a/locations/container/src/test/resources/generic.tests.bom b/locations/container/src/test/resources/generic.tests.bom
new file mode 100644
index 0000000..5c18bf6
--- /dev/null
+++ b/locations/container/src/test/resources/generic.tests.bom
@@ -0,0 +1,60 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+brooklyn.catalog:
+  version: "0.12.0-SNAPSHOT" # BROOKLYN_VERSION
+  iconUrl: https://raw.githubusercontent.com/docker-library/docs/471fa6e4cb58062ccbf91afc111980f9c7004981/swarm/logo.png
+
+  items:
+  - "https://raw.githubusercontent.com/brooklyncentral/common-catalog-utils/master/common-tests/src/main/resources/commontests/common.tests.bom"
+
+  - id: cluster-endpoint-tests
+    name: "Cluster Endpoint Deployment Tests"
+    description: |
+      Tests containers and applications can be deployed to both cluster and
+      Cloud locations
+    itemType: template
+    item:
+      brooklyn.config:
+        timeout: 1h
+        timeout.initialStartup: 1h
+        timeout.runtimeAssertion: 1h
+      services:
+        - type: test-case
+          name: "1. Deploy Container Type Tests"
+          brooklyn.children:
+            - type: deploy-single-container-type
+        - type: test-case
+          name: "2. Deploy Blueprint Application Tests"
+          brooklyn.config:
+            dontRequireTtyForSudo: true
+          brooklyn.children:
+            - type: test-case
+              name: "2.1. Single-Node Application Test"
+              brooklyn.children:
+                - type: deploy-app-to-cluster-single-node
+            - type: test-case
+              name: "2.2. Multi-Node Application Test"
+              brooklyn.children:
+                # remove this because of https://issues.apache.org/jira/browse/BROOKLYN-311
+                #- type: deploy-riak-cluster-to-cluster-multi-node
+                - type: deploy-multi-node-app-cluster
+            - type: test-case
+              name: "2.3 Hybrid Multi-Node Application"
+              brooklyn.children:
+                - type: deploy-multi-node-app-cluster-to-cloud
+                - type: deploy-multi-node-app-cloud-to-cluster
\ No newline at end of file


[2/2] brooklyn-server git commit: This closes #755

Posted by m4...@apache.org.
This closes #755


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

Branch: refs/heads/master
Commit: 3dd0bbc38aa3ae426160a7499c0f3223073e5e06
Parents: eb9795c b78bb26
Author: Mark McKenna <m4...@gmail.com>
Authored: Wed Jul 5 14:43:48 2017 +0100
Committer: Mark McKenna <m4...@gmail.com>
Committed: Wed Jul 5 14:43:48 2017 +0100

----------------------------------------------------------------------
 .../resources/generic-application.tests.bom     | 467 +++++++++++++++++++
 .../src/test/resources/generic.tests.bom        |  60 +++
 2 files changed, 527 insertions(+)
----------------------------------------------------------------------