Let TempestResourcesContext implements utils.RandomNameGeneratorMixin
TempestResourcesContext calls NeutronWrapper.create_network, and it will be called to generate random name, so it needs to implements utils.RandomNameGeneratorMixin Changed generate_random_name to use self.task["uuid"] or self.verification["uuid"] as task_id This patch also refactor test__create_network_resources to test the logic correctly Change-Id: I8c145073386cb7f668461e050fe8de75f4675def Closes-Bug: #1530770
This commit is contained in:
parent
bc2c7e469c
commit
aaa561853b
|
@ -231,9 +231,10 @@ class RandomNameGeneratorMixin(object):
|
|||
|
||||
This mixin provides one method,
|
||||
``generate_random_name()``. Classes that include it must provide a
|
||||
``self.task`` attribute that references a task dict. Classes that
|
||||
use this mixin may set two class variables to alter the behavior
|
||||
of ``generate_random_name()``:
|
||||
``self.task`` attribute that references a task dict or a
|
||||
``self.verification`` attribute that references a verification dict.
|
||||
Classes that use this mixin may set two class variables to alter the
|
||||
behavior of ``generate_random_name()``:
|
||||
|
||||
* ``RESOURCE_NAME_FORMAT``: A mktemp(1)-like format string that
|
||||
will be used to pattern the generated random string. It must
|
||||
|
@ -273,7 +274,10 @@ class RandomNameGeneratorMixin(object):
|
|||
|
||||
:returns: str, pseudo-random name
|
||||
"""
|
||||
task_id = self.task["uuid"]
|
||||
if hasattr(self, "task"):
|
||||
task_id = self.task["uuid"]
|
||||
elif hasattr(self, "verification"):
|
||||
task_id = self.verification["uuid"]
|
||||
|
||||
match = _resource_name_placeholder_re.match(self.RESOURCE_NAME_FORMAT)
|
||||
if match is None:
|
||||
|
|
|
@ -267,14 +267,18 @@ class TempestConfig(utils.RandomNameGeneratorMixin):
|
|||
_write_config(conf_path, self.conf)
|
||||
|
||||
|
||||
class TempestResourcesContext(object):
|
||||
class TempestResourcesContext(utils.RandomNameGeneratorMixin):
|
||||
"""Context class to create/delete resources needed for Tempest."""
|
||||
|
||||
def __init__(self, deployment, conf_path):
|
||||
RESOURCE_NAME_FORMAT = "rally_verify_XXXXXXXX_XXXXXXXX"
|
||||
|
||||
def __init__(self, deployment, verification, conf_path):
|
||||
credential = db.deployment_get(deployment)["admin"]
|
||||
self.clients = osclients.Clients(objects.Credential(**credential))
|
||||
self.available_services = self.clients.services().values()
|
||||
|
||||
self.verification = verification
|
||||
|
||||
self.conf_path = conf_path
|
||||
self.conf = configparser.ConfigParser()
|
||||
self.conf.read(conf_path)
|
||||
|
|
|
@ -347,7 +347,8 @@ class Tempest(object):
|
|||
LOG.debug("Test(s) started by the command: %s" % test_cmd)
|
||||
# Create all resources needed for Tempest before running tests.
|
||||
# Once tests finish, all created resources will be deleted.
|
||||
with config.TempestResourcesContext(self.deployment, self.config_file):
|
||||
with config.TempestResourcesContext(
|
||||
self.deployment, self.verification, self.config_file):
|
||||
# Run tests
|
||||
subprocess.check_call(test_cmd, cwd=self.path(),
|
||||
env=self.env, shell=True)
|
||||
|
|
|
@ -240,6 +240,15 @@ class RandomNameTestCase(test.TestCase):
|
|||
mock_choice.side_effect = iter("blarglesdweebled")
|
||||
self.assertEqual(generator.generate_random_name(), expected)
|
||||
|
||||
class FakeNameGenerator(utils.RandomNameGeneratorMixin):
|
||||
RESOURCE_NAME_FORMAT = fmt
|
||||
verification = {"uuid": task_id}
|
||||
|
||||
generator = FakeNameGenerator()
|
||||
|
||||
mock_choice.side_effect = iter("blarglesdweebled")
|
||||
self.assertEqual(generator.generate_random_name(), expected)
|
||||
|
||||
def test_generate_random_name_bogus_name_format(self):
|
||||
class FakeNameGenerator(utils.RandomNameGeneratorMixin):
|
||||
RESOURCE_NAME_FORMAT = "invalid_XXX_format"
|
||||
|
|
|
@ -314,7 +314,9 @@ class TempestResourcesContextTestCase(test.TestCase):
|
|||
return_value=CREDS).start()
|
||||
mock.patch("rally.osclients.Clients").start()
|
||||
|
||||
fake_verification = {"uuid": "uuid"}
|
||||
self.context = config.TempestResourcesContext("fake_deployment",
|
||||
fake_verification,
|
||||
"/fake/path/to/config")
|
||||
self.context.conf.add_section("compute")
|
||||
self.context.conf.add_section("orchestration")
|
||||
|
@ -392,16 +394,24 @@ class TempestResourcesContextTestCase(test.TestCase):
|
|||
self.assertEqual("id1", flavor.id)
|
||||
self.assertEqual("id1", self.context._created_flavors[0].id)
|
||||
|
||||
@mock.patch("rally.plugins.openstack.wrappers."
|
||||
"network.NeutronWrapper.create_network")
|
||||
def test__create_network_resources(
|
||||
self, mock_neutron_wrapper_create_network):
|
||||
mock_neutron_wrapper_create_network.side_effect = [
|
||||
fakes.FakeNetwork(id="id1")]
|
||||
def test__create_network_resources(self):
|
||||
client = self.context.clients.neutron()
|
||||
fake_network = {
|
||||
"id": "nid1",
|
||||
"name": "network",
|
||||
"status": "status"}
|
||||
|
||||
client.create_network.side_effect = [{"network": fake_network}]
|
||||
client.create_router.side_effect = [{"router": {"id": "rid1"}}]
|
||||
client.create_subnet.side_effect = [{"subnet": {"id": "subid1"}}]
|
||||
|
||||
network = self.context._create_network_resources()
|
||||
self.assertEqual("id1", network.id)
|
||||
self.assertEqual("id1", self.context._created_networks[0].id)
|
||||
self.assertEqual("nid1", network["id"])
|
||||
self.assertEqual("nid1", self.context._created_networks[0]["id"])
|
||||
self.assertEqual("rid1",
|
||||
self.context._created_networks[0]["router_id"])
|
||||
self.assertEqual("subid1",
|
||||
self.context._created_networks[0]["subnets"][0])
|
||||
|
||||
def test__cleanup_tempest_roles(self):
|
||||
self.context._created_roles = [fakes.FakeRole(), fakes.FakeRole()]
|
||||
|
|
Loading…
Reference in New Issue