Add support for fixture_id to stack fixtures
Change-Id: I286d1d6e9cb9d112360cf341836098989bde7e61
This commit is contained in:
parent
65ad99bec5
commit
c0246318c9
@ -64,17 +64,16 @@ class HeatStackFixture(tobiko.SharedFixture):
|
||||
client = None
|
||||
retry_create_stack = 1
|
||||
wait_interval = 5
|
||||
stack_name = None # type: str
|
||||
template = None # type: _template.HeatTemplateFixture
|
||||
stack = None
|
||||
_stack_name = None
|
||||
parameters = None # type: HeatStackParametersFixture
|
||||
|
||||
def __init__(self, stack_name=None, template=None, parameters=None,
|
||||
wait_interval=None, client=None):
|
||||
super(HeatStackFixture, self).__init__()
|
||||
self.stack_name = stack_name = (stack_name or
|
||||
self.stack_name or
|
||||
self.fixture_name)
|
||||
if stack_name:
|
||||
self._stack_name = str(stack_name)
|
||||
|
||||
self.template = _template.heat_template(template or self.template)
|
||||
self.parameters = heat_stack_parameters(
|
||||
@ -86,6 +85,15 @@ class HeatStackFixture(tobiko.SharedFixture):
|
||||
if wait_interval:
|
||||
self.wait_interval = wait_interval
|
||||
|
||||
@property
|
||||
def stack_name(self):
|
||||
"""Lazily assign stack name
|
||||
"""
|
||||
stack_name = self._stack_name
|
||||
if not stack_name:
|
||||
self._stack_name = stack_name = self.fixture_name
|
||||
return stack_name
|
||||
|
||||
def _get_retry_value(self, retry):
|
||||
if retry is None:
|
||||
retry = self.retry_create_stack
|
||||
|
26
tobiko/tests/functional/openstack/hot/my_stack.yaml
Normal file
26
tobiko/tests/functional/openstack/hot/my_stack.yaml
Normal file
@ -0,0 +1,26 @@
|
||||
heat_template_version: 2015-04-30
|
||||
|
||||
|
||||
description: Simple template to test creating a stack with tobiko
|
||||
|
||||
|
||||
parameters:
|
||||
input_text:
|
||||
type: string
|
||||
label: some text
|
||||
description: some input text
|
||||
|
||||
|
||||
resources:
|
||||
text:
|
||||
type: OS::Heat::Value
|
||||
description: some resource text
|
||||
properties:
|
||||
type: string
|
||||
value: { get_param: input_text }
|
||||
|
||||
|
||||
outputs:
|
||||
output_text:
|
||||
description: some output text
|
||||
value: { get_attr: [text, value] }
|
67
tobiko/tests/functional/openstack/test_heat.py
Normal file
67
tobiko/tests/functional/openstack/test_heat.py
Normal file
@ -0,0 +1,67 @@
|
||||
# Copyright (c) 2019 Red Hat, Inc.
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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 absolute_import
|
||||
|
||||
import os
|
||||
import random
|
||||
import string
|
||||
|
||||
import testtools
|
||||
|
||||
import tobiko
|
||||
from tobiko.openstack import heat
|
||||
|
||||
|
||||
TEMPLATE_DIRS = [os.path.dirname(__file__)]
|
||||
|
||||
|
||||
def random_string(length, letters=string.ascii_lowercase):
|
||||
return ''.join(random.choice(letters) for _ in range(length))
|
||||
|
||||
|
||||
class MyStack(heat.HeatStackFixture):
|
||||
|
||||
template = heat.heat_template_file(template_file='hot/my_stack.yaml',
|
||||
template_dirs=TEMPLATE_DIRS)
|
||||
|
||||
input_text = random_string(8)
|
||||
|
||||
|
||||
class HeatStackFixtureTest(testtools.TestCase):
|
||||
|
||||
stack = tobiko.required_setup_fixture(MyStack)
|
||||
|
||||
def test_get_stack(self):
|
||||
stack = self.stack.get_stack()
|
||||
self.assertIsNotNone(stack)
|
||||
self.assertTrue(stack.id)
|
||||
self.assertEqual(tobiko.get_fixture_name(MyStack), stack.stack_name)
|
||||
self.assertEqual('CREATE_COMPLETE', stack.stack_status)
|
||||
|
||||
def test_get_fixture_with_fixture_id_0(self):
|
||||
fixture_0 = tobiko.get_fixture(MyStack, fixture_id=0)
|
||||
self.assertIs(fixture_0, self.stack)
|
||||
|
||||
def test_get_fixture_with_fixture_id_1(self):
|
||||
fixture_0 = tobiko.get_fixture(MyStack)
|
||||
fixture_1 = tobiko.get_fixture(MyStack, fixture_id=1)
|
||||
self.assertIsNot(fixture_0, fixture_1)
|
||||
stack_0 = tobiko.setup_fixture(fixture_0).get_stack()
|
||||
stack_1 = tobiko.setup_fixture(fixture_1).get_stack()
|
||||
self.assertNotEqual(stack_0.id, stack_1.id)
|
||||
self.assertEqual(tobiko.get_fixture_name(MyStack), stack_0.stack_name)
|
||||
self.assertEqual(tobiko.get_fixture_name(MyStack) + '-1',
|
||||
stack_1.stack_name)
|
@ -65,9 +65,12 @@ class HeatStackFixtureTest(openstack.OpenstackTest):
|
||||
parameters=parameters,
|
||||
wait_interval=wait_interval, client=client)
|
||||
|
||||
self.assertEqual(stack_name or fixture_class.stack_name or
|
||||
tobiko.get_fixture_name(stack),
|
||||
stack.stack_name)
|
||||
if stack_name:
|
||||
self.assertEqual(stack_name, stack.stack_name)
|
||||
elif isinstance(fixture_class.stack_name, property):
|
||||
self.assertEqual(tobiko.get_fixture_name(stack), stack.stack_name)
|
||||
else:
|
||||
self.assertEqual(fixture_class.stack_name, stack.stack_name)
|
||||
|
||||
self.check_stack_template(stack=stack, template=template)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user