Merge "Test suite for Aodh's gnocchi-resource-threshold alarm."
diff --git a/ceilometer/tests/integration/gabbi/gabbits-live/aodh-gnocchi-threshold-alarm.yaml b/ceilometer/tests/integration/gabbi/gabbits-live/aodh-gnocchi-threshold-alarm.yaml
new file mode 100644
index 0000000..a598c2f
--- /dev/null
+++ b/ceilometer/tests/integration/gabbi/gabbits-live/aodh-gnocchi-threshold-alarm.yaml
@@ -0,0 +1,342 @@
+#
+# Tests for gnocchi-threshold-alarm
+#
+#   user_id        : c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+#   project_id     : 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+#   alarm name     : gabbi-gnocchi-threshold-resource-alarm
+#   resource_id    : gabbi-mock-resource
+#   archive policy : gabbiliveceph
+#
+
+defaults:
+    request_headers:
+        x-auth-token: $ENVIRON['ADMIN_TOKEN']
+
+tests:
+    #
+    # Setup gnocchi archive policy/resource type/resource/metrics
+    #
+
+    - name: SETUP. create archive policy gabbiliveceph
+      desc: create archve policy 'gabbiliveceph' for tests
+      POST: $ENVIRON['GNOCCHI_SERVICE_URL']/v1/archive_policy
+      status: 201
+      request_headers:
+          content-type: application/json
+      data:
+          name: gabbiliveceph
+          back_window: 0
+          definition:
+              - granularity: 1 second
+                points: 60
+              - granularity: 20 second
+                timespan: 1 minute
+              - points: 5
+                timespan: 5 minute
+          aggregation_methods:
+              - mean
+              - min
+              - max
+      response_json_paths:
+          $.name: gabbiliveceph
+          $.back_window: 0
+          $.aggregation_methods.`len`: 3
+
+    - name: create resource type ceph_account
+      desc: needed to create a resource
+      POST: $ENVIRON['GNOCCHI_SERVICE_URL']/v1/resource_type
+      status: 201 || 409
+      request_headers:
+          content-type: application/json
+      data:
+          name: ceph_account
+
+    - name: create resource of ceph_account type
+      POST: $ENVIRON['GNOCCHI_SERVICE_URL']/v1/resource/ceph_account
+      request_headers:
+          content-type: application/json
+      data:
+          id: gabbi-mock-resource
+          user_id:      27e342e4-4489-424f-a7e4-ba8ed9ad729c
+          project_id:   d6d32769-c351-4758-b0a2-458fa1a065a3
+          metrics:
+              radosgw.objects:
+                  archive_policy_name: gabbiliveceph
+              radosgw.objects.size:
+                  archive_policy_name: gabbiliveceph
+              radosgw.objects.containers:
+                  archive_policy_name: gabbiliveceph
+              radosgw.api.request:
+                  archive_policy_name: gabbiliveceph
+              radosgw.containers.objects:
+                  archive_policy_name: gabbiliveceph
+              radosgw.containers.objects.size:
+                  archive_policy_name: gabbiliveceph
+      status: 201
+      response_json_paths:
+          $.user_id:    27e342e4-4489-424f-a7e4-ba8ed9ad729c
+          $.project_id: d6d32769-c351-4758-b0a2-458fa1a065a3
+          $.metrics.`len`: 6
+
+    #
+    # Actual tests
+    #
+
+    - name: search 'gabbi-gnocchi-threshold-resource-alarm' alarm doesnt exist
+      desc: search for alarm using user_id, project_id, alarm_name
+      GET: $ENVIRON['AODH_SERVICE_URL']/v2/alarms
+      query_parameters:
+          q.field:
+              - user_id
+              - project_id
+              - name
+          q.op:
+              - eq
+              - eq
+              - eq
+          q.value:
+              - c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+              - 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+              - gabbi-gnocchi-threshold-resource-alarm
+      method: GET
+      response_json_paths:
+          $.`len`: 0
+
+    - name: fail to create alarm 'gabbi-gnocchi-threshold-resource-alarm'
+      desc: fails until resource exists in gnocchi
+      POST: $ENVIRON['AODH_SERVICE_URL']/v2/alarms
+      request_headers:
+          content-type: application/json
+      data:
+          alarm_actions:
+              - "http://site:8000/gnocchi-threshold-resource"
+          alarm_id: null
+          description: An gabbilive threshold based alarm
+          enabled: true
+          insufficient_data_actions:
+              - "http://site:8000/nodata-gnocchi-threshold-resource"
+          name: "gabbi-gnocchi-threshold-resource-alarm"
+          ok_actions:
+              - "http://site:8000/ok-gnocchi-threshold-resource"
+          project_id: 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+          repeat_actions: false
+          severity: moderate
+          state: "insufficient data"
+          type: gnocchi_resources_threshold
+          gnocchi_resources_threshold_rule:
+              evaluation_periods: 3
+              metric: "radosgw.containers.objects"
+              resource_id: "fake-mock-up"
+              aggregation_method: "mean"
+              granularity: 60
+              threshold: 5.0
+              comparison_operator: "ge"
+              resource_type: ceph_account
+          user_id: c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+      status: 404
+
+    - name: create alarm 'gabbi-gnocchi-threshold-resource-alarm'
+      desc: create a threshold alarm gabbi-gnocchi-threshold-resource-alarm
+      POST: $ENVIRON['AODH_SERVICE_URL']/v2/alarms
+      request_headers:
+          content-type: application/json
+      data:
+          alarm_actions:
+              - "http://site:8000/gnocchi-threshold-resource"
+          alarm_id: null
+          description: An gabbilive threshold based alarm
+          enabled: true
+          insufficient_data_actions:
+              - "http://site:8000/nodata-gnocchi-threshold-resource"
+          name: "gabbi-gnocchi-threshold-resource-alarm"
+          ok_actions:
+              - "http://site:8000/ok-gnocchi-threshold-resource"
+          project_id: 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+          repeat_actions: false
+          severity: moderate
+          state: "insufficient data"
+          type: gnocchi_resources_threshold
+          gnocchi_resources_threshold_rule:
+              evaluation_periods: 3
+              metric: "radosgw.objects.size"
+              resource_id: "gabbi-mock-resource"
+              aggregation_method: "mean"
+              granularity: 60
+              threshold: 5.0
+              comparison_operator: "ge"
+              resource_type: ceph_account
+          user_id: c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+      status: 201
+      response_json_paths:
+          $.name: gabbi-gnocchi-threshold-resource-alarm
+          $.type: gnocchi_resources_threshold
+          $.user_id: c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+          $.project_id: 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+          $.severity: moderate
+
+    - name: retrieve history about 'gabbi-gnocchi-threshold-resource-alarm' creation
+      desc: get history about alarm creation
+      GET: $ENVIRON['AODH_SERVICE_URL']/v2/alarms/$RESPONSE['$.alarm_id']/history
+      request_headers:
+          content-type: application/json
+      poll:
+          count: 5
+          delay: 2
+      response_json_paths:
+          $.`len`: 1
+          $.[0].type: creation
+          $.[0].alarm_id: $RESPONSE['$.alarm_id']
+
+    - name: update severity for alarm 'gabbi-gnocchi-threshold-resource-alarm'
+      desc: update severity for alarm gabbi-gnocchi-threshold-resource-alarm
+      PUT: $ENVIRON['AODH_SERVICE_URL']/v2/alarms/$RESPONSE['$.[0].alarm_id']
+      status: 200
+      request_headers:
+          content-type: application/json
+      data:
+          alarm_actions:
+              - "http://site:8000/gnocchi-threshold-resource"
+          alarm_id: null
+          description: An gabbilive threshold based alarm
+          enabled: true
+          insufficient_data_actions:
+              - "http://site:8000/nodata-gnocchi-threshold-resource"
+          name: "gabbi-gnocchi-threshold-resource-alarm"
+          ok_actions:
+              - "http://site:8000/ok-gnocchi-threshold-resource"
+          project_id: 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+          repeat_actions: false
+          severity: low
+          state: "insufficient data"
+          type: gnocchi_resources_threshold
+          gnocchi_resources_threshold_rule:
+              evaluation_periods: 3
+              metric: "radosgw.objects.size"
+              resource_id: "gabbi-mock-resource"
+              aggregation_method: "mean"
+              granularity: 60
+              threshold: 5.0
+              comparison_operator: "ge"
+              resource_type: ceph_account
+          user_id: c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+      response_json_paths:
+          $.name: gabbi-gnocchi-threshold-resource-alarm
+          $.type: gnocchi_resources_threshold
+          $.user_id: c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+          $.project_id: 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+          $.severity: low
+          $.state: "insufficient data"
+
+    - name: retrieve history for 'gabbi-gnocchi-threshold-resource-alarm'
+      desc: get history for rule_change
+      GET: $ENVIRON['AODH_SERVICE_URL']/v2/alarms/$RESPONSE['$.alarm_id']/history
+      request_headers:
+          content-type: application/json
+      poll:
+          count: 5
+          delay: 2
+      response_json_paths:
+          $.`len`: 2
+          $.[0].type: rule change
+          $.[0].alarm_id: $RESPONSE['$.alarm_id']
+          $.[0].detail: '{"severity": "low"}'
+
+    - name: update alarm state for 'gabbi-gnocchi-threshold-resource-alarm'
+      desc: update state for alarm
+      PUT: $ENVIRON['AODH_SERVICE_URL']/v2/alarms/$RESPONSE['$.[0].alarm_id']/state
+      request_headers:
+          content-type: application/json
+      data: '"ok"'
+      status: 200
+      response_strings:
+          "ok"
+
+    - name: search 'gabbi-gnocchi-threshold-resource-alarm' alarm exist
+      desc: search for alarm using user_id, project_id, alarm_name
+      GET: $ENVIRON['AODH_SERVICE_URL']/v2/alarms
+      query_parameters:
+          q.field:
+              - user_id
+              - project_id
+              - name
+          q.op:
+              - eq
+              - eq
+              - eq
+          q.value:
+              - c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+              - 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+              - gabbi-gnocchi-threshold-resource-alarm
+      poll:
+          count: 5
+          delay: 2
+      response_json_paths:
+          $.`len`: 1
+
+    - name: get info about 'gabbi-gnocchi-threshold-resource-alarm' alarm
+      desc: access alarm using its ID
+      GET: $ENVIRON['AODH_SERVICE_URL']/v2/alarms/$RESPONSE['$.[0].alarm_id']
+      response_json_paths:
+          $.alarm_id: $RESPONSE['$.[0].alarm_id']
+          $.alarm_actions: ["http://site:8000/gnocchi-threshold-resource"]
+          $.name: gabbi-gnocchi-threshold-resource-alarm
+          $.gnocchi_resources_threshold_rule.resource_id: "gabbi-mock-resource"
+          $.gnocchi_resources_threshold_rule.metric: "radosgw.objects.size"
+          $.gnocchi_resources_threshold_rule.resource_type: "ceph_account"
+          $.user_id: c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+
+    - name: get alarm state for 'gabbi-gnocchi-threshold-resource-alarm'
+      desc: get state for alarm
+      GET: $ENVIRON['AODH_SERVICE_URL']/v2/alarms/$RESPONSE['$.alarm_id']/state
+      request_headers:
+          content-type: application/json
+      status: 200
+      response_strings:
+          - "ok"
+
+    #
+    # Teardown
+    #
+
+    - name: CLEANUP. search 'gabbi-gnocchi-threshold-resource' alarm exist
+      desc: Find alarm id using user_id, project_id, alarm_name
+      GET: $ENVIRON['AODH_SERVICE_URL']/v2/alarms
+      query_parameters:
+          q.field:
+              - user_id
+              - project_id
+              - name
+          q.op:
+              - eq
+              - eq
+              - eq
+          q.value:
+              - c8ecb587-d38c-426f-a58d-22b8d4a9a1d3
+              - 709f6ed6-bfb3-4649-b303-0019a7f6aef2
+              - gabbi-gnocchi-threshold-resource-alarm
+      response_json_paths:
+          $.`len`: 1
+
+    - name: CLEANUP. delete threshold alarm 'gabbi-gnocchi-threshold-resource'
+      DELETE: $ENVIRON['AODH_SERVICE_URL']/v2/alarms/$RESPONSE['$.[0].alarm_id']
+      status: 204
+
+    - name: CLEANUP. Get resource by name 'gabbi-mock-resource'
+      desc: retrieve resource by gabbi-mock-resource to get its ID
+      GET: $ENVIRON['GNOCCHI_SERVICE_URL']/v1/resource/generic/gabbi-mock-resource
+      status: 200
+
+    - name: CLEANUP. delete test ceph_resource 'gabbi-mock-resource'
+      desc: delete ceph_account resource gabbi-mock-resource
+      DELETE: $ENVIRON['GNOCCHI_SERVICE_URL']/v1/resource/generic/$RESPONSE['$.id']
+      status: 204
+
+    - name: CLEANUP. delete resource type ceph_account
+      DELETE: $ENVIRON['GNOCCHI_SERVICE_URL']/v1/resource_type/ceph_account
+      status: 204
+
+    - name: CLEANUP. delete archive
+      DELETE: $ENVIRON['GNOCCHI_SERVICE_URL']/v1/archive_policy/gabbiliveceph
+      status: 204
+      xfail: True
+