Unittests patch 'CONF.datastore_manager'
Unittests do not have 'CONF.datastore_manager' set (None). As the result all datastore manager/app tests that access configuration by the manager name get the default 'mysql' values. Apart from not testing the production configuration this also makes it difficult to test dynamically looked up datastore-specific properties which do not exist in the mysql group at all. This patch set adds a helper method for patching any given configuration property and also adds a simple interface for patching the manager name to the base TestCase. All existing manager/app tests were updated to properly patch the manager property. The base test patches the manager name to 'mysql' so that all unittests run with this manager unless explicitly overriden. It's now safe to remove the manager parameter from the 'cfg.get_configuration_property()' function. It was there to work around this issue in unittests. Change-Id: I903a0fb1ede8ad6614d2b5a8fc1a256f74412496
This commit is contained in:
parent
04bcdfe9bd
commit
c45eb67018
@ -26,6 +26,7 @@ from osprofiler import opts as profiler
|
|||||||
from trove.version import version_info as version
|
from trove.version import version_info as version
|
||||||
|
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
UNKNOWN_SERVICE_ID = 'unknown-service-id-error'
|
UNKNOWN_SERVICE_ID = 'unknown-service-id-error'
|
||||||
|
|
||||||
path_opts = [
|
path_opts = [
|
||||||
@ -1439,35 +1440,35 @@ def parse_args(argv, default_config_files=None):
|
|||||||
default_config_files=default_config_files)
|
default_config_files=default_config_files)
|
||||||
|
|
||||||
|
|
||||||
def get_ignored_dbs(manager=None):
|
def get_ignored_dbs():
|
||||||
try:
|
try:
|
||||||
return get_configuration_property('ignore_dbs', manager=manager)
|
return get_configuration_property('ignore_dbs')
|
||||||
except NoSuchOptError:
|
except NoSuchOptError:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
def get_ignored_users(manager=None):
|
def get_ignored_users():
|
||||||
try:
|
try:
|
||||||
return get_configuration_property('ignore_users', manager=manager)
|
return get_configuration_property('ignore_users')
|
||||||
except NoSuchOptError:
|
except NoSuchOptError:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
def get_configuration_property(property_name, manager=None):
|
def get_configuration_property(property_name):
|
||||||
"""
|
"""
|
||||||
Get a configuration property.
|
Get a configuration property.
|
||||||
Try to get it from the datastore-specific section first.
|
Try to get it from the datastore-specific section first.
|
||||||
If it is not available, retrieve it from the DEFAULT section.
|
If it is not available, retrieve it from the DEFAULT section.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# TODO(pmalik): Note that the unit and fake-integration tests
|
# Fake-integration tests do not define 'CONF.datastore_manager'.
|
||||||
# do not define 'CONF.datastore_manager'. *MySQL* options will
|
# *MySQL* options will
|
||||||
# be loaded unless the caller passes a manager name explicitly.
|
# be loaded. This should never occur in a production environment.
|
||||||
#
|
datastore_manager = CONF.datastore_manager
|
||||||
# Once the tests are fixed this conditional expression should be removed
|
if not datastore_manager:
|
||||||
# and the proper value should always be either loaded from
|
datastore_manager = 'mysql'
|
||||||
# 'CONF.datastore_manager' or passed-in by the caller.
|
LOG.warning(_("Manager name ('datastore_manager') not defined, "
|
||||||
datastore_manager = manager or CONF.datastore_manager or 'mysql'
|
"using '%s' options instead.") % datastore_manager)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return CONF.get(datastore_manager).get(property_name)
|
return CONF.get(datastore_manager).get(property_name)
|
||||||
|
@ -35,7 +35,6 @@ from trove.guestagent import pkg
|
|||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
packager = pkg.Package()
|
packager = pkg.Package()
|
||||||
MANAGER = CONF.datastore_manager if CONF.datastore_manager else 'couchdb'
|
|
||||||
|
|
||||||
COUCHDB_LIB_DIR = "/var/lib/couchdb"
|
COUCHDB_LIB_DIR = "/var/lib/couchdb"
|
||||||
COUCHDB_LOG_DIR = "/var/log/couchdb"
|
COUCHDB_LOG_DIR = "/var/log/couchdb"
|
||||||
@ -207,7 +206,7 @@ class CouchDBAdmin(object):
|
|||||||
return type(self).admin_user
|
return type(self).admin_user
|
||||||
|
|
||||||
def _is_modifiable_user(self, name):
|
def _is_modifiable_user(self, name):
|
||||||
if name in cfg.get_ignored_users(manager=MANAGER):
|
if name in cfg.get_ignored_users():
|
||||||
return False
|
return False
|
||||||
elif name == system.COUCHDB_ADMIN_NAME:
|
elif name == system.COUCHDB_ADMIN_NAME:
|
||||||
return False
|
return False
|
||||||
@ -418,7 +417,7 @@ class CouchDBAdmin(object):
|
|||||||
user.name = username
|
user.name = username
|
||||||
if not self._is_modifiable_user(user.name):
|
if not self._is_modifiable_user(user.name):
|
||||||
LOG.warning(_('Cannot grant access for reserved user '
|
LOG.warning(_('Cannot grant access for reserved user '
|
||||||
'%(user)s') % {'user': username})
|
'%(user)s') % {'user': username})
|
||||||
if not user:
|
if not user:
|
||||||
raise exception.BadRequest(_(
|
raise exception.BadRequest(_(
|
||||||
'Cannot grant access for reserved or non-existant user '
|
'Cannot grant access for reserved or non-existant user '
|
||||||
@ -523,7 +522,7 @@ class CouchDBAdmin(object):
|
|||||||
'admin_password': self._admin_user().password},
|
'admin_password': self._admin_user().password},
|
||||||
shell=True)
|
shell=True)
|
||||||
dbnames_list = eval(out)
|
dbnames_list = eval(out)
|
||||||
for hidden in cfg.get_ignored_dbs(manager=MANAGER):
|
for hidden in cfg.get_ignored_dbs():
|
||||||
if hidden in dbnames_list:
|
if hidden in dbnames_list:
|
||||||
dbnames_list.remove(hidden)
|
dbnames_list.remove(hidden)
|
||||||
return dbnames_list
|
return dbnames_list
|
||||||
@ -560,6 +559,7 @@ class CouchDBAdmin(object):
|
|||||||
|
|
||||||
class CouchDBCredentials(object):
|
class CouchDBCredentials(object):
|
||||||
"""Handles storing/retrieving credentials. Stored as json in files"""
|
"""Handles storing/retrieving credentials. Stored as json in files"""
|
||||||
|
|
||||||
def __init__(self, username=None, password=None):
|
def __init__(self, username=None, password=None):
|
||||||
self.username = username
|
self.username = username
|
||||||
self.password = password
|
self.password = password
|
||||||
|
@ -353,7 +353,7 @@ class DB2Admin(object):
|
|||||||
user = item.split() if item != "" else None
|
user = item.split() if item != "" else None
|
||||||
LOG.debug("user = %r" % (user))
|
LOG.debug("user = %r" % (user))
|
||||||
if (user is not None
|
if (user is not None
|
||||||
and (user[0] not in cfg.get_ignored_users(manager='db2')
|
and (user[0] not in cfg.get_ignored_users()
|
||||||
and user[1] == 'Y')):
|
and user[1] == 'Y')):
|
||||||
userlist.append(user[0])
|
userlist.append(user[0])
|
||||||
result = iter(userlist)
|
result = iter(userlist)
|
||||||
|
@ -480,7 +480,7 @@ class MongoDBAdmin(object):
|
|||||||
return type(self).admin_user
|
return type(self).admin_user
|
||||||
|
|
||||||
def _is_modifiable_user(self, name):
|
def _is_modifiable_user(self, name):
|
||||||
if ((name in cfg.get_ignored_users(manager=MANAGER)) or
|
if ((name in cfg.get_ignored_users()) or
|
||||||
name == system.MONGO_ADMIN_NAME):
|
name == system.MONGO_ADMIN_NAME):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
@ -723,7 +723,7 @@ class MongoDBAdmin(object):
|
|||||||
def list_databases(self, limit=None, marker=None, include_marker=False):
|
def list_databases(self, limit=None, marker=None, include_marker=False):
|
||||||
"""Lists the databases."""
|
"""Lists the databases."""
|
||||||
db_names = self.list_database_names()
|
db_names = self.list_database_names()
|
||||||
for hidden in cfg.get_ignored_dbs(manager=MANAGER):
|
for hidden in cfg.get_ignored_dbs():
|
||||||
if hidden in db_names:
|
if hidden in db_names:
|
||||||
db_names.remove(hidden)
|
db_names.remove(hidden)
|
||||||
databases = [models.MongoDBSchema(db_name).serialize()
|
databases = [models.MongoDBSchema(db_name).serialize()
|
||||||
|
@ -94,8 +94,7 @@ class PgSqlDatabase(object):
|
|||||||
[{"_name": "", "_character_set": "", "_collate": ""}, ...]
|
[{"_name": "", "_character_set": "", "_collate": ""}, ...]
|
||||||
"""
|
"""
|
||||||
results = pgutil.query(
|
results = pgutil.query(
|
||||||
pgutil.DatabaseQuery.list(ignore=cfg.get_ignored_dbs(
|
pgutil.DatabaseQuery.list(ignore=cfg.get_ignored_dbs()),
|
||||||
manager='postgresql')),
|
|
||||||
timeout=30,
|
timeout=30,
|
||||||
)
|
)
|
||||||
# Convert results to dictionaries.
|
# Convert results to dictionaries.
|
||||||
|
@ -115,8 +115,7 @@ class PgSqlUsers(PgSqlAccess):
|
|||||||
"_databases": [{"_name": ""}, ...]}, ...]
|
"_databases": [{"_name": ""}, ...]}, ...]
|
||||||
"""
|
"""
|
||||||
results = pgutil.query(
|
results = pgutil.query(
|
||||||
pgutil.UserQuery.list(ignore=cfg.get_ignored_users(
|
pgutil.UserQuery.list(ignore=cfg.get_ignored_users()),
|
||||||
manager='postgresql')),
|
|
||||||
timeout=30,
|
timeout=30,
|
||||||
)
|
)
|
||||||
# Convert results into dictionaries.
|
# Convert results into dictionaries.
|
||||||
|
@ -38,10 +38,12 @@ from trove.guestagent.datastore.experimental.cassandra import (
|
|||||||
from trove.guestagent.db import models
|
from trove.guestagent.db import models
|
||||||
from trove.guestagent import pkg as pkg
|
from trove.guestagent import pkg as pkg
|
||||||
from trove.guestagent import volume
|
from trove.guestagent import volume
|
||||||
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
from trove.tests.unittests import trove_testtools
|
from trove.tests.unittests import trove_testtools
|
||||||
|
|
||||||
|
|
||||||
class GuestAgentCassandraDBManagerTest(trove_testtools.TestCase):
|
class GuestAgentCassandraDBManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
__MOUNT_POINT = '/var/lib/cassandra'
|
__MOUNT_POINT = '/var/lib/cassandra'
|
||||||
|
|
||||||
@ -74,7 +76,7 @@ class GuestAgentCassandraDBManagerTest(trove_testtools.TestCase):
|
|||||||
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
||||||
@patch('trove.guestagent.datastore.experimental.cassandra.service.LOG')
|
@patch('trove.guestagent.datastore.experimental.cassandra.service.LOG')
|
||||||
def setUp(self, *args, **kwargs):
|
def setUp(self, *args, **kwargs):
|
||||||
super(GuestAgentCassandraDBManagerTest, self).setUp()
|
super(GuestAgentCassandraDBManagerTest, self).setUp('cassandra')
|
||||||
|
|
||||||
conn_patcher = patch.multiple(cass_service.CassandraConnection,
|
conn_patcher = patch.multiple(cass_service.CassandraConnection,
|
||||||
_connect=DEFAULT,
|
_connect=DEFAULT,
|
||||||
|
@ -30,14 +30,14 @@ from trove.guestagent.datastore.experimental.couchbase import (
|
|||||||
from trove.guestagent.datastore.experimental.couchbase import (
|
from trove.guestagent.datastore.experimental.couchbase import (
|
||||||
service as couch_service)
|
service as couch_service)
|
||||||
from trove.guestagent import volume
|
from trove.guestagent import volume
|
||||||
from trove.tests.unittests import trove_testtools
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
|
|
||||||
|
|
||||||
class GuestAgentCouchbaseManagerTest(trove_testtools.TestCase):
|
class GuestAgentCouchbaseManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(GuestAgentCouchbaseManagerTest, self).setUp()
|
super(GuestAgentCouchbaseManagerTest, self).setUp('couchbase')
|
||||||
self.context = trove_testtools.TroveTestContext(self)
|
|
||||||
self.manager = couch_manager.Manager()
|
self.manager = couch_manager.Manager()
|
||||||
self.packages = 'couchbase-server'
|
self.packages = 'couchbase-server'
|
||||||
app_patcher = patch.multiple(
|
app_patcher = patch.multiple(
|
||||||
|
@ -27,13 +27,14 @@ from trove.guestagent.datastore.experimental.couchdb import (
|
|||||||
service as couchdb_service)
|
service as couchdb_service)
|
||||||
from trove.guestagent import pkg as pkg
|
from trove.guestagent import pkg as pkg
|
||||||
from trove.guestagent import volume
|
from trove.guestagent import volume
|
||||||
from trove.tests.unittests import trove_testtools
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
|
|
||||||
|
|
||||||
class GuestAgentCouchDBManagerTest(trove_testtools.TestCase):
|
class GuestAgentCouchDBManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(GuestAgentCouchDBManagerTest, self).setUp()
|
super(GuestAgentCouchDBManagerTest, self).setUp('couchdb')
|
||||||
self.real_status = couchdb_service.CouchDBAppStatus.set_status
|
self.real_status = couchdb_service.CouchDBAppStatus.set_status
|
||||||
|
|
||||||
class FakeInstanceServiceStatus(object):
|
class FakeInstanceServiceStatus(object):
|
||||||
@ -44,7 +45,6 @@ class GuestAgentCouchDBManagerTest(trove_testtools.TestCase):
|
|||||||
|
|
||||||
couchdb_service.CouchDBAppStatus.set_status = MagicMock(
|
couchdb_service.CouchDBAppStatus.set_status = MagicMock(
|
||||||
return_value=FakeInstanceServiceStatus())
|
return_value=FakeInstanceServiceStatus())
|
||||||
self.context = trove_testtools.TroveTestContext(self)
|
|
||||||
self.manager = couchdb_manager.Manager()
|
self.manager = couchdb_manager.Manager()
|
||||||
self.pkg = couchdb_service.packager
|
self.pkg = couchdb_service.packager
|
||||||
self.real_db_app_status = couchdb_service.CouchDBAppStatus
|
self.real_db_app_status = couchdb_service.CouchDBAppStatus
|
||||||
|
24
trove/tests/unittests/guestagent/test_datastore_manager.py
Normal file
24
trove/tests/unittests/guestagent/test_datastore_manager.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Copyright 2016 Tesora 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 trove.tests.unittests import trove_testtools
|
||||||
|
|
||||||
|
|
||||||
|
class DatastoreManagerTest(trove_testtools.TestCase):
|
||||||
|
|
||||||
|
def setUp(self, manager_name):
|
||||||
|
super(DatastoreManagerTest, self).setUp()
|
||||||
|
self.patch_datastore_manager(manager_name)
|
||||||
|
self.context = trove_testtools.TroveTestContext(self)
|
@ -24,13 +24,14 @@ from trove.guestagent.datastore.experimental.db2 import (
|
|||||||
service as db2_service)
|
service as db2_service)
|
||||||
from trove.guestagent import pkg as pkg
|
from trove.guestagent import pkg as pkg
|
||||||
from trove.guestagent import volume
|
from trove.guestagent import volume
|
||||||
from trove.tests.unittests import trove_testtools
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
|
|
||||||
|
|
||||||
class GuestAgentDB2ManagerTest(trove_testtools.TestCase):
|
class GuestAgentDB2ManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(GuestAgentDB2ManagerTest, self).setUp()
|
super(GuestAgentDB2ManagerTest, self).setUp('db2')
|
||||||
self.real_status = db2_service.DB2AppStatus.set_status
|
self.real_status = db2_service.DB2AppStatus.set_status
|
||||||
|
|
||||||
class FakeInstanceServiceStatus(object):
|
class FakeInstanceServiceStatus(object):
|
||||||
@ -41,7 +42,6 @@ class GuestAgentDB2ManagerTest(trove_testtools.TestCase):
|
|||||||
|
|
||||||
db2_service.DB2AppStatus.set_status = MagicMock(
|
db2_service.DB2AppStatus.set_status = MagicMock(
|
||||||
return_value=FakeInstanceServiceStatus())
|
return_value=FakeInstanceServiceStatus())
|
||||||
self.context = trove_testtools.TroveTestContext(self)
|
|
||||||
self.manager = db2_manager.Manager()
|
self.manager = db2_manager.Manager()
|
||||||
self.real_db_app_status = db2_service.DB2AppStatus
|
self.real_db_app_status = db2_service.DB2AppStatus
|
||||||
self.origin_format = volume.VolumeDevice.format
|
self.origin_format = volume.VolumeDevice.format
|
||||||
|
@ -297,8 +297,9 @@ class BaseAppTest(object):
|
|||||||
|
|
||||||
class AppTestCase(trove_testtools.TestCase):
|
class AppTestCase(trove_testtools.TestCase):
|
||||||
|
|
||||||
def setUp(self, fake_id):
|
def setUp(self, fake_id, manager_name):
|
||||||
super(BaseAppTest.AppTestCase, self).setUp()
|
super(BaseAppTest.AppTestCase, self).setUp()
|
||||||
|
self.patch_datastore_manager(manager_name)
|
||||||
self.FAKE_ID = fake_id
|
self.FAKE_ID = fake_id
|
||||||
InstanceServiceStatus.create(
|
InstanceServiceStatus.create(
|
||||||
instance_id=self.FAKE_ID,
|
instance_id=self.FAKE_ID,
|
||||||
@ -2315,7 +2316,7 @@ class MySqlAppStatusTest(trove_testtools.TestCase):
|
|||||||
class TestRedisApp(BaseAppTest.AppTestCase):
|
class TestRedisApp(BaseAppTest.AppTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestRedisApp, self).setUp(str(uuid4()))
|
super(TestRedisApp, self).setUp(str(uuid4()), 'redis')
|
||||||
self.orig_os_path_eu = os.path.expanduser
|
self.orig_os_path_eu = os.path.expanduser
|
||||||
os.path.expanduser = Mock(return_value='/tmp/.file')
|
os.path.expanduser = Mock(return_value='/tmp/.file')
|
||||||
|
|
||||||
@ -2389,7 +2390,7 @@ class CassandraDBAppTest(BaseAppTest.AppTestCase):
|
|||||||
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
||||||
@patch('trove.guestagent.datastore.experimental.cassandra.service.LOG')
|
@patch('trove.guestagent.datastore.experimental.cassandra.service.LOG')
|
||||||
def setUp(self, mock_logging, _):
|
def setUp(self, mock_logging, _):
|
||||||
super(CassandraDBAppTest, self).setUp(str(uuid4()))
|
super(CassandraDBAppTest, self).setUp(str(uuid4()), 'cassandra')
|
||||||
self.sleep = time.sleep
|
self.sleep = time.sleep
|
||||||
self.orig_time_time = time.time
|
self.orig_time_time = time.time
|
||||||
self.pkg_version = cass_service.packager.pkg_version
|
self.pkg_version = cass_service.packager.pkg_version
|
||||||
@ -2470,7 +2471,7 @@ class CouchbaseAppTest(BaseAppTest.AppTestCase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(CouchbaseAppTest, self).setUp(str(uuid4()))
|
super(CouchbaseAppTest, self).setUp(str(uuid4()), 'couchbase')
|
||||||
self.orig_utils_execute_with_timeout = (
|
self.orig_utils_execute_with_timeout = (
|
||||||
couchservice.utils.execute_with_timeout)
|
couchservice.utils.execute_with_timeout)
|
||||||
self.orig_time_sleep = time.sleep
|
self.orig_time_sleep = time.sleep
|
||||||
@ -2538,7 +2539,7 @@ class CouchDBAppTest(BaseAppTest.AppTestCase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(CouchDBAppTest, self).setUp(str(uuid4()))
|
super(CouchDBAppTest, self).setUp(str(uuid4()), 'couchdb')
|
||||||
self.orig_utils_execute_with_timeout = (
|
self.orig_utils_execute_with_timeout = (
|
||||||
couchdb_service.utils.execute_with_timeout)
|
couchdb_service.utils.execute_with_timeout)
|
||||||
self.orig_time_sleep = time.sleep
|
self.orig_time_sleep = time.sleep
|
||||||
@ -2603,7 +2604,7 @@ class MongoDBAppTest(BaseAppTest.AppTestCase):
|
|||||||
|
|
||||||
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
||||||
def setUp(self, _):
|
def setUp(self, _):
|
||||||
super(MongoDBAppTest, self).setUp(str(uuid4()))
|
super(MongoDBAppTest, self).setUp(str(uuid4()), 'mongodb')
|
||||||
self.orig_utils_execute_with_timeout = (mongo_service.
|
self.orig_utils_execute_with_timeout = (mongo_service.
|
||||||
utils.execute_with_timeout)
|
utils.execute_with_timeout)
|
||||||
self.orig_time_sleep = time.sleep
|
self.orig_time_sleep = time.sleep
|
||||||
@ -3713,7 +3714,7 @@ class PostgresAppTest(BaseAppTest.AppTestCase):
|
|||||||
|
|
||||||
@patch.object(pg_config.PgSqlConfig, '_find_config_file', return_value='')
|
@patch.object(pg_config.PgSqlConfig, '_find_config_file', return_value='')
|
||||||
def setUp(self, _):
|
def setUp(self, _):
|
||||||
super(PostgresAppTest, self).setUp(str(uuid4()))
|
super(PostgresAppTest, self).setUp(str(uuid4()), 'postgresql')
|
||||||
self.orig_time_sleep = time.sleep
|
self.orig_time_sleep = time.sleep
|
||||||
self.orig_time_time = time.time
|
self.orig_time_time = time.time
|
||||||
time.sleep = Mock()
|
time.sleep = Mock()
|
||||||
|
@ -14,22 +14,21 @@
|
|||||||
|
|
||||||
from mock import MagicMock
|
from mock import MagicMock
|
||||||
from mock import patch
|
from mock import patch
|
||||||
import testtools
|
|
||||||
|
|
||||||
from trove.common.context import TroveContext
|
|
||||||
from trove.guestagent.datastore.experimental.mariadb import (
|
from trove.guestagent.datastore.experimental.mariadb import (
|
||||||
manager as mariadb_manager)
|
manager as mariadb_manager)
|
||||||
from trove.guestagent.datastore.experimental.mariadb import (
|
from trove.guestagent.datastore.experimental.mariadb import (
|
||||||
service as mariadb_service)
|
service as mariadb_service)
|
||||||
from trove.guestagent.datastore.mysql_common import service as mysql_service
|
from trove.guestagent.datastore.mysql_common import service as mysql_service
|
||||||
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
|
|
||||||
|
|
||||||
class GuestAgentManagerTest(testtools.TestCase):
|
class GuestAgentManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(GuestAgentManagerTest, self).setUp()
|
super(GuestAgentManagerTest, self).setUp('mariadb')
|
||||||
self.manager = mariadb_manager.Manager()
|
self.manager = mariadb_manager.Manager()
|
||||||
self.context = TroveContext()
|
|
||||||
patcher_rs = patch(
|
patcher_rs = patch(
|
||||||
'trove.guestagent.strategies.replication.get_instance')
|
'trove.guestagent.strategies.replication.get_instance')
|
||||||
patcher_rs.start()
|
patcher_rs.start()
|
||||||
|
@ -22,15 +22,15 @@ import trove.guestagent.datastore.experimental.mongodb.manager as manager
|
|||||||
import trove.guestagent.datastore.experimental.mongodb.service as service
|
import trove.guestagent.datastore.experimental.mongodb.service as service
|
||||||
import trove.guestagent.db.models as models
|
import trove.guestagent.db.models as models
|
||||||
import trove.guestagent.volume as volume
|
import trove.guestagent.volume as volume
|
||||||
import trove.tests.unittests.trove_testtools as trove_testtools
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
|
|
||||||
|
|
||||||
class GuestAgentMongoDBManagerTest(trove_testtools.TestCase):
|
class GuestAgentMongoDBManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
@mock.patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
@mock.patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
||||||
def setUp(self, _):
|
def setUp(self, _):
|
||||||
super(GuestAgentMongoDBManagerTest, self).setUp()
|
super(GuestAgentMongoDBManagerTest, self).setUp('mongodb')
|
||||||
self.context = trove_testtools.TroveTestContext(self)
|
|
||||||
self.manager = manager.Manager()
|
self.manager = manager.Manager()
|
||||||
|
|
||||||
self.execute_with_timeout_patch = mock.patch.object(
|
self.execute_with_timeout_patch = mock.patch.object(
|
||||||
|
@ -33,13 +33,15 @@ from trove.guestagent import dbaas as base_dbaas
|
|||||||
from trove.guestagent import pkg as pkg
|
from trove.guestagent import pkg as pkg
|
||||||
from trove.guestagent import volume
|
from trove.guestagent import volume
|
||||||
from trove.guestagent.volume import VolumeDevice
|
from trove.guestagent.volume import VolumeDevice
|
||||||
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
from trove.tests.unittests import trove_testtools
|
from trove.tests.unittests import trove_testtools
|
||||||
|
|
||||||
|
|
||||||
class GuestAgentManagerTest(trove_testtools.TestCase):
|
class GuestAgentManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(GuestAgentManagerTest, self).setUp()
|
super(GuestAgentManagerTest, self).setUp('mysql')
|
||||||
self.context = trove_testtools.TroveTestContext(self)
|
self.context = trove_testtools.TroveTestContext(self)
|
||||||
self.replication_strategy = 'MysqlGTIDReplication'
|
self.replication_strategy = 'MysqlGTIDReplication'
|
||||||
self.patch_rs = patch(
|
self.patch_rs = patch(
|
||||||
|
@ -23,19 +23,19 @@ from trove.guestagent.datastore.experimental.redis import (
|
|||||||
from trove.guestagent.datastore.experimental.redis.manager import (
|
from trove.guestagent.datastore.experimental.redis.manager import (
|
||||||
Manager as RedisManager)
|
Manager as RedisManager)
|
||||||
from trove.guestagent.volume import VolumeDevice
|
from trove.guestagent.volume import VolumeDevice
|
||||||
from trove.tests.unittests import trove_testtools
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
|
|
||||||
|
|
||||||
class RedisGuestAgentManagerTest(trove_testtools.TestCase):
|
class RedisGuestAgentManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
@patch.object(redis_service.RedisApp, '_build_admin_client')
|
@patch.object(redis_service.RedisApp, '_build_admin_client')
|
||||||
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
||||||
def setUp(self, *args, **kwargs):
|
def setUp(self, *args, **kwargs):
|
||||||
super(RedisGuestAgentManagerTest, self).setUp()
|
super(RedisGuestAgentManagerTest, self).setUp('redis')
|
||||||
self.patch_ope = patch('os.path.expanduser')
|
self.patch_ope = patch('os.path.expanduser')
|
||||||
self.mock_ope = self.patch_ope.start()
|
self.mock_ope = self.patch_ope.start()
|
||||||
self.addCleanup(self.patch_ope.stop)
|
self.addCleanup(self.patch_ope.stop)
|
||||||
self.context = trove_testtools.TroveTestContext(self)
|
|
||||||
self.replication_strategy = 'RedisSyncReplication'
|
self.replication_strategy = 'RedisSyncReplication'
|
||||||
self.patch_rs = patch(
|
self.patch_rs = patch(
|
||||||
'trove.guestagent.strategies.replication.get_strategy',
|
'trove.guestagent.strategies.replication.get_strategy',
|
||||||
|
@ -30,17 +30,17 @@ from trove.guestagent.datastore.experimental.vertica import system
|
|||||||
from trove.guestagent import dbaas
|
from trove.guestagent import dbaas
|
||||||
from trove.guestagent import volume
|
from trove.guestagent import volume
|
||||||
from trove.guestagent.volume import VolumeDevice
|
from trove.guestagent.volume import VolumeDevice
|
||||||
from trove.tests.unittests import trove_testtools
|
from trove.tests.unittests.guestagent.test_datastore_manager import \
|
||||||
|
DatastoreManagerTest
|
||||||
|
|
||||||
|
|
||||||
class GuestAgentManagerTest(trove_testtools.TestCase):
|
class GuestAgentManagerTest(DatastoreManagerTest):
|
||||||
|
|
||||||
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
@patch.object(ImportOverrideStrategy, '_initialize_import_directory')
|
||||||
@patch.multiple(operating_system, exists=DEFAULT, write_file=DEFAULT,
|
@patch.multiple(operating_system, exists=DEFAULT, write_file=DEFAULT,
|
||||||
chown=DEFAULT, chmod=DEFAULT)
|
chown=DEFAULT, chmod=DEFAULT)
|
||||||
def setUp(self, *args, **kwargs):
|
def setUp(self, *args, **kwargs):
|
||||||
super(GuestAgentManagerTest, self).setUp()
|
super(GuestAgentManagerTest, self).setUp('vertica')
|
||||||
self.context = trove_testtools.TroveTestContext(self)
|
|
||||||
self.manager = Manager()
|
self.manager = Manager()
|
||||||
self.origin_format = volume.VolumeDevice.format
|
self.origin_format = volume.VolumeDevice.format
|
||||||
self.origin_migrate_data = volume.VolumeDevice.migrate_data
|
self.origin_migrate_data = volume.VolumeDevice.migrate_data
|
||||||
|
@ -20,6 +20,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
|
from trove.common import cfg
|
||||||
from trove.common.context import TroveContext
|
from trove.common.context import TroveContext
|
||||||
from trove.common.notification import DBaaSAPINotification
|
from trove.common.notification import DBaaSAPINotification
|
||||||
from trove.tests import root_logger
|
from trove.tests import root_logger
|
||||||
@ -98,6 +99,9 @@ class TestCase(testtools.TestCase):
|
|||||||
super(TestCase, self).setUp()
|
super(TestCase, self).setUp()
|
||||||
root_logger.DefaultRootHandler.set_info(self.id())
|
root_logger.DefaultRootHandler.set_info(self.id())
|
||||||
|
|
||||||
|
# Default manager used by all unittsest unless explicitly overriden.
|
||||||
|
self.patch_datastore_manager('mysql')
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
# yes, this is gross and not thread aware.
|
# yes, this is gross and not thread aware.
|
||||||
# but the only way to make it thread aware would require that
|
# but the only way to make it thread aware would require that
|
||||||
@ -161,3 +165,13 @@ class TestCase(testtools.TestCase):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def _get_loaded_modules(cls):
|
def _get_loaded_modules(cls):
|
||||||
return {name: obj for name, obj in sys.modules.items() if obj}
|
return {name: obj for name, obj in sys.modules.items() if obj}
|
||||||
|
|
||||||
|
def patch_datastore_manager(self, manager_name):
|
||||||
|
return self.patch_conf_property('datastore_manager', manager_name)
|
||||||
|
|
||||||
|
def patch_conf_property(self, property_name, value):
|
||||||
|
conf_patcher = mock.patch.object(
|
||||||
|
cfg.CONF, property_name,
|
||||||
|
new_callable=mock.PropertyMock(return_value=value))
|
||||||
|
self.addCleanup(conf_patcher.stop)
|
||||||
|
return conf_patcher.start()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user