Refactor scenario test case to create template in setUpClass method.

Change-Id: Id358c6dd7ea03dfb0072efad88585977e973aa23
This commit is contained in:
Federico Ressi 2018-12-07 12:35:21 +01:00
parent c2c21cdbc7
commit 83c8365e0b
3 changed files with 44 additions and 65 deletions

View File

@ -15,10 +15,9 @@
from __future__ import absolute_import
import os
import sys
from tobiko.tests import base
from tobiko.common.managers import stack
from tobiko.common.managers import stack as stack_manager
from tobiko.common.managers import network
from tobiko.common import clients
from tobiko.common import constants
@ -27,46 +26,35 @@ from tobiko.common import constants
class ScenarioTestsBase(base.TobikoTest):
"""All scenario tests inherit from this scenario base class."""
clientManager = clients.ClientManager()
clients = clients.ClientManager()
default_params = constants.DEFAULT_PARAMS
networks = network.NetworkManager(clients)
templates_dir = os.path.join(os.path.dirname(__file__), 'templates')
stacks = stack_manager.StackManager(clients, templates_dir)
stack = None
def setUp(self):
super(ScenarioTestsBase, self).setUp()
templates_dir = os.path.join(os.path.dirname(__file__), 'templates')
self.stackManager = stack.StackManager(self.clientManager,
templates_dir)
self.networkManager = network.NetworkManager(self.clientManager)
self.params = self.default_params
@classmethod
def setUpClass(cls):
super(ScenarioTestsBase, cls).setUpClass()
cls.stack_name = cls.__module__.rsplit('.', 1)[-1]
cls.setup_stack()
test_name = self.id()
while test_name:
test_module = sys.modules.get(test_name)
if test_module:
break
name_parts = test_name.rsplit('.', 1)
if len(name_parts) == 1:
msg = "Invalid test name: {!r}".format(self.id())
raise RuntimeError(msg)
test_name = name_parts[0]
self.stack_name = test_name.rsplit('.', 1)[-1]
self.setup_stack()
@classmethod
def setup_stack(cls):
if not cls.stack:
cls.stack = (
cls.stacks.wait_for_stack_status(
stack_name=cls.stack_name,
check=False) or
cls.create_stack())
return cls.stack
def setup_stack(self):
if not self.stack:
self.stack = (self.stackManager.get_stack(self.stack_name) or
self.create_stack())
return self.stack
_get_stack = setup_stack
def create_stack(self):
@classmethod
def create_stack(cls, stack_name=None, template_name=None, **parameters):
"""Creates stack to be used by all scenario tests."""
# Defines parameters required by heat template
# creates stack and stores its ID
return self.stackManager.create_stack(
stack_name=self.stack_name,
template_name="%s.yaml" % self.stack_name,
parameters=self.params)
stack_name = stack_name or cls.stack_name
template_name = template_name or stack_name + ".yaml"
parameters = dict(cls.default_params, **parameters)
return cls.stacks.create_stack(
stack_name=stack_name, template_name=template_name,
parameters=parameters)

View File

@ -21,18 +21,15 @@ from tobiko.common.asserts import assert_ping
class FloatingIPTest(base.ScenarioTestsBase):
"""Tests server connectivity"""
def setUp(self):
super(FloatingIPTest, self).setUp()
self.stack = self._get_stack()
self.fip = self.stackManager.get_output(self.stack, "fip")
self.unreachable_fip = self.stackManager.get_output(self.stack, "fip2")
@classmethod
def setUpClass(cls):
super(FloatingIPTest, cls).setUpClass()
cls.fip = cls.stacks.get_output(cls.stack, "fip")
cls.unreachable_fip = cls.stacks.get_output(cls.stack, "fip2")
def test_pre_fip(self):
"""Validates connectivity to a server created by another test."""
assert_ping(self.fip)
def test_post_fip(self):
def test_ping_floating_ip(self):
"""Validates connectivity to a server post upgrade."""
assert_ping(self.fip)
def test_ping_unreachable_floating_ip(self):
assert_ping(self.unreachable_fip, should_fail=True)

View File

@ -21,21 +21,15 @@ from tobiko.tests.scenario import base
class SecurityGroupTest(base.ScenarioTestsBase):
"""Tests security groups."""
def setUp(self):
super(SecurityGroupTest, self).setUp()
self.stack = self._get_stack()
self.fip = self.stackManager.get_output(self.stack, "fip")
self.unreachable_fip = self.stackManager.get_output(self.stack, "fip2")
self.blank_sg_id = self.stackManager.get_output(self.stack, "sg2")
def test_pre_secgroup(self):
"""Validates security group before upgrade."""
@classmethod
def setUpClass(cls):
super(SecurityGroupTest, cls).setUpClass()
cls.fip = cls.stacks.get_output(cls.stack, "fip")
cls.unreachable_fip = cls.stacks.get_output(cls.stack, "fip2")
cls.blank_sg_id = cls.stacks.get_output(cls.stack, "sg2")
def test_ping_fip(self):
assert_ping(self.fip)
assert_ping(self.unreachable_fip, should_fail=True)
def test_post_secgroup(self):
"""Validates security groups post upgrade."""
assert_ping(self.fip)
def test_ping_unreacheable_fip(self):
assert_ping(self.unreachable_fip, should_fail=True)