Add integration tests (actions with workbooks)

This commit is first in the series of commits implementing
appropriate blueprint (please, look at link below).
In this commit I added a bunch of integration tests which check
work with workbooks(creation, updating, addition of definition and so on)
and use only python-mistralclient methods.

Targets blueprint: mistral-mistralclient-integration-tests

Change-Id: Ieb95929102cc7a27ceb6caf5d63f7417d07d3974
This commit is contained in:
Anastasia Kuznetsova
2014-07-07 18:34:44 +04:00
parent cc65e2c3fb
commit cacf8658b5
6 changed files with 137 additions and 1 deletions

View File

56
functionaltests/base.py Normal file
View File

@@ -0,0 +1,56 @@
import os
import testtools
from tempest import clients
from tempest.common import rest_client
from mistralclient.api import client as mclient
class ClientAuth(rest_client.RestClient):
def __init__(self, auth_provider):
super(ClientAuth, self).__init__(auth_provider)
self.mistral_client = mclient.Client(
auth_token=self.auth_provider.get_token())
class MistralBase(testtools.TestCase):
@classmethod
def setUpClass(cls):
super(MistralBase, cls).setUpClass()
mgr = clients.Manager()
cls.mistral_client = ClientAuth(mgr.auth_provider).mistral_client
__location = os.path.realpath(os.path.join(os.getcwd(),
os.path.dirname(__file__)))
cls.definition = open(os.path.join(
__location, 'hello.yaml'), 'rb').read()
cls.wb = cls.mistral_client_workbooks.create(
"wb", "Description", ["tags"])
@classmethod
def tearDownClass(cls):
super(MistralBase, cls).tearDownClass()
for wb in cls.mistral_client.workbooks.list():
cls.mistral_client.workbooks.delete(wb.name)
def assert_item_in_list(self, items, **props):
def _matches(item, **props):
for prop_name, prop_val in props.iteritems():
v = item[prop_name] if isinstance(item, dict) \
else getattr(item, prop_name)
if v != prop_val:
return False
return True
filtered_items = filter(lambda item: _matches(item, **props), items)
return len(filtered_items) != 0

View File

@@ -0,0 +1,12 @@
Namespaces:
Greetings:
actions:
hello:
class: std.echo
base-parameters:
output: Hello!
Workflow:
tasks:
hello:
action: Greetings.hello

View File

@@ -0,0 +1,31 @@
#!/bin/bash
#
# 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.
# How many seconds to wait for the API to be responding before giving up
API_RESPONDING_TIMEOUT=20
if ! timeout ${API_RESPONDING_TIMEOUT} sh -c "while ! curl -s http://127.0.0.1:8989/v1/ 2>/dev/null | grep -q 'Authentication required' ; do sleep 1; done"; then
echo "Mistral API failed to respond within ${API_RESPONDING_TIMEOUT} seconds"
exit 1
fi
echo "Successfully contacted Mistral API"
# Where tempest code lives
TEMPEST_DIR=${TEMPEST_DIR:-/opt/stack/new/tempest}
# Add tempest source tree to PYTHONPATH
export PYTHONPATH=$PYTHONPATH:$TEMPEST_DIR
nosetests -sv tests.py

36
functionaltests/tests.py Normal file
View File

@@ -0,0 +1,36 @@
from base import MistralBase
class Workbooks(MistralBase):
def test_get_workbook_list(self):
wbs = self.mistral_client.workbooks.list()
self.assertIsInstance(wbs, list)
def test_create_workbook(self):
wbs = self.mistral_client.workbooks.list()
self.mistral_client.workbooks.create("new_wb")
wbs_with_new_wb = self.mistral_client.workbooks.list()
self.assertEqual(len(wbs)+1, len(wbs_with_new_wb))
self.assertTrue(self.assert_item_in_list(
wbs_with_new_wb, name="new_wb"))
def test_get_workbook(self):
received_wb = self.mistral_client.workbooks.get("wb")
self.assertEqual(self.wb.name, received_wb.name)
def test_update_workbook(self):
updated_wb = self.mistral_client.workbooks.update(
"wb", "New Description", ["tags"])
self.assertEqual(self.wb.name, updated_wb.name)
self.assertEqual("New Description", updated_wb.description)
self.assertEqual(["tags"], updated_wb.tags)
def test_upload_get_definition(self):
self.mistral_client.workbooks.upload_definition("wb", self.definition)
received_definition = \
self.mistral_client.workbooks.get_definition("wb")
self.assertEqual(self.definition, received_definition)

View File

@@ -15,10 +15,11 @@ setenv =
NOSE_OPENSTACK_SHOW_ELAPSED=1
NOSE_OPENSTACK_STDOUT=1
NOSE_XUNIT=1
DISCOVER_DIRECTORY=mistralclient/tests
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
commands = nosetests
commands = nosetests mistralclient/tests
[testenv:pep8]
commands = flake8 {posargs}