Added /strategies endpoint in Watcher API

In this changeset, I added the /strategies endpoint to the Watcher
API service.
This also includes the related Tempest tests.

Partially Implements: blueprint get-goal-from-strategy

Change-Id: I1b70836e0df2082ab0016ecc207e89fdcb0fc8b9
This commit is contained in:
Vincent Françoise
2016-03-31 11:42:53 +02:00
parent 673642e436
commit 81765b9aa5
8 changed files with 545 additions and 4 deletions

View File

@@ -259,3 +259,24 @@ class InfraOptimClientJSON(base.BaseInfraOptimClient):
:return: Serialized action as a dictionary
"""
return self._show_request('/actions', action_uuid)
# ### STRATEGIES ### #
@base.handle_errors
def list_strategies(self, **kwargs):
"""List all existing strategies"""
return self._list_request('/strategies', **kwargs)
@base.handle_errors
def list_strategies_detail(self, **kwargs):
"""Lists details of all existing strategies"""
return self._list_request('/strategies/detail', **kwargs)
@base.handle_errors
def show_strategy(self, strategy):
"""Gets a specific strategy
:param strategy_id: Name of the strategy
:return: Serialized strategy as a dictionary
"""
return self._show_request('/strategies', strategy)

View File

@@ -0,0 +1,69 @@
# -*- encoding: utf-8 -*-
# Copyright (c) 2016 b<>com
#
# Licensed 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.
from __future__ import unicode_literals
from tempest import test
from watcher_tempest_plugin.tests.api.admin import base
class TestShowListStrategy(base.BaseInfraOptimTest):
"""Tests for strategies"""
DUMMY_STRATEGY = "dummy"
@classmethod
def resource_setup(cls):
super(TestShowListStrategy, cls).resource_setup()
def assert_expected(self, expected, actual,
keys=('created_at', 'updated_at', 'deleted_at')):
super(TestShowListStrategy, self).assert_expected(
expected, actual, keys)
@test.attr(type='smoke')
def test_show_strategy(self):
_, strategy = self.client.show_strategy(self.DUMMY_STRATEGY)
self.assertEqual(self.DUMMY_STRATEGY, strategy['name'])
self.assertIn("display_name", strategy.keys())
@test.attr(type='smoke')
def test_show_strategy_with_links(self):
_, strategy = self.client.show_strategy(self.DUMMY_STRATEGY)
self.assertIn('links', strategy.keys())
self.assertEqual(2, len(strategy['links']))
self.assertIn(strategy['uuid'],
strategy['links'][0]['href'])
@test.attr(type="smoke")
def test_list_strategies(self):
_, body = self.client.list_strategies()
self.assertIn('strategies', body)
strategies = body['strategies']
self.assertIn(self.DUMMY_STRATEGY,
[i['name'] for i in body['strategies']])
for strategy in strategies:
self.assertTrue(
all(val is not None for key, val in strategy.items()
if key in ['uuid', 'name', 'display_name', 'goal_uuid']))
# Verify self links.
for strategy in body['strategies']:
self.validate_self_link('strategies', strategy['uuid'],
strategy['links'][0]['href'])