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.common.utils.data_utils import rand_name
from fuel_health import config from fuel_health import config
from fuel_health import exceptions
import fuel_health.nmanager import fuel_health.nmanager
import fuel_health.test import fuel_health.test
@ -98,12 +99,22 @@ class HeatBaseTest(fuel_health.nmanager.OfficialClientTest):
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
super(HeatBaseTest, cls).setUpClass() 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.stacks = []
cls.flavor = None cls.flavor = None
cls.wait_interval = cls.config.compute.build_interval cls.wait_interval = cls.config.compute.build_interval
cls.wait_timeout = cls.config.compute.build_timeout 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 @classmethod
def tearDownClass(cls): def tearDownClass(cls):
cls.clean_stacks() 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__) LOG = logging.getLogger(__name__)
class HeatTest(heatmanager.HeatBaseTest): class TestStackAction(heatmanager.HeatBaseTest):
"""Test class contains tests that check typical stack-related actions. """
Test class verifies that stack can be created, updated and deleted.
Special requirements: Special requirements:
1. Heat component should be installed. 1. Heat component should be installed.
""" """
@attr(type=["fuel", "smoke"]) @attr(type=["fuel", "smoke"])
def test_manipulate_stack(self): def test_stack(self):
"""Check typical stack-related actions """Create stack, check its details, then update and delete stack.
Target component: Heat Target component: Heat
Scenario: Scenario:
1. Create stack. 1. Create stack.
2. Get details of the created stack by its name. 2. Wait for stack status to become 'CREATE_COMPLETE'.
3. Update stack. 3. Get details of the created stack by its name.
4. Delete stack. 4. Update stack.
5. Wait for stack to be updated.
6. Delete stack.
7. Wait for stack to be deleted.
Duration: 60 s. Duration: 60 s.
""" """
@ -49,42 +53,50 @@ class HeatTest(heatmanager.HeatBaseTest):
"stack creation", "stack creation",
self.heat_client) self.heat_client)
self.verify(100, self.wait_for_stack_status, 1, self.verify(100, self.wait_for_stack_status, 2,
fail_msg, fail_msg,
"stack status becoming 'CREATE_COMPLETE'", "stack status becoming 'CREATE_COMPLETE'",
stack.id, 'CREATE_COMPLETE') stack.id, 'CREATE_COMPLETE')
# get stack details # get stack details
stack_details = self.verify(20, self.heat_client.stacks.get, 2, details = self.verify(20, self.heat_client.stacks.get, 3,
"Cannot retrieve stack details.", "Cannot retrieve stack details.",
"retrieving stack details", "retrieving stack details",
stack.stack_name) 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( self.verify_response_body_content(
stack_details.id, self.config.compute.image_name, details.parameters['ImageId'],
stack.id, fail_msg, 3)
"Stack details contain incorrect values.", 2)
self.verify_response_body_content(
details.stack_status, 'CREATE_COMPLETE',
fail_msg, 3)
# update stack # update stack
fail_msg = "Cannot 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, fail_msg,
"updating stack.", "updating stack.",
self.heat_client, stack.id) 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, fail_msg,
"stack status becoming 'UPDATE_COMPLETE'", "stack status becoming 'UPDATE_COMPLETE'",
stack.id, 'UPDATE_COMPLETE') stack.id, 'UPDATE_COMPLETE')
# delete stack # delete stack
fail_msg = "Cannot 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, fail_msg,
"volume deletion", "volume deletion",
stack.id) stack.id)
self.verify(100, self.wait_for_stack_deleted, 4, self.verify(100, self.wait_for_stack_deleted, 7,
fail_msg, fail_msg,
"deleting stack", "deleting stack",
stack.id) stack.id)

View File

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