Skip to content

Commit

Permalink
Remove unused test helpers
Browse files Browse the repository at this point in the history
these helpers left after moving openstack plugins to the separate
repository

Change-Id: Ia2cc2dda9090e50fc579dd16e7c7687c951102b6
  • Loading branch information
andreykurilin committed Feb 28, 2020
1 parent e8cae4b commit 4687d41
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 308 deletions.
146 changes: 0 additions & 146 deletions tests/unit/fakes.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@

import itertools
import multiprocessing
import random
import re
import string
import uuid

import mock

Expand All @@ -29,143 +25,6 @@
from rally.task import scenario


def generate_uuid():
return str(uuid.uuid4())


def generate_name(prefix="", length=12, choices=string.ascii_lowercase):
"""Generate pseudo-random name.
:param prefix: str, custom prefix for genertated name
:param length: int, length of autogenerated part of result name
:param choices: str, chars that accurs in generated name
:returns: str, pseudo-random name
"""
return prefix + "".join(random.choice(choices) for i in range(length))


def generate_mac():
"""Generate pseudo-random MAC address.
:returns: str, MAC address
"""
rand_str = generate_name(choices="0123456789abcdef", length=12)
return ":".join(re.findall("..", rand_str))


def setup_dict(data, required=None, defaults=None):
"""Setup and validate dict scenario_base. on mandatory keys and default data.
This function reduces code that constructs dict objects
with specific schema (e.g. for API data).
:param data: dict, input data
:param required: list, mandatory keys to check
:param defaults: dict, default data
:returns: dict, with all keys set
:raises IndexError, ValueError: If input data is incorrect
"""
required = required or []
for i in set(required) - set(data):
raise IndexError("Missed: %s" % i)

defaults = defaults or {}
for i in set(data) - set(required) - set(defaults):
raise ValueError("Unexpected: %s" % i)

defaults.update(data)
return defaults


def fake_credential(**config):
m = mock.Mock()
m.to_dict.return_value = config
for key, value in config.items():
setattr(m, key, value)
return m


class FakeResource(object):

def __init__(self, manager=None, name=None, status="ACTIVE", items=None,
deployment_uuid=None, id=None):
self.name = name or generate_uuid()
self.status = status
self.manager = manager
self.uuid = generate_uuid()
self.id = id or self.uuid
self.items = items or {}
self.deployment_uuid = deployment_uuid or generate_uuid()

def __getattr__(self, name):
# NOTE(msdubov): e.g. server.delete() -> manager.delete(server)
def manager_func(*args, **kwargs):
return getattr(self.manager, name)(self, *args, **kwargs)
return manager_func

def __getitem__(self, key):
return self.items[key]


class FakeManager(object):

def __init__(self):
super(FakeManager, self).__init__()
self.cache = {}
self.resources_order = []

def get(self, resource_uuid):
return self.cache.get(resource_uuid)

def delete(self, resource_uuid):
cached = self.get(resource_uuid)
if cached is not None:
cached.status = "DELETED"
del self.cache[resource_uuid]
self.resources_order.remove(resource_uuid)

def _cache(self, resource):
self.resources_order.append(resource.uuid)
self.cache[resource.uuid] = resource
return resource

def list(self, **kwargs):
return [self.cache[key] for key in self.resources_order]

def find(self, **kwargs):
for resource in self.cache.values():
match = True
for key, value in kwargs.items():
if getattr(resource, key, None) != value:
match = False
break
if match:
return resource


class FakeRunner(object):

CONFIG_SCHEMA = {
"type": "object",
"$schema": consts.JSON_SCHEMA,
"properties": {
"type": {
"type": "string",
"enum": ["fake"]
},

"a": {
"type": "string"
},

"b": {
"type": "number"
}
},
"required": ["type", "a"]
}


class FakeScenario(scenario.Scenario):

def idle_time(self):
Expand Down Expand Up @@ -245,11 +104,6 @@ def cleanup(self):
pass


@context.configure(name="fake_hidden_context", order=1, hidden=True)
class FakeHiddenContext(FakeContext):
pass


class FakeDeployment(dict):

def __init__(self, **kwargs):
Expand Down
98 changes: 78 additions & 20 deletions tests/unit/task/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,75 @@

import collections
import datetime as dt
import uuid

import ddt
from jsonschema import exceptions as schema_exceptions
import mock

from rally import exceptions
from rally.task import utils
from tests.unit import fakes
from tests.unit import test


class FakeResource(object):

def __init__(self, manager=None, name=None, status="ACTIVE", items=None,
deployment_uuid=None, id=None):
self.name = name or str(uuid.uuid4())
self.status = status
self.manager = manager
self.uuid = str(uuid.uuid4())
self.id = id or self.uuid
self.items = items or {}
self.deployment_uuid = deployment_uuid or str(uuid.uuid4())

def __getattr__(self, name):
# NOTE(msdubov): e.g. server.delete() -> manager.delete(server)
def manager_func(*args, **kwargs):
return getattr(self.manager, name)(self, *args, **kwargs)
return manager_func

def __getitem__(self, key):
return self.items[key]


class FakeManager(object):

def __init__(self):
super(FakeManager, self).__init__()
self.cache = {}
self.resources_order = []

def get(self, resource_uuid):
return self.cache.get(resource_uuid)

def delete(self, resource_uuid):
cached = self.get(resource_uuid)
if cached is not None:
cached.status = "DELETED"
del self.cache[resource_uuid]
self.resources_order.remove(resource_uuid)

def _cache(self, resource):
self.resources_order.append(resource.uuid)
self.cache[resource.uuid] = resource
return resource

def list(self, **kwargs):
return [self.cache[key] for key in self.resources_order]

def find(self, **kwargs):
for resource in self.cache.values():
match = True
for key, value in kwargs.items():
if getattr(resource, key, None) != value:
match = False
break
if match:
return resource


class TaskUtilsTestCase(test.TestCase):

def test_wait_for_delete(self):
Expand All @@ -50,9 +108,9 @@ def update_resource(self):
def test_resource_is(self):
is_active = utils.resource_is("ACTIVE")
self.assertEqual(is_active.status_getter, utils.get_status)
self.assertTrue(is_active(fakes.FakeResource(status="active")))
self.assertTrue(is_active(fakes.FakeResource(status="aCtIvE")))
self.assertFalse(is_active(fakes.FakeResource(status="ERROR")))
self.assertTrue(is_active(FakeResource(status="active")))
self.assertTrue(is_active(FakeResource(status="aCtIvE")))
self.assertFalse(is_active(FakeResource(status="ERROR")))

def test_resource_is_with_fake_status_getter(self):
fake_getter = mock.MagicMock(return_value="LGTM")
Expand All @@ -69,7 +127,7 @@ def test_infinite_run_args_generator(self):
break

def test_manager_list_sizes(self):
manager = fakes.FakeManager()
manager = FakeManager()

def lst():
return [1] * 10
Expand All @@ -83,47 +141,47 @@ def lst():

def test_get_from_manager(self):
get_from_manager = utils.get_from_manager()
manager = fakes.FakeManager()
resource = fakes.FakeResource(manager=manager)
manager = FakeManager()
resource = FakeResource(manager=manager)
manager._cache(resource)
self.assertEqual(resource, get_from_manager(resource))

def test_get_from_manager_with_uuid_field(self):
get_from_manager = utils.get_from_manager()
manager = fakes.FakeManager()
resource = fakes.FakeResource(manager=manager)
manager = FakeManager()
resource = FakeResource(manager=manager)
manager._cache(resource)
self.assertEqual(resource, get_from_manager(resource, id_attr="uuid"))

def test_get_from_manager_in_error_state(self):
get_from_manager = utils.get_from_manager()
manager = fakes.FakeManager()
resource = fakes.FakeResource(manager=manager, status="ERROR")
manager = FakeManager()
resource = FakeResource(manager=manager, status="ERROR")
manager._cache(resource)
self.assertRaises(exceptions.GetResourceFailure,
get_from_manager, resource)

def test_get_from_manager_in_deleted_state(self):
get_from_manager = utils.get_from_manager()
manager = fakes.FakeManager()
resource = fakes.FakeResource(manager=manager, status="DELETED")
manager = FakeManager()
resource = FakeResource(manager=manager, status="DELETED")
manager._cache(resource)
self.assertRaises(exceptions.GetResourceNotFound,
get_from_manager, resource)

def test_get_from_manager_in_deleted_state_for_heat_resource(self):
get_from_manager = utils.get_from_manager()
manager = fakes.FakeManager()
resource = fakes.FakeResource(manager=manager)
manager = FakeManager()
resource = FakeResource(manager=manager)
resource.stack_status = "DELETE_COMPLETE"
manager._cache(resource)
self.assertRaises(exceptions.GetResourceNotFound,
get_from_manager, resource)

def test_get_from_manager_in_deleted_state_for_ceilometer_resource(self):
get_from_manager = utils.get_from_manager()
manager = fakes.FakeManager()
resource = fakes.FakeResource(manager=manager)
manager = FakeManager()
resource = FakeResource(manager=manager)
resource.state = "DELETED"
manager._cache(resource)
self.assertRaises(exceptions.GetResourceNotFound,
Expand All @@ -132,7 +190,7 @@ def test_get_from_manager_in_deleted_state_for_ceilometer_resource(self):
def test_get_from_manager_not_found(self):
get_from_manager = utils.get_from_manager()
manager = mock.MagicMock()
resource = fakes.FakeResource(manager=manager, status="ERROR")
resource = FakeResource(manager=manager, status="ERROR")

class NotFoundException(Exception):
http_status = 404
Expand All @@ -144,7 +202,7 @@ class NotFoundException(Exception):
def test_get_from_manager_http_exception(self):
get_from_manager = utils.get_from_manager()
manager = mock.MagicMock()
resource = fakes.FakeResource(manager=manager, status="ERROR")
resource = FakeResource(manager=manager, status="ERROR")

class HTTPException(Exception):
pass
Expand All @@ -159,7 +217,7 @@ class WaitForTestCase(test.TestCase):
def setUp(self):
super(WaitForTestCase, self).setUp()

self.resource = fakes.FakeResource()
self.resource = FakeResource()
self.load_secs = 0.01
self.fake_checker_delayed = self.get_fake_checker_delayed(
seconds=self.load_secs)
Expand Down

0 comments on commit 4687d41

Please sign in to comment.