Rebase done.

Heat smoke test moved to heat package.
Version of heat-client downgraded to 0.2.2 in setup.py.
Test description and test method naming fixed.
Stack creation, updating and deletion actions divided into two steps.
Added verification points to Verify details step.
Added verification of Heat service is present in the keystone.
This commit is contained in:
Yuriy Yekovenko 2013-09-20 17:24:28 +03:00
parent 97109a671a
commit 77df2e1d87
4 changed files with 59 additions and 20 deletions

View File

@ -22,6 +22,7 @@ import heatclient.v1.client
from fuel_health.common.utils.data_utils import rand_name
from fuel_health import config
from fuel_health import exceptions
import fuel_health.nmanager
import fuel_health.test
@ -98,12 +99,22 @@ class HeatBaseTest(fuel_health.nmanager.OfficialClientTest):
@classmethod
def setUpClass(cls):
super(HeatBaseTest, cls).setUpClass()
cls.heat_service_available = False
for service in cls.identity_client.services.list():
if service.name == 'heat':
cls.heat_service_available = True
break
cls.stacks = []
cls.flavor = None
cls.wait_interval = cls.config.compute.build_interval
cls.wait_timeout = cls.config.compute.build_timeout
def setUp(self):
super(HeatBaseTest, self).setUp()
if not self.heat_service_available:
self.fail('Heat is unavailable.')
@classmethod
def tearDownClass(cls):
cls.clean_stacks()

View File

@ -0,0 +1,15 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2013 Mirantis, Inc.
#
# 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.

View File

@ -23,22 +23,26 @@ from fuel_health import heatmanager
LOG = logging.getLogger(__name__)
class HeatTest(heatmanager.HeatBaseTest):
"""Test class contains tests that check typical stack-related actions.
class TestStackAction(heatmanager.HeatBaseTest):
"""
Test class verifies that stack can be created, updated and deleted.
Special requirements:
1. Heat component should be installed.
"""
@attr(type=["fuel", "smoke"])
def test_manipulate_stack(self):
"""Check typical stack-related actions
def test_stack(self):
"""Create stack, check its details, then update and delete stack.
Target component: Heat
Scenario:
1. Create stack.
2. Get details of the created stack by its name.
3. Update stack.
4. Delete stack.
2. Wait for stack status to become 'CREATE_COMPLETE'.
3. Get details of the created stack by its name.
4. Update stack.
5. Wait for stack to be updated.
6. Delete stack.
7. Wait for stack to be deleted.
Duration: 60 s.
"""
@ -49,42 +53,50 @@ class HeatTest(heatmanager.HeatBaseTest):
"stack creation",
self.heat_client)
self.verify(100, self.wait_for_stack_status, 1,
self.verify(100, self.wait_for_stack_status, 2,
fail_msg,
"stack status becoming 'CREATE_COMPLETE'",
stack.id, 'CREATE_COMPLETE')
# get stack details
stack_details = self.verify(20, self.heat_client.stacks.get, 2,
"Cannot retrieve stack details.",
"retrieving stack details",
stack.stack_name)
details = self.verify(20, self.heat_client.stacks.get, 3,
"Cannot retrieve stack details.",
"retrieving stack details",
stack.stack_name)
fail_msg = "Stack details contain incorrect values."
self.verify_response_body_content(
details.id, stack.id,
fail_msg, 3)
self.verify_response_body_content(
stack_details.id,
stack.id,
"Stack details contain incorrect values.", 2)
self.config.compute.image_name, details.parameters['ImageId'],
fail_msg, 3)
self.verify_response_body_content(
details.stack_status, 'CREATE_COMPLETE',
fail_msg, 3)
# update stack
fail_msg = "Cannot update stack."
stack = self.verify(20, self.update_stack, 3,
stack = self.verify(20, self.update_stack, 4,
fail_msg,
"updating stack.",
self.heat_client, stack.id)
self.verify(100, self.wait_for_stack_status, 3,
self.verify(100, self.wait_for_stack_status, 5,
fail_msg,
"stack status becoming 'UPDATE_COMPLETE'",
stack.id, 'UPDATE_COMPLETE')
# delete stack
fail_msg = "Cannot delete stack."
self.verify(20, self.heat_client.stacks.delete, 4,
self.verify(20, self.heat_client.stacks.delete, 6,
fail_msg,
"volume deletion",
stack.id)
self.verify(100, self.wait_for_stack_deleted, 4,
self.verify(100, self.wait_for_stack_deleted, 7,
fail_msg,
"deleting stack",
stack.id)

View File

@ -22,6 +22,7 @@ fuel_health_reqs = [
'python-glanceclient>=0.9.0',
'python-keystoneclient>=0.3.1',
'python-novaclient>=2.13.0',
'python-heatclient==0.2.2',
'paramiko>=1.10.1',
'requests>=1.2.3',
'unittest2>=0.5.1',